Raw Source
mnogosdelal.crenaturealeeas.com / Youtube Blocker

// ==UserScript==
// @id          Youtube Blocker@https://github.com/mshavliuk/youtube-blocker-userscript
// @name        Youtube Blocker
// @namespace   https://github.com/mshavliuk/youtube-blocker-userscript
// @description Block youtube usage by configured rules
// @author      mshavliuk
// @license     MIT; https://opensource.org/licenses/MIT
// @version     0.5.0
// @icon        https://raw.githubusercontent.com/mshavliuk/youtube-blocker-userscript/master/icon.png
// @updateURL   https://github.com/mshavliuk/youtube-blocker-userscript/releases/download/latest/userscript.js
// @grant       none
// @run-at      document-start
// @include     *://www.youtube.com/*
// ==/UserScript==

/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({

/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/flatpickr/dist/themes/light.css":
/*!*************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3!./node_modules/flatpickr/dist/themes/light.css ***!
  \*************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \".flatpickr-calendar {\\n  background: transparent;\\n  opacity: 0;\\n  display: none;\\n  text-align: center;\\n  visibility: hidden;\\n  padding: 0;\\n  -webkit-animation: none;\\n  animation: none;\\n  direction: ltr;\\n  border: 0;\\n  font-size: 14px;\\n  line-height: 24px;\\n  border-radius: 5px;\\n  position: absolute;\\n  width: 307.875px;\\n  -webkit-box-sizing: border-box;\\n  box-sizing: border-box;\\n  -ms-touch-action: manipulation;\\n  touch-action: manipulation;\\n  -webkit-box-shadow: 0 3px 13px rgba(0, 0, 0, 0.08);\\n  box-shadow: 0 3px 13px rgba(0, 0, 0, 0.08);\\n}\\n\\n.flatpickr-calendar.open,\\n.flatpickr-calendar.inline {\\n  opacity: 1;\\n  max-height: 640px;\\n  visibility: visible;\\n}\\n\\n.flatpickr-calendar.open {\\n  display: inline-block;\\n  z-index: 99999;\\n}\\n\\n.flatpickr-calendar.animate.open {\\n  -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\\n  animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\\n}\\n\\n.flatpickr-calendar.inline {\\n  display: block;\\n  position: relative;\\n  top: 2px;\\n}\\n\\n.flatpickr-calendar.static {\\n  position: absolute;\\n  top: calc(100% + 2px);\\n}\\n\\n.flatpickr-calendar.static.open {\\n  z-index: 999;\\n  display: block;\\n}\\n\\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {\\n  -webkit-box-shadow: none !important;\\n  box-shadow: none !important;\\n}\\n\\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {\\n  -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\\n  box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\\n}\\n\\n.flatpickr-calendar .hasWeeks .dayContainer,\\n.flatpickr-calendar .hasTime .dayContainer {\\n  border-bottom: 0;\\n  border-bottom-right-radius: 0;\\n  border-bottom-left-radius: 0;\\n}\\n\\n.flatpickr-calendar .hasWeeks .dayContainer {\\n  border-left: 0;\\n}\\n\\n.flatpickr-calendar.hasTime .flatpickr-time {\\n  height: 40px;\\n  border-top: 1px solid #eceef1;\\n}\\n\\n.flatpickr-calendar.hasTime .flatpickr-innerContainer {\\n  border-bottom: 0;\\n}\\n\\n.flatpickr-calendar.hasTime .flatpickr-time {\\n  border: 1px solid #eceef1;\\n}\\n\\n.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {\\n  height: auto;\\n}\\n\\n.flatpickr-calendar:before,\\n.flatpickr-calendar:after {\\n  position: absolute;\\n  display: block;\\n  pointer-events: none;\\n  border: solid transparent;\\n  content: \\\"\\\";\\n  height: 0;\\n  width: 0;\\n  left: 22px;\\n}\\n\\n.flatpickr-calendar.rightMost:before,\\n.flatpickr-calendar.arrowRight:before,\\n.flatpickr-calendar.rightMost:after,\\n.flatpickr-calendar.arrowRight:after {\\n  left: auto;\\n  right: 22px;\\n}\\n\\n.flatpickr-calendar.arrowCenter:before,\\n.flatpickr-calendar.arrowCenter:after {\\n  left: 50%;\\n  right: 50%;\\n}\\n\\n.flatpickr-calendar:before {\\n  border-width: 5px;\\n  margin: 0 -5px;\\n}\\n\\n.flatpickr-calendar:after {\\n  border-width: 4px;\\n  margin: 0 -4px;\\n}\\n\\n.flatpickr-calendar.arrowTop:before,\\n.flatpickr-calendar.arrowTop:after {\\n  bottom: 100%;\\n}\\n\\n.flatpickr-calendar.arrowTop:before {\\n  border-bottom-color: #eceef1;\\n}\\n\\n.flatpickr-calendar.arrowTop:after {\\n  border-bottom-color: #eceef1;\\n}\\n\\n.flatpickr-calendar.arrowBottom:before,\\n.flatpickr-calendar.arrowBottom:after {\\n  top: 100%;\\n}\\n\\n.flatpickr-calendar.arrowBottom:before {\\n  border-top-color: #eceef1;\\n}\\n\\n.flatpickr-calendar.arrowBottom:after {\\n  border-top-color: #eceef1;\\n}\\n\\n.flatpickr-calendar:focus {\\n  outline: 0;\\n}\\n\\n.flatpickr-wrapper {\\n  position: relative;\\n  display: inline-block;\\n}\\n\\n.flatpickr-months {\\n  display: -webkit-box;\\n  display: -webkit-flex;\\n  display: -ms-flexbox;\\n  display: flex;\\n}\\n\\n.flatpickr-months .flatpickr-month {\\n  border-radius: 5px 5px 0 0;\\n  background: #eceef1;\\n  color: #5a6171;\\n  fill: #5a6171;\\n  height: 34px;\\n  line-height: 1;\\n  text-align: center;\\n  position: relative;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  overflow: hidden;\\n  -webkit-box-flex: 1;\\n  -webkit-flex: 1;\\n  -ms-flex: 1;\\n  flex: 1;\\n}\\n\\n.flatpickr-months .flatpickr-prev-month,\\n.flatpickr-months .flatpickr-next-month {\\n  text-decoration: none;\\n  cursor: pointer;\\n  position: absolute;\\n  top: 0;\\n  height: 34px;\\n  padding: 10px;\\n  z-index: 3;\\n  color: #5a6171;\\n  fill: #5a6171;\\n}\\n\\n.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,\\n.flatpickr-months .flatpickr-next-month.flatpickr-disabled {\\n  display: none;\\n}\\n\\n.flatpickr-months .flatpickr-prev-month i,\\n.flatpickr-months .flatpickr-next-month i {\\n  position: relative;\\n}\\n\\n.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,\\n.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {\\n  /*\\n        /*rtl:begin:ignore*/\\n  /*\\n        */\\n  left: 0;\\n  /*\\n        /*rtl:end:ignore*/\\n  /*\\n        */\\n}\\n\\n/*\\n      /*rtl:begin:ignore*/\\n/*\\n      /*rtl:end:ignore*/\\n.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,\\n.flatpickr-months .flatpickr-next-month.flatpickr-next-month {\\n  /*\\n        /*rtl:begin:ignore*/\\n  /*\\n        */\\n  right: 0;\\n  /*\\n        /*rtl:end:ignore*/\\n  /*\\n        */\\n}\\n\\n/*\\n      /*rtl:begin:ignore*/\\n/*\\n      /*rtl:end:ignore*/\\n.flatpickr-months .flatpickr-prev-month:hover,\\n.flatpickr-months .flatpickr-next-month:hover {\\n  color: #bbb;\\n}\\n\\n.flatpickr-months .flatpickr-prev-month:hover svg,\\n.flatpickr-months .flatpickr-next-month:hover svg {\\n  fill: #f64747;\\n}\\n\\n.flatpickr-months .flatpickr-prev-month svg,\\n.flatpickr-months .flatpickr-next-month svg {\\n  width: 14px;\\n  height: 14px;\\n}\\n\\n.flatpickr-months .flatpickr-prev-month svg path,\\n.flatpickr-months .flatpickr-next-month svg path {\\n  -webkit-transition: fill 0.1s;\\n  transition: fill 0.1s;\\n  fill: inherit;\\n}\\n\\n.numInputWrapper {\\n  position: relative;\\n  height: auto;\\n}\\n\\n.numInputWrapper input,\\n.numInputWrapper span {\\n  display: inline-block;\\n}\\n\\n.numInputWrapper input {\\n  width: 100%;\\n}\\n\\n.numInputWrapper input::-ms-clear {\\n  display: none;\\n}\\n\\n.numInputWrapper input::-webkit-outer-spin-button,\\n.numInputWrapper input::-webkit-inner-spin-button {\\n  margin: 0;\\n  -webkit-appearance: none;\\n}\\n\\n.numInputWrapper span {\\n  position: absolute;\\n  right: 0;\\n  width: 14px;\\n  padding: 0 4px 0 2px;\\n  height: 50%;\\n  line-height: 50%;\\n  opacity: 0;\\n  cursor: pointer;\\n  border: 1px solid rgba(72, 72, 72, 0.15);\\n  -webkit-box-sizing: border-box;\\n  box-sizing: border-box;\\n}\\n\\n.numInputWrapper span:hover {\\n  background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.numInputWrapper span:active {\\n  background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.numInputWrapper span:after {\\n  display: block;\\n  content: \\\"\\\";\\n  position: absolute;\\n}\\n\\n.numInputWrapper span.arrowUp {\\n  top: 0;\\n  border-bottom: 0;\\n}\\n\\n.numInputWrapper span.arrowUp:after {\\n  border-left: 4px solid transparent;\\n  border-right: 4px solid transparent;\\n  border-bottom: 4px solid rgba(72, 72, 72, 0.6);\\n  top: 26%;\\n}\\n\\n.numInputWrapper span.arrowDown {\\n  top: 50%;\\n}\\n\\n.numInputWrapper span.arrowDown:after {\\n  border-left: 4px solid transparent;\\n  border-right: 4px solid transparent;\\n  border-top: 4px solid rgba(72, 72, 72, 0.6);\\n  top: 40%;\\n}\\n\\n.numInputWrapper span svg {\\n  width: inherit;\\n  height: auto;\\n}\\n\\n.numInputWrapper span svg path {\\n  fill: rgba(90, 97, 113, 0.5);\\n}\\n\\n.numInputWrapper:hover {\\n  background: rgba(0, 0, 0, 0.05);\\n}\\n\\n.numInputWrapper:hover span {\\n  opacity: 1;\\n}\\n\\n.flatpickr-current-month {\\n  font-size: 135%;\\n  line-height: inherit;\\n  font-weight: 300;\\n  color: inherit;\\n  position: absolute;\\n  width: 75%;\\n  left: 12.5%;\\n  padding: 7.48px 0 0 0;\\n  line-height: 1;\\n  height: 34px;\\n  display: inline-block;\\n  text-align: center;\\n  -webkit-transform: translate3d(0px, 0px, 0px);\\n  transform: translate3d(0px, 0px, 0px);\\n}\\n\\n.flatpickr-current-month span.cur-month {\\n  font-family: inherit;\\n  font-weight: 700;\\n  color: inherit;\\n  display: inline-block;\\n  margin-left: 0.5ch;\\n  padding: 0;\\n}\\n\\n.flatpickr-current-month span.cur-month:hover {\\n  background: rgba(0, 0, 0, 0.05);\\n}\\n\\n.flatpickr-current-month .numInputWrapper {\\n  width: 6ch;\\n  width: 7ch\\\\0 ;\\n  display: inline-block;\\n}\\n\\n.flatpickr-current-month .numInputWrapper span.arrowUp:after {\\n  border-bottom-color: #5a6171;\\n}\\n\\n.flatpickr-current-month .numInputWrapper span.arrowDown:after {\\n  border-top-color: #5a6171;\\n}\\n\\n.flatpickr-current-month input.cur-year {\\n  background: transparent;\\n  -webkit-box-sizing: border-box;\\n  box-sizing: border-box;\\n  color: inherit;\\n  cursor: text;\\n  padding: 0 0 0 0.5ch;\\n  margin: 0;\\n  display: inline-block;\\n  font-size: inherit;\\n  font-family: inherit;\\n  font-weight: 300;\\n  line-height: inherit;\\n  height: auto;\\n  border: 0;\\n  border-radius: 0;\\n  vertical-align: initial;\\n  -webkit-appearance: textfield;\\n  -moz-appearance: textfield;\\n  appearance: textfield;\\n}\\n\\n.flatpickr-current-month input.cur-year:focus {\\n  outline: 0;\\n}\\n\\n.flatpickr-current-month input.cur-year[disabled],\\n.flatpickr-current-month input.cur-year[disabled]:hover {\\n  font-size: 100%;\\n  color: rgba(90, 97, 113, 0.5);\\n  background: transparent;\\n  pointer-events: none;\\n}\\n\\n.flatpickr-current-month .flatpickr-monthDropdown-months {\\n  appearance: menulist;\\n  background: #eceef1;\\n  border: none;\\n  border-radius: 0;\\n  box-sizing: border-box;\\n  color: inherit;\\n  cursor: pointer;\\n  font-size: inherit;\\n  font-family: inherit;\\n  font-weight: 300;\\n  height: auto;\\n  line-height: inherit;\\n  margin: -1px 0 0 0;\\n  outline: none;\\n  padding: 0 0 0 0.5ch;\\n  position: relative;\\n  vertical-align: initial;\\n  -webkit-box-sizing: border-box;\\n  -webkit-appearance: menulist;\\n  -moz-appearance: menulist;\\n  width: auto;\\n}\\n\\n.flatpickr-current-month .flatpickr-monthDropdown-months:focus,\\n.flatpickr-current-month .flatpickr-monthDropdown-months:active {\\n  outline: none;\\n}\\n\\n.flatpickr-current-month .flatpickr-monthDropdown-months:hover {\\n  background: rgba(0, 0, 0, 0.05);\\n}\\n\\n.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {\\n  background-color: #eceef1;\\n  outline: none;\\n  padding: 0;\\n}\\n\\n.flatpickr-weekdays {\\n  background: #eceef1;\\n  text-align: center;\\n  overflow: hidden;\\n  width: 100%;\\n  display: -webkit-box;\\n  display: -webkit-flex;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-align: center;\\n  -webkit-align-items: center;\\n  -ms-flex-align: center;\\n  align-items: center;\\n  height: 28px;\\n}\\n\\n.flatpickr-weekdays .flatpickr-weekdaycontainer {\\n  display: -webkit-box;\\n  display: -webkit-flex;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-flex: 1;\\n  -webkit-flex: 1;\\n  -ms-flex: 1;\\n  flex: 1;\\n}\\n\\nspan.flatpickr-weekday {\\n  cursor: default;\\n  font-size: 90%;\\n  background: #eceef1;\\n  color: #5a6171;\\n  line-height: 1;\\n  margin: 0;\\n  text-align: center;\\n  display: block;\\n  -webkit-box-flex: 1;\\n  -webkit-flex: 1;\\n  -ms-flex: 1;\\n  flex: 1;\\n  font-weight: bolder;\\n}\\n\\n.dayContainer,\\n.flatpickr-weeks {\\n  padding: 1px 0 0 0;\\n}\\n\\n.flatpickr-days {\\n  position: relative;\\n  overflow: hidden;\\n  display: -webkit-box;\\n  display: -webkit-flex;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-align: start;\\n  -webkit-align-items: flex-start;\\n  -ms-flex-align: start;\\n  align-items: flex-start;\\n  width: 307.875px;\\n  border-left: 1px solid #eceef1;\\n  border-right: 1px solid #eceef1;\\n}\\n\\n.flatpickr-days:focus {\\n  outline: 0;\\n}\\n\\n.dayContainer {\\n  padding: 0;\\n  outline: 0;\\n  text-align: left;\\n  width: 307.875px;\\n  min-width: 307.875px;\\n  max-width: 307.875px;\\n  -webkit-box-sizing: border-box;\\n  box-sizing: border-box;\\n  display: inline-block;\\n  display: -ms-flexbox;\\n  display: -webkit-box;\\n  display: -webkit-flex;\\n  display: flex;\\n  -webkit-flex-wrap: wrap;\\n  flex-wrap: wrap;\\n  -ms-flex-wrap: wrap;\\n  -ms-flex-pack: justify;\\n  -webkit-justify-content: space-around;\\n  justify-content: space-around;\\n  -webkit-transform: translate3d(0px, 0px, 0px);\\n  transform: translate3d(0px, 0px, 0px);\\n  opacity: 1;\\n}\\n\\n.dayContainer + .dayContainer {\\n  -webkit-box-shadow: -1px 0 0 #eceef1;\\n  box-shadow: -1px 0 0 #eceef1;\\n}\\n\\n.flatpickr-day {\\n  background: none;\\n  border: 1px solid transparent;\\n  border-radius: 150px;\\n  -webkit-box-sizing: border-box;\\n  box-sizing: border-box;\\n  color: #484848;\\n  cursor: pointer;\\n  font-weight: 400;\\n  width: 14.2857143%;\\n  -webkit-flex-basis: 14.2857143%;\\n  -ms-flex-preferred-size: 14.2857143%;\\n  flex-basis: 14.2857143%;\\n  max-width: 39px;\\n  height: 39px;\\n  line-height: 39px;\\n  margin: 0;\\n  display: inline-block;\\n  position: relative;\\n  -webkit-box-pack: center;\\n  -webkit-justify-content: center;\\n  -ms-flex-pack: center;\\n  justify-content: center;\\n  text-align: center;\\n}\\n\\n.flatpickr-day.inRange,\\n.flatpickr-day.prevMonthDay.inRange,\\n.flatpickr-day.nextMonthDay.inRange,\\n.flatpickr-day.today.inRange,\\n.flatpickr-day.prevMonthDay.today.inRange,\\n.flatpickr-day.nextMonthDay.today.inRange,\\n.flatpickr-day:hover,\\n.flatpickr-day.prevMonthDay:hover,\\n.flatpickr-day.nextMonthDay:hover,\\n.flatpickr-day:focus,\\n.flatpickr-day.prevMonthDay:focus,\\n.flatpickr-day.nextMonthDay:focus {\\n  cursor: pointer;\\n  outline: 0;\\n  background: #e2e2e2;\\n  border-color: #e2e2e2;\\n}\\n\\n.flatpickr-day.today {\\n  border-color: #bbb;\\n}\\n\\n.flatpickr-day.today:hover,\\n.flatpickr-day.today:focus {\\n  border-color: #bbb;\\n  background: #bbb;\\n  color: #fff;\\n}\\n\\n.flatpickr-day.selected,\\n.flatpickr-day.startRange,\\n.flatpickr-day.endRange,\\n.flatpickr-day.selected.inRange,\\n.flatpickr-day.startRange.inRange,\\n.flatpickr-day.endRange.inRange,\\n.flatpickr-day.selected:focus,\\n.flatpickr-day.startRange:focus,\\n.flatpickr-day.endRange:focus,\\n.flatpickr-day.selected:hover,\\n.flatpickr-day.startRange:hover,\\n.flatpickr-day.endRange:hover,\\n.flatpickr-day.selected.prevMonthDay,\\n.flatpickr-day.startRange.prevMonthDay,\\n.flatpickr-day.endRange.prevMonthDay,\\n.flatpickr-day.selected.nextMonthDay,\\n.flatpickr-day.startRange.nextMonthDay,\\n.flatpickr-day.endRange.nextMonthDay {\\n  background: #ff5a5f;\\n  -webkit-box-shadow: none;\\n  box-shadow: none;\\n  color: #fff;\\n  border-color: #ff5a5f;\\n}\\n\\n.flatpickr-day.selected.startRange,\\n.flatpickr-day.startRange.startRange,\\n.flatpickr-day.endRange.startRange {\\n  border-radius: 50px 0 0 50px;\\n}\\n\\n.flatpickr-day.selected.endRange,\\n.flatpickr-day.startRange.endRange,\\n.flatpickr-day.endRange.endRange {\\n  border-radius: 0 50px 50px 0;\\n}\\n\\n.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),\\n.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),\\n.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {\\n  -webkit-box-shadow: -10px 0 0 #ff5a5f;\\n  box-shadow: -10px 0 0 #ff5a5f;\\n}\\n\\n.flatpickr-day.selected.startRange.endRange,\\n.flatpickr-day.startRange.startRange.endRange,\\n.flatpickr-day.endRange.startRange.endRange {\\n  border-radius: 50px;\\n}\\n\\n.flatpickr-day.inRange {\\n  border-radius: 0;\\n  -webkit-box-shadow: -5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2;\\n  box-shadow: -5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2;\\n}\\n\\n.flatpickr-day.flatpickr-disabled,\\n.flatpickr-day.flatpickr-disabled:hover,\\n.flatpickr-day.prevMonthDay,\\n.flatpickr-day.nextMonthDay,\\n.flatpickr-day.notAllowed,\\n.flatpickr-day.notAllowed.prevMonthDay,\\n.flatpickr-day.notAllowed.nextMonthDay {\\n  color: rgba(72, 72, 72, 0.3);\\n  background: transparent;\\n  border-color: transparent;\\n  cursor: default;\\n}\\n\\n.flatpickr-day.flatpickr-disabled,\\n.flatpickr-day.flatpickr-disabled:hover {\\n  cursor: not-allowed;\\n  color: rgba(72, 72, 72, 0.1);\\n}\\n\\n.flatpickr-day.week.selected {\\n  border-radius: 0;\\n  -webkit-box-shadow: -5px 0 0 #ff5a5f, 5px 0 0 #ff5a5f;\\n  box-shadow: -5px 0 0 #ff5a5f, 5px 0 0 #ff5a5f;\\n}\\n\\n.flatpickr-day.hidden {\\n  visibility: hidden;\\n}\\n\\n.rangeMode .flatpickr-day {\\n  margin-top: 1px;\\n}\\n\\n.flatpickr-weekwrapper {\\n  float: left;\\n}\\n\\n.flatpickr-weekwrapper .flatpickr-weeks {\\n  padding: 0 12px;\\n  border-left: 1px solid #eceef1;\\n}\\n\\n.flatpickr-weekwrapper .flatpickr-weekday {\\n  float: none;\\n  width: 100%;\\n  line-height: 28px;\\n}\\n\\n.flatpickr-weekwrapper span.flatpickr-day,\\n.flatpickr-weekwrapper span.flatpickr-day:hover {\\n  display: block;\\n  width: 100%;\\n  max-width: none;\\n  color: rgba(72, 72, 72, 0.3);\\n  background: transparent;\\n  cursor: default;\\n  border: none;\\n}\\n\\n.flatpickr-innerContainer {\\n  display: block;\\n  display: -webkit-box;\\n  display: -webkit-flex;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-sizing: border-box;\\n  box-sizing: border-box;\\n  overflow: hidden;\\n  background: #fff;\\n  border-bottom: 1px solid #eceef1;\\n}\\n\\n.flatpickr-rContainer {\\n  display: inline-block;\\n  padding: 0;\\n  -webkit-box-sizing: border-box;\\n  box-sizing: border-box;\\n}\\n\\n.flatpickr-time {\\n  text-align: center;\\n  outline: 0;\\n  display: block;\\n  height: 0;\\n  line-height: 40px;\\n  max-height: 40px;\\n  -webkit-box-sizing: border-box;\\n  box-sizing: border-box;\\n  overflow: hidden;\\n  display: -webkit-box;\\n  display: -webkit-flex;\\n  display: -ms-flexbox;\\n  display: flex;\\n  background: #fff;\\n  border-radius: 0 0 5px 5px;\\n}\\n\\n.flatpickr-time:after {\\n  content: \\\"\\\";\\n  display: table;\\n  clear: both;\\n}\\n\\n.flatpickr-time .numInputWrapper {\\n  -webkit-box-flex: 1;\\n  -webkit-flex: 1;\\n  -ms-flex: 1;\\n  flex: 1;\\n  width: 40%;\\n  height: 40px;\\n  float: left;\\n}\\n\\n.flatpickr-time .numInputWrapper span.arrowUp:after {\\n  border-bottom-color: #484848;\\n}\\n\\n.flatpickr-time .numInputWrapper span.arrowDown:after {\\n  border-top-color: #484848;\\n}\\n\\n.flatpickr-time.hasSeconds .numInputWrapper {\\n  width: 26%;\\n}\\n\\n.flatpickr-time.time24hr .numInputWrapper {\\n  width: 49%;\\n}\\n\\n.flatpickr-time input {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n  box-shadow: none;\\n  border: 0;\\n  border-radius: 0;\\n  text-align: center;\\n  margin: 0;\\n  padding: 0;\\n  height: inherit;\\n  line-height: inherit;\\n  color: #484848;\\n  font-size: 14px;\\n  position: relative;\\n  -webkit-box-sizing: border-box;\\n  box-sizing: border-box;\\n  -webkit-appearance: textfield;\\n  -moz-appearance: textfield;\\n  appearance: textfield;\\n}\\n\\n.flatpickr-time input.flatpickr-hour {\\n  font-weight: bold;\\n}\\n\\n.flatpickr-time input.flatpickr-minute,\\n.flatpickr-time input.flatpickr-second {\\n  font-weight: 400;\\n}\\n\\n.flatpickr-time input:focus {\\n  outline: 0;\\n  border: 0;\\n}\\n\\n.flatpickr-time .flatpickr-time-separator,\\n.flatpickr-time .flatpickr-am-pm {\\n  height: inherit;\\n  float: left;\\n  line-height: inherit;\\n  color: #484848;\\n  font-weight: bold;\\n  width: 2%;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  -webkit-align-self: center;\\n  -ms-flex-item-align: center;\\n  align-self: center;\\n}\\n\\n.flatpickr-time .flatpickr-am-pm {\\n  outline: 0;\\n  width: 18%;\\n  cursor: pointer;\\n  text-align: center;\\n  font-weight: 400;\\n}\\n\\n.flatpickr-time input:hover,\\n.flatpickr-time .flatpickr-am-pm:hover,\\n.flatpickr-time input:focus,\\n.flatpickr-time .flatpickr-am-pm:focus {\\n  background: #eaeaea;\\n}\\n\\n.flatpickr-input[readonly] {\\n  cursor: pointer;\\n}\\n\\n@-webkit-keyframes fpFadeInDown {\\n  from {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, -20px, 0);\\n    transform: translate3d(0, -20px, 0);\\n  }\\n  to {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, 0, 0);\\n    transform: translate3d(0, 0, 0);\\n  }\\n}\\n@keyframes fpFadeInDown {\\n  from {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, -20px, 0);\\n    transform: translate3d(0, -20px, 0);\\n  }\\n  to {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, 0, 0);\\n    transform: translate3d(0, 0, 0);\\n  }\\n}\\nspan.flatpickr-day.selected {\\n  font-weight: bold;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack:///./node_modules/flatpickr/dist/themes/light.css?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/blocker/blocker-break-modal.scss":
/*!*****************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3!./src/blocker/blocker-break-modal.scss ***!
  \*****************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \".youtube-blocker__blocker-break-modal__message {\\n  margin: 0 0 1em;\\n}\\n\\n#youtube-blocker__blocker-break-modal input {\\n  margin-right: 1em;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack:///./src/blocker/blocker-break-modal.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/blocker/blocker-page.scss":
/*!**********************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3!./src/blocker/blocker-page.scss ***!
  \**********************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"#youtube-blocker__blocker-page {\\n  font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, helvetica neue, helvetica, ubuntu, roboto, noto, segoe ui, arial, sans-serif;\\n  font-size: 16px;\\n  display: flex;\\n  padding: 2em;\\n  flex-direction: column;\\n  justify-content: center;\\n  align-items: center;\\n  background-color: #fff;\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  z-index: 2028;\\n  bottom: 0;\\n  right: 0;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n[dark] #youtube-blocker__blocker-page {\\n  background-color: #212121;\\n  color: #fff;\\n}\\n\\n.youtube-blocker__blocker-page__title {\\n  margin: 0 0 1em;\\n  font-size: 32px;\\n}\\n\\n.youtube-blocker__blocker-page__subtitle {\\n  margin: 0 0 2em;\\n  font-size: 18px;\\n}\\n\\n.youtube-blocker__blocker-page__actions-block {\\n  display: flex;\\n  min-width: 80%;\\n  flex-direction: row;\\n  justify-content: space-around;\\n}\\n.youtube-blocker__blocker-page__actions-block .youtube-blocker__blocker-page__action {\\n  display: flex;\\n  flex-direction: column;\\n  padding: 1em;\\n  align-items: center;\\n  margin: 1em;\\n  width: 10em;\\n}\\n.youtube-blocker__blocker-page__actions-block .youtube-blocker__blocker-page__action > svg {\\n  width: 2em;\\n  height: 2em;\\n  margin-bottom: 1em;\\n  fill: rgba(0, 0, 0, 0.8);\\n}\\n[dark] .youtube-blocker__blocker-page__actions-block .youtube-blocker__blocker-page__action > svg {\\n  fill: #909090;\\n}\\n.youtube-blocker__blocker-page__actions-block .youtube-blocker__blocker-page__action .youtube-blocker__blocker-page__action-name {\\n  font-size: 20px;\\n  text-align: center;\\n}\\n.youtube-blocker__blocker-page__actions-block .youtube-blocker__blocker-page__action[data-action] {\\n  cursor: pointer;\\n}\\n\\n.youtube-blocker__blocker-page__btn-primary {\\n  background-color: transparent;\\n  color: #065fd4;\\n  border-width: 1px;\\n  border-style: solid;\\n  border-color: #065fd4;\\n}\\n[dark] .youtube-blocker__blocker-page__btn-primary {\\n  color: #3ea6ff;\\n  border-color: #3ea6ff;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack:///./src/blocker/blocker-page.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/info-tooltip/info-tooltip.scss":
/*!***************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3!./src/info-tooltip/info-tooltip.scss ***!
  \***************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \".youtube-blocker__info-tooltip {\\n  position: relative;\\n  margin: 0.5em;\\n}\\n.youtube-blocker__info-tooltip svg {\\n  width: 1em;\\n  height: 1em;\\n  vertical-align: middle;\\n  fill: rgba(0, 0, 0, 0.5);\\n}\\n[dark] .youtube-blocker__info-tooltip svg {\\n  fill: #fff;\\n}\\n.youtube-blocker__info-tooltip .youtube-blocker__info-tooltip__text {\\n  visibility: hidden;\\n  width: 12em;\\n  background-color: #555;\\n  color: #fff;\\n  font-size: 12px;\\n  text-align: center;\\n  border-radius: 0.5em;\\n  padding: 0.5em;\\n  position: absolute;\\n  z-index: 1;\\n  bottom: 105%;\\n  left: 50%;\\n  margin-left: -6em;\\n  opacity: 0;\\n  transition: opacity 0.3s;\\n}\\n.youtube-blocker__info-tooltip:hover .youtube-blocker__info-tooltip__text {\\n  visibility: visible;\\n  opacity: 0.9;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack:///./src/info-tooltip/info-tooltip.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/modal/modal.scss":
/*!*************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3!./src/modal/modal.scss ***!
  \*************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"#youtube-blocker__modal {\\n  font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, helvetica neue, helvetica, ubuntu, roboto, noto, segoe ui, arial, sans-serif;\\n  font-size: 16px;\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  z-index: 2029;\\n  bottom: 0;\\n  right: 0;\\n}\\n\\n.youtube-blocker__modal__overlay {\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: rgba(0, 0, 0, 0.6);\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  outline: none;\\n}\\n\\n.youtube-blocker__modal__container {\\n  width: 500px;\\n  background-color: #fff;\\n  padding: 1em;\\n  max-width: 500px;\\n  max-height: 100vh;\\n  border-radius: 4px;\\n  overflow-y: auto;\\n  box-sizing: border-box;\\n}\\n[dark] .youtube-blocker__modal__container {\\n  background-color: #212121;\\n}\\n\\n.youtube-blocker__modal__header {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n}\\n\\n.youtube-blocker__modal__title {\\n  margin-top: 0;\\n  margin-bottom: 0;\\n  font-weight: 600;\\n  font-size: 1.5em;\\n  line-height: 1.25;\\n  color: #065fd4;\\n  box-sizing: border-box;\\n}\\n[dark] .youtube-blocker__modal__title {\\n  color: #3ea6ff;\\n}\\n\\n.youtube-blocker__modal__content {\\n  margin: 1em 0;\\n  line-height: 1.5;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n[dark] .youtube-blocker__modal__content {\\n  color: #fff;\\n}\\n\\n.youtube-blocker__modal__btn {\\n  font-size: 0.875em;\\n  padding: 0.5em 1em;\\n  background-color: #e6e6e6;\\n  color: rgba(0, 0, 0, 0.8);\\n  border-radius: 0.25em;\\n  border-style: none;\\n  border-width: 0;\\n  cursor: pointer;\\n  text-transform: none;\\n  overflow: visible;\\n  line-height: 1.15;\\n  margin: 0;\\n  will-change: transform;\\n  -webkit-backface-visibility: hidden;\\n          backface-visibility: hidden;\\n  transform: translateZ(0);\\n  transition: transform 0.25s ease-out;\\n}\\n\\n.youtube-blocker__modal__btn:focus,\\n.youtube-blocker__modal__btn:hover {\\n  transform: scale(1.05);\\n}\\n\\n.youtube-blocker__modal__btn-primary {\\n  background-color: transparent;\\n  color: #065fd4;\\n  border-width: 1px;\\n  border-style: solid;\\n  border-color: #065fd4;\\n}\\n[dark] .youtube-blocker__modal__btn-primary {\\n  color: #3ea6ff;\\n  border-color: #3ea6ff;\\n}\\n\\n.youtube-blocker__modal__footer > :not(:last-child) {\\n  margin-right: 1em;\\n}\\n\\n/**************************  \\\\\\n  Demo Animation Style\\n\\\\  **************************/\\n@-webkit-keyframes mmfadeIn {\\n  from {\\n    opacity: 0;\\n  }\\n  to {\\n    opacity: 1;\\n  }\\n}\\n@keyframes mmfadeIn {\\n  from {\\n    opacity: 0;\\n  }\\n  to {\\n    opacity: 1;\\n  }\\n}\\n@-webkit-keyframes mmfadeOut {\\n  from {\\n    opacity: 1;\\n  }\\n  to {\\n    opacity: 0;\\n  }\\n}\\n@keyframes mmfadeOut {\\n  from {\\n    opacity: 1;\\n  }\\n  to {\\n    opacity: 0;\\n  }\\n}\\n@-webkit-keyframes mmslideIn {\\n  from {\\n    transform: translateY(15%);\\n  }\\n  to {\\n    transform: translateY(0);\\n  }\\n}\\n@keyframes mmslideIn {\\n  from {\\n    transform: translateY(15%);\\n  }\\n  to {\\n    transform: translateY(0);\\n  }\\n}\\n@-webkit-keyframes mmslideOut {\\n  from {\\n    transform: translateY(0);\\n  }\\n  to {\\n    transform: translateY(-10%);\\n  }\\n}\\n@keyframes mmslideOut {\\n  from {\\n    transform: translateY(0);\\n  }\\n  to {\\n    transform: translateY(-10%);\\n  }\\n}\\n.youtube-blocker__modal--slide {\\n  display: none;\\n}\\n.youtube-blocker__modal--slide.is-open {\\n  display: block;\\n}\\n.youtube-blocker__modal--slide .youtube-blocker__modal__container,\\n.youtube-blocker__modal--slide .youtube-blocker__modal__overlay {\\n  will-change: transform;\\n}\\n.youtube-blocker__modal--slide[aria-hidden=false] .youtube-blocker__modal__overlay {\\n  -webkit-animation: mmfadeIn 0.3s cubic-bezier(0, 0, 0.2, 1);\\n          animation: mmfadeIn 0.3s cubic-bezier(0, 0, 0.2, 1);\\n}\\n.youtube-blocker__modal--slide[aria-hidden=false] .youtube-blocker__modal__container {\\n  -webkit-animation: mmslideIn 0.3s cubic-bezier(0, 0, 0.2, 1);\\n          animation: mmslideIn 0.3s cubic-bezier(0, 0, 0.2, 1);\\n}\\n.youtube-blocker__modal--slide[aria-hidden=true] .youtube-blocker__modal__overlay {\\n  -webkit-animation: mmfadeOut 0.3s cubic-bezier(0, 0, 0.2, 1);\\n          animation: mmfadeOut 0.3s cubic-bezier(0, 0, 0.2, 1);\\n}\\n.youtube-blocker__modal--slide[aria-hidden=true] .youtube-blocker__modal__container {\\n  -webkit-animation: mmslideOut 0.3s cubic-bezier(0, 0, 0.2, 1);\\n          animation: mmslideOut 0.3s cubic-bezier(0, 0, 0.2, 1);\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack:///./src/modal/modal.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/settings/settings-compact-button.scss":
/*!**********************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3!./src/settings/settings-compact-button.scss ***!
  \**********************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \"#youtube-blocker__settings-compact-button a {\\n  -webkit-user-select: none;\\n     -moz-user-select: none;\\n      -ms-user-select: none;\\n          user-select: none;\\n}\\n#youtube-blocker__settings-compact-button a svg {\\n  width: 24px;\\n  height: 24px;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack:///./src/settings/settings-compact-button.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/settings/settings-full-button.scss":
/*!*******************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3!./src/settings/settings-full-button.scss ***!
  \*******************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \".youtube-blocker__settings-full-button__link {\\n  padding: 0 24px;\\n}\\n\\n.youtube-blocker__settings-full-button__icon {\\n  height: 24px;\\n  width: 24px;\\n  margin-right: 24px;\\n  color: #606060;\\n}\\n[dark] .youtube-blocker__settings-full-button__icon {\\n  color: #909090;\\n}\\n.youtube-blocker__settings-full-button__icon svg {\\n  fill: currentColor;\\n}\\n\\n.youtube-blocker__settings-full-button__title {\\n  -webkit-font-smoothing: antialiased;\\n  font-family: Roboto, Noto, sans-serif;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack:///./src/settings/settings-full-button.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3");

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/settings/settings-modal.scss":
/*!*************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3!./src/settings/settings-modal.scss ***!
  \*************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false);\n// Module\n___CSS_LOADER_EXPORT___.push([module.i, \".youtube-blocker__settings__readonly-notification {\\n  font-weight: bold;\\n}\\n\\n.youtube-blocker__settings__section-header {\\n  margin: 1em 0 0.5em;\\n}\\n\\n.youtube-blocker__settings__restricted-days .youtube-blocker__settings__days-list {\\n  display: flex;\\n  justify-content: space-around;\\n  margin: 0 0 1em;\\n  padding: 0;\\n}\\n.youtube-blocker__settings__restricted-days .youtube-blocker__settings__days-list input[type=checkbox] {\\n  display: block;\\n  margin: auto;\\n}\\n.youtube-blocker__settings__restricted-days .youtube-blocker__settings__days-list .youtube-blocker__settings__day-name {\\n  margin-top: 0.5em;\\n}\\n.youtube-blocker__settings__restricted-days .youtube-blocker__settings__days-list li {\\n  list-style: none;\\n  margin: 0.5em 0;\\n}\\n\\n#youtube-blocker__settings input {\\n  margin-right: 1em;\\n}\\n#youtube-blocker__settings input:not([type=checkbox]) {\\n  width: 8em;\\n  box-sizing: border-box;\\n}\\n\\n.youtube-blocker__settings__restricted-hours .youtube-blocker__settings__field {\\n  display: block;\\n  margin: 1em 0;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack:///./src/settings/settings-modal.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ref--7-2!./node_modules/sass-loader/dist/cjs.js??ref--7-3");

/***/ }),

/***/ "./node_modules/css-loader/dist/runtime/api.js":
/*!*****************************************************!*\
  !*** ./node_modules/css-loader/dist/runtime/api.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item, useSourceMap);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join('');\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery, dedupe) {\n    if (typeof modules === 'string') {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, '']];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var i = 0; i < this.length; i++) {\n        // eslint-disable-next-line prefer-destructuring\n        var id = this[i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = [].concat(modules[_i]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      if (mediaQuery) {\n        if (!item[2]) {\n          item[2] = mediaQuery;\n        } else {\n          item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n  var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n  var cssMapping = item[3];\n\n  if (!cssMapping) {\n    return content;\n  }\n\n  if (useSourceMap && typeof btoa === 'function') {\n    var sourceMapping = toComment(cssMapping);\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n  }\n\n  return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n  // eslint-disable-next-line no-undef\n  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n  var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n  return \"/*# \".concat(data, \" */\");\n}\n\n//# sourceURL=webpack:///./node_modules/css-loader/dist/runtime/api.js?");

/***/ }),

/***/ "./node_modules/flatpickr/dist/flatpickr.js":
/*!**************************************************!*\
  !*** ./node_modules/flatpickr/dist/flatpickr.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* flatpickr v4.6.6, @license MIT */\n(function (global, factory) {\n     true ? module.exports = factory() :\n    undefined;\n}(this, (function () { 'use strict';\n\n    /*! *****************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\r\n\r\n    var __assign = function() {\r\n        __assign = Object.assign || function __assign(t) {\r\n            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                s = arguments[i];\r\n                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n            }\r\n            return t;\r\n        };\r\n        return __assign.apply(this, arguments);\r\n    };\r\n\r\n    function __spreadArrays() {\r\n        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n        for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n                r[k] = a[j];\r\n        return r;\r\n    }\n\n    var HOOKS = [\n        \"onChange\",\n        \"onClose\",\n        \"onDayCreate\",\n        \"onDestroy\",\n        \"onKeyDown\",\n        \"onMonthChange\",\n        \"onOpen\",\n        \"onParseConfig\",\n        \"onReady\",\n        \"onValueUpdate\",\n        \"onYearChange\",\n        \"onPreCalendarPosition\",\n    ];\n    var defaults = {\n        _disable: [],\n        _enable: [],\n        allowInput: false,\n        allowInvalidPreload: false,\n        altFormat: \"F j, Y\",\n        altInput: false,\n        altInputClass: \"form-control input\",\n        animate: typeof window === \"object\" &&\n            window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n        ariaDateFormat: \"F j, Y\",\n        autoFillDefaultTime: true,\n        clickOpens: true,\n        closeOnSelect: true,\n        conjunction: \", \",\n        dateFormat: \"Y-m-d\",\n        defaultHour: 12,\n        defaultMinute: 0,\n        defaultSeconds: 0,\n        disable: [],\n        disableMobile: false,\n        enable: [],\n        enableSeconds: false,\n        enableTime: false,\n        errorHandler: function (err) {\n            return typeof console !== \"undefined\" && console.warn(err);\n        },\n        getWeek: function (givenDate) {\n            var date = new Date(givenDate.getTime());\n            date.setHours(0, 0, 0, 0);\n            // Thursday in current week decides the year.\n            date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n            // January 4 is always in week 1.\n            var week1 = new Date(date.getFullYear(), 0, 4);\n            // Adjust to Thursday in week 1 and count number of weeks from date to week1.\n            return (1 +\n                Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n                    3 +\n                    ((week1.getDay() + 6) % 7)) /\n                    7));\n        },\n        hourIncrement: 1,\n        ignoredFocusElements: [],\n        inline: false,\n        locale: \"default\",\n        minuteIncrement: 5,\n        mode: \"single\",\n        monthSelectorType: \"dropdown\",\n        nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n        noCalendar: false,\n        now: new Date(),\n        onChange: [],\n        onClose: [],\n        onDayCreate: [],\n        onDestroy: [],\n        onKeyDown: [],\n        onMonthChange: [],\n        onOpen: [],\n        onParseConfig: [],\n        onReady: [],\n        onValueUpdate: [],\n        onYearChange: [],\n        onPreCalendarPosition: [],\n        plugins: [],\n        position: \"auto\",\n        positionElement: undefined,\n        prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n        shorthandCurrentMonth: false,\n        showMonths: 1,\n        static: false,\n        time_24hr: false,\n        weekNumbers: false,\n        wrap: false,\n    };\n\n    var english = {\n        weekdays: {\n            shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n            longhand: [\n                \"Sunday\",\n                \"Monday\",\n                \"Tuesday\",\n                \"Wednesday\",\n                \"Thursday\",\n                \"Friday\",\n                \"Saturday\",\n            ],\n        },\n        months: {\n            shorthand: [\n                \"Jan\",\n                \"Feb\",\n                \"Mar\",\n                \"Apr\",\n                \"May\",\n                \"Jun\",\n                \"Jul\",\n                \"Aug\",\n                \"Sep\",\n                \"Oct\",\n                \"Nov\",\n                \"Dec\",\n            ],\n            longhand: [\n                \"January\",\n                \"February\",\n                \"March\",\n                \"April\",\n                \"May\",\n                \"June\",\n                \"July\",\n                \"August\",\n                \"September\",\n                \"October\",\n                \"November\",\n                \"December\",\n            ],\n        },\n        daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n        firstDayOfWeek: 0,\n        ordinal: function (nth) {\n            var s = nth % 100;\n            if (s > 3 && s < 21)\n                return \"th\";\n            switch (s % 10) {\n                case 1:\n                    return \"st\";\n                case 2:\n                    return \"nd\";\n                case 3:\n                    return \"rd\";\n                default:\n                    return \"th\";\n            }\n        },\n        rangeSeparator: \" to \",\n        weekAbbreviation: \"Wk\",\n        scrollTitle: \"Scroll to increment\",\n        toggleTitle: \"Click to toggle\",\n        amPM: [\"AM\", \"PM\"],\n        yearAriaLabel: \"Year\",\n        monthAriaLabel: \"Month\",\n        hourAriaLabel: \"Hour\",\n        minuteAriaLabel: \"Minute\",\n        time_24hr: false,\n    };\n\n    var pad = function (number, length) {\n        if (length === void 0) { length = 2; }\n        return (\"000\" + number).slice(length * -1);\n    };\n    var int = function (bool) { return (bool === true ? 1 : 0); };\n    /* istanbul ignore next */\n    function debounce(func, wait, immediate) {\n        if (immediate === void 0) { immediate = false; }\n        var timeout;\n        return function () {\n            var context = this, args = arguments;\n            timeout !== null && clearTimeout(timeout);\n            timeout = window.setTimeout(function () {\n                timeout = null;\n                if (!immediate)\n                    func.apply(context, args);\n            }, wait);\n            if (immediate && !timeout)\n                func.apply(context, args);\n        };\n    }\n    var arrayify = function (obj) {\n        return obj instanceof Array ? obj : [obj];\n    };\n\n    function toggleClass(elem, className, bool) {\n        if (bool === true)\n            return elem.classList.add(className);\n        elem.classList.remove(className);\n    }\n    function createElement(tag, className, content) {\n        var e = window.document.createElement(tag);\n        className = className || \"\";\n        content = content || \"\";\n        e.className = className;\n        if (content !== undefined)\n            e.textContent = content;\n        return e;\n    }\n    function clearNode(node) {\n        while (node.firstChild)\n            node.removeChild(node.firstChild);\n    }\n    function findParent(node, condition) {\n        if (condition(node))\n            return node;\n        else if (node.parentNode)\n            return findParent(node.parentNode, condition);\n        return undefined; // nothing found\n    }\n    function createNumberInput(inputClassName, opts) {\n        var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n        if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n            numInput.type = \"number\";\n        }\n        else {\n            numInput.type = \"text\";\n            numInput.pattern = \"\\\\d*\";\n        }\n        if (opts !== undefined)\n            for (var key in opts)\n                numInput.setAttribute(key, opts[key]);\n        wrapper.appendChild(numInput);\n        wrapper.appendChild(arrowUp);\n        wrapper.appendChild(arrowDown);\n        return wrapper;\n    }\n    function getEventTarget(event) {\n        try {\n            if (typeof event.composedPath === \"function\") {\n                var path = event.composedPath();\n                return path[0];\n            }\n            return event.target;\n        }\n        catch (error) {\n            return event.target;\n        }\n    }\n\n    var doNothing = function () { return undefined; };\n    var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\n    var revFormat = {\n        D: doNothing,\n        F: function (dateObj, monthName, locale) {\n            dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n        },\n        G: function (dateObj, hour) {\n            dateObj.setHours(parseFloat(hour));\n        },\n        H: function (dateObj, hour) {\n            dateObj.setHours(parseFloat(hour));\n        },\n        J: function (dateObj, day) {\n            dateObj.setDate(parseFloat(day));\n        },\n        K: function (dateObj, amPM, locale) {\n            dateObj.setHours((dateObj.getHours() % 12) +\n                12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n        },\n        M: function (dateObj, shortMonth, locale) {\n            dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n        },\n        S: function (dateObj, seconds) {\n            dateObj.setSeconds(parseFloat(seconds));\n        },\n        U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n        W: function (dateObj, weekNum, locale) {\n            var weekNumber = parseInt(weekNum);\n            var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n            date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n            return date;\n        },\n        Y: function (dateObj, year) {\n            dateObj.setFullYear(parseFloat(year));\n        },\n        Z: function (_, ISODate) { return new Date(ISODate); },\n        d: function (dateObj, day) {\n            dateObj.setDate(parseFloat(day));\n        },\n        h: function (dateObj, hour) {\n            dateObj.setHours(parseFloat(hour));\n        },\n        i: function (dateObj, minutes) {\n            dateObj.setMinutes(parseFloat(minutes));\n        },\n        j: function (dateObj, day) {\n            dateObj.setDate(parseFloat(day));\n        },\n        l: doNothing,\n        m: function (dateObj, month) {\n            dateObj.setMonth(parseFloat(month) - 1);\n        },\n        n: function (dateObj, month) {\n            dateObj.setMonth(parseFloat(month) - 1);\n        },\n        s: function (dateObj, seconds) {\n            dateObj.setSeconds(parseFloat(seconds));\n        },\n        u: function (_, unixMillSeconds) {\n            return new Date(parseFloat(unixMillSeconds));\n        },\n        w: doNothing,\n        y: function (dateObj, year) {\n            dateObj.setFullYear(2000 + parseFloat(year));\n        },\n    };\n    var tokenRegex = {\n        D: \"(\\\\w+)\",\n        F: \"(\\\\w+)\",\n        G: \"(\\\\d\\\\d|\\\\d)\",\n        H: \"(\\\\d\\\\d|\\\\d)\",\n        J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n        K: \"\",\n        M: \"(\\\\w+)\",\n        S: \"(\\\\d\\\\d|\\\\d)\",\n        U: \"(.+)\",\n        W: \"(\\\\d\\\\d|\\\\d)\",\n        Y: \"(\\\\d{4})\",\n        Z: \"(.+)\",\n        d: \"(\\\\d\\\\d|\\\\d)\",\n        h: \"(\\\\d\\\\d|\\\\d)\",\n        i: \"(\\\\d\\\\d|\\\\d)\",\n        j: \"(\\\\d\\\\d|\\\\d)\",\n        l: \"(\\\\w+)\",\n        m: \"(\\\\d\\\\d|\\\\d)\",\n        n: \"(\\\\d\\\\d|\\\\d)\",\n        s: \"(\\\\d\\\\d|\\\\d)\",\n        u: \"(.+)\",\n        w: \"(\\\\d\\\\d|\\\\d)\",\n        y: \"(\\\\d{2})\",\n    };\n    var formats = {\n        // get the date in UTC\n        Z: function (date) { return date.toISOString(); },\n        // weekday name, short, e.g. Thu\n        D: function (date, locale, options) {\n            return locale.weekdays.shorthand[formats.w(date, locale, options)];\n        },\n        // full month name e.g. January\n        F: function (date, locale, options) {\n            return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n        },\n        // padded hour 1-12\n        G: function (date, locale, options) {\n            return pad(formats.h(date, locale, options));\n        },\n        // hours with leading zero e.g. 03\n        H: function (date) { return pad(date.getHours()); },\n        // day (1-30) with ordinal suffix e.g. 1st, 2nd\n        J: function (date, locale) {\n            return locale.ordinal !== undefined\n                ? date.getDate() + locale.ordinal(date.getDate())\n                : date.getDate();\n        },\n        // AM/PM\n        K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n        // shorthand month e.g. Jan, Sep, Oct, etc\n        M: function (date, locale) {\n            return monthToStr(date.getMonth(), true, locale);\n        },\n        // seconds 00-59\n        S: function (date) { return pad(date.getSeconds()); },\n        // unix timestamp\n        U: function (date) { return date.getTime() / 1000; },\n        W: function (date, _, options) {\n            return options.getWeek(date);\n        },\n        // full year e.g. 2016, padded (0001-9999)\n        Y: function (date) { return pad(date.getFullYear(), 4); },\n        // day in month, padded (01-30)\n        d: function (date) { return pad(date.getDate()); },\n        // hour from 1-12 (am/pm)\n        h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n        // minutes, padded with leading zero e.g. 09\n        i: function (date) { return pad(date.getMinutes()); },\n        // day in month (1-30)\n        j: function (date) { return date.getDate(); },\n        // weekday name, full, e.g. Thursday\n        l: function (date, locale) {\n            return locale.weekdays.longhand[date.getDay()];\n        },\n        // padded month number (01-12)\n        m: function (date) { return pad(date.getMonth() + 1); },\n        // the month number (1-12)\n        n: function (date) { return date.getMonth() + 1; },\n        // seconds 0-59\n        s: function (date) { return date.getSeconds(); },\n        // Unix Milliseconds\n        u: function (date) { return date.getTime(); },\n        // number of the day of the week\n        w: function (date) { return date.getDay(); },\n        // last two digits of year e.g. 16 for 2016\n        y: function (date) { return String(date.getFullYear()).substring(2); },\n    };\n\n    var createDateFormatter = function (_a) {\n        var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n        return function (dateObj, frmt, overrideLocale) {\n            var locale = overrideLocale || l10n;\n            if (config.formatDate !== undefined && !isMobile) {\n                return config.formatDate(dateObj, frmt, locale);\n            }\n            return frmt\n                .split(\"\")\n                .map(function (c, i, arr) {\n                return formats[c] && arr[i - 1] !== \"\\\\\"\n                    ? formats[c](dateObj, locale, config)\n                    : c !== \"\\\\\"\n                        ? c\n                        : \"\";\n            })\n                .join(\"\");\n        };\n    };\n    var createDateParser = function (_a) {\n        var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n        return function (date, givenFormat, timeless, customLocale) {\n            if (date !== 0 && !date)\n                return undefined;\n            var locale = customLocale || l10n;\n            var parsedDate;\n            var dateOrig = date;\n            if (date instanceof Date)\n                parsedDate = new Date(date.getTime());\n            else if (typeof date !== \"string\" &&\n                date.toFixed !== undefined // timestamp\n            )\n                // create a copy\n                parsedDate = new Date(date);\n            else if (typeof date === \"string\") {\n                // date string\n                var format = givenFormat || (config || defaults).dateFormat;\n                var datestr = String(date).trim();\n                if (datestr === \"today\") {\n                    parsedDate = new Date();\n                    timeless = true;\n                }\n                else if (/Z$/.test(datestr) ||\n                    /GMT$/.test(datestr) // datestrings w/ timezone\n                )\n                    parsedDate = new Date(date);\n                else if (config && config.parseDate)\n                    parsedDate = config.parseDate(date, format);\n                else {\n                    parsedDate =\n                        !config || !config.noCalendar\n                            ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n                            : new Date(new Date().setHours(0, 0, 0, 0));\n                    var matched = void 0, ops = [];\n                    for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n                        var token_1 = format[i];\n                        var isBackSlash = token_1 === \"\\\\\";\n                        var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n                        if (tokenRegex[token_1] && !escaped) {\n                            regexStr += tokenRegex[token_1];\n                            var match = new RegExp(regexStr).exec(date);\n                            if (match && (matched = true)) {\n                                ops[token_1 !== \"Y\" ? \"push\" : \"unshift\"]({\n                                    fn: revFormat[token_1],\n                                    val: match[++matchIndex],\n                                });\n                            }\n                        }\n                        else if (!isBackSlash)\n                            regexStr += \".\"; // don't really care\n                        ops.forEach(function (_a) {\n                            var fn = _a.fn, val = _a.val;\n                            return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n                        });\n                    }\n                    parsedDate = matched ? parsedDate : undefined;\n                }\n            }\n            /* istanbul ignore next */\n            if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n                config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n                return undefined;\n            }\n            if (timeless === true)\n                parsedDate.setHours(0, 0, 0, 0);\n            return parsedDate;\n        };\n    };\n    /**\n     * Compute the difference in dates, measured in ms\n     */\n    function compareDates(date1, date2, timeless) {\n        if (timeless === void 0) { timeless = true; }\n        if (timeless !== false) {\n            return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n                new Date(date2.getTime()).setHours(0, 0, 0, 0));\n        }\n        return date1.getTime() - date2.getTime();\n    }\n    var isBetween = function (ts, ts1, ts2) {\n        return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n    };\n    var duration = {\n        DAY: 86400000,\n    };\n\n    if (typeof Object.assign !== \"function\") {\n        Object.assign = function (target) {\n            var args = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                args[_i - 1] = arguments[_i];\n            }\n            if (!target) {\n                throw TypeError(\"Cannot convert undefined or null to object\");\n            }\n            var _loop_1 = function (source) {\n                if (source) {\n                    Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n                }\n            };\n            for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n                var source = args_1[_a];\n                _loop_1(source);\n            }\n            return target;\n        };\n    }\n\n    var DEBOUNCED_CHANGE_MS = 300;\n    function FlatpickrInstance(element, instanceConfig) {\n        var self = {\n            config: __assign(__assign({}, defaults), flatpickr.defaultConfig),\n            l10n: english,\n        };\n        self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n        self._handlers = [];\n        self.pluginElements = [];\n        self.loadedPlugins = [];\n        self._bind = bind;\n        self._setHoursFromDate = setHoursFromDate;\n        self._positionCalendar = positionCalendar;\n        self.changeMonth = changeMonth;\n        self.changeYear = changeYear;\n        self.clear = clear;\n        self.close = close;\n        self._createElement = createElement;\n        self.destroy = destroy;\n        self.isEnabled = isEnabled;\n        self.jumpToDate = jumpToDate;\n        self.open = open;\n        self.redraw = redraw;\n        self.set = set;\n        self.setDate = setDate;\n        self.toggle = toggle;\n        function setupHelperFunctions() {\n            self.utils = {\n                getDaysInMonth: function (month, yr) {\n                    if (month === void 0) { month = self.currentMonth; }\n                    if (yr === void 0) { yr = self.currentYear; }\n                    if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n                        return 29;\n                    return self.l10n.daysInMonth[month];\n                },\n            };\n        }\n        function init() {\n            self.element = self.input = element;\n            self.isOpen = false;\n            parseConfig();\n            setupLocale();\n            setupInputs();\n            setupDates();\n            setupHelperFunctions();\n            if (!self.isMobile)\n                build();\n            bindEvents();\n            if (self.selectedDates.length || self.config.noCalendar) {\n                if (self.config.enableTime) {\n                    setHoursFromDate(self.config.noCalendar\n                        ? self.latestSelectedDateObj || self.config.minDate\n                        : undefined);\n                }\n                updateValue(false);\n            }\n            setCalendarWidth();\n            var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n            /* TODO: investigate this further\n        \n              Currently, there is weird positioning behavior in safari causing pages\n              to scroll up. https://github.com/chmln/flatpickr/issues/563\n        \n              However, most browsers are not Safari and positioning is expensive when used\n              in scale. https://github.com/chmln/flatpickr/issues/1096\n            */\n            if (!self.isMobile && isSafari) {\n                positionCalendar();\n            }\n            triggerEvent(\"onReady\");\n        }\n        function bindToInstance(fn) {\n            return fn.bind(self);\n        }\n        function setCalendarWidth() {\n            var config = self.config;\n            if (config.weekNumbers === false && config.showMonths === 1) {\n                return;\n            }\n            else if (config.noCalendar !== true) {\n                window.requestAnimationFrame(function () {\n                    if (self.calendarContainer !== undefined) {\n                        self.calendarContainer.style.visibility = \"hidden\";\n                        self.calendarContainer.style.display = \"block\";\n                    }\n                    if (self.daysContainer !== undefined) {\n                        var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n                        self.daysContainer.style.width = daysWidth + \"px\";\n                        self.calendarContainer.style.width =\n                            daysWidth +\n                                (self.weekWrapper !== undefined\n                                    ? self.weekWrapper.offsetWidth\n                                    : 0) +\n                                \"px\";\n                        self.calendarContainer.style.removeProperty(\"visibility\");\n                        self.calendarContainer.style.removeProperty(\"display\");\n                    }\n                });\n            }\n        }\n        /**\n         * The handler for all events targeting the time inputs\n         */\n        function updateTime(e) {\n            if (self.selectedDates.length === 0) {\n                var defaultDate = self.config.minDate !== undefined\n                    ? new Date(self.config.minDate.getTime())\n                    : new Date();\n                var _a = getDefaultHours(), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n                defaultDate.setHours(hours, minutes, seconds, 0);\n                self.setDate(defaultDate, false);\n            }\n            if (e !== undefined && e.type !== \"blur\") {\n                timeWrapper(e);\n            }\n            var prevValue = self._input.value;\n            setHoursFromInputs();\n            updateValue();\n            if (self._input.value !== prevValue) {\n                self._debouncedChange();\n            }\n        }\n        function ampm2military(hour, amPM) {\n            return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n        }\n        function military2ampm(hour) {\n            switch (hour % 24) {\n                case 0:\n                case 12:\n                    return 12;\n                default:\n                    return hour % 12;\n            }\n        }\n        /**\n         * Syncs the selected date object time with user's time input\n         */\n        function setHoursFromInputs() {\n            if (self.hourElement === undefined || self.minuteElement === undefined)\n                return;\n            var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n                ? (parseInt(self.secondElement.value, 10) || 0) % 60\n                : 0;\n            if (self.amPM !== undefined) {\n                hours = ampm2military(hours, self.amPM.textContent);\n            }\n            var limitMinHours = self.config.minTime !== undefined ||\n                (self.config.minDate &&\n                    self.minDateHasTime &&\n                    self.latestSelectedDateObj &&\n                    compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n                        0);\n            var limitMaxHours = self.config.maxTime !== undefined ||\n                (self.config.maxDate &&\n                    self.maxDateHasTime &&\n                    self.latestSelectedDateObj &&\n                    compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n                        0);\n            if (limitMaxHours) {\n                var maxTime = self.config.maxTime !== undefined\n                    ? self.config.maxTime\n                    : self.config.maxDate;\n                hours = Math.min(hours, maxTime.getHours());\n                if (hours === maxTime.getHours())\n                    minutes = Math.min(minutes, maxTime.getMinutes());\n                if (minutes === maxTime.getMinutes())\n                    seconds = Math.min(seconds, maxTime.getSeconds());\n            }\n            if (limitMinHours) {\n                var minTime = self.config.minTime !== undefined\n                    ? self.config.minTime\n                    : self.config.minDate;\n                hours = Math.max(hours, minTime.getHours());\n                if (hours === minTime.getHours())\n                    minutes = Math.max(minutes, minTime.getMinutes());\n                if (minutes === minTime.getMinutes())\n                    seconds = Math.max(seconds, minTime.getSeconds());\n            }\n            setHours(hours, minutes, seconds);\n        }\n        /**\n         * Syncs time input values with a date\n         */\n        function setHoursFromDate(dateObj) {\n            var date = dateObj || self.latestSelectedDateObj;\n            if (date) {\n                setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n            }\n        }\n        function getDefaultHours() {\n            var hours = self.config.defaultHour;\n            var minutes = self.config.defaultMinute;\n            var seconds = self.config.defaultSeconds;\n            if (self.config.minDate !== undefined) {\n                var minHr = self.config.minDate.getHours();\n                var minMinutes = self.config.minDate.getMinutes();\n                hours = Math.max(hours, minHr);\n                if (hours === minHr)\n                    minutes = Math.max(minMinutes, minutes);\n                if (hours === minHr && minutes === minMinutes)\n                    seconds = self.config.minDate.getSeconds();\n            }\n            if (self.config.maxDate !== undefined) {\n                var maxHr = self.config.maxDate.getHours();\n                var maxMinutes = self.config.maxDate.getMinutes();\n                hours = Math.min(hours, maxHr);\n                if (hours === maxHr)\n                    minutes = Math.min(maxMinutes, minutes);\n                if (hours === maxHr && minutes === maxMinutes)\n                    seconds = self.config.maxDate.getSeconds();\n            }\n            return { hours: hours, minutes: minutes, seconds: seconds };\n        }\n        /**\n         * Sets the hours, minutes, and optionally seconds\n         * of the latest selected date object and the\n         * corresponding time inputs\n         * @param {Number} hours the hour. whether its military\n         *                 or am-pm gets inferred from config\n         * @param {Number} minutes the minutes\n         * @param {Number} seconds the seconds (optional)\n         */\n        function setHours(hours, minutes, seconds) {\n            if (self.latestSelectedDateObj !== undefined) {\n                self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n            }\n            if (!self.hourElement || !self.minuteElement || self.isMobile)\n                return;\n            self.hourElement.value = pad(!self.config.time_24hr\n                ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n                : hours);\n            self.minuteElement.value = pad(minutes);\n            if (self.amPM !== undefined)\n                self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n            if (self.secondElement !== undefined)\n                self.secondElement.value = pad(seconds);\n        }\n        /**\n         * Handles the year input and incrementing events\n         * @param {Event} event the keyup or increment event\n         */\n        function onYearInput(event) {\n            var eventTarget = getEventTarget(event);\n            var year = parseInt(eventTarget.value) + (event.delta || 0);\n            if (year / 1000 > 1 ||\n                (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n                changeYear(year);\n            }\n        }\n        /**\n         * Essentially addEventListener + tracking\n         * @param {Element} element the element to addEventListener to\n         * @param {String} event the event name\n         * @param {Function} handler the event handler\n         */\n        function bind(element, event, handler, options) {\n            if (event instanceof Array)\n                return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n            if (element instanceof Array)\n                return element.forEach(function (el) { return bind(el, event, handler, options); });\n            element.addEventListener(event, handler, options);\n            self._handlers.push({\n                element: element,\n                event: event,\n                handler: handler,\n                options: options,\n            });\n        }\n        function triggerChange() {\n            triggerEvent(\"onChange\");\n        }\n        /**\n         * Adds all the necessary event listeners\n         */\n        function bindEvents() {\n            if (self.config.wrap) {\n                [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n                    Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n                        return bind(el, \"click\", self[evt]);\n                    });\n                });\n            }\n            if (self.isMobile) {\n                setupMobile();\n                return;\n            }\n            var debouncedResize = debounce(onResize, 50);\n            self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n            if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n                bind(self.daysContainer, \"mouseover\", function (e) {\n                    if (self.config.mode === \"range\")\n                        onMouseOver(getEventTarget(e));\n                });\n            bind(window.document.body, \"keydown\", onKeyDown);\n            if (!self.config.inline && !self.config.static)\n                bind(window, \"resize\", debouncedResize);\n            if (window.ontouchstart !== undefined)\n                bind(window.document, \"touchstart\", documentClick);\n            else\n                bind(window.document, \"click\", documentClick);\n            bind(window.document, \"focus\", documentClick, { capture: true });\n            if (self.config.clickOpens === true) {\n                bind(self._input, \"focus\", self.open);\n                bind(self._input, \"click\", self.open);\n            }\n            if (self.daysContainer !== undefined) {\n                bind(self.monthNav, \"click\", onMonthNavClick);\n                bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n                bind(self.daysContainer, \"click\", selectDate);\n            }\n            if (self.timeContainer !== undefined &&\n                self.minuteElement !== undefined &&\n                self.hourElement !== undefined) {\n                var selText = function (e) {\n                    return getEventTarget(e).select();\n                };\n                bind(self.timeContainer, [\"increment\"], updateTime);\n                bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n                bind(self.timeContainer, \"click\", timeIncrement);\n                bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n                if (self.secondElement !== undefined)\n                    bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n                if (self.amPM !== undefined) {\n                    bind(self.amPM, \"click\", function (e) {\n                        updateTime(e);\n                        triggerChange();\n                    });\n                }\n            }\n            if (self.config.allowInput)\n                bind(self._input, \"blur\", onBlur);\n        }\n        /**\n         * Set the calendar view to a particular date.\n         * @param {Date} jumpDate the date to set the view to\n         * @param {boolean} triggerChange if change events should be triggered\n         */\n        function jumpToDate(jumpDate, triggerChange) {\n            var jumpTo = jumpDate !== undefined\n                ? self.parseDate(jumpDate)\n                : self.latestSelectedDateObj ||\n                    (self.config.minDate && self.config.minDate > self.now\n                        ? self.config.minDate\n                        : self.config.maxDate && self.config.maxDate < self.now\n                            ? self.config.maxDate\n                            : self.now);\n            var oldYear = self.currentYear;\n            var oldMonth = self.currentMonth;\n            try {\n                if (jumpTo !== undefined) {\n                    self.currentYear = jumpTo.getFullYear();\n                    self.currentMonth = jumpTo.getMonth();\n                }\n            }\n            catch (e) {\n                /* istanbul ignore next */\n                e.message = \"Invalid date supplied: \" + jumpTo;\n                self.config.errorHandler(e);\n            }\n            if (triggerChange && self.currentYear !== oldYear) {\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n            if (triggerChange &&\n                (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n                triggerEvent(\"onMonthChange\");\n            }\n            self.redraw();\n        }\n        /**\n         * The up/down arrow handler for time inputs\n         * @param {Event} e the click event\n         */\n        function timeIncrement(e) {\n            var eventTarget = getEventTarget(e);\n            if (~eventTarget.className.indexOf(\"arrow\"))\n                incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n        }\n        /**\n         * Increments/decrements the value of input associ-\n         * ated with the up/down arrow by dispatching an\n         * \"increment\" event on the input.\n         *\n         * @param {Event} e the click event\n         * @param {Number} delta the diff (usually 1 or -1)\n         * @param {Element} inputElem the input element\n         */\n        function incrementNumInput(e, delta, inputElem) {\n            var target = e && getEventTarget(e);\n            var input = inputElem ||\n                (target && target.parentNode && target.parentNode.firstChild);\n            var event = createEvent(\"increment\");\n            event.delta = delta;\n            input && input.dispatchEvent(event);\n        }\n        function build() {\n            var fragment = window.document.createDocumentFragment();\n            self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n            self.calendarContainer.tabIndex = -1;\n            if (!self.config.noCalendar) {\n                fragment.appendChild(buildMonthNav());\n                self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n                if (self.config.weekNumbers) {\n                    var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n                    self.innerContainer.appendChild(weekWrapper);\n                    self.weekNumbers = weekNumbers;\n                    self.weekWrapper = weekWrapper;\n                }\n                self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n                self.rContainer.appendChild(buildWeekdays());\n                if (!self.daysContainer) {\n                    self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n                    self.daysContainer.tabIndex = -1;\n                }\n                buildDays();\n                self.rContainer.appendChild(self.daysContainer);\n                self.innerContainer.appendChild(self.rContainer);\n                fragment.appendChild(self.innerContainer);\n            }\n            if (self.config.enableTime) {\n                fragment.appendChild(buildTime());\n            }\n            toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n            toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n            toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n            self.calendarContainer.appendChild(fragment);\n            var customAppend = self.config.appendTo !== undefined &&\n                self.config.appendTo.nodeType !== undefined;\n            if (self.config.inline || self.config.static) {\n                self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n                if (self.config.inline) {\n                    if (!customAppend && self.element.parentNode)\n                        self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n                    else if (self.config.appendTo !== undefined)\n                        self.config.appendTo.appendChild(self.calendarContainer);\n                }\n                if (self.config.static) {\n                    var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n                    if (self.element.parentNode)\n                        self.element.parentNode.insertBefore(wrapper, self.element);\n                    wrapper.appendChild(self.element);\n                    if (self.altInput)\n                        wrapper.appendChild(self.altInput);\n                    wrapper.appendChild(self.calendarContainer);\n                }\n            }\n            if (!self.config.static && !self.config.inline)\n                (self.config.appendTo !== undefined\n                    ? self.config.appendTo\n                    : window.document.body).appendChild(self.calendarContainer);\n        }\n        function createDay(className, date, dayNumber, i) {\n            var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n            dayElement.dateObj = date;\n            dayElement.$i = i;\n            dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n            if (className.indexOf(\"hidden\") === -1 &&\n                compareDates(date, self.now) === 0) {\n                self.todayDateElem = dayElement;\n                dayElement.classList.add(\"today\");\n                dayElement.setAttribute(\"aria-current\", \"date\");\n            }\n            if (dateIsEnabled) {\n                dayElement.tabIndex = -1;\n                if (isDateSelected(date)) {\n                    dayElement.classList.add(\"selected\");\n                    self.selectedDateElem = dayElement;\n                    if (self.config.mode === \"range\") {\n                        toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n                            compareDates(date, self.selectedDates[0], true) === 0);\n                        toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n                            compareDates(date, self.selectedDates[1], true) === 0);\n                        if (className === \"nextMonthDay\")\n                            dayElement.classList.add(\"inRange\");\n                    }\n                }\n            }\n            else {\n                dayElement.classList.add(\"flatpickr-disabled\");\n            }\n            if (self.config.mode === \"range\") {\n                if (isDateInRange(date) && !isDateSelected(date))\n                    dayElement.classList.add(\"inRange\");\n            }\n            if (self.weekNumbers &&\n                self.config.showMonths === 1 &&\n                className !== \"prevMonthDay\" &&\n                dayNumber % 7 === 1) {\n                self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n            }\n            triggerEvent(\"onDayCreate\", dayElement);\n            return dayElement;\n        }\n        function focusOnDayElem(targetNode) {\n            targetNode.focus();\n            if (self.config.mode === \"range\")\n                onMouseOver(targetNode);\n        }\n        function getFirstAvailableDay(delta) {\n            var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n            var endMonth = delta > 0 ? self.config.showMonths : -1;\n            for (var m = startMonth; m != endMonth; m += delta) {\n                var month = self.daysContainer.children[m];\n                var startIndex = delta > 0 ? 0 : month.children.length - 1;\n                var endIndex = delta > 0 ? month.children.length : -1;\n                for (var i = startIndex; i != endIndex; i += delta) {\n                    var c = month.children[i];\n                    if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n                        return c;\n                }\n            }\n            return undefined;\n        }\n        function getNextAvailableDay(current, delta) {\n            var givenMonth = current.className.indexOf(\"Month\") === -1\n                ? current.dateObj.getMonth()\n                : self.currentMonth;\n            var endMonth = delta > 0 ? self.config.showMonths : -1;\n            var loopDelta = delta > 0 ? 1 : -1;\n            for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n                var month = self.daysContainer.children[m];\n                var startIndex = givenMonth - self.currentMonth === m\n                    ? current.$i + delta\n                    : delta < 0\n                        ? month.children.length - 1\n                        : 0;\n                var numMonthDays = month.children.length;\n                for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n                    var c = month.children[i];\n                    if (c.className.indexOf(\"hidden\") === -1 &&\n                        isEnabled(c.dateObj) &&\n                        Math.abs(current.$i - i) >= Math.abs(delta))\n                        return focusOnDayElem(c);\n                }\n            }\n            self.changeMonth(loopDelta);\n            focusOnDay(getFirstAvailableDay(loopDelta), 0);\n            return undefined;\n        }\n        function focusOnDay(current, offset) {\n            var dayFocused = isInView(document.activeElement || document.body);\n            var startElem = current !== undefined\n                ? current\n                : dayFocused\n                    ? document.activeElement\n                    : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n                        ? self.selectedDateElem\n                        : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n                            ? self.todayDateElem\n                            : getFirstAvailableDay(offset > 0 ? 1 : -1);\n            if (startElem === undefined) {\n                self._input.focus();\n            }\n            else if (!dayFocused) {\n                focusOnDayElem(startElem);\n            }\n            else {\n                getNextAvailableDay(startElem, offset);\n            }\n        }\n        function buildMonthDays(year, month) {\n            var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n            var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n            var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n            var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n            // prepend days from the ending of previous month\n            for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n                days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n            }\n            // Start at 1 since there is no 0th day\n            for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n                days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n            }\n            // append days from the next month\n            for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n                (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n                days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n            }\n            //updateNavigationCurrentMonth();\n            var dayContainer = createElement(\"div\", \"dayContainer\");\n            dayContainer.appendChild(days);\n            return dayContainer;\n        }\n        function buildDays() {\n            if (self.daysContainer === undefined) {\n                return;\n            }\n            clearNode(self.daysContainer);\n            // TODO: week numbers for each month\n            if (self.weekNumbers)\n                clearNode(self.weekNumbers);\n            var frag = document.createDocumentFragment();\n            for (var i = 0; i < self.config.showMonths; i++) {\n                var d = new Date(self.currentYear, self.currentMonth, 1);\n                d.setMonth(self.currentMonth + i);\n                frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n            }\n            self.daysContainer.appendChild(frag);\n            self.days = self.daysContainer.firstChild;\n            if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n                onMouseOver();\n            }\n        }\n        function buildMonthSwitch() {\n            if (self.config.showMonths > 1 ||\n                self.config.monthSelectorType !== \"dropdown\")\n                return;\n            var shouldBuildMonth = function (month) {\n                if (self.config.minDate !== undefined &&\n                    self.currentYear === self.config.minDate.getFullYear() &&\n                    month < self.config.minDate.getMonth()) {\n                    return false;\n                }\n                return !(self.config.maxDate !== undefined &&\n                    self.currentYear === self.config.maxDate.getFullYear() &&\n                    month > self.config.maxDate.getMonth());\n            };\n            self.monthsDropdownContainer.tabIndex = -1;\n            self.monthsDropdownContainer.innerHTML = \"\";\n            for (var i = 0; i < 12; i++) {\n                if (!shouldBuildMonth(i))\n                    continue;\n                var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n                month.value = new Date(self.currentYear, i).getMonth().toString();\n                month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n                month.tabIndex = -1;\n                if (self.currentMonth === i) {\n                    month.selected = true;\n                }\n                self.monthsDropdownContainer.appendChild(month);\n            }\n        }\n        function buildMonth() {\n            var container = createElement(\"div\", \"flatpickr-month\");\n            var monthNavFragment = window.document.createDocumentFragment();\n            var monthElement;\n            if (self.config.showMonths > 1 ||\n                self.config.monthSelectorType === \"static\") {\n                monthElement = createElement(\"span\", \"cur-month\");\n            }\n            else {\n                self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n                self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n                bind(self.monthsDropdownContainer, \"change\", function (e) {\n                    var target = getEventTarget(e);\n                    var selectedMonth = parseInt(target.value, 10);\n                    self.changeMonth(selectedMonth - self.currentMonth);\n                    triggerEvent(\"onMonthChange\");\n                });\n                buildMonthSwitch();\n                monthElement = self.monthsDropdownContainer;\n            }\n            var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n            var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n            yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n            if (self.config.minDate) {\n                yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n            }\n            if (self.config.maxDate) {\n                yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n                yearElement.disabled =\n                    !!self.config.minDate &&\n                        self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n            }\n            var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n            currentMonth.appendChild(monthElement);\n            currentMonth.appendChild(yearInput);\n            monthNavFragment.appendChild(currentMonth);\n            container.appendChild(monthNavFragment);\n            return {\n                container: container,\n                yearElement: yearElement,\n                monthElement: monthElement,\n            };\n        }\n        function buildMonths() {\n            clearNode(self.monthNav);\n            self.monthNav.appendChild(self.prevMonthNav);\n            if (self.config.showMonths) {\n                self.yearElements = [];\n                self.monthElements = [];\n            }\n            for (var m = self.config.showMonths; m--;) {\n                var month = buildMonth();\n                self.yearElements.push(month.yearElement);\n                self.monthElements.push(month.monthElement);\n                self.monthNav.appendChild(month.container);\n            }\n            self.monthNav.appendChild(self.nextMonthNav);\n        }\n        function buildMonthNav() {\n            self.monthNav = createElement(\"div\", \"flatpickr-months\");\n            self.yearElements = [];\n            self.monthElements = [];\n            self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n            self.prevMonthNav.innerHTML = self.config.prevArrow;\n            self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n            self.nextMonthNav.innerHTML = self.config.nextArrow;\n            buildMonths();\n            Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n                get: function () { return self.__hidePrevMonthArrow; },\n                set: function (bool) {\n                    if (self.__hidePrevMonthArrow !== bool) {\n                        toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n                        self.__hidePrevMonthArrow = bool;\n                    }\n                },\n            });\n            Object.defineProperty(self, \"_hideNextMonthArrow\", {\n                get: function () { return self.__hideNextMonthArrow; },\n                set: function (bool) {\n                    if (self.__hideNextMonthArrow !== bool) {\n                        toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n                        self.__hideNextMonthArrow = bool;\n                    }\n                },\n            });\n            self.currentYearElement = self.yearElements[0];\n            updateNavigationCurrentMonth();\n            return self.monthNav;\n        }\n        function buildTime() {\n            self.calendarContainer.classList.add(\"hasTime\");\n            if (self.config.noCalendar)\n                self.calendarContainer.classList.add(\"noCalendar\");\n            self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n            self.timeContainer.tabIndex = -1;\n            var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n            var hourInput = createNumberInput(\"flatpickr-hour\", {\n                \"aria-label\": self.l10n.hourAriaLabel,\n            });\n            self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n            var minuteInput = createNumberInput(\"flatpickr-minute\", {\n                \"aria-label\": self.l10n.minuteAriaLabel,\n            });\n            self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n            self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n            self.hourElement.value = pad(self.latestSelectedDateObj\n                ? self.latestSelectedDateObj.getHours()\n                : self.config.time_24hr\n                    ? self.config.defaultHour\n                    : military2ampm(self.config.defaultHour));\n            self.minuteElement.value = pad(self.latestSelectedDateObj\n                ? self.latestSelectedDateObj.getMinutes()\n                : self.config.defaultMinute);\n            self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n            self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n            self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n            self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n            self.minuteElement.setAttribute(\"min\", \"0\");\n            self.minuteElement.setAttribute(\"max\", \"59\");\n            self.timeContainer.appendChild(hourInput);\n            self.timeContainer.appendChild(separator);\n            self.timeContainer.appendChild(minuteInput);\n            if (self.config.time_24hr)\n                self.timeContainer.classList.add(\"time24hr\");\n            if (self.config.enableSeconds) {\n                self.timeContainer.classList.add(\"hasSeconds\");\n                var secondInput = createNumberInput(\"flatpickr-second\");\n                self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n                self.secondElement.value = pad(self.latestSelectedDateObj\n                    ? self.latestSelectedDateObj.getSeconds()\n                    : self.config.defaultSeconds);\n                self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n                self.secondElement.setAttribute(\"min\", \"0\");\n                self.secondElement.setAttribute(\"max\", \"59\");\n                self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n                self.timeContainer.appendChild(secondInput);\n            }\n            if (!self.config.time_24hr) {\n                // add self.amPM if appropriate\n                self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n                    ? self.hourElement.value\n                    : self.config.defaultHour) > 11)]);\n                self.amPM.title = self.l10n.toggleTitle;\n                self.amPM.tabIndex = -1;\n                self.timeContainer.appendChild(self.amPM);\n            }\n            return self.timeContainer;\n        }\n        function buildWeekdays() {\n            if (!self.weekdayContainer)\n                self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n            else\n                clearNode(self.weekdayContainer);\n            for (var i = self.config.showMonths; i--;) {\n                var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n                self.weekdayContainer.appendChild(container);\n            }\n            updateWeekdays();\n            return self.weekdayContainer;\n        }\n        function updateWeekdays() {\n            if (!self.weekdayContainer) {\n                return;\n            }\n            var firstDayOfWeek = self.l10n.firstDayOfWeek;\n            var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n            if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n                weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n            }\n            for (var i = self.config.showMonths; i--;) {\n                self.weekdayContainer.children[i].innerHTML = \"\\n      <span class='flatpickr-weekday'>\\n        \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n      </span>\\n      \";\n            }\n        }\n        /* istanbul ignore next */\n        function buildWeeks() {\n            self.calendarContainer.classList.add(\"hasWeeks\");\n            var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n            weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n            var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n            weekWrapper.appendChild(weekNumbers);\n            return {\n                weekWrapper: weekWrapper,\n                weekNumbers: weekNumbers,\n            };\n        }\n        function changeMonth(value, isOffset) {\n            if (isOffset === void 0) { isOffset = true; }\n            var delta = isOffset ? value : value - self.currentMonth;\n            if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n                (delta > 0 && self._hideNextMonthArrow === true))\n                return;\n            self.currentMonth += delta;\n            if (self.currentMonth < 0 || self.currentMonth > 11) {\n                self.currentYear += self.currentMonth > 11 ? 1 : -1;\n                self.currentMonth = (self.currentMonth + 12) % 12;\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n            buildDays();\n            triggerEvent(\"onMonthChange\");\n            updateNavigationCurrentMonth();\n        }\n        function clear(triggerChangeEvent, toInitial) {\n            if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n            if (toInitial === void 0) { toInitial = true; }\n            self.input.value = \"\";\n            if (self.altInput !== undefined)\n                self.altInput.value = \"\";\n            if (self.mobileInput !== undefined)\n                self.mobileInput.value = \"\";\n            self.selectedDates = [];\n            self.latestSelectedDateObj = undefined;\n            if (toInitial === true) {\n                self.currentYear = self._initialDate.getFullYear();\n                self.currentMonth = self._initialDate.getMonth();\n            }\n            if (self.config.enableTime === true) {\n                var _a = getDefaultHours(), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n                setHours(hours, minutes, seconds);\n            }\n            self.redraw();\n            if (triggerChangeEvent)\n                // triggerChangeEvent is true (default) or an Event\n                triggerEvent(\"onChange\");\n        }\n        function close() {\n            self.isOpen = false;\n            if (!self.isMobile) {\n                if (self.calendarContainer !== undefined) {\n                    self.calendarContainer.classList.remove(\"open\");\n                }\n                if (self._input !== undefined) {\n                    self._input.classList.remove(\"active\");\n                }\n            }\n            triggerEvent(\"onClose\");\n        }\n        function destroy() {\n            if (self.config !== undefined)\n                triggerEvent(\"onDestroy\");\n            for (var i = self._handlers.length; i--;) {\n                var h = self._handlers[i];\n                h.element.removeEventListener(h.event, h.handler, h.options);\n            }\n            self._handlers = [];\n            if (self.mobileInput) {\n                if (self.mobileInput.parentNode)\n                    self.mobileInput.parentNode.removeChild(self.mobileInput);\n                self.mobileInput = undefined;\n            }\n            else if (self.calendarContainer && self.calendarContainer.parentNode) {\n                if (self.config.static && self.calendarContainer.parentNode) {\n                    var wrapper = self.calendarContainer.parentNode;\n                    wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n                    if (wrapper.parentNode) {\n                        while (wrapper.firstChild)\n                            wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n                        wrapper.parentNode.removeChild(wrapper);\n                    }\n                }\n                else\n                    self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n            }\n            if (self.altInput) {\n                self.input.type = \"text\";\n                if (self.altInput.parentNode)\n                    self.altInput.parentNode.removeChild(self.altInput);\n                delete self.altInput;\n            }\n            if (self.input) {\n                self.input.type = self.input._type;\n                self.input.classList.remove(\"flatpickr-input\");\n                self.input.removeAttribute(\"readonly\");\n            }\n            [\n                \"_showTimeInput\",\n                \"latestSelectedDateObj\",\n                \"_hideNextMonthArrow\",\n                \"_hidePrevMonthArrow\",\n                \"__hideNextMonthArrow\",\n                \"__hidePrevMonthArrow\",\n                \"isMobile\",\n                \"isOpen\",\n                \"selectedDateElem\",\n                \"minDateHasTime\",\n                \"maxDateHasTime\",\n                \"days\",\n                \"daysContainer\",\n                \"_input\",\n                \"_positionElement\",\n                \"innerContainer\",\n                \"rContainer\",\n                \"monthNav\",\n                \"todayDateElem\",\n                \"calendarContainer\",\n                \"weekdayContainer\",\n                \"prevMonthNav\",\n                \"nextMonthNav\",\n                \"monthsDropdownContainer\",\n                \"currentMonthElement\",\n                \"currentYearElement\",\n                \"navigationCurrentMonth\",\n                \"selectedDateElem\",\n                \"config\",\n            ].forEach(function (k) {\n                try {\n                    delete self[k];\n                }\n                catch (_) { }\n            });\n        }\n        function isCalendarElem(elem) {\n            if (self.config.appendTo && self.config.appendTo.contains(elem))\n                return true;\n            return self.calendarContainer.contains(elem);\n        }\n        function documentClick(e) {\n            if (self.isOpen && !self.config.inline) {\n                var eventTarget_1 = getEventTarget(e);\n                var isCalendarElement = isCalendarElem(eventTarget_1);\n                var isInput = eventTarget_1 === self.input ||\n                    eventTarget_1 === self.altInput ||\n                    self.element.contains(eventTarget_1) ||\n                    // web components\n                    // e.path is not present in all browsers. circumventing typechecks\n                    (e.path &&\n                        e.path.indexOf &&\n                        (~e.path.indexOf(self.input) ||\n                            ~e.path.indexOf(self.altInput)));\n                var lostFocus = e.type === \"blur\"\n                    ? isInput &&\n                        e.relatedTarget &&\n                        !isCalendarElem(e.relatedTarget)\n                    : !isInput &&\n                        !isCalendarElement &&\n                        !isCalendarElem(e.relatedTarget);\n                var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n                    return elem.contains(eventTarget_1);\n                });\n                if (lostFocus && isIgnored) {\n                    if (self.timeContainer !== undefined &&\n                        self.minuteElement !== undefined &&\n                        self.hourElement !== undefined &&\n                        self.input.value !== \"\" &&\n                        self.input.value !== undefined) {\n                        updateTime();\n                    }\n                    self.close();\n                    if (self.config &&\n                        self.config.mode === \"range\" &&\n                        self.selectedDates.length === 1) {\n                        self.clear(false);\n                        self.redraw();\n                    }\n                }\n            }\n        }\n        function changeYear(newYear) {\n            if (!newYear ||\n                (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n                (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n                return;\n            var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n            self.currentYear = newYearNum || self.currentYear;\n            if (self.config.maxDate &&\n                self.currentYear === self.config.maxDate.getFullYear()) {\n                self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n            }\n            else if (self.config.minDate &&\n                self.currentYear === self.config.minDate.getFullYear()) {\n                self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n            }\n            if (isNewYear) {\n                self.redraw();\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n        }\n        function isEnabled(date, timeless) {\n            if (timeless === void 0) { timeless = true; }\n            var dateToCheck = self.parseDate(date, undefined, timeless); // timeless\n            if ((self.config.minDate &&\n                dateToCheck &&\n                compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n                (self.config.maxDate &&\n                    dateToCheck &&\n                    compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n                return false;\n            if (self.config.enable.length === 0 && self.config.disable.length === 0)\n                return true;\n            if (dateToCheck === undefined)\n                return false;\n            var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;\n            for (var i = 0, d = void 0; i < array.length; i++) {\n                d = array[i];\n                if (typeof d === \"function\" &&\n                    d(dateToCheck) // disabled by function\n                )\n                    return bool;\n                else if (d instanceof Date &&\n                    dateToCheck !== undefined &&\n                    d.getTime() === dateToCheck.getTime())\n                    // disabled by date\n                    return bool;\n                else if (typeof d === \"string\" && dateToCheck !== undefined) {\n                    // disabled by date string\n                    var parsed = self.parseDate(d, undefined, true);\n                    return parsed && parsed.getTime() === dateToCheck.getTime()\n                        ? bool\n                        : !bool;\n                }\n                else if (\n                // disabled by range\n                typeof d === \"object\" &&\n                    dateToCheck !== undefined &&\n                    d.from &&\n                    d.to &&\n                    dateToCheck.getTime() >= d.from.getTime() &&\n                    dateToCheck.getTime() <= d.to.getTime())\n                    return bool;\n            }\n            return !bool;\n        }\n        function isInView(elem) {\n            if (self.daysContainer !== undefined)\n                return (elem.className.indexOf(\"hidden\") === -1 &&\n                    elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n                    self.daysContainer.contains(elem));\n            return false;\n        }\n        function onBlur(e) {\n            var isInput = e.target === self._input;\n            if (isInput &&\n                !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n                self.setDate(self._input.value, true, e.target === self.altInput\n                    ? self.config.altFormat\n                    : self.config.dateFormat);\n            }\n        }\n        function onKeyDown(e) {\n            // e.key                      e.keyCode\n            // \"Backspace\"                        8\n            // \"Tab\"                              9\n            // \"Enter\"                           13\n            // \"Escape\"     (IE \"Esc\")           27\n            // \"ArrowLeft\"  (IE \"Left\")          37\n            // \"ArrowUp\"    (IE \"Up\")            38\n            // \"ArrowRight\" (IE \"Right\")         39\n            // \"ArrowDown\"  (IE \"Down\")          40\n            // \"Delete\"     (IE \"Del\")           46\n            var eventTarget = getEventTarget(e);\n            var isInput = self.config.wrap\n                ? element.contains(eventTarget)\n                : eventTarget === self._input;\n            var allowInput = self.config.allowInput;\n            var allowKeydown = self.isOpen && (!allowInput || !isInput);\n            var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n            if (e.keyCode === 13 && isInput) {\n                if (allowInput) {\n                    self.setDate(self._input.value, true, eventTarget === self.altInput\n                        ? self.config.altFormat\n                        : self.config.dateFormat);\n                    return eventTarget.blur();\n                }\n                else {\n                    self.open();\n                }\n            }\n            else if (isCalendarElem(eventTarget) ||\n                allowKeydown ||\n                allowInlineKeydown) {\n                var isTimeObj = !!self.timeContainer &&\n                    self.timeContainer.contains(eventTarget);\n                switch (e.keyCode) {\n                    case 13:\n                        if (isTimeObj) {\n                            e.preventDefault();\n                            updateTime();\n                            focusAndClose();\n                        }\n                        else\n                            selectDate(e);\n                        break;\n                    case 27: // escape\n                        e.preventDefault();\n                        focusAndClose();\n                        break;\n                    case 8:\n                    case 46:\n                        if (isInput && !self.config.allowInput) {\n                            e.preventDefault();\n                            self.clear();\n                        }\n                        break;\n                    case 37:\n                    case 39:\n                        if (!isTimeObj && !isInput) {\n                            e.preventDefault();\n                            if (self.daysContainer !== undefined &&\n                                (allowInput === false ||\n                                    (document.activeElement && isInView(document.activeElement)))) {\n                                var delta_1 = e.keyCode === 39 ? 1 : -1;\n                                if (!e.ctrlKey)\n                                    focusOnDay(undefined, delta_1);\n                                else {\n                                    e.stopPropagation();\n                                    changeMonth(delta_1);\n                                    focusOnDay(getFirstAvailableDay(1), 0);\n                                }\n                            }\n                        }\n                        else if (self.hourElement)\n                            self.hourElement.focus();\n                        break;\n                    case 38:\n                    case 40:\n                        e.preventDefault();\n                        var delta = e.keyCode === 40 ? 1 : -1;\n                        if ((self.daysContainer &&\n                            eventTarget.$i !== undefined) ||\n                            eventTarget === self.input ||\n                            eventTarget === self.altInput) {\n                            if (e.ctrlKey) {\n                                e.stopPropagation();\n                                changeYear(self.currentYear - delta);\n                                focusOnDay(getFirstAvailableDay(1), 0);\n                            }\n                            else if (!isTimeObj)\n                                focusOnDay(undefined, delta * 7);\n                        }\n                        else if (eventTarget === self.currentYearElement) {\n                            changeYear(self.currentYear - delta);\n                        }\n                        else if (self.config.enableTime) {\n                            if (!isTimeObj && self.hourElement)\n                                self.hourElement.focus();\n                            updateTime(e);\n                            self._debouncedChange();\n                        }\n                        break;\n                    case 9:\n                        if (isTimeObj) {\n                            var elems = [\n                                self.hourElement,\n                                self.minuteElement,\n                                self.secondElement,\n                                self.amPM,\n                            ]\n                                .concat(self.pluginElements)\n                                .filter(function (x) { return x; });\n                            var i = elems.indexOf(eventTarget);\n                            if (i !== -1) {\n                                var target = elems[i + (e.shiftKey ? -1 : 1)];\n                                e.preventDefault();\n                                (target || self._input).focus();\n                            }\n                        }\n                        else if (!self.config.noCalendar &&\n                            self.daysContainer &&\n                            self.daysContainer.contains(eventTarget) &&\n                            e.shiftKey) {\n                            e.preventDefault();\n                            self._input.focus();\n                        }\n                        break;\n                }\n            }\n            if (self.amPM !== undefined && eventTarget === self.amPM) {\n                switch (e.key) {\n                    case self.l10n.amPM[0].charAt(0):\n                    case self.l10n.amPM[0].charAt(0).toLowerCase():\n                        self.amPM.textContent = self.l10n.amPM[0];\n                        setHoursFromInputs();\n                        updateValue();\n                        break;\n                    case self.l10n.amPM[1].charAt(0):\n                    case self.l10n.amPM[1].charAt(0).toLowerCase():\n                        self.amPM.textContent = self.l10n.amPM[1];\n                        setHoursFromInputs();\n                        updateValue();\n                        break;\n                }\n            }\n            if (isInput || isCalendarElem(eventTarget)) {\n                triggerEvent(\"onKeyDown\", e);\n            }\n        }\n        function onMouseOver(elem) {\n            if (self.selectedDates.length !== 1 ||\n                (elem &&\n                    (!elem.classList.contains(\"flatpickr-day\") ||\n                        elem.classList.contains(\"flatpickr-disabled\"))))\n                return;\n            var hoverDate = elem\n                ? elem.dateObj.getTime()\n                : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n            var containsDisabled = false;\n            var minRange = 0, maxRange = 0;\n            for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n                if (!isEnabled(new Date(t), true)) {\n                    containsDisabled =\n                        containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n                    if (t < initialDate && (!minRange || t > minRange))\n                        minRange = t;\n                    else if (t > initialDate && (!maxRange || t < maxRange))\n                        maxRange = t;\n                }\n            }\n            for (var m = 0; m < self.config.showMonths; m++) {\n                var month = self.daysContainer.children[m];\n                var _loop_1 = function (i, l) {\n                    var dayElem = month.children[i], date = dayElem.dateObj;\n                    var timestamp = date.getTime();\n                    var outOfRange = (minRange > 0 && timestamp < minRange) ||\n                        (maxRange > 0 && timestamp > maxRange);\n                    if (outOfRange) {\n                        dayElem.classList.add(\"notAllowed\");\n                        [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n                            dayElem.classList.remove(c);\n                        });\n                        return \"continue\";\n                    }\n                    else if (containsDisabled && !outOfRange)\n                        return \"continue\";\n                    [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n                        dayElem.classList.remove(c);\n                    });\n                    if (elem !== undefined) {\n                        elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n                            ? \"startRange\"\n                            : \"endRange\");\n                        if (initialDate < hoverDate && timestamp === initialDate)\n                            dayElem.classList.add(\"startRange\");\n                        else if (initialDate > hoverDate && timestamp === initialDate)\n                            dayElem.classList.add(\"endRange\");\n                        if (timestamp >= minRange &&\n                            (maxRange === 0 || timestamp <= maxRange) &&\n                            isBetween(timestamp, initialDate, hoverDate))\n                            dayElem.classList.add(\"inRange\");\n                    }\n                };\n                for (var i = 0, l = month.children.length; i < l; i++) {\n                    _loop_1(i, l);\n                }\n            }\n        }\n        function onResize() {\n            if (self.isOpen && !self.config.static && !self.config.inline)\n                positionCalendar();\n        }\n        function open(e, positionElement) {\n            if (positionElement === void 0) { positionElement = self._positionElement; }\n            if (self.isMobile === true) {\n                if (e) {\n                    e.preventDefault();\n                    var eventTarget = getEventTarget(e);\n                    eventTarget && eventTarget.blur();\n                }\n                if (self.mobileInput !== undefined) {\n                    self.mobileInput.focus();\n                    self.mobileInput.click();\n                }\n                triggerEvent(\"onOpen\");\n                return;\n            }\n            if (self._input.disabled || self.config.inline)\n                return;\n            var wasOpen = self.isOpen;\n            self.isOpen = true;\n            if (!wasOpen) {\n                self.calendarContainer.classList.add(\"open\");\n                self._input.classList.add(\"active\");\n                triggerEvent(\"onOpen\");\n                positionCalendar(positionElement);\n            }\n            if (self.config.enableTime === true && self.config.noCalendar === true) {\n                if (self.config.allowInput === false &&\n                    (e === undefined ||\n                        !self.timeContainer.contains(e.relatedTarget))) {\n                    setTimeout(function () { return self.hourElement.select(); }, 50);\n                }\n            }\n        }\n        function minMaxDateSetter(type) {\n            return function (date) {\n                var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n                var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n                if (dateObj !== undefined) {\n                    self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n                        dateObj.getHours() > 0 ||\n                            dateObj.getMinutes() > 0 ||\n                            dateObj.getSeconds() > 0;\n                }\n                if (self.selectedDates) {\n                    self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n                    if (!self.selectedDates.length && type === \"min\")\n                        setHoursFromDate(dateObj);\n                    updateValue();\n                }\n                if (self.daysContainer) {\n                    redraw();\n                    if (dateObj !== undefined)\n                        self.currentYearElement[type] = dateObj.getFullYear().toString();\n                    else\n                        self.currentYearElement.removeAttribute(type);\n                    self.currentYearElement.disabled =\n                        !!inverseDateObj &&\n                            dateObj !== undefined &&\n                            inverseDateObj.getFullYear() === dateObj.getFullYear();\n                }\n            };\n        }\n        function parseConfig() {\n            var boolOpts = [\n                \"wrap\",\n                \"weekNumbers\",\n                \"allowInput\",\n                \"allowInvalidPreload\",\n                \"clickOpens\",\n                \"time_24hr\",\n                \"enableTime\",\n                \"noCalendar\",\n                \"altInput\",\n                \"shorthandCurrentMonth\",\n                \"inline\",\n                \"static\",\n                \"enableSeconds\",\n                \"disableMobile\",\n            ];\n            var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n            var formats = {};\n            self.config.parseDate = userConfig.parseDate;\n            self.config.formatDate = userConfig.formatDate;\n            Object.defineProperty(self.config, \"enable\", {\n                get: function () { return self.config._enable; },\n                set: function (dates) {\n                    self.config._enable = parseDateRules(dates);\n                },\n            });\n            Object.defineProperty(self.config, \"disable\", {\n                get: function () { return self.config._disable; },\n                set: function (dates) {\n                    self.config._disable = parseDateRules(dates);\n                },\n            });\n            var timeMode = userConfig.mode === \"time\";\n            if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n                var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;\n                formats.dateFormat =\n                    userConfig.noCalendar || timeMode\n                        ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n                        : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n            }\n            if (userConfig.altInput &&\n                (userConfig.enableTime || timeMode) &&\n                !userConfig.altFormat) {\n                var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;\n                formats.altFormat =\n                    userConfig.noCalendar || timeMode\n                        ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n                        : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n            }\n            Object.defineProperty(self.config, \"minDate\", {\n                get: function () { return self.config._minDate; },\n                set: minMaxDateSetter(\"min\"),\n            });\n            Object.defineProperty(self.config, \"maxDate\", {\n                get: function () { return self.config._maxDate; },\n                set: minMaxDateSetter(\"max\"),\n            });\n            var minMaxTimeSetter = function (type) { return function (val) {\n                self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n            }; };\n            Object.defineProperty(self.config, \"minTime\", {\n                get: function () { return self.config._minTime; },\n                set: minMaxTimeSetter(\"min\"),\n            });\n            Object.defineProperty(self.config, \"maxTime\", {\n                get: function () { return self.config._maxTime; },\n                set: minMaxTimeSetter(\"max\"),\n            });\n            if (userConfig.mode === \"time\") {\n                self.config.noCalendar = true;\n                self.config.enableTime = true;\n            }\n            Object.assign(self.config, formats, userConfig);\n            for (var i = 0; i < boolOpts.length; i++)\n                // https://github.com/microsoft/TypeScript/issues/31663\n                self.config[boolOpts[i]] =\n                    self.config[boolOpts[i]] === true ||\n                        self.config[boolOpts[i]] === \"true\";\n            HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n                self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n            });\n            self.isMobile =\n                !self.config.disableMobile &&\n                    !self.config.inline &&\n                    self.config.mode === \"single\" &&\n                    !self.config.disable.length &&\n                    !self.config.enable.length &&\n                    !self.config.weekNumbers &&\n                    /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n            for (var i = 0; i < self.config.plugins.length; i++) {\n                var pluginConf = self.config.plugins[i](self) || {};\n                for (var key in pluginConf) {\n                    if (HOOKS.indexOf(key) > -1) {\n                        self.config[key] = arrayify(pluginConf[key])\n                            .map(bindToInstance)\n                            .concat(self.config[key]);\n                    }\n                    else if (typeof userConfig[key] === \"undefined\")\n                        self.config[key] = pluginConf[key];\n                }\n            }\n            if (!userConfig.altInputClass) {\n                self.config.altInputClass =\n                    getInputElem().className + \" \" + self.config.altInputClass;\n            }\n            triggerEvent(\"onParseConfig\");\n        }\n        function getInputElem() {\n            return self.config.wrap\n                ? element.querySelector(\"[data-input]\")\n                : element;\n        }\n        function setupLocale() {\n            if (typeof self.config.locale !== \"object\" &&\n                typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n                self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n            self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n                ? self.config.locale\n                : self.config.locale !== \"default\"\n                    ? flatpickr.l10ns[self.config.locale]\n                    : undefined));\n            tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n            var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n            if (userConfig.time_24hr === undefined &&\n                flatpickr.defaultConfig.time_24hr === undefined) {\n                self.config.time_24hr = self.l10n.time_24hr;\n            }\n            self.formatDate = createDateFormatter(self);\n            self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n        }\n        function positionCalendar(customPositionElement) {\n            if (self.calendarContainer === undefined)\n                return;\n            triggerEvent(\"onPreCalendarPosition\");\n            var positionElement = customPositionElement || self._positionElement;\n            var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n                (configPosVertical !== \"below\" &&\n                    distanceFromBottom < calendarHeight &&\n                    inputBounds.top > calendarHeight);\n            var top = window.pageYOffset +\n                inputBounds.top +\n                (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n            toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n            toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n            if (self.config.inline)\n                return;\n            var left = window.pageXOffset + inputBounds.left;\n            var isCenter = false;\n            var isRight = false;\n            if (configPosHorizontal === \"center\") {\n                left -= (calendarWidth - inputBounds.width) / 2;\n                isCenter = true;\n            }\n            else if (configPosHorizontal === \"right\") {\n                left -= calendarWidth - inputBounds.width;\n                isRight = true;\n            }\n            toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n            toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n            toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n            var right = window.document.body.offsetWidth -\n                (window.pageXOffset + inputBounds.right);\n            var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n            var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n            toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n            if (self.config.static)\n                return;\n            self.calendarContainer.style.top = top + \"px\";\n            if (!rightMost) {\n                self.calendarContainer.style.left = left + \"px\";\n                self.calendarContainer.style.right = \"auto\";\n            }\n            else if (!centerMost) {\n                self.calendarContainer.style.left = \"auto\";\n                self.calendarContainer.style.right = right + \"px\";\n            }\n            else {\n                var doc = getDocumentStyleSheet();\n                // some testing environments don't have css support\n                if (doc === undefined)\n                    return;\n                var bodyWidth = window.document.body.offsetWidth;\n                var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n                var centerBefore = \".flatpickr-calendar.centerMost:before\";\n                var centerAfter = \".flatpickr-calendar.centerMost:after\";\n                var centerIndex = doc.cssRules.length;\n                var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n                toggleClass(self.calendarContainer, \"rightMost\", false);\n                toggleClass(self.calendarContainer, \"centerMost\", true);\n                doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n                self.calendarContainer.style.left = centerLeft + \"px\";\n                self.calendarContainer.style.right = \"auto\";\n            }\n        }\n        function getDocumentStyleSheet() {\n            var editableSheet = null;\n            for (var i = 0; i < document.styleSheets.length; i++) {\n                var sheet = document.styleSheets[i];\n                try {\n                    sheet.cssRules;\n                }\n                catch (err) {\n                    continue;\n                }\n                editableSheet = sheet;\n                break;\n            }\n            return editableSheet != null ? editableSheet : createStyleSheet();\n        }\n        function createStyleSheet() {\n            var style = document.createElement(\"style\");\n            document.head.appendChild(style);\n            return style.sheet;\n        }\n        function redraw() {\n            if (self.config.noCalendar || self.isMobile)\n                return;\n            buildMonthSwitch();\n            updateNavigationCurrentMonth();\n            buildDays();\n        }\n        function focusAndClose() {\n            self._input.focus();\n            if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n                navigator.msMaxTouchPoints !== undefined) {\n                // hack - bugs in the way IE handles focus keeps the calendar open\n                setTimeout(self.close, 0);\n            }\n            else {\n                self.close();\n            }\n        }\n        function selectDate(e) {\n            e.preventDefault();\n            e.stopPropagation();\n            var isSelectable = function (day) {\n                return day.classList &&\n                    day.classList.contains(\"flatpickr-day\") &&\n                    !day.classList.contains(\"flatpickr-disabled\") &&\n                    !day.classList.contains(\"notAllowed\");\n            };\n            var t = findParent(getEventTarget(e), isSelectable);\n            if (t === undefined)\n                return;\n            var target = t;\n            var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n            var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n                selectedDate.getMonth() >\n                    self.currentMonth + self.config.showMonths - 1) &&\n                self.config.mode !== \"range\";\n            self.selectedDateElem = target;\n            if (self.config.mode === \"single\")\n                self.selectedDates = [selectedDate];\n            else if (self.config.mode === \"multiple\") {\n                var selectedIndex = isDateSelected(selectedDate);\n                if (selectedIndex)\n                    self.selectedDates.splice(parseInt(selectedIndex), 1);\n                else\n                    self.selectedDates.push(selectedDate);\n            }\n            else if (self.config.mode === \"range\") {\n                if (self.selectedDates.length === 2) {\n                    self.clear(false, false);\n                }\n                self.latestSelectedDateObj = selectedDate;\n                self.selectedDates.push(selectedDate);\n                // unless selecting same date twice, sort ascendingly\n                if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n                    self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n            }\n            setHoursFromInputs();\n            if (shouldChangeMonth) {\n                var isNewYear = self.currentYear !== selectedDate.getFullYear();\n                self.currentYear = selectedDate.getFullYear();\n                self.currentMonth = selectedDate.getMonth();\n                if (isNewYear) {\n                    triggerEvent(\"onYearChange\");\n                    buildMonthSwitch();\n                }\n                triggerEvent(\"onMonthChange\");\n            }\n            updateNavigationCurrentMonth();\n            buildDays();\n            updateValue();\n            // maintain focus\n            if (!shouldChangeMonth &&\n                self.config.mode !== \"range\" &&\n                self.config.showMonths === 1)\n                focusOnDayElem(target);\n            else if (self.selectedDateElem !== undefined &&\n                self.hourElement === undefined) {\n                self.selectedDateElem && self.selectedDateElem.focus();\n            }\n            if (self.hourElement !== undefined)\n                self.hourElement !== undefined && self.hourElement.focus();\n            if (self.config.closeOnSelect) {\n                var single = self.config.mode === \"single\" && !self.config.enableTime;\n                var range = self.config.mode === \"range\" &&\n                    self.selectedDates.length === 2 &&\n                    !self.config.enableTime;\n                if (single || range) {\n                    focusAndClose();\n                }\n            }\n            triggerChange();\n        }\n        var CALLBACKS = {\n            locale: [setupLocale, updateWeekdays],\n            showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n            minDate: [jumpToDate],\n            maxDate: [jumpToDate],\n        };\n        function set(option, value) {\n            if (option !== null && typeof option === \"object\") {\n                Object.assign(self.config, option);\n                for (var key in option) {\n                    if (CALLBACKS[key] !== undefined)\n                        CALLBACKS[key].forEach(function (x) { return x(); });\n                }\n            }\n            else {\n                self.config[option] = value;\n                if (CALLBACKS[option] !== undefined)\n                    CALLBACKS[option].forEach(function (x) { return x(); });\n                else if (HOOKS.indexOf(option) > -1)\n                    self.config[option] = arrayify(value);\n            }\n            self.redraw();\n            updateValue(true);\n        }\n        function setSelectedDate(inputDate, format) {\n            var dates = [];\n            if (inputDate instanceof Array)\n                dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n            else if (inputDate instanceof Date || typeof inputDate === \"number\")\n                dates = [self.parseDate(inputDate, format)];\n            else if (typeof inputDate === \"string\") {\n                switch (self.config.mode) {\n                    case \"single\":\n                    case \"time\":\n                        dates = [self.parseDate(inputDate, format)];\n                        break;\n                    case \"multiple\":\n                        dates = inputDate\n                            .split(self.config.conjunction)\n                            .map(function (date) { return self.parseDate(date, format); });\n                        break;\n                    case \"range\":\n                        dates = inputDate\n                            .split(self.l10n.rangeSeparator)\n                            .map(function (date) { return self.parseDate(date, format); });\n                        break;\n                }\n            }\n            else\n                self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n            self.selectedDates = (self.config.allowInvalidPreload\n                ? dates\n                : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n            if (self.config.mode === \"range\")\n                self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n        }\n        function setDate(date, triggerChange, format) {\n            if (triggerChange === void 0) { triggerChange = false; }\n            if (format === void 0) { format = self.config.dateFormat; }\n            if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n                return self.clear(triggerChange);\n            setSelectedDate(date, format);\n            self.latestSelectedDateObj =\n                self.selectedDates[self.selectedDates.length - 1];\n            self.redraw();\n            jumpToDate(undefined, triggerChange);\n            setHoursFromDate();\n            if (self.selectedDates.length === 0) {\n                self.clear(false);\n            }\n            updateValue(triggerChange);\n            if (triggerChange)\n                triggerEvent(\"onChange\");\n        }\n        function parseDateRules(arr) {\n            return arr\n                .slice()\n                .map(function (rule) {\n                if (typeof rule === \"string\" ||\n                    typeof rule === \"number\" ||\n                    rule instanceof Date) {\n                    return self.parseDate(rule, undefined, true);\n                }\n                else if (rule &&\n                    typeof rule === \"object\" &&\n                    rule.from &&\n                    rule.to)\n                    return {\n                        from: self.parseDate(rule.from, undefined),\n                        to: self.parseDate(rule.to, undefined),\n                    };\n                return rule;\n            })\n                .filter(function (x) { return x; }); // remove falsy values\n        }\n        function setupDates() {\n            self.selectedDates = [];\n            self.now = self.parseDate(self.config.now) || new Date();\n            // Workaround IE11 setting placeholder as the input's value\n            var preloadedDate = self.config.defaultDate ||\n                ((self.input.nodeName === \"INPUT\" ||\n                    self.input.nodeName === \"TEXTAREA\") &&\n                    self.input.placeholder &&\n                    self.input.value === self.input.placeholder\n                    ? null\n                    : self.input.value);\n            if (preloadedDate)\n                setSelectedDate(preloadedDate, self.config.dateFormat);\n            self._initialDate =\n                self.selectedDates.length > 0\n                    ? self.selectedDates[0]\n                    : self.config.minDate &&\n                        self.config.minDate.getTime() > self.now.getTime()\n                        ? self.config.minDate\n                        : self.config.maxDate &&\n                            self.config.maxDate.getTime() < self.now.getTime()\n                            ? self.config.maxDate\n                            : self.now;\n            self.currentYear = self._initialDate.getFullYear();\n            self.currentMonth = self._initialDate.getMonth();\n            if (self.selectedDates.length > 0)\n                self.latestSelectedDateObj = self.selectedDates[0];\n            if (self.config.minTime !== undefined)\n                self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n            if (self.config.maxTime !== undefined)\n                self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n            self.minDateHasTime =\n                !!self.config.minDate &&\n                    (self.config.minDate.getHours() > 0 ||\n                        self.config.minDate.getMinutes() > 0 ||\n                        self.config.minDate.getSeconds() > 0);\n            self.maxDateHasTime =\n                !!self.config.maxDate &&\n                    (self.config.maxDate.getHours() > 0 ||\n                        self.config.maxDate.getMinutes() > 0 ||\n                        self.config.maxDate.getSeconds() > 0);\n        }\n        function setupInputs() {\n            self.input = getInputElem();\n            /* istanbul ignore next */\n            if (!self.input) {\n                self.config.errorHandler(new Error(\"Invalid input element specified\"));\n                return;\n            }\n            // hack: store previous type to restore it after destroy()\n            self.input._type = self.input.type;\n            self.input.type = \"text\";\n            self.input.classList.add(\"flatpickr-input\");\n            self._input = self.input;\n            if (self.config.altInput) {\n                // replicate self.element\n                self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n                self._input = self.altInput;\n                self.altInput.placeholder = self.input.placeholder;\n                self.altInput.disabled = self.input.disabled;\n                self.altInput.required = self.input.required;\n                self.altInput.tabIndex = self.input.tabIndex;\n                self.altInput.type = \"text\";\n                self.input.setAttribute(\"type\", \"hidden\");\n                if (!self.config.static && self.input.parentNode)\n                    self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n            }\n            if (!self.config.allowInput)\n                self._input.setAttribute(\"readonly\", \"readonly\");\n            self._positionElement = self.config.positionElement || self._input;\n        }\n        function setupMobile() {\n            var inputType = self.config.enableTime\n                ? self.config.noCalendar\n                    ? \"time\"\n                    : \"datetime-local\"\n                : \"date\";\n            self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n            self.mobileInput.tabIndex = 1;\n            self.mobileInput.type = inputType;\n            self.mobileInput.disabled = self.input.disabled;\n            self.mobileInput.required = self.input.required;\n            self.mobileInput.placeholder = self.input.placeholder;\n            self.mobileFormatStr =\n                inputType === \"datetime-local\"\n                    ? \"Y-m-d\\\\TH:i:S\"\n                    : inputType === \"date\"\n                        ? \"Y-m-d\"\n                        : \"H:i:S\";\n            if (self.selectedDates.length > 0) {\n                self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n            }\n            if (self.config.minDate)\n                self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n            if (self.config.maxDate)\n                self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n            if (self.input.getAttribute(\"step\"))\n                self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n            self.input.type = \"hidden\";\n            if (self.altInput !== undefined)\n                self.altInput.type = \"hidden\";\n            try {\n                if (self.input.parentNode)\n                    self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n            }\n            catch (_a) { }\n            bind(self.mobileInput, \"change\", function (e) {\n                self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n                triggerEvent(\"onChange\");\n                triggerEvent(\"onClose\");\n            });\n        }\n        function toggle(e) {\n            if (self.isOpen === true)\n                return self.close();\n            self.open(e);\n        }\n        function triggerEvent(event, data) {\n            // If the instance has been destroyed already, all hooks have been removed\n            if (self.config === undefined)\n                return;\n            var hooks = self.config[event];\n            if (hooks !== undefined && hooks.length > 0) {\n                for (var i = 0; hooks[i] && i < hooks.length; i++)\n                    hooks[i](self.selectedDates, self.input.value, self, data);\n            }\n            if (event === \"onChange\") {\n                self.input.dispatchEvent(createEvent(\"change\"));\n                // many front-end frameworks bind to the input event\n                self.input.dispatchEvent(createEvent(\"input\"));\n            }\n        }\n        function createEvent(name) {\n            var e = document.createEvent(\"Event\");\n            e.initEvent(name, true, true);\n            return e;\n        }\n        function isDateSelected(date) {\n            for (var i = 0; i < self.selectedDates.length; i++) {\n                if (compareDates(self.selectedDates[i], date) === 0)\n                    return \"\" + i;\n            }\n            return false;\n        }\n        function isDateInRange(date) {\n            if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n                return false;\n            return (compareDates(date, self.selectedDates[0]) >= 0 &&\n                compareDates(date, self.selectedDates[1]) <= 0);\n        }\n        function updateNavigationCurrentMonth() {\n            if (self.config.noCalendar || self.isMobile || !self.monthNav)\n                return;\n            self.yearElements.forEach(function (yearElement, i) {\n                var d = new Date(self.currentYear, self.currentMonth, 1);\n                d.setMonth(self.currentMonth + i);\n                if (self.config.showMonths > 1 ||\n                    self.config.monthSelectorType === \"static\") {\n                    self.monthElements[i].textContent =\n                        monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n                }\n                else {\n                    self.monthsDropdownContainer.value = d.getMonth().toString();\n                }\n                yearElement.value = d.getFullYear().toString();\n            });\n            self._hidePrevMonthArrow =\n                self.config.minDate !== undefined &&\n                    (self.currentYear === self.config.minDate.getFullYear()\n                        ? self.currentMonth <= self.config.minDate.getMonth()\n                        : self.currentYear < self.config.minDate.getFullYear());\n            self._hideNextMonthArrow =\n                self.config.maxDate !== undefined &&\n                    (self.currentYear === self.config.maxDate.getFullYear()\n                        ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n                        : self.currentYear > self.config.maxDate.getFullYear());\n        }\n        function getDateStr(format) {\n            return self.selectedDates\n                .map(function (dObj) { return self.formatDate(dObj, format); })\n                .filter(function (d, i, arr) {\n                return self.config.mode !== \"range\" ||\n                    self.config.enableTime ||\n                    arr.indexOf(d) === i;\n            })\n                .join(self.config.mode !== \"range\"\n                ? self.config.conjunction\n                : self.l10n.rangeSeparator);\n        }\n        /**\n         * Updates the values of inputs associated with the calendar\n         */\n        function updateValue(triggerChange) {\n            if (triggerChange === void 0) { triggerChange = true; }\n            if (self.mobileInput !== undefined && self.mobileFormatStr) {\n                self.mobileInput.value =\n                    self.latestSelectedDateObj !== undefined\n                        ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n                        : \"\";\n            }\n            self.input.value = getDateStr(self.config.dateFormat);\n            if (self.altInput !== undefined) {\n                self.altInput.value = getDateStr(self.config.altFormat);\n            }\n            if (triggerChange !== false)\n                triggerEvent(\"onValueUpdate\");\n        }\n        function onMonthNavClick(e) {\n            var eventTarget = getEventTarget(e);\n            var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n            var isNextMonth = self.nextMonthNav.contains(eventTarget);\n            if (isPrevMonth || isNextMonth) {\n                changeMonth(isPrevMonth ? -1 : 1);\n            }\n            else if (self.yearElements.indexOf(eventTarget) >= 0) {\n                eventTarget.select();\n            }\n            else if (eventTarget.classList.contains(\"arrowUp\")) {\n                self.changeYear(self.currentYear + 1);\n            }\n            else if (eventTarget.classList.contains(\"arrowDown\")) {\n                self.changeYear(self.currentYear - 1);\n            }\n        }\n        function timeWrapper(e) {\n            e.preventDefault();\n            var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n            if (self.amPM !== undefined && eventTarget === self.amPM) {\n                self.amPM.textContent =\n                    self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n            }\n            var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n                (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n            var newValue = curValue + step * delta;\n            if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n                var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n                if (newValue < min) {\n                    newValue =\n                        max +\n                            newValue +\n                            int(!isHourElem) +\n                            (int(isHourElem) && int(!self.amPM));\n                    if (isMinuteElem)\n                        incrementNumInput(undefined, -1, self.hourElement);\n                }\n                else if (newValue > max) {\n                    newValue =\n                        input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n                    if (isMinuteElem)\n                        incrementNumInput(undefined, 1, self.hourElement);\n                }\n                if (self.amPM &&\n                    isHourElem &&\n                    (step === 1\n                        ? newValue + curValue === 23\n                        : Math.abs(newValue - curValue) > step)) {\n                    self.amPM.textContent =\n                        self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n                }\n                input.value = pad(newValue);\n            }\n        }\n        init();\n        return self;\n    }\n    /* istanbul ignore next */\n    function _flatpickr(nodeList, config) {\n        // static list\n        var nodes = Array.prototype.slice\n            .call(nodeList)\n            .filter(function (x) { return x instanceof HTMLElement; });\n        var instances = [];\n        for (var i = 0; i < nodes.length; i++) {\n            var node = nodes[i];\n            try {\n                if (node.getAttribute(\"data-fp-omit\") !== null)\n                    continue;\n                if (node._flatpickr !== undefined) {\n                    node._flatpickr.destroy();\n                    node._flatpickr = undefined;\n                }\n                node._flatpickr = FlatpickrInstance(node, config || {});\n                instances.push(node._flatpickr);\n            }\n            catch (e) {\n                console.error(e);\n            }\n        }\n        return instances.length === 1 ? instances[0] : instances;\n    }\n    /* istanbul ignore next */\n    if (typeof HTMLElement !== \"undefined\" &&\n        typeof HTMLCollection !== \"undefined\" &&\n        typeof NodeList !== \"undefined\") {\n        // browser env\n        HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n            return _flatpickr(this, config);\n        };\n        HTMLElement.prototype.flatpickr = function (config) {\n            return _flatpickr([this], config);\n        };\n    }\n    /* istanbul ignore next */\n    var flatpickr = function (selector, config) {\n        if (typeof selector === \"string\") {\n            return _flatpickr(window.document.querySelectorAll(selector), config);\n        }\n        else if (selector instanceof Node) {\n            return _flatpickr([selector], config);\n        }\n        else {\n            return _flatpickr(selector, config);\n        }\n    };\n    /* istanbul ignore next */\n    flatpickr.defaultConfig = {};\n    flatpickr.l10ns = {\n        en: __assign({}, english),\n        default: __assign({}, english),\n    };\n    flatpickr.localize = function (l10n) {\n        flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n    };\n    flatpickr.setDefaults = function (config) {\n        flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n    };\n    flatpickr.parseDate = createDateParser({});\n    flatpickr.formatDate = createDateFormatter({});\n    flatpickr.compareDates = compareDates;\n    /* istanbul ignore next */\n    if (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n        jQuery.fn.flatpickr = function (config) {\n            return _flatpickr(this, config);\n        };\n    }\n    // eslint-disable-next-line @typescript-eslint/camelcase\n    Date.prototype.fp_incr = function (days) {\n        return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n    };\n    if (typeof window !== \"undefined\") {\n        window.flatpickr = flatpickr;\n    }\n\n    return flatpickr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/flatpickr/dist/flatpickr.js?");

/***/ }),

/***/ "./node_modules/flatpickr/dist/themes/light.css":
/*!******************************************************!*\
  !*** ./node_modules/flatpickr/dist/themes/light.css ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../../css-loader/dist/cjs.js!../../../postcss-loader/dist/cjs.js??ref--7-2!../../../sass-loader/dist/cjs.js??ref--7-3!./light.css */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/flatpickr/dist/themes/light.css\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./node_modules/flatpickr/dist/themes/light.css?");

/***/ }),

/***/ "./node_modules/micromodal/dist/micromodal.es.js":
/*!*******************************************************!*\
  !*** ./node_modules/micromodal/dist/micromodal.es.js ***!
  \*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(n);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar MicroModal = function () {\n\n  var FOCUSABLE_ELEMENTS = ['a[href]', 'area[href]', 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])', 'select:not([disabled]):not([aria-hidden])', 'textarea:not([disabled]):not([aria-hidden])', 'button:not([disabled]):not([aria-hidden])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^=\"-\"])'];\n\n  var Modal = /*#__PURE__*/function () {\n    function Modal(_ref) {\n      var targetModal = _ref.targetModal,\n          _ref$triggers = _ref.triggers,\n          triggers = _ref$triggers === void 0 ? [] : _ref$triggers,\n          _ref$onShow = _ref.onShow,\n          onShow = _ref$onShow === void 0 ? function () {} : _ref$onShow,\n          _ref$onClose = _ref.onClose,\n          onClose = _ref$onClose === void 0 ? function () {} : _ref$onClose,\n          _ref$openTrigger = _ref.openTrigger,\n          openTrigger = _ref$openTrigger === void 0 ? 'data-micromodal-trigger' : _ref$openTrigger,\n          _ref$closeTrigger = _ref.closeTrigger,\n          closeTrigger = _ref$closeTrigger === void 0 ? 'data-micromodal-close' : _ref$closeTrigger,\n          _ref$openClass = _ref.openClass,\n          openClass = _ref$openClass === void 0 ? 'is-open' : _ref$openClass,\n          _ref$disableScroll = _ref.disableScroll,\n          disableScroll = _ref$disableScroll === void 0 ? false : _ref$disableScroll,\n          _ref$disableFocus = _ref.disableFocus,\n          disableFocus = _ref$disableFocus === void 0 ? false : _ref$disableFocus,\n          _ref$awaitCloseAnimat = _ref.awaitCloseAnimation,\n          awaitCloseAnimation = _ref$awaitCloseAnimat === void 0 ? false : _ref$awaitCloseAnimat,\n          _ref$awaitOpenAnimati = _ref.awaitOpenAnimation,\n          awaitOpenAnimation = _ref$awaitOpenAnimati === void 0 ? false : _ref$awaitOpenAnimati,\n          _ref$debugMode = _ref.debugMode,\n          debugMode = _ref$debugMode === void 0 ? false : _ref$debugMode;\n\n      _classCallCheck(this, Modal);\n\n      // Save a reference of the modal\n      this.modal = document.getElementById(targetModal); // Save a reference to the passed config\n\n      this.config = {\n        debugMode: debugMode,\n        disableScroll: disableScroll,\n        openTrigger: openTrigger,\n        closeTrigger: closeTrigger,\n        openClass: openClass,\n        onShow: onShow,\n        onClose: onClose,\n        awaitCloseAnimation: awaitCloseAnimation,\n        awaitOpenAnimation: awaitOpenAnimation,\n        disableFocus: disableFocus\n      }; // Register click events only if pre binding eventListeners\n\n      if (triggers.length > 0) this.registerTriggers.apply(this, _toConsumableArray(triggers)); // pre bind functions for event listeners\n\n      this.onClick = this.onClick.bind(this);\n      this.onKeydown = this.onKeydown.bind(this);\n    }\n    /**\n     * Loops through all openTriggers and binds click event\n     * @param  {array} triggers [Array of node elements]\n     * @return {void}\n     */\n\n\n    _createClass(Modal, [{\n      key: \"registerTriggers\",\n      value: function registerTriggers() {\n        var _this = this;\n\n        for (var _len = arguments.length, triggers = new Array(_len), _key = 0; _key < _len; _key++) {\n          triggers[_key] = arguments[_key];\n        }\n\n        triggers.filter(Boolean).forEach(function (trigger) {\n          trigger.addEventListener('click', function (event) {\n            return _this.showModal(event);\n          });\n        });\n      }\n    }, {\n      key: \"showModal\",\n      value: function showModal() {\n        var _this2 = this;\n\n        var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        this.activeElement = document.activeElement;\n        this.modal.setAttribute('aria-hidden', 'false');\n        this.modal.classList.add(this.config.openClass);\n        this.scrollBehaviour('disable');\n        this.addEventListeners();\n\n        if (this.config.awaitOpenAnimation) {\n          var handler = function handler() {\n            _this2.modal.removeEventListener('animationend', handler, false);\n\n            _this2.setFocusToFirstNode();\n          };\n\n          this.modal.addEventListener('animationend', handler, false);\n        } else {\n          this.setFocusToFirstNode();\n        }\n\n        this.config.onShow(this.modal, this.activeElement, event);\n      }\n    }, {\n      key: \"closeModal\",\n      value: function closeModal() {\n        var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var modal = this.modal;\n        this.modal.setAttribute('aria-hidden', 'true');\n        this.removeEventListeners();\n        this.scrollBehaviour('enable');\n\n        if (this.activeElement && this.activeElement.focus) {\n          this.activeElement.focus();\n        }\n\n        this.config.onClose(this.modal, this.activeElement, event);\n\n        if (this.config.awaitCloseAnimation) {\n          var openClass = this.config.openClass; // <- old school ftw\n\n          this.modal.addEventListener('animationend', function handler() {\n            modal.classList.remove(openClass);\n            modal.removeEventListener('animationend', handler, false);\n          }, false);\n        } else {\n          modal.classList.remove(this.config.openClass);\n        }\n      }\n    }, {\n      key: \"closeModalById\",\n      value: function closeModalById(targetModal) {\n        this.modal = document.getElementById(targetModal);\n        if (this.modal) this.closeModal();\n      }\n    }, {\n      key: \"scrollBehaviour\",\n      value: function scrollBehaviour(toggle) {\n        if (!this.config.disableScroll) return;\n        var body = document.querySelector('body');\n\n        switch (toggle) {\n          case 'enable':\n            Object.assign(body.style, {\n              overflow: ''\n            });\n            break;\n\n          case 'disable':\n            Object.assign(body.style, {\n              overflow: 'hidden'\n            });\n            break;\n        }\n      }\n    }, {\n      key: \"addEventListeners\",\n      value: function addEventListeners() {\n        this.modal.addEventListener('touchstart', this.onClick);\n        this.modal.addEventListener('click', this.onClick);\n        document.addEventListener('keydown', this.onKeydown);\n      }\n    }, {\n      key: \"removeEventListeners\",\n      value: function removeEventListeners() {\n        this.modal.removeEventListener('touchstart', this.onClick);\n        this.modal.removeEventListener('click', this.onClick);\n        document.removeEventListener('keydown', this.onKeydown);\n      }\n    }, {\n      key: \"onClick\",\n      value: function onClick(event) {\n        if (event.target.hasAttribute(this.config.closeTrigger)) {\n          this.closeModal(event);\n        }\n      }\n    }, {\n      key: \"onKeydown\",\n      value: function onKeydown(event) {\n        if (event.keyCode === 27) this.closeModal(event); // esc\n\n        if (event.keyCode === 9) this.retainFocus(event); // tab\n      }\n    }, {\n      key: \"getFocusableNodes\",\n      value: function getFocusableNodes() {\n        var nodes = this.modal.querySelectorAll(FOCUSABLE_ELEMENTS);\n        return Array.apply(void 0, _toConsumableArray(nodes));\n      }\n      /**\n       * Tries to set focus on a node which is not a close trigger\n       * if no other nodes exist then focuses on first close trigger\n       */\n\n    }, {\n      key: \"setFocusToFirstNode\",\n      value: function setFocusToFirstNode() {\n        var _this3 = this;\n\n        if (this.config.disableFocus) return;\n        var focusableNodes = this.getFocusableNodes(); // no focusable nodes\n\n        if (focusableNodes.length === 0) return; // remove nodes on whose click, the modal closes\n        // could not think of a better name :(\n\n        var nodesWhichAreNotCloseTargets = focusableNodes.filter(function (node) {\n          return !node.hasAttribute(_this3.config.closeTrigger);\n        });\n        if (nodesWhichAreNotCloseTargets.length > 0) nodesWhichAreNotCloseTargets[0].focus();\n        if (nodesWhichAreNotCloseTargets.length === 0) focusableNodes[0].focus();\n      }\n    }, {\n      key: \"retainFocus\",\n      value: function retainFocus(event) {\n        var focusableNodes = this.getFocusableNodes(); // no focusable nodes\n\n        if (focusableNodes.length === 0) return;\n        /**\n         * Filters nodes which are hidden to prevent\n         * focus leak outside modal\n         */\n\n        focusableNodes = focusableNodes.filter(function (node) {\n          return node.offsetParent !== null;\n        }); // if disableFocus is true\n\n        if (!this.modal.contains(document.activeElement)) {\n          focusableNodes[0].focus();\n        } else {\n          var focusedItemIndex = focusableNodes.indexOf(document.activeElement);\n\n          if (event.shiftKey && focusedItemIndex === 0) {\n            focusableNodes[focusableNodes.length - 1].focus();\n            event.preventDefault();\n          }\n\n          if (!event.shiftKey && focusableNodes.length > 0 && focusedItemIndex === focusableNodes.length - 1) {\n            focusableNodes[0].focus();\n            event.preventDefault();\n          }\n        }\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * Modal prototype ends.\n   * Here on code is responsible for detecting and\n   * auto binding event handlers on modal triggers\n   */\n  // Keep a reference to the opened modal\n\n\n  var activeModal = null;\n  /**\n   * Generates an associative array of modals and it's\n   * respective triggers\n   * @param  {array} triggers     An array of all triggers\n   * @param  {string} triggerAttr The data-attribute which triggers the module\n   * @return {array}\n   */\n\n  var generateTriggerMap = function generateTriggerMap(triggers, triggerAttr) {\n    var triggerMap = [];\n    triggers.forEach(function (trigger) {\n      var targetModal = trigger.attributes[triggerAttr].value;\n      if (triggerMap[targetModal] === undefined) triggerMap[targetModal] = [];\n      triggerMap[targetModal].push(trigger);\n    });\n    return triggerMap;\n  };\n  /**\n   * Validates whether a modal of the given id exists\n   * in the DOM\n   * @param  {number} id  The id of the modal\n   * @return {boolean}\n   */\n\n\n  var validateModalPresence = function validateModalPresence(id) {\n    if (!document.getElementById(id)) {\n      console.warn(\"MicroModal: \\u2757Seems like you have missed %c'\".concat(id, \"'\"), 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', 'ID somewhere in your code. Refer example below to resolve it.');\n      console.warn(\"%cExample:\", 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', \"<div class=\\\"modal\\\" id=\\\"\".concat(id, \"\\\"></div>\"));\n      return false;\n    }\n  };\n  /**\n   * Validates if there are modal triggers present\n   * in the DOM\n   * @param  {array} triggers An array of data-triggers\n   * @return {boolean}\n   */\n\n\n  var validateTriggerPresence = function validateTriggerPresence(triggers) {\n    if (triggers.length <= 0) {\n      console.warn(\"MicroModal: \\u2757Please specify at least one %c'micromodal-trigger'\", 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', 'data attribute.');\n      console.warn(\"%cExample:\", 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', \"<a href=\\\"#\\\" data-micromodal-trigger=\\\"my-modal\\\"></a>\");\n      return false;\n    }\n  };\n  /**\n   * Checks if triggers and their corresponding modals\n   * are present in the DOM\n   * @param  {array} triggers   Array of DOM nodes which have data-triggers\n   * @param  {array} triggerMap Associative array of modals and their triggers\n   * @return {boolean}\n   */\n\n\n  var validateArgs = function validateArgs(triggers, triggerMap) {\n    validateTriggerPresence(triggers);\n    if (!triggerMap) return true;\n\n    for (var id in triggerMap) {\n      validateModalPresence(id);\n    }\n\n    return true;\n  };\n  /**\n   * Binds click handlers to all modal triggers\n   * @param  {object} config [description]\n   * @return void\n   */\n\n\n  var init = function init(config) {\n    // Create an config object with default openTrigger\n    var options = Object.assign({}, {\n      openTrigger: 'data-micromodal-trigger'\n    }, config); // Collects all the nodes with the trigger\n\n    var triggers = _toConsumableArray(document.querySelectorAll(\"[\".concat(options.openTrigger, \"]\"))); // Makes a mappings of modals with their trigger nodes\n\n\n    var triggerMap = generateTriggerMap(triggers, options.openTrigger); // Checks if modals and triggers exist in dom\n\n    if (options.debugMode === true && validateArgs(triggers, triggerMap) === false) return; // For every target modal creates a new instance\n\n    for (var key in triggerMap) {\n      var value = triggerMap[key];\n      options.targetModal = key;\n      options.triggers = _toConsumableArray(value);\n      activeModal = new Modal(options); // eslint-disable-line no-new\n    }\n  };\n  /**\n   * Shows a particular modal\n   * @param  {string} targetModal [The id of the modal to display]\n   * @param  {object} config [The configuration object to pass]\n   * @return {void}\n   */\n\n\n  var show = function show(targetModal, config) {\n    var options = config || {};\n    options.targetModal = targetModal; // Checks if modals and triggers exist in dom\n\n    if (options.debugMode === true && validateModalPresence(targetModal) === false) return; // clear events in case previous modal wasn't close\n\n    if (activeModal) activeModal.removeEventListeners(); // stores reference to active modal\n\n    activeModal = new Modal(options); // eslint-disable-line no-new\n\n    activeModal.showModal();\n  };\n  /**\n   * Closes the active modal\n   * @param  {string} targetModal [The id of the modal to close]\n   * @return {void}\n   */\n\n\n  var close = function close(targetModal) {\n    targetModal ? activeModal.closeModalById(targetModal) : activeModal.closeModal();\n  };\n\n  return {\n    init: init,\n    show: show,\n    close: close\n  };\n}();\nwindow.MicroModal = MicroModal;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (MicroModal);\n\n\n//# sourceURL=webpack:///./node_modules/micromodal/dist/micromodal.es.js?");

/***/ }),

/***/ "./node_modules/process/browser.js":
/*!*****************************************!*\
  !*** ./node_modules/process/browser.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack:///./node_modules/process/browser.js?");

/***/ }),

/***/ "./node_modules/pug-runtime/index.js":
/*!*******************************************!*\
  !*** ./node_modules/pug-runtime/index.js ***!
  \*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar pug_has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * Merge two attribute objects giving precedence\n * to values in object `b`. Classes are special-cased\n * allowing for arrays and merging/joining appropriately\n * resulting in a string.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n * @api private\n */\n\nexports.merge = pug_merge;\nfunction pug_merge(a, b) {\n  if (arguments.length === 1) {\n    var attrs = a[0];\n    for (var i = 1; i < a.length; i++) {\n      attrs = pug_merge(attrs, a[i]);\n    }\n    return attrs;\n  }\n\n  for (var key in b) {\n    if (key === 'class') {\n      var valA = a[key] || [];\n      a[key] = (Array.isArray(valA) ? valA : [valA]).concat(b[key] || []);\n    } else if (key === 'style') {\n      var valA = pug_style(a[key]);\n      valA = valA && valA[valA.length - 1] !== ';' ? valA + ';' : valA;\n      var valB = pug_style(b[key]);\n      valB = valB && valB[valB.length - 1] !== ';' ? valB + ';' : valB;\n      a[key] = valA + valB;\n    } else {\n      a[key] = b[key];\n    }\n  }\n\n  return a;\n}\n\n/**\n * Process array, object, or string as a string of classes delimited by a space.\n *\n * If `val` is an array, all members of it and its subarrays are counted as\n * classes. If `escaping` is an array, then whether or not the item in `val` is\n * escaped depends on the corresponding item in `escaping`. If `escaping` is\n * not an array, no escaping is done.\n *\n * If `val` is an object, all the keys whose value is truthy are counted as\n * classes. No escaping is done.\n *\n * If `val` is a string, it is counted as a class. No escaping is done.\n *\n * @param {(Array.<string>|Object.<string, boolean>|string)} val\n * @param {?Array.<string>} escaping\n * @return {String}\n */\nexports.classes = pug_classes;\nfunction pug_classes_array(val, escaping) {\n  var classString = '',\n    className,\n    padding = '',\n    escapeEnabled = Array.isArray(escaping);\n  for (var i = 0; i < val.length; i++) {\n    className = pug_classes(val[i]);\n    if (!className) continue;\n    escapeEnabled && escaping[i] && (className = pug_escape(className));\n    classString = classString + padding + className;\n    padding = ' ';\n  }\n  return classString;\n}\nfunction pug_classes_object(val) {\n  var classString = '',\n    padding = '';\n  for (var key in val) {\n    if (key && val[key] && pug_has_own_property.call(val, key)) {\n      classString = classString + padding + key;\n      padding = ' ';\n    }\n  }\n  return classString;\n}\nfunction pug_classes(val, escaping) {\n  if (Array.isArray(val)) {\n    return pug_classes_array(val, escaping);\n  } else if (val && typeof val === 'object') {\n    return pug_classes_object(val);\n  } else {\n    return val || '';\n  }\n}\n\n/**\n * Convert object or string to a string of CSS styles delimited by a semicolon.\n *\n * @param {(Object.<string, string>|string)} val\n * @return {String}\n */\n\nexports.style = pug_style;\nfunction pug_style(val) {\n  if (!val) return '';\n  if (typeof val === 'object') {\n    var out = '';\n    for (var style in val) {\n      /* istanbul ignore else */\n      if (pug_has_own_property.call(val, style)) {\n        out = out + style + ':' + val[style] + ';';\n      }\n    }\n    return out;\n  } else {\n    return val + '';\n  }\n}\n\n/**\n * Render the given attribute.\n *\n * @param {String} key\n * @param {String} val\n * @param {Boolean} escaped\n * @param {Boolean} terse\n * @return {String}\n */\nexports.attr = pug_attr;\nfunction pug_attr(key, val, escaped, terse) {\n  if (\n    val === false ||\n    val == null ||\n    (!val && (key === 'class' || key === 'style'))\n  ) {\n    return '';\n  }\n  if (val === true) {\n    return ' ' + (terse ? key : key + '=\"' + key + '\"');\n  }\n  var type = typeof val;\n  if (\n    (type === 'object' || type === 'function') &&\n    typeof val.toJSON === 'function'\n  ) {\n    val = val.toJSON();\n  }\n  if (typeof val !== 'string') {\n    val = JSON.stringify(val);\n    if (!escaped && val.indexOf('\"') !== -1) {\n      return ' ' + key + \"='\" + val.replace(/'/g, '&#39;') + \"'\";\n    }\n  }\n  if (escaped) val = pug_escape(val);\n  return ' ' + key + '=\"' + val + '\"';\n}\n\n/**\n * Render the given attributes object.\n *\n * @param {Object} obj\n * @param {Object} terse whether to use HTML5 terse boolean attributes\n * @return {String}\n */\nexports.attrs = pug_attrs;\nfunction pug_attrs(obj, terse) {\n  var attrs = '';\n\n  for (var key in obj) {\n    if (pug_has_own_property.call(obj, key)) {\n      var val = obj[key];\n\n      if ('class' === key) {\n        val = pug_classes(val);\n        attrs = pug_attr(key, val, false, terse) + attrs;\n        continue;\n      }\n      if ('style' === key) {\n        val = pug_style(val);\n      }\n      attrs += pug_attr(key, val, false, terse);\n    }\n  }\n\n  return attrs;\n}\n\n/**\n * Escape the given string of `html`.\n *\n * @param {String} html\n * @return {String}\n * @api private\n */\n\nvar pug_match_html = /[\"&<>]/;\nexports.escape = pug_escape;\nfunction pug_escape(_html) {\n  var html = '' + _html;\n  var regexResult = pug_match_html.exec(html);\n  if (!regexResult) return _html;\n\n  var result = '';\n  var i, lastIndex, escape;\n  for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {\n    switch (html.charCodeAt(i)) {\n      case 34:\n        escape = '&quot;';\n        break;\n      case 38:\n        escape = '&amp;';\n        break;\n      case 60:\n        escape = '&lt;';\n        break;\n      case 62:\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n    if (lastIndex !== i) result += html.substring(lastIndex, i);\n    lastIndex = i + 1;\n    result += escape;\n  }\n  if (lastIndex !== i) return result + html.substring(lastIndex, i);\n  else return result;\n}\n\n/**\n * Re-throw the given `err` in context to the\n * the pug in `filename` at the given `lineno`.\n *\n * @param {Error} err\n * @param {String} filename\n * @param {String} lineno\n * @param {String} str original source\n * @api private\n */\n\nexports.rethrow = pug_rethrow;\nfunction pug_rethrow(err, filename, lineno, str) {\n  if (!(err instanceof Error)) throw err;\n  if ((typeof window != 'undefined' || !filename) && !str) {\n    err.message += ' on line ' + lineno;\n    throw err;\n  }\n  try {\n    str = str || __webpack_require__(/*! fs */ 1).readFileSync(filename, 'utf8');\n  } catch (ex) {\n    pug_rethrow(err, null, lineno);\n  }\n  var context = 3,\n    lines = str.split('\\n'),\n    start = Math.max(lineno - context, 0),\n    end = Math.min(lines.length, lineno + context);\n\n  // Error context\n  var context = lines\n    .slice(start, end)\n    .map(function(line, i) {\n      var curr = i + start + 1;\n      return (curr == lineno ? '  > ' : '    ') + curr + '| ' + line;\n    })\n    .join('\\n');\n\n  // Alter exception message\n  err.path = filename;\n  try {\n    err.message =\n      (filename || 'Pug') +\n      ':' +\n      lineno +\n      '\\n' +\n      context +\n      '\\n\\n' +\n      err.message;\n  } catch (e) {}\n  throw err;\n}\n\n\n//# sourceURL=webpack:///./node_modules/pug-runtime/index.js?");

/***/ }),

/***/ "./node_modules/reflect-metadata/Reflect.js":
/*!**************************************************!*\
  !*** ./node_modules/reflect-metadata/Reflect.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(process, global) {/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n    // Metadata Proposal\n    // https://rbuckton.github.io/reflect-metadata/\n    (function (factory) {\n        var root = typeof global === \"object\" ? global :\n            typeof self === \"object\" ? self :\n                typeof this === \"object\" ? this :\n                    Function(\"return this;\")();\n        var exporter = makeExporter(Reflect);\n        if (typeof root.Reflect === \"undefined\") {\n            root.Reflect = Reflect;\n        }\n        else {\n            exporter = makeExporter(root.Reflect, exporter);\n        }\n        factory(exporter);\n        function makeExporter(target, previous) {\n            return function (key, value) {\n                if (typeof target[key] !== \"function\") {\n                    Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n                }\n                if (previous)\n                    previous(key, value);\n            };\n        }\n    })(function (exporter) {\n        var hasOwn = Object.prototype.hasOwnProperty;\n        // feature test for Symbol support\n        var supportsSymbol = typeof Symbol === \"function\";\n        var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n        var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n        var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n        var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n        var downLevel = !supportsCreate && !supportsProto;\n        var HashMap = {\n            // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n            create: supportsCreate\n                ? function () { return MakeDictionary(Object.create(null)); }\n                : supportsProto\n                    ? function () { return MakeDictionary({ __proto__: null }); }\n                    : function () { return MakeDictionary({}); },\n            has: downLevel\n                ? function (map, key) { return hasOwn.call(map, key); }\n                : function (map, key) { return key in map; },\n            get: downLevel\n                ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n                : function (map, key) { return map[key]; },\n        };\n        // Load global or shim versions of Map, Set, and WeakMap\n        var functionPrototype = Object.getPrototypeOf(Function);\n        var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n        var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n        var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n        var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n        // [[Metadata]] internal slot\n        // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n        var Metadata = new _WeakMap();\n        /**\n         * Applies a set of decorators to a property of a target object.\n         * @param decorators An array of decorators.\n         * @param target The target object.\n         * @param propertyKey (Optional) The property key to decorate.\n         * @param attributes (Optional) The property descriptor for the target key.\n         * @remarks Decorators are applied in reverse order.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     Example = Reflect.decorate(decoratorsArray, Example);\n         *\n         *     // property (on constructor)\n         *     Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     Object.defineProperty(Example, \"staticMethod\",\n         *         Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n         *             Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n         *\n         *     // method (on prototype)\n         *     Object.defineProperty(Example.prototype, \"method\",\n         *         Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n         *             Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n         *\n         */\n        function decorate(decorators, target, propertyKey, attributes) {\n            if (!IsUndefined(propertyKey)) {\n                if (!IsArray(decorators))\n                    throw new TypeError();\n                if (!IsObject(target))\n                    throw new TypeError();\n                if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n                    throw new TypeError();\n                if (IsNull(attributes))\n                    attributes = undefined;\n                propertyKey = ToPropertyKey(propertyKey);\n                return DecorateProperty(decorators, target, propertyKey, attributes);\n            }\n            else {\n                if (!IsArray(decorators))\n                    throw new TypeError();\n                if (!IsConstructor(target))\n                    throw new TypeError();\n                return DecorateConstructor(decorators, target);\n            }\n        }\n        exporter(\"decorate\", decorate);\n        // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n        // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n        /**\n         * A default metadata decorator factory that can be used on a class, class member, or parameter.\n         * @param metadataKey The key for the metadata entry.\n         * @param metadataValue The value for the metadata entry.\n         * @returns A decorator function.\n         * @remarks\n         * If `metadataKey` is already defined for the target and target key, the\n         * metadataValue for that key will be overwritten.\n         * @example\n         *\n         *     // constructor\n         *     @Reflect.metadata(key, value)\n         *     class Example {\n         *     }\n         *\n         *     // property (on constructor, TypeScript only)\n         *     class Example {\n         *         @Reflect.metadata(key, value)\n         *         static staticProperty;\n         *     }\n         *\n         *     // property (on prototype, TypeScript only)\n         *     class Example {\n         *         @Reflect.metadata(key, value)\n         *         property;\n         *     }\n         *\n         *     // method (on constructor)\n         *     class Example {\n         *         @Reflect.metadata(key, value)\n         *         static staticMethod() { }\n         *     }\n         *\n         *     // method (on prototype)\n         *     class Example {\n         *         @Reflect.metadata(key, value)\n         *         method() { }\n         *     }\n         *\n         */\n        function metadata(metadataKey, metadataValue) {\n            function decorator(target, propertyKey) {\n                if (!IsObject(target))\n                    throw new TypeError();\n                if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n                    throw new TypeError();\n                OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n            }\n            return decorator;\n        }\n        exporter(\"metadata\", metadata);\n        /**\n         * Define a unique metadata entry on the target.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param metadataValue A value that contains attached metadata.\n         * @param target The target object on which to define metadata.\n         * @param propertyKey (Optional) The property key for the target.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example);\n         *\n         *     // property (on constructor)\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n         *\n         *     // decorator factory as metadata-producing annotation.\n         *     function MyAnnotation(options): Decorator {\n         *         return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n         *     }\n         *\n         */\n        function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n        }\n        exporter(\"defineMetadata\", defineMetadata);\n        /**\n         * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function hasMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n        }\n        exporter(\"hasMetadata\", hasMetadata);\n        /**\n         * Gets a value indicating whether the target object has the provided metadata key defined.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function hasOwnMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n        }\n        exporter(\"hasOwnMetadata\", hasOwnMetadata);\n        /**\n         * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function getMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n        }\n        exporter(\"getMetadata\", getMetadata);\n        /**\n         * Gets the metadata value for the provided metadata key on the target object.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function getOwnMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n        }\n        exporter(\"getOwnMetadata\", getOwnMetadata);\n        /**\n         * Gets the metadata keys defined on the target object or its prototype chain.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns An array of unique metadata keys.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.getMetadataKeys(Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n         *\n         */\n        function getMetadataKeys(target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryMetadataKeys(target, propertyKey);\n        }\n        exporter(\"getMetadataKeys\", getMetadataKeys);\n        /**\n         * Gets the unique metadata keys defined on the target object.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns An array of unique metadata keys.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.getOwnMetadataKeys(Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n         *\n         */\n        function getOwnMetadataKeys(target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            return OrdinaryOwnMetadataKeys(target, propertyKey);\n        }\n        exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n        /**\n         * Deletes the metadata entry from the target object with the provided key.\n         * @param metadataKey A key used to store and retrieve metadata.\n         * @param target The target object on which the metadata is defined.\n         * @param propertyKey (Optional) The property key for the target.\n         * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n         * @example\n         *\n         *     class Example {\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\n         *         // static staticProperty;\n         *         // property;\n         *\n         *         constructor(p) { }\n         *         static staticMethod(p) { }\n         *         method(p) { }\n         *     }\n         *\n         *     // constructor\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n         *\n         *     // property (on constructor)\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n         *\n         *     // property (on prototype)\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n         *\n         *     // method (on constructor)\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n         *\n         *     // method (on prototype)\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n         *\n         */\n        function deleteMetadata(metadataKey, target, propertyKey) {\n            if (!IsObject(target))\n                throw new TypeError();\n            if (!IsUndefined(propertyKey))\n                propertyKey = ToPropertyKey(propertyKey);\n            var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n            if (IsUndefined(metadataMap))\n                return false;\n            if (!metadataMap.delete(metadataKey))\n                return false;\n            if (metadataMap.size > 0)\n                return true;\n            var targetMetadata = Metadata.get(target);\n            targetMetadata.delete(propertyKey);\n            if (targetMetadata.size > 0)\n                return true;\n            Metadata.delete(target);\n            return true;\n        }\n        exporter(\"deleteMetadata\", deleteMetadata);\n        function DecorateConstructor(decorators, target) {\n            for (var i = decorators.length - 1; i >= 0; --i) {\n                var decorator = decorators[i];\n                var decorated = decorator(target);\n                if (!IsUndefined(decorated) && !IsNull(decorated)) {\n                    if (!IsConstructor(decorated))\n                        throw new TypeError();\n                    target = decorated;\n                }\n            }\n            return target;\n        }\n        function DecorateProperty(decorators, target, propertyKey, descriptor) {\n            for (var i = decorators.length - 1; i >= 0; --i) {\n                var decorator = decorators[i];\n                var decorated = decorator(target, propertyKey, descriptor);\n                if (!IsUndefined(decorated) && !IsNull(decorated)) {\n                    if (!IsObject(decorated))\n                        throw new TypeError();\n                    descriptor = decorated;\n                }\n            }\n            return descriptor;\n        }\n        function GetOrCreateMetadataMap(O, P, Create) {\n            var targetMetadata = Metadata.get(O);\n            if (IsUndefined(targetMetadata)) {\n                if (!Create)\n                    return undefined;\n                targetMetadata = new _Map();\n                Metadata.set(O, targetMetadata);\n            }\n            var metadataMap = targetMetadata.get(P);\n            if (IsUndefined(metadataMap)) {\n                if (!Create)\n                    return undefined;\n                metadataMap = new _Map();\n                targetMetadata.set(P, metadataMap);\n            }\n            return metadataMap;\n        }\n        // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n        function OrdinaryHasMetadata(MetadataKey, O, P) {\n            var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n            if (hasOwn)\n                return true;\n            var parent = OrdinaryGetPrototypeOf(O);\n            if (!IsNull(parent))\n                return OrdinaryHasMetadata(MetadataKey, parent, P);\n            return false;\n        }\n        // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n        function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n            if (IsUndefined(metadataMap))\n                return false;\n            return ToBoolean(metadataMap.has(MetadataKey));\n        }\n        // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n        function OrdinaryGetMetadata(MetadataKey, O, P) {\n            var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n            if (hasOwn)\n                return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n            var parent = OrdinaryGetPrototypeOf(O);\n            if (!IsNull(parent))\n                return OrdinaryGetMetadata(MetadataKey, parent, P);\n            return undefined;\n        }\n        // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n        function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n            if (IsUndefined(metadataMap))\n                return undefined;\n            return metadataMap.get(MetadataKey);\n        }\n        // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n        function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n            metadataMap.set(MetadataKey, MetadataValue);\n        }\n        // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n        function OrdinaryMetadataKeys(O, P) {\n            var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n            var parent = OrdinaryGetPrototypeOf(O);\n            if (parent === null)\n                return ownKeys;\n            var parentKeys = OrdinaryMetadataKeys(parent, P);\n            if (parentKeys.length <= 0)\n                return ownKeys;\n            if (ownKeys.length <= 0)\n                return parentKeys;\n            var set = new _Set();\n            var keys = [];\n            for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n                var key = ownKeys_1[_i];\n                var hasKey = set.has(key);\n                if (!hasKey) {\n                    set.add(key);\n                    keys.push(key);\n                }\n            }\n            for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n                var key = parentKeys_1[_a];\n                var hasKey = set.has(key);\n                if (!hasKey) {\n                    set.add(key);\n                    keys.push(key);\n                }\n            }\n            return keys;\n        }\n        // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n        // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n        function OrdinaryOwnMetadataKeys(O, P) {\n            var keys = [];\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n            if (IsUndefined(metadataMap))\n                return keys;\n            var keysObj = metadataMap.keys();\n            var iterator = GetIterator(keysObj);\n            var k = 0;\n            while (true) {\n                var next = IteratorStep(iterator);\n                if (!next) {\n                    keys.length = k;\n                    return keys;\n                }\n                var nextValue = IteratorValue(next);\n                try {\n                    keys[k] = nextValue;\n                }\n                catch (e) {\n                    try {\n                        IteratorClose(iterator);\n                    }\n                    finally {\n                        throw e;\n                    }\n                }\n                k++;\n            }\n        }\n        // 6 ECMAScript Data Typ0es and Values\n        // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n        function Type(x) {\n            if (x === null)\n                return 1 /* Null */;\n            switch (typeof x) {\n                case \"undefined\": return 0 /* Undefined */;\n                case \"boolean\": return 2 /* Boolean */;\n                case \"string\": return 3 /* String */;\n                case \"symbol\": return 4 /* Symbol */;\n                case \"number\": return 5 /* Number */;\n                case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n                default: return 6 /* Object */;\n            }\n        }\n        // 6.1.1 The Undefined Type\n        // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n        function IsUndefined(x) {\n            return x === undefined;\n        }\n        // 6.1.2 The Null Type\n        // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n        function IsNull(x) {\n            return x === null;\n        }\n        // 6.1.5 The Symbol Type\n        // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n        function IsSymbol(x) {\n            return typeof x === \"symbol\";\n        }\n        // 6.1.7 The Object Type\n        // https://tc39.github.io/ecma262/#sec-object-type\n        function IsObject(x) {\n            return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n        }\n        // 7.1 Type Conversion\n        // https://tc39.github.io/ecma262/#sec-type-conversion\n        // 7.1.1 ToPrimitive(input [, PreferredType])\n        // https://tc39.github.io/ecma262/#sec-toprimitive\n        function ToPrimitive(input, PreferredType) {\n            switch (Type(input)) {\n                case 0 /* Undefined */: return input;\n                case 1 /* Null */: return input;\n                case 2 /* Boolean */: return input;\n                case 3 /* String */: return input;\n                case 4 /* Symbol */: return input;\n                case 5 /* Number */: return input;\n            }\n            var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n            var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n            if (exoticToPrim !== undefined) {\n                var result = exoticToPrim.call(input, hint);\n                if (IsObject(result))\n                    throw new TypeError();\n                return result;\n            }\n            return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n        }\n        // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n        // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n        function OrdinaryToPrimitive(O, hint) {\n            if (hint === \"string\") {\n                var toString_1 = O.toString;\n                if (IsCallable(toString_1)) {\n                    var result = toString_1.call(O);\n                    if (!IsObject(result))\n                        return result;\n                }\n                var valueOf = O.valueOf;\n                if (IsCallable(valueOf)) {\n                    var result = valueOf.call(O);\n                    if (!IsObject(result))\n                        return result;\n                }\n            }\n            else {\n                var valueOf = O.valueOf;\n                if (IsCallable(valueOf)) {\n                    var result = valueOf.call(O);\n                    if (!IsObject(result))\n                        return result;\n                }\n                var toString_2 = O.toString;\n                if (IsCallable(toString_2)) {\n                    var result = toString_2.call(O);\n                    if (!IsObject(result))\n                        return result;\n                }\n            }\n            throw new TypeError();\n        }\n        // 7.1.2 ToBoolean(argument)\n        // https://tc39.github.io/ecma262/2016/#sec-toboolean\n        function ToBoolean(argument) {\n            return !!argument;\n        }\n        // 7.1.12 ToString(argument)\n        // https://tc39.github.io/ecma262/#sec-tostring\n        function ToString(argument) {\n            return \"\" + argument;\n        }\n        // 7.1.14 ToPropertyKey(argument)\n        // https://tc39.github.io/ecma262/#sec-topropertykey\n        function ToPropertyKey(argument) {\n            var key = ToPrimitive(argument, 3 /* String */);\n            if (IsSymbol(key))\n                return key;\n            return ToString(key);\n        }\n        // 7.2 Testing and Comparison Operations\n        // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n        // 7.2.2 IsArray(argument)\n        // https://tc39.github.io/ecma262/#sec-isarray\n        function IsArray(argument) {\n            return Array.isArray\n                ? Array.isArray(argument)\n                : argument instanceof Object\n                    ? argument instanceof Array\n                    : Object.prototype.toString.call(argument) === \"[object Array]\";\n        }\n        // 7.2.3 IsCallable(argument)\n        // https://tc39.github.io/ecma262/#sec-iscallable\n        function IsCallable(argument) {\n            // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n            return typeof argument === \"function\";\n        }\n        // 7.2.4 IsConstructor(argument)\n        // https://tc39.github.io/ecma262/#sec-isconstructor\n        function IsConstructor(argument) {\n            // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n            return typeof argument === \"function\";\n        }\n        // 7.2.7 IsPropertyKey(argument)\n        // https://tc39.github.io/ecma262/#sec-ispropertykey\n        function IsPropertyKey(argument) {\n            switch (Type(argument)) {\n                case 3 /* String */: return true;\n                case 4 /* Symbol */: return true;\n                default: return false;\n            }\n        }\n        // 7.3 Operations on Objects\n        // https://tc39.github.io/ecma262/#sec-operations-on-objects\n        // 7.3.9 GetMethod(V, P)\n        // https://tc39.github.io/ecma262/#sec-getmethod\n        function GetMethod(V, P) {\n            var func = V[P];\n            if (func === undefined || func === null)\n                return undefined;\n            if (!IsCallable(func))\n                throw new TypeError();\n            return func;\n        }\n        // 7.4 Operations on Iterator Objects\n        // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n        function GetIterator(obj) {\n            var method = GetMethod(obj, iteratorSymbol);\n            if (!IsCallable(method))\n                throw new TypeError(); // from Call\n            var iterator = method.call(obj);\n            if (!IsObject(iterator))\n                throw new TypeError();\n            return iterator;\n        }\n        // 7.4.4 IteratorValue(iterResult)\n        // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n        function IteratorValue(iterResult) {\n            return iterResult.value;\n        }\n        // 7.4.5 IteratorStep(iterator)\n        // https://tc39.github.io/ecma262/#sec-iteratorstep\n        function IteratorStep(iterator) {\n            var result = iterator.next();\n            return result.done ? false : result;\n        }\n        // 7.4.6 IteratorClose(iterator, completion)\n        // https://tc39.github.io/ecma262/#sec-iteratorclose\n        function IteratorClose(iterator) {\n            var f = iterator[\"return\"];\n            if (f)\n                f.call(iterator);\n        }\n        // 9.1 Ordinary Object Internal Methods and Internal Slots\n        // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n        // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n        // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n        function OrdinaryGetPrototypeOf(O) {\n            var proto = Object.getPrototypeOf(O);\n            if (typeof O !== \"function\" || O === functionPrototype)\n                return proto;\n            // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n            // Try to determine the superclass constructor. Compatible implementations\n            // must either set __proto__ on a subclass constructor to the superclass constructor,\n            // or ensure each class has a valid `constructor` property on its prototype that\n            // points back to the constructor.\n            // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n            // This is the case when in ES6 or when using __proto__ in a compatible browser.\n            if (proto !== functionPrototype)\n                return proto;\n            // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n            var prototype = O.prototype;\n            var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n            if (prototypeProto == null || prototypeProto === Object.prototype)\n                return proto;\n            // If the constructor was not a function, then we cannot determine the heritage.\n            var constructor = prototypeProto.constructor;\n            if (typeof constructor !== \"function\")\n                return proto;\n            // If we have some kind of self-reference, then we cannot determine the heritage.\n            if (constructor === O)\n                return proto;\n            // we have a pretty good guess at the heritage.\n            return constructor;\n        }\n        // naive Map shim\n        function CreateMapPolyfill() {\n            var cacheSentinel = {};\n            var arraySentinel = [];\n            var MapIterator = /** @class */ (function () {\n                function MapIterator(keys, values, selector) {\n                    this._index = 0;\n                    this._keys = keys;\n                    this._values = values;\n                    this._selector = selector;\n                }\n                MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n                MapIterator.prototype[iteratorSymbol] = function () { return this; };\n                MapIterator.prototype.next = function () {\n                    var index = this._index;\n                    if (index >= 0 && index < this._keys.length) {\n                        var result = this._selector(this._keys[index], this._values[index]);\n                        if (index + 1 >= this._keys.length) {\n                            this._index = -1;\n                            this._keys = arraySentinel;\n                            this._values = arraySentinel;\n                        }\n                        else {\n                            this._index++;\n                        }\n                        return { value: result, done: false };\n                    }\n                    return { value: undefined, done: true };\n                };\n                MapIterator.prototype.throw = function (error) {\n                    if (this._index >= 0) {\n                        this._index = -1;\n                        this._keys = arraySentinel;\n                        this._values = arraySentinel;\n                    }\n                    throw error;\n                };\n                MapIterator.prototype.return = function (value) {\n                    if (this._index >= 0) {\n                        this._index = -1;\n                        this._keys = arraySentinel;\n                        this._values = arraySentinel;\n                    }\n                    return { value: value, done: true };\n                };\n                return MapIterator;\n            }());\n            return /** @class */ (function () {\n                function Map() {\n                    this._keys = [];\n                    this._values = [];\n                    this._cacheKey = cacheSentinel;\n                    this._cacheIndex = -2;\n                }\n                Object.defineProperty(Map.prototype, \"size\", {\n                    get: function () { return this._keys.length; },\n                    enumerable: true,\n                    configurable: true\n                });\n                Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n                Map.prototype.get = function (key) {\n                    var index = this._find(key, /*insert*/ false);\n                    return index >= 0 ? this._values[index] : undefined;\n                };\n                Map.prototype.set = function (key, value) {\n                    var index = this._find(key, /*insert*/ true);\n                    this._values[index] = value;\n                    return this;\n                };\n                Map.prototype.delete = function (key) {\n                    var index = this._find(key, /*insert*/ false);\n                    if (index >= 0) {\n                        var size = this._keys.length;\n                        for (var i = index + 1; i < size; i++) {\n                            this._keys[i - 1] = this._keys[i];\n                            this._values[i - 1] = this._values[i];\n                        }\n                        this._keys.length--;\n                        this._values.length--;\n                        if (key === this._cacheKey) {\n                            this._cacheKey = cacheSentinel;\n                            this._cacheIndex = -2;\n                        }\n                        return true;\n                    }\n                    return false;\n                };\n                Map.prototype.clear = function () {\n                    this._keys.length = 0;\n                    this._values.length = 0;\n                    this._cacheKey = cacheSentinel;\n                    this._cacheIndex = -2;\n                };\n                Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n                Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n                Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n                Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n                Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n                Map.prototype._find = function (key, insert) {\n                    if (this._cacheKey !== key) {\n                        this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n                    }\n                    if (this._cacheIndex < 0 && insert) {\n                        this._cacheIndex = this._keys.length;\n                        this._keys.push(key);\n                        this._values.push(undefined);\n                    }\n                    return this._cacheIndex;\n                };\n                return Map;\n            }());\n            function getKey(key, _) {\n                return key;\n            }\n            function getValue(_, value) {\n                return value;\n            }\n            function getEntry(key, value) {\n                return [key, value];\n            }\n        }\n        // naive Set shim\n        function CreateSetPolyfill() {\n            return /** @class */ (function () {\n                function Set() {\n                    this._map = new _Map();\n                }\n                Object.defineProperty(Set.prototype, \"size\", {\n                    get: function () { return this._map.size; },\n                    enumerable: true,\n                    configurable: true\n                });\n                Set.prototype.has = function (value) { return this._map.has(value); };\n                Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n                Set.prototype.delete = function (value) { return this._map.delete(value); };\n                Set.prototype.clear = function () { this._map.clear(); };\n                Set.prototype.keys = function () { return this._map.keys(); };\n                Set.prototype.values = function () { return this._map.values(); };\n                Set.prototype.entries = function () { return this._map.entries(); };\n                Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n                Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n                return Set;\n            }());\n        }\n        // naive WeakMap shim\n        function CreateWeakMapPolyfill() {\n            var UUID_SIZE = 16;\n            var keys = HashMap.create();\n            var rootKey = CreateUniqueKey();\n            return /** @class */ (function () {\n                function WeakMap() {\n                    this._key = CreateUniqueKey();\n                }\n                WeakMap.prototype.has = function (target) {\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n                    return table !== undefined ? HashMap.has(table, this._key) : false;\n                };\n                WeakMap.prototype.get = function (target) {\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n                    return table !== undefined ? HashMap.get(table, this._key) : undefined;\n                };\n                WeakMap.prototype.set = function (target, value) {\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n                    table[this._key] = value;\n                    return this;\n                };\n                WeakMap.prototype.delete = function (target) {\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n                    return table !== undefined ? delete table[this._key] : false;\n                };\n                WeakMap.prototype.clear = function () {\n                    // NOTE: not a real clear, just makes the previous data unreachable\n                    this._key = CreateUniqueKey();\n                };\n                return WeakMap;\n            }());\n            function CreateUniqueKey() {\n                var key;\n                do\n                    key = \"@@WeakMap@@\" + CreateUUID();\n                while (HashMap.has(keys, key));\n                keys[key] = true;\n                return key;\n            }\n            function GetOrCreateWeakMapTable(target, create) {\n                if (!hasOwn.call(target, rootKey)) {\n                    if (!create)\n                        return undefined;\n                    Object.defineProperty(target, rootKey, { value: HashMap.create() });\n                }\n                return target[rootKey];\n            }\n            function FillRandomBytes(buffer, size) {\n                for (var i = 0; i < size; ++i)\n                    buffer[i] = Math.random() * 0xff | 0;\n                return buffer;\n            }\n            function GenRandomBytes(size) {\n                if (typeof Uint8Array === \"function\") {\n                    if (typeof crypto !== \"undefined\")\n                        return crypto.getRandomValues(new Uint8Array(size));\n                    if (typeof msCrypto !== \"undefined\")\n                        return msCrypto.getRandomValues(new Uint8Array(size));\n                    return FillRandomBytes(new Uint8Array(size), size);\n                }\n                return FillRandomBytes(new Array(size), size);\n            }\n            function CreateUUID() {\n                var data = GenRandomBytes(UUID_SIZE);\n                // mark as random - RFC 4122 § 4.4\n                data[6] = data[6] & 0x4f | 0x40;\n                data[8] = data[8] & 0xbf | 0x80;\n                var result = \"\";\n                for (var offset = 0; offset < UUID_SIZE; ++offset) {\n                    var byte = data[offset];\n                    if (offset === 4 || offset === 6 || offset === 8)\n                        result += \"-\";\n                    if (byte < 16)\n                        result += \"0\";\n                    result += byte.toString(16).toLowerCase();\n                }\n                return result;\n            }\n        }\n        // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n        function MakeDictionary(obj) {\n            obj.__ = undefined;\n            delete obj.__;\n            return obj;\n        }\n    });\n})(Reflect || (Reflect = {}));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \"./node_modules/process/browser.js\"), __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./node_modules/reflect-metadata/Reflect.js?");

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
/*!****************************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar isOldIE = function isOldIE() {\n  var memo;\n  return function memorize() {\n    if (typeof memo === 'undefined') {\n      // Test for IE <= 9 as proposed by Browserhacks\n      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n      // Tests for existence of standard globals is to allow style-loader\n      // to operate correctly into non-standard environments\n      // @see https://github.com/webpack-contrib/style-loader/issues/177\n      memo = Boolean(window && document && document.all && !window.atob);\n    }\n\n    return memo;\n  };\n}();\n\nvar getTarget = function getTarget() {\n  var memo = {};\n  return function memorize(target) {\n    if (typeof memo[target] === 'undefined') {\n      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n        try {\n          // This will throw an exception if access to iframe is blocked\n          // due to cross-origin restrictions\n          styleTarget = styleTarget.contentDocument.head;\n        } catch (e) {\n          // istanbul ignore next\n          styleTarget = null;\n        }\n      }\n\n      memo[target] = styleTarget;\n    }\n\n    return memo[target];\n  };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n\n  for (var i = 0; i < stylesInDom.length; i++) {\n    if (stylesInDom[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n\n  return result;\n}\n\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var index = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3]\n    };\n\n    if (index !== -1) {\n      stylesInDom[index].references++;\n      stylesInDom[index].updater(obj);\n    } else {\n      stylesInDom.push({\n        identifier: identifier,\n        updater: addStyle(obj, options),\n        references: 1\n      });\n    }\n\n    identifiers.push(identifier);\n  }\n\n  return identifiers;\n}\n\nfunction insertStyleElement(options) {\n  var style = document.createElement('style');\n  var attributes = options.attributes || {};\n\n  if (typeof attributes.nonce === 'undefined') {\n    var nonce =  true ? __webpack_require__.nc : undefined;\n\n    if (nonce) {\n      attributes.nonce = nonce;\n    }\n  }\n\n  Object.keys(attributes).forEach(function (key) {\n    style.setAttribute(key, attributes[key]);\n  });\n\n  if (typeof options.insert === 'function') {\n    options.insert(style);\n  } else {\n    var target = getTarget(options.insert || 'head');\n\n    if (!target) {\n      throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n    }\n\n    target.appendChild(style);\n  }\n\n  return style;\n}\n\nfunction removeStyleElement(style) {\n  // istanbul ignore if\n  if (style.parentNode === null) {\n    return false;\n  }\n\n  style.parentNode.removeChild(style);\n}\n/* istanbul ignore next  */\n\n\nvar replaceText = function replaceText() {\n  var textStore = [];\n  return function replace(index, replacement) {\n    textStore[index] = replacement;\n    return textStore.filter(Boolean).join('\\n');\n  };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n  var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n  /* istanbul ignore if  */\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = replaceText(index, css);\n  } else {\n    var cssNode = document.createTextNode(css);\n    var childNodes = style.childNodes;\n\n    if (childNodes[index]) {\n      style.removeChild(childNodes[index]);\n    }\n\n    if (childNodes.length) {\n      style.insertBefore(cssNode, childNodes[index]);\n    } else {\n      style.appendChild(cssNode);\n    }\n  }\n}\n\nfunction applyToTag(style, options, obj) {\n  var css = obj.css;\n  var media = obj.media;\n  var sourceMap = obj.sourceMap;\n\n  if (media) {\n    style.setAttribute('media', media);\n  } else {\n    style.removeAttribute('media');\n  }\n\n  if (sourceMap && btoa) {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  } // For old IE\n\n  /* istanbul ignore if  */\n\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    while (style.firstChild) {\n      style.removeChild(style.firstChild);\n    }\n\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n  var style;\n  var update;\n  var remove;\n\n  if (options.singleton) {\n    var styleIndex = singletonCounter++;\n    style = singleton || (singleton = insertStyleElement(options));\n    update = applyToSingletonTag.bind(null, style, styleIndex, false);\n    remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n  } else {\n    style = insertStyleElement(options);\n    update = applyToTag.bind(null, style, options);\n\n    remove = function remove() {\n      removeStyleElement(style);\n    };\n  }\n\n  update(obj);\n  return function updateStyle(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n        return;\n      }\n\n      update(obj = newObj);\n    } else {\n      remove();\n    }\n  };\n}\n\nmodule.exports = function (list, options) {\n  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n  // tags it will allow on a page\n\n  if (!options.singleton && typeof options.singleton !== 'boolean') {\n    options.singleton = isOldIE();\n  }\n\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n\n    if (Object.prototype.toString.call(newList) !== '[object Array]') {\n      return;\n    }\n\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDom[index].references--;\n    }\n\n    var newLastIdentifiers = modulesToDom(newList, options);\n\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n\n      var _index = getIndexByIdentifier(_identifier);\n\n      if (stylesInDom[_index].references === 0) {\n        stylesInDom[_index].updater();\n\n        stylesInDom.splice(_index, 1);\n      }\n    }\n\n    lastIdentifiers = newLastIdentifiers;\n  };\n};\n\n//# sourceURL=webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js?");

/***/ }),

/***/ "./node_modules/typedi/Container.js":
/*!******************************************!*\
  !*** ./node_modules/typedi/Container.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ContainerInstance_1 = __webpack_require__(/*! ./ContainerInstance */ \"./node_modules/typedi/ContainerInstance.js\");\n/**\n * Service container.\n */\nvar Container = /** @class */ (function () {\n    function Container() {\n    }\n    // -------------------------------------------------------------------------\n    // Public Static Methods\n    // -------------------------------------------------------------------------\n    /**\n     * Gets a separate container instance for the given instance id.\n     */\n    Container.of = function (instanceId) {\n        if (instanceId === undefined)\n            return this.globalInstance;\n        var container = this.instances.find(function (instance) { return instance.id === instanceId; });\n        if (!container) {\n            container = new ContainerInstance_1.ContainerInstance(instanceId);\n            this.instances.push(container);\n        }\n        return container;\n    };\n    /**\n     * Checks if the service with given name or type is registered service container.\n     * Optionally, parameters can be passed in case if instance is initialized in the container for the first time.\n     */\n    Container.has = function (identifier) {\n        return this.globalInstance.has(identifier);\n    };\n    /**\n     * Retrieves the service with given name or type from the service container.\n     * Optionally, parameters can be passed in case if instance is initialized in the container for the first time.\n     */\n    Container.get = function (identifier) {\n        return this.globalInstance.get(identifier);\n    };\n    /**\n     * Gets all instances registered in the container of the given service identifier.\n     * Used when service defined with multiple: true flag.\n     */\n    Container.getMany = function (id) {\n        return this.globalInstance.getMany(id);\n    };\n    /**\n     * Sets a value for the given type or service name in the container.\n     */\n    Container.set = function (identifierOrServiceMetadata, value) {\n        this.globalInstance.set(identifierOrServiceMetadata, value);\n        return this;\n    };\n    /**\n     * Removes services with a given service identifiers (tokens or types).\n     */\n    Container.remove = function () {\n        var _a;\n        var ids = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            ids[_i] = arguments[_i];\n        }\n        (_a = this.globalInstance).remove.apply(_a, ids);\n        return this;\n    };\n    /**\n     * Completely resets the container by removing all previously registered services and handlers from it.\n     */\n    Container.reset = function (containerId) {\n        if (containerId) {\n            var instance = this.instances.find(function (instance) { return instance.id === containerId; });\n            if (instance) {\n                instance.reset();\n                this.instances.splice(this.instances.indexOf(instance), 1);\n            }\n        }\n        else {\n            this.globalInstance.reset();\n            this.instances.forEach(function (instance) { return instance.reset(); });\n        }\n        return this;\n    };\n    /**\n     * Registers a new handler.\n     */\n    Container.registerHandler = function (handler) {\n        this.handlers.push(handler);\n        return this;\n    };\n    /**\n     * Helper method that imports given services.\n     */\n    Container.import = function (services) {\n        return this;\n    };\n    // -------------------------------------------------------------------------\n    // Private Static Properties\n    // -------------------------------------------------------------------------\n    /**\n     * Global container instance.\n     */\n    Container.globalInstance = new ContainerInstance_1.ContainerInstance(undefined);\n    /**\n     * Other containers created using Container.of method.\n     */\n    Container.instances = [];\n    /**\n     * All registered handlers.\n     */\n    Container.handlers = [];\n    return Container;\n}());\nexports.Container = Container;\n\n//# sourceMappingURL=Container.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/Container.js?");

/***/ }),

/***/ "./node_modules/typedi/ContainerInstance.js":
/*!**************************************************!*\
  !*** ./node_modules/typedi/ContainerInstance.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Container_1 = __webpack_require__(/*! ./Container */ \"./node_modules/typedi/Container.js\");\nvar MissingProvidedServiceTypeError_1 = __webpack_require__(/*! ./error/MissingProvidedServiceTypeError */ \"./node_modules/typedi/error/MissingProvidedServiceTypeError.js\");\nvar ServiceNotFoundError_1 = __webpack_require__(/*! ./error/ServiceNotFoundError */ \"./node_modules/typedi/error/ServiceNotFoundError.js\");\nvar Token_1 = __webpack_require__(/*! ./Token */ \"./node_modules/typedi/Token.js\");\n/**\n * TypeDI can have multiple containers.\n * One container is ContainerInstance.\n */\nvar ContainerInstance = /** @class */ (function () {\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n    function ContainerInstance(id) {\n        // -------------------------------------------------------------------------\n        // Private Properties\n        // -------------------------------------------------------------------------\n        /**\n         * All registered services.\n         */\n        this.services = [];\n        this.id = id;\n    }\n    /**\n     * Checks if the service with given name or type is registered service container.\n     * Optionally, parameters can be passed in case if instance is initialized in the container for the first time.\n     */\n    ContainerInstance.prototype.has = function (identifier) {\n        return !!this.findService(identifier);\n    };\n    /**\n     * Retrieves the service with given name or type from the service container.\n     * Optionally, parameters can be passed in case if instance is initialized in the container for the first time.\n     */\n    ContainerInstance.prototype.get = function (identifier) {\n        var globalContainer = Container_1.Container.of(undefined);\n        var service = globalContainer.findService(identifier);\n        var scopedService = this.findService(identifier);\n        if (service && service.global === true)\n            return this.getServiceValue(identifier, service);\n        if (scopedService)\n            return this.getServiceValue(identifier, scopedService);\n        if (service && this !== globalContainer) {\n            var clonedService = Object.assign({}, service);\n            clonedService.value = undefined;\n            var value = this.getServiceValue(identifier, clonedService);\n            this.set(identifier, value);\n            return value;\n        }\n        return this.getServiceValue(identifier, service);\n    };\n    /**\n     * Gets all instances registered in the container of the given service identifier.\n     * Used when service defined with multiple: true flag.\n     */\n    ContainerInstance.prototype.getMany = function (id) {\n        var _this = this;\n        return this.filterServices(id).map(function (service) { return _this.getServiceValue(id, service); });\n    };\n    /**\n     * Sets a value for the given type or service name in the container.\n     */\n    ContainerInstance.prototype.set = function (identifierOrServiceMetadata, value) {\n        var _this = this;\n        if (identifierOrServiceMetadata instanceof Array) {\n            identifierOrServiceMetadata.forEach(function (v) { return _this.set(v); });\n            return this;\n        }\n        if (typeof identifierOrServiceMetadata === \"string\" || identifierOrServiceMetadata instanceof Token_1.Token) {\n            return this.set({ id: identifierOrServiceMetadata, value: value });\n        }\n        if (typeof identifierOrServiceMetadata === \"object\" && identifierOrServiceMetadata.service) {\n            return this.set({ id: identifierOrServiceMetadata.service, value: value });\n        }\n        if (identifierOrServiceMetadata instanceof Function) {\n            return this.set({ type: identifierOrServiceMetadata, id: identifierOrServiceMetadata, value: value });\n        }\n        // const newService: ServiceMetadata<any, any> = arguments.length === 1 && typeof identifierOrServiceMetadata === \"object\"  && !(identifierOrServiceMetadata instanceof Token) ? identifierOrServiceMetadata : undefined;\n        var newService = identifierOrServiceMetadata;\n        var service = this.findService(newService.id);\n        if (service && service.multiple !== true) {\n            Object.assign(service, newService);\n        }\n        else {\n            this.services.push(newService);\n        }\n        return this;\n    };\n    /**\n     * Removes services with a given service identifiers (tokens or types).\n     */\n    ContainerInstance.prototype.remove = function () {\n        var _this = this;\n        var ids = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            ids[_i] = arguments[_i];\n        }\n        ids.forEach(function (id) {\n            _this.filterServices(id).forEach(function (service) {\n                _this.services.splice(_this.services.indexOf(service), 1);\n            });\n        });\n        return this;\n    };\n    /**\n     * Completely resets the container by removing all previously registered services from it.\n     */\n    ContainerInstance.prototype.reset = function () {\n        this.services = [];\n        return this;\n    };\n    // -------------------------------------------------------------------------\n    // Private Methods\n    // -------------------------------------------------------------------------\n    /**\n     * Filters registered service in the with a given service identifier.\n     */\n    ContainerInstance.prototype.filterServices = function (identifier) {\n        return this.services.filter(function (service) {\n            if (service.id)\n                return service.id === identifier;\n            if (service.type && identifier instanceof Function)\n                return service.type === identifier || identifier.prototype instanceof service.type;\n            return false;\n        });\n    };\n    /**\n     * Finds registered service in the with a given service identifier.\n     */\n    ContainerInstance.prototype.findService = function (identifier) {\n        return this.services.find(function (service) {\n            if (service.id) {\n                if (identifier instanceof Object &&\n                    service.id instanceof Token_1.Token &&\n                    identifier.service instanceof Token_1.Token) {\n                    return service.id === identifier.service;\n                }\n                return service.id === identifier;\n            }\n            if (service.type && identifier instanceof Function)\n                return service.type === identifier; // todo: not sure why it was here || identifier.prototype instanceof service.type;\n            return false;\n        });\n    };\n    /**\n     * Gets service value.\n     */\n    ContainerInstance.prototype.getServiceValue = function (identifier, service) {\n        var _a;\n        // find if instance of this object already initialized in the container and return it if it is\n        if (service && service.value !== undefined)\n            return service.value;\n        // if named service was requested and its instance was not found plus there is not type to know what to initialize,\n        // this means service was not pre-registered and we throw an exception\n        if ((!service || !service.type) &&\n            (!service || !service.factory) &&\n            (typeof identifier === \"string\" || identifier instanceof Token_1.Token))\n            throw new ServiceNotFoundError_1.ServiceNotFoundError(identifier);\n        // at this point we either have type in service registered, either identifier is a target type\n        var type = undefined;\n        if (service && service.type) {\n            type = service.type;\n        }\n        else if (service && service.id instanceof Function) {\n            type = service.id;\n        }\n        else if (identifier instanceof Function) {\n            type = identifier;\n            // } else if (identifier instanceof Object && (identifier as { service: Token<any> }).service instanceof Token) {\n            //     type = (identifier as { service: Token<any> }).service;\n        }\n        // if service was not found then create a new one and register it\n        if (!service) {\n            if (!type)\n                throw new MissingProvidedServiceTypeError_1.MissingProvidedServiceTypeError(identifier);\n            service = { type: type };\n            this.services.push(service);\n        }\n        // setup constructor parameters for a newly initialized service\n        var paramTypes = type && Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:paramtypes\", type) : undefined;\n        var params = paramTypes ? this.initializeParams(type, paramTypes) : [];\n        // if factory is set then use it to create service instance\n        var value;\n        if (service.factory) {\n            // filter out non-service parameters from created service constructor\n            // non-service parameters can be, lets say Car(name: string, isNew: boolean, engine: Engine)\n            // where name and isNew are non-service parameters and engine is a service parameter\n            params = params.filter(function (param) { return param !== undefined; });\n            if (service.factory instanceof Array) {\n                // use special [Type, \"create\"] syntax to allow factory services\n                // in this case Type instance will be obtained from Container and its method \"create\" will be called\n                value = (_a = this.get(service.factory[0]))[service.factory[1]].apply(_a, params);\n            }\n            else { // regular factory function\n                value = service.factory.apply(service, params.concat([this]));\n            }\n        }\n        else { // otherwise simply create a new object instance\n            if (!type)\n                throw new MissingProvidedServiceTypeError_1.MissingProvidedServiceTypeError(identifier);\n            params.unshift(null);\n            // \"extra feature\" - always pass container instance as the last argument to the service function\n            // this allows us to support javascript where we don't have decorators and emitted metadata about dependencies\n            // need to be injected, and user can use provided container to get instances he needs\n            params.push(this);\n            value = new (type.bind.apply(type, params))();\n        }\n        if (service && !service.transient && value)\n            service.value = value;\n        if (type)\n            this.applyPropertyHandlers(type, value);\n        return value;\n    };\n    /**\n     * Initializes all parameter types for a given target service class.\n     */\n    ContainerInstance.prototype.initializeParams = function (type, paramTypes) {\n        var _this = this;\n        return paramTypes.map(function (paramType, index) {\n            var paramHandler = Container_1.Container.handlers.find(function (handler) { return handler.object === type && handler.index === index; });\n            if (paramHandler)\n                return paramHandler.value(_this);\n            if (paramType && paramType.name && !_this.isTypePrimitive(paramType.name)) {\n                return _this.get(paramType);\n            }\n            return undefined;\n        });\n    };\n    /**\n     * Checks if given type is primitive (e.g. string, boolean, number, object).\n     */\n    ContainerInstance.prototype.isTypePrimitive = function (param) {\n        return [\"string\", \"boolean\", \"number\", \"object\"].indexOf(param.toLowerCase()) !== -1;\n    };\n    /**\n     * Applies all registered handlers on a given target class.\n     */\n    ContainerInstance.prototype.applyPropertyHandlers = function (target, instance) {\n        var _this = this;\n        Container_1.Container.handlers.forEach(function (handler) {\n            if (typeof handler.index === \"number\")\n                return;\n            if (handler.object.constructor !== target && !(target.prototype instanceof handler.object.constructor))\n                return;\n            instance[handler.propertyName] = handler.value(_this);\n        });\n    };\n    return ContainerInstance;\n}());\nexports.ContainerInstance = ContainerInstance;\n\n//# sourceMappingURL=ContainerInstance.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/ContainerInstance.js?");

/***/ }),

/***/ "./node_modules/typedi/Token.js":
/*!**************************************!*\
  !*** ./node_modules/typedi/Token.js ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Used to create unique typed service identifier.\n * Useful when service has only interface, but don't have a class.\n */\nvar Token = /** @class */ (function () {\n    /**\n     * @param name Token name, optional and only used for debugging purposes.\n     */\n    function Token(name) {\n        this.name = name;\n    }\n    return Token;\n}());\nexports.Token = Token;\n\n//# sourceMappingURL=Token.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/Token.js?");

/***/ }),

/***/ "./node_modules/typedi/decorators/Inject.js":
/*!**************************************************!*\
  !*** ./node_modules/typedi/decorators/Inject.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Container_1 = __webpack_require__(/*! ../Container */ \"./node_modules/typedi/Container.js\");\nvar Token_1 = __webpack_require__(/*! ../Token */ \"./node_modules/typedi/Token.js\");\nvar CannotInjectError_1 = __webpack_require__(/*! ../error/CannotInjectError */ \"./node_modules/typedi/error/CannotInjectError.js\");\n/**\n * Injects a service into a class property or constructor parameter.\n */\nfunction Inject(typeOrName) {\n    return function (target, propertyName, index) {\n        if (!typeOrName)\n            typeOrName = function () { return Reflect.getMetadata(\"design:type\", target, propertyName); };\n        Container_1.Container.registerHandler({\n            object: target,\n            propertyName: propertyName,\n            index: index,\n            value: function (containerInstance) {\n                var identifier;\n                if (typeof typeOrName === \"string\") {\n                    identifier = typeOrName;\n                }\n                else if (typeOrName instanceof Token_1.Token) {\n                    identifier = typeOrName;\n                }\n                else {\n                    identifier = typeOrName();\n                }\n                if (identifier === Object)\n                    throw new CannotInjectError_1.CannotInjectError(target, propertyName);\n                return containerInstance.get(identifier);\n            }\n        });\n    };\n}\nexports.Inject = Inject;\n\n//# sourceMappingURL=Inject.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/decorators/Inject.js?");

/***/ }),

/***/ "./node_modules/typedi/decorators/InjectMany.js":
/*!******************************************************!*\
  !*** ./node_modules/typedi/decorators/InjectMany.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Container_1 = __webpack_require__(/*! ../Container */ \"./node_modules/typedi/Container.js\");\nvar Token_1 = __webpack_require__(/*! ../Token */ \"./node_modules/typedi/Token.js\");\nvar CannotInjectError_1 = __webpack_require__(/*! ../error/CannotInjectError */ \"./node_modules/typedi/error/CannotInjectError.js\");\n/**\n * Injects a service into a class property or constructor parameter.\n */\nfunction InjectMany(typeOrName) {\n    return function (target, propertyName, index) {\n        if (!typeOrName)\n            typeOrName = function () { return Reflect.getMetadata(\"design:type\", target, propertyName); };\n        Container_1.Container.registerHandler({\n            object: target,\n            propertyName: propertyName,\n            index: index,\n            value: function (containerInstance) {\n                var identifier;\n                if (typeof typeOrName === \"string\") {\n                    identifier = typeOrName;\n                }\n                else if (typeOrName instanceof Token_1.Token) {\n                    identifier = typeOrName;\n                }\n                else {\n                    identifier = typeOrName();\n                }\n                if (identifier === Object)\n                    throw new CannotInjectError_1.CannotInjectError(target, propertyName);\n                return containerInstance.getMany(identifier);\n            }\n        });\n    };\n}\nexports.InjectMany = InjectMany;\n\n//# sourceMappingURL=InjectMany.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/decorators/InjectMany.js?");

/***/ }),

/***/ "./node_modules/typedi/decorators/Service.js":
/*!***************************************************!*\
  !*** ./node_modules/typedi/decorators/Service.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Container_1 = __webpack_require__(/*! ../Container */ \"./node_modules/typedi/Container.js\");\nvar Token_1 = __webpack_require__(/*! ../Token */ \"./node_modules/typedi/Token.js\");\n/**\n * Marks class as a service that can be injected using container.\n */\nfunction Service(optionsOrServiceName, maybeFactory) {\n    if (arguments.length === 2 || (optionsOrServiceName instanceof Function)) {\n        var serviceId = { service: new Token_1.Token() };\n        var dependencies_1 = arguments.length === 2 ? optionsOrServiceName : [];\n        var factory_1 = arguments.length === 2 ? maybeFactory : optionsOrServiceName;\n        Container_1.Container.set({\n            id: serviceId.service,\n            factory: function (container) {\n                var params = dependencies_1.map(function (dependency) { return container.get(dependency); });\n                return factory_1.apply(void 0, params);\n            }\n        });\n        return serviceId;\n    }\n    else {\n        return function (target) {\n            var service = {\n                type: target\n            };\n            if (typeof optionsOrServiceName === \"string\" || optionsOrServiceName instanceof Token_1.Token) {\n                service.id = optionsOrServiceName;\n                service.multiple = optionsOrServiceName.multiple;\n                service.global = optionsOrServiceName.global || false;\n                service.transient = optionsOrServiceName.transient;\n            }\n            else if (optionsOrServiceName) { // ServiceOptions\n                service.id = optionsOrServiceName.id;\n                service.factory = optionsOrServiceName.factory;\n                service.multiple = optionsOrServiceName.multiple;\n                service.global = optionsOrServiceName.global || false;\n                service.transient = optionsOrServiceName.transient;\n            }\n            Container_1.Container.set(service);\n        };\n    }\n}\nexports.Service = Service;\n\n//# sourceMappingURL=Service.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/decorators/Service.js?");

/***/ }),

/***/ "./node_modules/typedi/error/CannotInjectError.js":
/*!********************************************************!*\
  !*** ./node_modules/typedi/error/CannotInjectError.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Thrown when DI cannot inject value into property decorated by @Inject decorator.\n */\nvar CannotInjectError = /** @class */ (function (_super) {\n    __extends(CannotInjectError, _super);\n    function CannotInjectError(target, propertyName) {\n        var _this = _super.call(this, \"Cannot inject value into \\\"\" + target.constructor.name + \".\" + propertyName + \"\\\". \" +\n            \"Please make sure you setup reflect-metadata properly and you don't use interfaces without service tokens as injection value.\") || this;\n        _this.name = \"ServiceNotFoundError\";\n        Object.setPrototypeOf(_this, CannotInjectError.prototype);\n        return _this;\n    }\n    return CannotInjectError;\n}(Error));\nexports.CannotInjectError = CannotInjectError;\n\n//# sourceMappingURL=CannotInjectError.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/error/CannotInjectError.js?");

/***/ }),

/***/ "./node_modules/typedi/error/MissingProvidedServiceTypeError.js":
/*!**********************************************************************!*\
  !*** ./node_modules/typedi/error/MissingProvidedServiceTypeError.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Thrown when service is registered without type.\n */\nvar MissingProvidedServiceTypeError = /** @class */ (function (_super) {\n    __extends(MissingProvidedServiceTypeError, _super);\n    function MissingProvidedServiceTypeError(identifier) {\n        var _this = _super.call(this, \"Cannot determine a class of the requesting service \\\"\" + identifier + \"\\\"\") || this;\n        _this.name = \"ServiceNotFoundError\";\n        Object.setPrototypeOf(_this, MissingProvidedServiceTypeError.prototype);\n        return _this;\n    }\n    return MissingProvidedServiceTypeError;\n}(Error));\nexports.MissingProvidedServiceTypeError = MissingProvidedServiceTypeError;\n\n//# sourceMappingURL=MissingProvidedServiceTypeError.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/error/MissingProvidedServiceTypeError.js?");

/***/ }),

/***/ "./node_modules/typedi/error/ServiceNotFoundError.js":
/*!***********************************************************!*\
  !*** ./node_modules/typedi/error/ServiceNotFoundError.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Token_1 = __webpack_require__(/*! ../Token */ \"./node_modules/typedi/Token.js\");\n/**\n * Thrown when requested service was not found.\n */\nvar ServiceNotFoundError = /** @class */ (function (_super) {\n    __extends(ServiceNotFoundError, _super);\n    function ServiceNotFoundError(identifier) {\n        var _this = _super.call(this) || this;\n        _this.name = \"ServiceNotFoundError\";\n        if (typeof identifier === \"string\") {\n            _this.message = \"Service \\\"\" + identifier + \"\\\" was not found, looks like it was not registered in the container. \" +\n                (\"Register it by calling Container.set(\\\"\" + identifier + \"\\\", ...) before using service.\");\n        }\n        else if (identifier instanceof Token_1.Token && identifier.name) {\n            _this.message = \"Service \\\"\" + identifier.name + \"\\\" was not found, looks like it was not registered in the container. \" +\n                \"Register it by calling Container.set before using service.\";\n        }\n        else if (identifier instanceof Token_1.Token) {\n            _this.message = \"Service with a given token was not found, looks like it was not registered in the container. \" +\n                \"Register it by calling Container.set before using service.\";\n        }\n        Object.setPrototypeOf(_this, ServiceNotFoundError.prototype);\n        return _this;\n    }\n    return ServiceNotFoundError;\n}(Error));\nexports.ServiceNotFoundError = ServiceNotFoundError;\n\n//# sourceMappingURL=ServiceNotFoundError.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/error/ServiceNotFoundError.js?");

/***/ }),

/***/ "./node_modules/typedi/index.js":
/*!**************************************!*\
  !*** ./node_modules/typedi/index.js ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Container_1 = __webpack_require__(/*! ./Container */ \"./node_modules/typedi/Container.js\");\n__export(__webpack_require__(/*! ./decorators/Service */ \"./node_modules/typedi/decorators/Service.js\"));\n__export(__webpack_require__(/*! ./decorators/Inject */ \"./node_modules/typedi/decorators/Inject.js\"));\n__export(__webpack_require__(/*! ./decorators/InjectMany */ \"./node_modules/typedi/decorators/InjectMany.js\"));\nvar Container_2 = __webpack_require__(/*! ./Container */ \"./node_modules/typedi/Container.js\");\nexports.Container = Container_2.Container;\nvar ContainerInstance_1 = __webpack_require__(/*! ./ContainerInstance */ \"./node_modules/typedi/ContainerInstance.js\");\nexports.ContainerInstance = ContainerInstance_1.ContainerInstance;\nvar Token_1 = __webpack_require__(/*! ./Token */ \"./node_modules/typedi/Token.js\");\nexports.Token = Token_1.Token;\nexports.default = Container_1.Container;\n\n//# sourceMappingURL=index.js.map\n\n\n//# sourceURL=webpack:///./node_modules/typedi/index.js?");

/***/ }),

/***/ "./node_modules/visibilityjs/index.js":
/*!********************************************!*\
  !*** ./node_modules/visibilityjs/index.js ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__(/*! ./lib/visibility.timers.js */ \"./node_modules/visibilityjs/lib/visibility.timers.js\")\n\n\n//# sourceURL=webpack:///./node_modules/visibilityjs/index.js?");

/***/ }),

/***/ "./node_modules/visibilityjs/lib/visibility.core.js":
/*!**********************************************************!*\
  !*** ./node_modules/visibilityjs/lib/visibility.core.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval(";(function (global) {\n    var lastId = -1;\n\n    // Visibility.js allow you to know, that your web page is in the background\n    // tab and thus not visible to the user. This library is wrap under\n    // Page Visibility API. It fix problems with different vendor prefixes and\n    // add high-level useful functions.\n    var self = {\n\n        // Call callback only when page become to visible for user or\n        // call it now if page is visible now or Page Visibility API\n        // doesn’t supported.\n        //\n        // Return false if API isn’t supported, true if page is already visible\n        // or listener ID (you can use it in `unbind` method) if page isn’t\n        // visible now.\n        //\n        //   Visibility.onVisible(function () {\n        //       startIntroAnimation();\n        //   });\n        onVisible: function (callback) {\n            var support = self.isSupported();\n            if ( !support || !self.hidden() ) {\n                callback();\n                return support;\n            }\n\n            var listener = self.change(function (e, state) {\n                if ( !self.hidden() ) {\n                    self.unbind(listener);\n                    callback();\n                }\n            });\n            return listener;\n        },\n\n        // Call callback when visibility will be changed. First argument for\n        // callback will be original event object, second will be visibility\n        // state name.\n        //\n        // Return listener ID to unbind listener by `unbind` method.\n        //\n        // If Page Visibility API doesn’t supported method will be return false\n        // and callback never will be called.\n        //\n        //   Visibility.change(function(e, state) {\n        //       Statistics.visibilityChange(state);\n        //   });\n        //\n        // It is just proxy to `visibilitychange` event, but use vendor prefix.\n        change: function (callback) {\n            if ( !self.isSupported() ) {\n                return false;\n            }\n            lastId += 1;\n            var number = lastId;\n            self._callbacks[number] = callback;\n            self._listen();\n            return number;\n        },\n\n        // Remove `change` listener by it ID.\n        //\n        //   var id = Visibility.change(function(e, state) {\n        //       firstChangeCallback();\n        //       Visibility.unbind(id);\n        //   });\n        unbind: function (id) {\n            delete self._callbacks[id];\n        },\n\n        // Call `callback` in any state, expect “prerender”. If current state\n        // is “prerender” it will wait until state will be changed.\n        // If Page Visibility API doesn’t supported, it will call `callback`\n        // immediately.\n        //\n        // Return false if API isn’t supported, true if page is already after\n        // prerendering or listener ID (you can use it in `unbind` method)\n        // if page is prerended now.\n        //\n        //   Visibility.afterPrerendering(function () {\n        //       Statistics.countVisitor();\n        //   });\n        afterPrerendering: function (callback) {\n            var support   = self.isSupported();\n            var prerender = 'prerender';\n\n            if ( !support || prerender != self.state() ) {\n                callback();\n                return support;\n            }\n\n            var listener = self.change(function (e, state) {\n                if ( prerender != state ) {\n                    self.unbind(listener);\n                    callback();\n                }\n            });\n            return listener;\n        },\n\n        // Return true if page now isn’t visible to user.\n        //\n        //   if ( !Visibility.hidden() ) {\n        //       VideoPlayer.play();\n        //   }\n        //\n        // It is just proxy to `document.hidden`, but use vendor prefix.\n        hidden: function () {\n            return !!(self._doc.hidden || self._doc.webkitHidden);\n        },\n\n        // Return visibility state: 'visible', 'hidden' or 'prerender'.\n        //\n        //   if ( 'prerender' == Visibility.state() ) {\n        //       Statistics.pageIsPrerendering();\n        //   }\n        //\n        // Don’t use `Visibility.state()` to detect, is page visible, because\n        // visibility states can extend in next API versions.\n        // Use more simpler and general `Visibility.hidden()` for this cases.\n        //\n        // It is just proxy to `document.visibilityState`, but use\n        // vendor prefix.\n        state: function () {\n            return self._doc.visibilityState       ||\n                   self._doc.webkitVisibilityState ||\n                   'visible';\n        },\n\n        // Return true if browser support Page Visibility API.\n        // refs: https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API\n        //\n        //   if ( Visibility.isSupported() ) {\n        //       Statistics.startTrackingVisibility();\n        //       Visibility.change(function(e, state)) {\n        //           Statistics.trackVisibility(state);\n        //       });\n        //   }\n        isSupported: function () {\n            return self._doc.hidden !== undefined || self._doc.webkitHidden !== undefined;\n        },\n\n        // Link to document object to change it in tests.\n        _doc: document || {},\n\n        // Callbacks from `change` method, that wait visibility changes.\n        _callbacks: { },\n\n        // Listener for `visibilitychange` event.\n        _change: function(event) {\n            var state = self.state();\n\n            for ( var i in self._callbacks ) {\n                self._callbacks[i].call(self._doc, event, state);\n            }\n        },\n\n        // Set listener for `visibilitychange` event.\n        _listen: function () {\n            if ( self._init ) {\n                return;\n            }\n\n            var event = 'visibilitychange';\n            if ( self._doc.webkitVisibilityState ) {\n                event = 'webkit' + event;\n            }\n\n            var listener = function () {\n                self._change.apply(self, arguments);\n            };\n            if ( self._doc.addEventListener ) {\n                self._doc.addEventListener(event, listener);\n            } else {\n                self._doc.attachEvent(event, listener);\n            }\n            self._init = true;\n        }\n\n    };\n\n    if (  true && module.exports ) {\n        module.exports = self;\n    } else {\n        global.Visibility = self;\n    }\n\n})(this);\n\n\n//# sourceURL=webpack:///./node_modules/visibilityjs/lib/visibility.core.js?");

/***/ }),

/***/ "./node_modules/visibilityjs/lib/visibility.timers.js":
/*!************************************************************!*\
  !*** ./node_modules/visibilityjs/lib/visibility.timers.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval(";(function (window) {\n    var lastTimer = -1;\n\n    var install = function (Visibility) {\n\n        // Run callback every `interval` milliseconds if page is visible and\n        // every `hiddenInterval` milliseconds if page is hidden.\n        //\n        //   Visibility.every(60 * 1000, 5 * 60 * 1000, function () {\n        //       checkNewMails();\n        //   });\n        //\n        // You can skip `hiddenInterval` and callback will be called only if\n        // page is visible.\n        //\n        //   Visibility.every(1000, function () {\n        //       updateCountdown();\n        //   });\n        //\n        // It is analog of `setInterval(callback, interval)` but use visibility\n        // state.\n        //\n        // It return timer ID, that you can use in `Visibility.stop(id)` to stop\n        // timer (`clearInterval` analog).\n        // Warning: timer ID is different from interval ID from `setInterval`,\n        // so don’t use it in `clearInterval`.\n        //\n        // On change state from hidden to visible timers will be execute.\n        Visibility.every = function (interval, hiddenInterval, callback) {\n            Visibility._time();\n\n            if ( !callback ) {\n                callback = hiddenInterval;\n                hiddenInterval = null;\n            }\n\n            lastTimer += 1;\n            var number = lastTimer;\n\n            Visibility._timers[number] = {\n                visible:  interval,\n                hidden:   hiddenInterval,\n                callback: callback\n            };\n            Visibility._run(number, false);\n\n            if ( Visibility.isSupported() ) {\n                Visibility._listen();\n            }\n            return number;\n        };\n\n        // Stop timer from `every` method by it ID (`every` method return it).\n        //\n        //   slideshow = Visibility.every(5 * 1000, function () {\n        //       changeSlide();\n        //   });\n        //   $('.stopSlideshow').click(function () {\n        //       Visibility.stop(slideshow);\n        //   });\n        Visibility.stop = function(id) {\n            if ( !Visibility._timers[id] ) {\n                return false;\n            }\n            Visibility._stop(id);\n            delete Visibility._timers[id];\n            return true;\n        };\n\n        // Callbacks and intervals added by `every` method.\n        Visibility._timers = { };\n\n        // Initialize variables on page loading.\n        Visibility._time = function () {\n            if ( Visibility._timed ) {\n                return;\n            }\n            Visibility._timed     = true;\n            Visibility._wasHidden = Visibility.hidden();\n\n            Visibility.change(function () {\n                Visibility._stopRun();\n                Visibility._wasHidden = Visibility.hidden();\n            });\n        };\n\n        // Try to run timer from every method by it’s ID. It will be use\n        // `interval` or `hiddenInterval` depending on visibility state.\n        // If page is hidden and `hiddenInterval` is null,\n        // it will not run timer.\n        //\n        // Argument `runNow` say, that timers must be execute now too.\n        Visibility._run = function (id, runNow) {\n            var interval,\n                timer = Visibility._timers[id];\n\n            if ( Visibility.hidden() ) {\n                if ( null === timer.hidden ) {\n                    return;\n                }\n                interval = timer.hidden;\n            } else {\n                interval = timer.visible;\n            }\n\n            var runner = function () {\n                timer.last = new Date();\n                timer.callback.call(window);\n            }\n\n            if ( runNow ) {\n                var now  = new Date();\n                var last = now - timer.last ;\n\n                if ( interval > last ) {\n                    timer.delay = setTimeout(function () {\n                        timer.id = setInterval(runner, interval);\n                        runner();\n                    }, interval - last);\n                } else {\n                    timer.id = setInterval(runner, interval);\n                    runner();\n                }\n\n            } else {\n              timer.id = setInterval(runner, interval);\n            }\n        };\n\n        // Stop timer from `every` method by it’s ID.\n        Visibility._stop = function (id) {\n            var timer = Visibility._timers[id];\n            clearInterval(timer.id);\n            clearTimeout(timer.delay);\n            delete timer.id;\n            delete timer.delay;\n        };\n\n        // Listener for `visibilitychange` event.\n        Visibility._stopRun = function (event) {\n            var isHidden  = Visibility.hidden(),\n                wasHidden = Visibility._wasHidden;\n\n            if ( (isHidden && !wasHidden) || (!isHidden && wasHidden) ) {\n                for ( var i in Visibility._timers ) {\n                    Visibility._stop(i);\n                    Visibility._run(i, !isHidden);\n                }\n            }\n        };\n\n        return Visibility;\n    }\n\n    if (  true && module.exports ) {\n        module.exports = install(__webpack_require__(/*! ./visibility.core */ \"./node_modules/visibilityjs/lib/visibility.core.js\"));\n    } else {\n        install(window.Visibility || __webpack_require__(/*! ./visibility.core */ \"./node_modules/visibilityjs/lib/visibility.core.js\"))\n    }\n\n})(window);\n\n\n//# sourceURL=webpack:///./node_modules/visibilityjs/lib/visibility.timers.js?");

/***/ }),

/***/ "./node_modules/webpack/buildin/global.js":
/*!***********************************!*\
  !*** (webpack)/buildin/global.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///(webpack)/buildin/global.js?");

/***/ }),

/***/ "./src/blocker/blocker-break-modal.pug":
/*!*********************************************!*\
  !*** ./src/blocker/blocker-break-modal.pug ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var pug = __webpack_require__(/*! ../../node_modules/pug-runtime/index.js */ \"./node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n    var locals_for_with = (locals || {});\n    \n    (function (breakTimeLeft, hostname, prefix) {\n      var prefix = prefix + '-break-modal'\npug_html = pug_html + \"\\u003Cform\" + (pug.attr(\"id\", prefix, true, true)) + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__message'], [true]), false, true)) + \"\\u003EYou seem to visit the \" + (pug.escape(null == (pug_interp = hostname) ? \"\" : pug_interp)) + \" in restricted time, but you can take a break (\" + (pug.escape(null == (pug_interp = breakTimeLeft.toFixed(1)) ? \"\" : pug_interp)) + \" minutes have left)\\u003C\\u002Fdiv\\u003E\\u003Clabel\" + (pug.attr(\"class\", pug.classes([prefix + '__field'], [true]), false, true)) + \"\\u003E\\u003Cinput type=\\\"checkbox\\\" name=\\\"remember\\\"\\u003EDon't ask me today any more\\u003C\\u002Flabel\\u003E\\u003C\\u002Fform\\u003E\";\n    }.call(this, \"breakTimeLeft\" in locals_for_with ?\n        locals_for_with.breakTimeLeft :\n        typeof breakTimeLeft !== 'undefined' ? breakTimeLeft : undefined, \"hostname\" in locals_for_with ?\n        locals_for_with.hostname :\n        typeof hostname !== 'undefined' ? hostname : undefined, \"prefix\" in locals_for_with ?\n        locals_for_with.prefix :\n        typeof prefix !== 'undefined' ? prefix : undefined));\n    ;;return pug_html;};\nmodule.exports = { default: template, template: template };\n\n//# sourceURL=webpack:///./src/blocker/blocker-break-modal.pug?");

/***/ }),

/***/ "./src/blocker/blocker-break-modal.scss":
/*!**********************************************!*\
  !*** ./src/blocker/blocker-break-modal.scss ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js??ref--7-2!../../node_modules/sass-loader/dist/cjs.js??ref--7-3!./blocker-break-modal.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/blocker/blocker-break-modal.scss\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./src/blocker/blocker-break-modal.scss?");

/***/ }),

/***/ "./src/blocker/blocker-page.pug":
/*!**************************************!*\
  !*** ./src/blocker/blocker-page.pug ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var pug = __webpack_require__(/*! ../../node_modules/pug-runtime/index.js */ \"./node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n    var locals_for_with = (locals || {});\n    \n    (function (prefix, reason, spentTime, unlockTime) {\n      var prefix = prefix + '-page'\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"id\", prefix, true, true)) + \"\\u003E\\u003Ch1\" + (pug.attr(\"class\", pug.classes([prefix + '__title'], [true]), false, true)) + \"\\u003EBlocked\\u003C\\u002Fh1\\u003E\\u003Ch3\" + (pug.attr(\"class\", pug.classes([prefix + '__subtitle'], [true]), false, true)) + \"\\u003E\";\nif (reason === 'schedule') {\npug_html = pug_html + \"You have visited the website during the time that was marked as restricted\";\n}\nelse\nif (reason === 'limit') {\npug_html = pug_html + \"You exceeded the time limits set for current website\";\n}\nelse\nif (reason === 'breakEnd') {\npug_html = pug_html + \"Your break during the work time is over\";\n}\npug_html = pug_html + \"\\u003C\\u002Fh3\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__actions-block'], [true]), false, true)) + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__action'], [true]), false, true)+\" data-action=\\\"settings\\\"\") + \"\\u003E\\u003Csvg xmlns=\\\"http:\\u002F\\u002Fwww.w3.org\\u002F2000\\u002Fsvg\\\" enable-background=\\\"new 0 0 24 24\\\" viewBox=\\\"0 0 24 24\\\"\\u003E\\u003Cg\\u003E\\u003Crect fill=\\\"none\\\" height=\\\"24\\\" width=\\\"24\\\"\\u002F\\u003E\\u003C\\u002Fg\\u003E\\u003Cg\\u003E\\u003Cg\\u003E\\u003Cpath d=\\\"M14.17,13.71l1.4-2.42c0.09-0.15,0.05-0.34-0.08-0.45l-1.48-1.16c0.03-0.22,0.05-0.45,0.05-0.68s-0.02-0.46-0.05-0.69 l1.48-1.16c0.13-0.11,0.17-0.3,0.08-0.45l-1.4-2.42c-0.09-0.15-0.27-0.21-0.43-0.15L12,4.83c-0.36-0.28-0.75-0.51-1.18-0.69 l-0.26-1.85C10.53,2.13,10.38,2,10.21,2h-2.8C7.24,2,7.09,2.13,7.06,2.3L6.8,4.15C6.38,4.33,5.98,4.56,5.62,4.84l-1.74-0.7 c-0.16-0.06-0.34,0-0.43,0.15l-1.4,2.42C1.96,6.86,2,7.05,2.13,7.16l1.48,1.16C3.58,8.54,3.56,8.77,3.56,9s0.02,0.46,0.05,0.69 l-1.48,1.16C2,10.96,1.96,11.15,2.05,11.3l1.4,2.42c0.09,0.15,0.27,0.21,0.43,0.15l1.74-0.7c0.36,0.28,0.75,0.51,1.18,0.69 l0.26,1.85C7.09,15.87,7.24,16,7.41,16h2.8c0.17,0,0.32-0.13,0.35-0.3l0.26-1.85c0.42-0.18,0.82-0.41,1.18-0.69l1.74,0.7 C13.9,13.92,14.08,13.86,14.17,13.71z M8.81,11c-1.1,0-2-0.9-2-2c0-1.1,0.9-2,2-2s2,0.9,2,2C10.81,10.1,9.91,11,8.81,11z\\\"\\u002F\\u003E\\u003Cpath d=\\\"M21.92,18.67l-0.96-0.74c0.02-0.14,0.04-0.29,0.04-0.44c0-0.15-0.01-0.3-0.04-0.44l0.95-0.74 c0.08-0.07,0.11-0.19,0.05-0.29l-0.9-1.55c-0.05-0.1-0.17-0.13-0.28-0.1l-1.11,0.45c-0.23-0.18-0.48-0.33-0.76-0.44l-0.17-1.18 C18.73,13.08,18.63,13,18.53,13h-1.79c-0.11,0-0.21,0.08-0.22,0.19l-0.17,1.18c-0.27,0.12-0.53,0.26-0.76,0.44l-1.11-0.45 c-0.1-0.04-0.22,0-0.28,0.1l-0.9,1.55c-0.05,0.1-0.04,0.22,0.05,0.29l0.95,0.74c-0.02,0.14-0.03,0.29-0.03,0.44 c0,0.15,0.01,0.3,0.03,0.44l-0.95,0.74c-0.08,0.07-0.11,0.19-0.05,0.29l0.9,1.55c0.05,0.1,0.17,0.13,0.28,0.1l1.11-0.45 c0.23,0.18,0.48,0.33,0.76,0.44l0.17,1.18c0.02,0.11,0.11,0.19,0.22,0.19h1.79c0.11,0,0.21-0.08,0.22-0.19l0.17-1.18 c0.27-0.12,0.53-0.26,0.75-0.44l1.12,0.45c0.1,0.04,0.22,0,0.28-0.1l0.9-1.55C22.03,18.86,22,18.74,21.92,18.67z M17.63,18.83 c-0.74,0-1.35-0.6-1.35-1.35s0.6-1.35,1.35-1.35s1.35,0.6,1.35,1.35S18.37,18.83,17.63,18.83z\\\"\\u002F\\u003E\\u003C\\u002Fg\\u003E\\u003C\\u002Fg\\u003E\\u003C\\u002Fsvg\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([prefix + '__action-name'], [true]), false, true)) + \"\\u003ESettings\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__action'], [true]), false, true)) + \"\\u003E\\u003Csvg xmlns=\\\"http:\\u002F\\u002Fwww.w3.org\\u002F2000\\u002Fsvg\\\" viewBox=\\\"0 0 24 24\\\"\\u003E\\u003Cpath d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"\\u002F\\u003E\\u003Cpath d=\\\"M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z\\\"\\u002F\\u003E\\u003C\\u002Fsvg\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([prefix + '__action-name'], [true]), false, true)) + \"\\u003ETime you spent:\\u003Cbr\\u003E\" + (pug.escape(null == (pug_interp = (spentTime / 6e4).toFixed(1)) ? \"\" : pug_interp)) + \" minutes\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__action'], [true]), false, true)) + \"\\u003E\\u003Csvg xmlns=\\\"http:\\u002F\\u002Fwww.w3.org\\u002F2000\\u002Fsvg\\\" viewBox=\\\"0 0 24 24\\\"\\u003E\\u003Cpath d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"\\u002F\\u003E\\u003Cpath d=\\\"M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 12H6V10h12v10z\\\"\\u002F\\u003E\\u003C\\u002Fsvg\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([prefix + '__action-name'], [true]), false, true)) + \"\\u003EWill be unlocked:\\u003Cbr\\u003E\" + (pug.escape(null == (pug_interp = unlockTime) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n    }.call(this, \"prefix\" in locals_for_with ?\n        locals_for_with.prefix :\n        typeof prefix !== 'undefined' ? prefix : undefined, \"reason\" in locals_for_with ?\n        locals_for_with.reason :\n        typeof reason !== 'undefined' ? reason : undefined, \"spentTime\" in locals_for_with ?\n        locals_for_with.spentTime :\n        typeof spentTime !== 'undefined' ? spentTime : undefined, \"unlockTime\" in locals_for_with ?\n        locals_for_with.unlockTime :\n        typeof unlockTime !== 'undefined' ? unlockTime : undefined));\n    ;;return pug_html;};\nmodule.exports = { default: template, template: template };\n\n//# sourceURL=webpack:///./src/blocker/blocker-page.pug?");

/***/ }),

/***/ "./src/blocker/blocker-page.scss":
/*!***************************************!*\
  !*** ./src/blocker/blocker-page.scss ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js??ref--7-2!../../node_modules/sass-loader/dist/cjs.js??ref--7-3!./blocker-page.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/blocker/blocker-page.scss\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./src/blocker/blocker-page.scss?");

/***/ }),

/***/ "./src/blocker/blocker.ts":
/*!********************************!*\
  !*** ./src/blocker/blocker.ts ***!
  \********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Blocker = void 0;\nvar typedi_1 = __webpack_require__(/*! typedi */ \"./node_modules/typedi/index.js\");\nvar settings_1 = __webpack_require__(/*! ../settings */ \"./src/settings/index.ts\");\nvar modal_1 = __webpack_require__(/*! ../modal */ \"./src/modal/index.ts\");\nvar window_token_1 = __webpack_require__(/*! ../window-token */ \"./src/window-token.ts\");\nvar clock_1 = __webpack_require__(/*! ../clock */ \"./src/clock/index.ts\");\nvar blocker_page_pug_1 = __webpack_require__(/*! ./blocker-page.pug */ \"./src/blocker/blocker-page.pug\");\nvar blocker_break_modal_pug_1 = __webpack_require__(/*! ./blocker-break-modal.pug */ \"./src/blocker/blocker-break-modal.pug\");\n__webpack_require__(/*! ./blocker-page.scss */ \"./src/blocker/blocker-page.scss\");\n__webpack_require__(/*! ./blocker-break-modal.scss */ \"./src/blocker/blocker-break-modal.scss\");\nvar Blocker = /** @class */ (function () {\n    function Blocker(container, window, clock, settings, modal) {\n        var _this = this;\n        if (window === void 0) { window = typedi_1.Container.get(window_token_1.WINDOW_TOKEN); }\n        if (clock === void 0) { clock = typedi_1.Container.get(clock_1.Clock); }\n        if (settings === void 0) { settings = typedi_1.Container.get(settings_1.Settings); }\n        if (modal === void 0) { modal = typedi_1.Container.get(modal_1.Modal); }\n        this.window = window;\n        this.clock = clock;\n        this.settings = settings;\n        this.modal = modal;\n        this.prefix = \"youtube-blocker\" + \"__blocker\";\n        this.STORE_KEY = \"[Youtube Blocker]\" + \" Blocker\";\n        this._timerId = null;\n        this.handleBlockOrDelay();\n        this.settings.onSettingsChange(function () { return _this.reset(); });\n    }\n    Object.defineProperty(Blocker.prototype, \"timerId\", {\n        set: function (value) {\n            if (this._timerId) {\n                clearTimeout(this._timerId);\n            }\n            this._timerId = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Blocker.prototype.reset = function () {\n        if (this._timerId) {\n            clearTimeout(this._timerId);\n        }\n        this.handleBlockOrDelay();\n    };\n    Blocker.prototype.handleBlockOrDelay = function () {\n        var _this = this;\n        var blockData = this.getBlockData();\n        if (!blockData) {\n            return;\n        }\n        if (blockData.remain <= 0) {\n            this.handleBlock(blockData.reason);\n        }\n        else {\n            this.timerId = this.window.setTimeout(function () { return _this.handleBlockOrDelay(); }, blockData.remain);\n        }\n    };\n    Blocker.prototype.getBlockData = function () {\n        var timeToBlock = null;\n        var dailyLimit = this.settings.getSetting(\"dailyLimit\");\n        if (dailyLimit !== null) {\n            timeToBlock = {\n                remain: Math.max(0, dailyLimit * 3.6e6 - this.clock.getTimeSpent()),\n                reason: \"limit\",\n            };\n        }\n        var dayOfTheWeek = (new Date().getDay() + 6) % 7; // mon..sun = 0..6\n        if (this.settings.getSetting(\"days\").includes(dayOfTheWeek)) {\n            var todayDateString = new Date().toISOString().slice(0, 10);\n            var scheduleBlockStart = this.settings.getSetting(\"startTime\");\n            var scheduleBlockEnd = this.settings.getSetting(\"endTime\");\n            var blockTimeStart = Date.parse(todayDateString + \"T\" + scheduleBlockStart);\n            var blockTimeStop = Date.parse(todayDateString + \"T\" + scheduleBlockEnd);\n            var timeToScheduleBlock = blockTimeStart - Date.now();\n            var timeToScheduleUnlock = blockTimeStop - Date.now();\n            if (timeToScheduleBlock < 0 && timeToScheduleUnlock > 0) {\n                return { remain: 0, reason: \"schedule\" };\n            }\n            if (timeToScheduleBlock > 0) {\n                if (!timeToBlock || timeToScheduleBlock < (timeToBlock === null || timeToBlock === void 0 ? void 0 : timeToBlock.remain)) {\n                    return {\n                        reason: \"schedule\",\n                        remain: timeToScheduleBlock,\n                    };\n                }\n                return timeToBlock;\n            }\n        }\n        return timeToBlock;\n    };\n    Blocker.prototype.handleBlock = function (reason) {\n        var _this = this;\n        var _a;\n        this.clock.stop();\n        var breakTimeLeft = Math.max(0, ((_a = this.settings.getSetting(\"breakDuration\")) !== null && _a !== void 0 ? _a : 0) * 60 * 1000 -\n            this.clock.getBreakTimeSpent());\n        var breakState = this.getBreakState();\n        if (reason === \"schedule\" && breakState) {\n            this.block(reason);\n        }\n        else if (reason === \"schedule\" &&\n            this.settings.getSetting(\"breakAllowed\") &&\n            breakTimeLeft > 0) {\n            if (breakState === false) {\n                this.breakStart(breakTimeLeft);\n                return;\n            }\n            var templateElement_1 = this.window.document.createElement(\"div\");\n            templateElement_1.innerHTML = blocker_break_modal_pug_1.default(__assign(__assign({}, this), { hostname: this.window.location.hostname, breakTimeLeft: breakTimeLeft / 60 / 1000 }));\n            this.modal\n                .show({\n                title: \"Block\",\n                content: templateElement_1,\n                okButton: \"Take a break\",\n                closeButton: \"Block\",\n            })\n                .then(function (ok) {\n                var form = templateElement_1.querySelector(\"#\" + _this.prefix + \"-break-modal\");\n                var formData = new FormData(form);\n                if (formData.get(\"remember\") === \"on\") {\n                    _this.saveState({\n                        break: {\n                            value: !ok,\n                            expire: new Date().toISOString().slice(0, 10),\n                        },\n                    });\n                }\n                if (!ok) {\n                    _this.block(reason);\n                }\n                else {\n                    _this.breakStart(breakTimeLeft);\n                }\n            });\n            return;\n        }\n        else {\n            this.block(reason);\n            this.modal.show({\n                title: \"Block\",\n                content: \"The \" + this.window.location.hostname + \" was blocked. Reason: \" + reason,\n            });\n            return;\n        }\n    };\n    Blocker.prototype.breakStart = function (breakTimeLeft) {\n        var _this = this;\n        this.clock.startBreakPeriod();\n        this.timerId = this.window.setTimeout(function () {\n            var blockData = _this.getBlockData();\n            if (blockData) {\n                _this.handleBlock(\"breakEnd\");\n            }\n        }, breakTimeLeft);\n    };\n    Blocker.prototype.getBreakState = function () {\n        var state = this.loadState();\n        if (!state || state.break.expire < new Date().toISOString().slice(0, 10)) {\n            return null;\n        }\n        return state.break.value;\n    };\n    Blocker.prototype.loadState = function () {\n        var strData = this.window.localStorage.getItem(this.STORE_KEY);\n        if (strData === null) {\n            return null;\n        }\n        return JSON.parse(strData);\n    };\n    Blocker.prototype.saveState = function (state) {\n        this.window.localStorage.setItem(this.STORE_KEY, JSON.stringify(state));\n    };\n    Blocker.prototype.block = function (reason) {\n        this.clock.stop();\n        var wrapper = this.window.document.createElement(\"div\");\n        var unlockTime;\n        if (reason === \"limit\") {\n            unlockTime = \"tomorrow\";\n        }\n        else {\n            unlockTime = this.settings.getSetting(\"endTime\");\n        }\n        wrapper.innerHTML = blocker_page_pug_1.default(__assign(__assign({}, this), { spentTime: this.clock.getTimeSpent(), reason: reason,\n            unlockTime: unlockTime }));\n        this.bindInteractions(wrapper);\n        var videoElement = this.window.document\n            .getElementsByTagName(\"video\")\n            .item(0);\n        if (videoElement) {\n            videoElement.pause();\n            videoElement.removeAttribute(\"src\");\n            videoElement.load();\n        }\n        this.window.document.body.innerHTML = \"\";\n        this.window.document.head\n            .querySelectorAll(\"script\")\n            .forEach(function (script) { return script.remove(); });\n        this.destroyYtLogic();\n        this.cutNetwork();\n        this.window.document.body.appendChild(wrapper.firstElementChild);\n    };\n    Blocker.prototype.destroyYtLogic = function () {\n        if (this.window.ytEventsEventsListeners) {\n            Object.values(this.window.ytEventsEventsListeners).forEach(function (_a) {\n                var target = _a[0], event = _a[1], callback = _a[2];\n                return target.removeEventListener(event, callback);\n            });\n        }\n        for (var _i = 0, _a = Object.keys(this.window); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            if (prop.startsWith(\"yt\") && this.window.hasOwnProperty(prop)) {\n                try {\n                    delete this.window[prop];\n                }\n                catch (e) { }\n            }\n        }\n        var lastIntervalId = this.window.setInterval(this.noop, -1);\n        for (var i = 1; i < lastIntervalId; i++) {\n            this.window.clearInterval(i);\n        }\n        var lastTimeoutId = this.window.setTimeout(this.noop, -1);\n        for (var i = 1; i < lastTimeoutId; i++) {\n            this.window.clearTimeout(i);\n        }\n    };\n    Blocker.prototype.cutNetwork = function () {\n        try {\n            XMLHttpRequest.prototype.send = this.noop;\n            this.window.navigator.sendBeacon = function () { return false; };\n        }\n        catch (e) { }\n    };\n    Blocker.prototype.bindInteractions = function (element) {\n        var _this = this;\n        var readOnlySettings = this.settings.getSetting(\"readonlyWhenBlocked\");\n        element\n            .querySelector('[data-action=\"settings\"]')\n            .addEventListener(\"click\", function () {\n            return _this.settings.showSettingsDialog(readOnlySettings);\n        });\n    };\n    Blocker.prototype.noop = function () {\n        return undefined;\n    };\n    Blocker = __decorate([\n        typedi_1.Service(),\n        __metadata(\"design:paramtypes\", [typedi_1.Container, Object, Object, Object, Object])\n    ], Blocker);\n    return Blocker;\n}());\nexports.Blocker = Blocker;\n\n\n//# sourceURL=webpack:///./src/blocker/blocker.ts?");

/***/ }),

/***/ "./src/blocker/index.ts":
/*!******************************!*\
  !*** ./src/blocker/index.ts ***!
  \******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(__webpack_require__(/*! ./blocker */ \"./src/blocker/blocker.ts\"), exports);\n\n\n//# sourceURL=webpack:///./src/blocker/index.ts?");

/***/ }),

/***/ "./src/clock/clock.ts":
/*!****************************!*\
  !*** ./src/clock/clock.ts ***!
  \****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Clock = void 0;\nvar typedi_1 = __webpack_require__(/*! typedi */ \"./node_modules/typedi/index.js\");\nvar window_token_1 = __webpack_require__(/*! ../window-token */ \"./src/window-token.ts\");\nvar visibility = __webpack_require__(/*! visibilityjs */ \"./node_modules/visibilityjs/index.js\");\nvar Clock = /** @class */ (function () {\n    function Clock(container, window) {\n        var _this = this;\n        if (window === void 0) { window = typedi_1.Container.get(window_token_1.WINDOW_TOKEN); }\n        this.window = window;\n        this.clockStartedAt = null;\n        this.breakStartedAt = null;\n        this.breakResumed = false;\n        visibility.change(function (event, state) {\n            if (state === \"visible\") {\n                _this.start();\n            }\n            else {\n                _this.stop();\n            }\n        });\n        window.addEventListener(\"beforeunload\", function () { return _this.stop(); });\n    }\n    Clock_1 = Clock;\n    Clock.prototype.start = function () {\n        var _a;\n        this.clockStartedAt = (_a = this.clockStartedAt) !== null && _a !== void 0 ? _a : new Date();\n        if (this.breakResumed) {\n            this.breakStartedAt = new Date();\n        }\n    };\n    Clock.prototype.stop = function () {\n        if (this.clockStartedAt === null) {\n            return;\n        }\n        this.saveState();\n        this.clockStartedAt = null;\n        this.breakResumed = !!this.breakStartedAt;\n        this.breakStartedAt = null;\n    };\n    Clock.prototype.startBreakPeriod = function () {\n        var _a;\n        this.breakStartedAt = (_a = this.breakStartedAt) !== null && _a !== void 0 ? _a : new Date();\n        this.start();\n    };\n    Clock.prototype.getTimeSpent = function (from, until) {\n        if (from === void 0) { from = new Date(this.getDateString() + \"T00:00:00Z\"); }\n        if (until === void 0) { until = new Date(); }\n        if (!this.clockStartedAt) {\n            return this.getDateData(this.getDateString(from)).timeSpent;\n        }\n        return (this.getDateData(this.getDateString(from)).timeSpent +\n            this.computeSpentTime(this.clockStartedAt, from, until));\n    };\n    Clock.prototype.getBreakTimeSpent = function (from, until) {\n        if (from === void 0) { from = new Date(this.getDateString() + \"T00:00:00Z\"); }\n        if (until === void 0) { until = new Date(); }\n        if (!this.breakStartedAt) {\n            return this.getDateData(this.getDateString(from)).breakTimeSpent;\n        }\n        return (this.getDateData(this.getDateString(from)).breakTimeSpent +\n            this.computeSpentTime(this.breakStartedAt, from, until));\n    };\n    Clock.prototype.computeSpentTime = function (start, from, until) {\n        if (from === void 0) { from = new Date(this.getDateString() + \"T00:00:00Z\"); }\n        if (until === void 0) { until = new Date(); }\n        var timeStart = Math.max(start.getTime(), from.getTime());\n        return Math.max(0, until.getTime() - timeStart);\n    };\n    Clock.prototype.getDateString = function (date) {\n        if (date === void 0) { date = new Date(); }\n        return date.toISOString().slice(0, 10);\n    };\n    Clock.prototype.saveState = function () {\n        var _a;\n        var storeData = (_a = this.loadState()) !== null && _a !== void 0 ? _a : {};\n        if (this.clockStartedAt &&\n            this.clockStartedAt.getDate() !== new Date().getDate()) {\n            var yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000);\n            var yesterdayDate = this.getDateString(yesterday);\n            var yesterdayStartDate = new Date(yesterdayDate + \"T00:00:00Z\");\n            var todayStartDate = new Date(this.getDateString() + \"T00:00:00Z\");\n            storeData[yesterdayDate] = {\n                timeSpent: this.getTimeSpent(yesterdayStartDate, todayStartDate),\n                breakTimeSpent: this.getBreakTimeSpent(yesterdayStartDate, todayStartDate),\n            };\n        }\n        var dateKey = this.getDateString();\n        storeData[dateKey] = {\n            timeSpent: this.getTimeSpent(),\n            breakTimeSpent: this.getBreakTimeSpent(),\n        };\n        this.window.localStorage.setItem(Clock_1.STORE_KEY, JSON.stringify(storeData));\n    };\n    Clock.prototype.loadState = function () {\n        var strData = this.window.localStorage.getItem(Clock_1.STORE_KEY);\n        if (strData === null) {\n            return null;\n        }\n        return JSON.parse(strData);\n    };\n    Clock.prototype.getDateData = function (dateKey) {\n        var _a, _b;\n        var data = (_a = this.loadState()) !== null && _a !== void 0 ? _a : {};\n        return (_b = data[dateKey]) !== null && _b !== void 0 ? _b : { breakTimeSpent: 0, timeSpent: 0 };\n    };\n    var Clock_1;\n    Clock.STORE_KEY = \"[Youtube Blocker]\" + \" Clock\";\n    Clock = Clock_1 = __decorate([\n        typedi_1.Service(),\n        __metadata(\"design:paramtypes\", [typedi_1.Container, Object])\n    ], Clock);\n    return Clock;\n}());\nexports.Clock = Clock;\n\n\n//# sourceURL=webpack:///./src/clock/clock.ts?");

/***/ }),

/***/ "./src/clock/index.ts":
/*!****************************!*\
  !*** ./src/clock/index.ts ***!
  \****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(__webpack_require__(/*! ./clock */ \"./src/clock/clock.ts\"), exports);\n\n\n//# sourceURL=webpack:///./src/clock/index.ts?");

/***/ }),

/***/ "./src/flatpickr.ts":
/*!**************************!*\
  !*** ./src/flatpickr.ts ***!
  \**************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n/**\n * Used library has poor types which forces to import multiple modules separately\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flatpickr = void 0;\n__webpack_require__(/*! flatpickr/dist/themes/light.css */ \"./node_modules/flatpickr/dist/themes/light.css\");\nvar _flatpickr = __webpack_require__(/*! flatpickr */ \"./node_modules/flatpickr/dist/flatpickr.js\");\nexports.flatpickr = _flatpickr;\n\n\n//# sourceURL=webpack:///./src/flatpickr.ts?");

/***/ }),

/***/ "./src/index.ts":
/*!**********************!*\
  !*** ./src/index.ts ***!
  \**********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(/*! reflect-metadata */ \"./node_modules/reflect-metadata/Reflect.js\");\nvar typedi_1 = __webpack_require__(/*! typedi */ \"./node_modules/typedi/index.js\");\nvar clock_1 = __webpack_require__(/*! ./clock */ \"./src/clock/index.ts\");\nvar settings_1 = __webpack_require__(/*! ./settings */ \"./src/settings/index.ts\");\nvar window_token_1 = __webpack_require__(/*! ./window-token */ \"./src/window-token.ts\");\nvar blocker_1 = __webpack_require__(/*! ./blocker */ \"./src/blocker/index.ts\");\nfunction isReady(window) {\n    return (window.document.body instanceof HTMLElement &&\n        window.localStorage instanceof Storage &&\n        window.document instanceof Document);\n}\n(function main(window) {\n    return __awaiter(this, void 0, void 0, function () {\n        var clock, settings;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, (function () {\n                        return new Promise(function (resolve) {\n                            var timer = function (counter) {\n                                if (counter === void 0) { counter = 0; }\n                                if (isReady(window)) {\n                                    resolve();\n                                }\n                                else {\n                                    setTimeout(function () { return timer(counter); }, ++counter * 50);\n                                }\n                            };\n                            timer();\n                        });\n                    })()];\n                case 1:\n                    _a.sent();\n                    typedi_1.Container.set(window_token_1.WINDOW_TOKEN, window);\n                    clock = typedi_1.Container.get(clock_1.Clock);\n                    clock.start();\n                    settings = typedi_1.Container.get(settings_1.Settings);\n                    if (!!settings.isSettingsSpecified()) return [3 /*break*/, 3];\n                    return [4 /*yield*/, settings.showSettingsDialog()];\n                case 2:\n                    _a.sent();\n                    _a.label = 3;\n                case 3:\n                    typedi_1.Container.get(blocker_1.Blocker);\n                    return [2 /*return*/];\n            }\n        });\n    });\n})(typeof unsafeWindow !== \"undefined\" ? unsafeWindow : window);\n\n\n//# sourceURL=webpack:///./src/index.ts?");

/***/ }),

/***/ "./src/info-tooltip/index.ts":
/*!***********************************!*\
  !*** ./src/info-tooltip/index.ts ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(__webpack_require__(/*! ./info-tooltip.pug */ \"./src/info-tooltip/info-tooltip.pug\"), exports);\n__webpack_require__(/*! ./info-tooltip.scss */ \"./src/info-tooltip/info-tooltip.scss\");\n\n\n//# sourceURL=webpack:///./src/info-tooltip/index.ts?");

/***/ }),

/***/ "./src/info-tooltip/info-tooltip.pug":
/*!*******************************************!*\
  !*** ./src/info-tooltip/info-tooltip.pug ***!
  \*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var pug = __webpack_require__(/*! ../../node_modules/pug-runtime/index.js */ \"./node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;var _prefix = 'youtube-blocker__info-tooltip'\n\n\n\n;return pug_html;};\nmodule.exports = { default: template, template: template };\n\n//# sourceURL=webpack:///./src/info-tooltip/info-tooltip.pug?");

/***/ }),

/***/ "./src/info-tooltip/info-tooltip.scss":
/*!********************************************!*\
  !*** ./src/info-tooltip/info-tooltip.scss ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js??ref--7-2!../../node_modules/sass-loader/dist/cjs.js??ref--7-3!./info-tooltip.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/info-tooltip/info-tooltip.scss\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./src/info-tooltip/info-tooltip.scss?");

/***/ }),

/***/ "./src/modal/index.ts":
/*!****************************!*\
  !*** ./src/modal/index.ts ***!
  \****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(__webpack_require__(/*! ./modal */ \"./src/modal/modal.ts\"), exports);\n\n\n//# sourceURL=webpack:///./src/modal/index.ts?");

/***/ }),

/***/ "./src/modal/modal.pug":
/*!*****************************!*\
  !*** ./src/modal/modal.pug ***!
  \*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var pug = __webpack_require__(/*! ../../node_modules/pug-runtime/index.js */ \"./node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n    var locals_for_with = (locals || {});\n    \n    (function (closeButton, content, okButton, prefix, title) {\n      pug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([[prefix, prefix + '--slide']], [true]), false, true)+pug.attr(\"id\", prefix, true, true)+\" aria-hidden=\\\"true\\\"\") + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__overlay'], [true]), false, true)+\" tabindex=\\\"-1\\\"\") + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__container'], [true]), false, true)+\" role=\\\"dialog\\\" aria-modal=\\\"true\\\"\"+pug.attr(\"aria-labelledby\", prefix + '__title', true, true)) + \"\\u003E\\u003Cheader\" + (pug.attr(\"class\", pug.classes([prefix + '__header'], [true]), false, true)) + \"\\u003E\\u003Ch2\" + (pug.attr(\"class\", pug.classes([prefix + '__title'], [true]), false, true)+pug.attr(\"id\", prefix + '__title', true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = title) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh2\\u003E\\u003C\\u002Fheader\\u003E\\u003Cmain\" + (pug.attr(\"class\", pug.classes([prefix + '__content'], [true]), false, true)+pug.attr(\"id\", prefix + '__content', true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = content) ? \"\" : pug_interp)) + \"\\u003C\\u002Fmain\\u003E\\u003Cfooter\" + (pug.attr(\"class\", pug.classes([prefix + '__footer'], [true]), false, true)) + \"\\u003E\\u003Cbutton\" + (pug.attr(\"class\", pug.classes([[prefix + '__btn', prefix + '__btn-primary']], [true]), false, true)+pug.attr(\"data-micromodal-ok\", true, true, true)+\" type=\\\"submit\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = okButton) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cbutton\" + (pug.attr(\"class\", pug.classes([prefix + '__btn'], [true]), false, true)+pug.attr(\"data-micromodal-close\", true, true, true)+\" aria-label=\\\"Close this dialog window\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = closeButton) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Ffooter\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n    }.call(this, \"closeButton\" in locals_for_with ?\n        locals_for_with.closeButton :\n        typeof closeButton !== 'undefined' ? closeButton : undefined, \"content\" in locals_for_with ?\n        locals_for_with.content :\n        typeof content !== 'undefined' ? content : undefined, \"okButton\" in locals_for_with ?\n        locals_for_with.okButton :\n        typeof okButton !== 'undefined' ? okButton : undefined, \"prefix\" in locals_for_with ?\n        locals_for_with.prefix :\n        typeof prefix !== 'undefined' ? prefix : undefined, \"title\" in locals_for_with ?\n        locals_for_with.title :\n        typeof title !== 'undefined' ? title : undefined));\n    ;;return pug_html;};\nmodule.exports = { default: template, template: template };\n\n//# sourceURL=webpack:///./src/modal/modal.pug?");

/***/ }),

/***/ "./src/modal/modal.scss":
/*!******************************!*\
  !*** ./src/modal/modal.scss ***!
  \******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js??ref--7-2!../../node_modules/sass-loader/dist/cjs.js??ref--7-3!./modal.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/modal/modal.scss\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./src/modal/modal.scss?");

/***/ }),

/***/ "./src/modal/modal.ts":
/*!****************************!*\
  !*** ./src/modal/modal.ts ***!
  \****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Modal = void 0;\n__webpack_require__(/*! ./modal.scss */ \"./src/modal/modal.scss\");\nvar micromodal_1 = __webpack_require__(/*! micromodal */ \"./node_modules/micromodal/dist/micromodal.es.js\");\nvar typedi_1 = __webpack_require__(/*! typedi */ \"./node_modules/typedi/index.js\");\nvar modal_pug_1 = __webpack_require__(/*! ./modal.pug */ \"./src/modal/modal.pug\");\nvar window_token_1 = __webpack_require__(/*! ../window-token */ \"./src/window-token.ts\");\nvar Modal = /** @class */ (function () {\n    function Modal(container, window) {\n        if (window === void 0) { window = typedi_1.Container.get(window_token_1.WINDOW_TOKEN); }\n        this.window = window;\n        this.prefix = \"youtube-blocker\" + \"__modal\";\n        this.modalOptionsDefaults = {\n            title: \"\",\n            content: \"\",\n            closeButton: \"Close\",\n            okButton: \"Ok\",\n            validator: null,\n        };\n        this.okCallback = null;\n    }\n    Modal.prototype.show = function (options) {\n        var _this = this;\n        var modalElement = this.render(options);\n        this.window.document.body.appendChild(modalElement);\n        micromodal_1.default.init();\n        return new Promise(function (resolve) {\n            micromodal_1.default.show(modalElement.id, {\n                onClose: function () {\n                    _this.window.document.body.removeChild(modalElement);\n                    resolve(false);\n                },\n            });\n            _this.okCallback = function () {\n                if (options.validator) {\n                    var errors = options.validator();\n                    if (errors) {\n                        _this.window.alert(Object.values(errors).join(\"\\n\"));\n                        return false;\n                    }\n                }\n                resolve(true);\n                micromodal_1.default.close(modalElement.id);\n                _this.okCallback = null;\n                return true;\n            };\n        });\n    };\n    Modal.prototype.render = function (options) {\n        var _this = this;\n        var _a;\n        var renderOptions = __assign(__assign(__assign({}, this.modalOptionsDefaults), this), options);\n        if (options.content instanceof HTMLElement) {\n            renderOptions.content = \"\";\n        }\n        var wrapper = window.document.createElement(\"div\");\n        wrapper.innerHTML = modal_pug_1.default(renderOptions);\n        var modalElement = wrapper.firstElementChild;\n        if (!(modalElement instanceof HTMLElement)) {\n            throw new Error(\"Template is not instanceof HTMLElement\");\n        }\n        var okButton = modalElement.querySelector(\"[data-micromodal-ok]\");\n        okButton.addEventListener(\"click\", function (event) {\n            event.preventDefault();\n            if (_this.okCallback) {\n                return _this.okCallback();\n            }\n            return true;\n        });\n        if (options.content instanceof HTMLElement) {\n            var contentElement = modalElement.querySelector(\"#\" + this.prefix + \"__content\");\n            contentElement.appendChild(options.content);\n        }\n        var contentForms = modalElement.querySelectorAll(\"form\");\n        if (contentForms.length === 1) {\n            var contentForm = contentForms.item(0);\n            contentForm.id = (_a = contentForm.id) !== null && _a !== void 0 ? _a : this.prefix + \"__form\";\n            okButton.setAttribute(\"form\", contentForm.id);\n        }\n        return modalElement;\n    };\n    Modal = __decorate([\n        typedi_1.Service(),\n        __metadata(\"design:paramtypes\", [typedi_1.Container, Object])\n    ], Modal);\n    return Modal;\n}());\nexports.Modal = Modal;\n\n\n//# sourceURL=webpack:///./src/modal/modal.ts?");

/***/ }),

/***/ "./src/settings/index.ts":
/*!*******************************!*\
  !*** ./src/settings/index.ts ***!
  \*******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(__webpack_require__(/*! ./settings */ \"./src/settings/settings.ts\"), exports);\n\n\n//# sourceURL=webpack:///./src/settings/index.ts?");

/***/ }),

/***/ "./src/settings/settings-compact-button.pug":
/*!**************************************************!*\
  !*** ./src/settings/settings-compact-button.pug ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var pug = __webpack_require__(/*! ../../node_modules/pug-runtime/index.js */ \"./node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n    var locals_for_with = (locals || {});\n    \n    (function (prefix) {\n      var prefix = prefix + '-compact-button'\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"id\", prefix, true, true)) + \"\\u003E\\u003Ca class=\\\"ytd-mini-guide-entry-renderer\\\" role=\\\"tab\\\" title=\\\"Blocker\\\" aria-label=\\\"Blocker\\\"\\u003E\\u003Cdiv class=\\\"guide-icon ytd-mini-guide-entry-renderer yt-icon-container yt-icon\\\"\\u003E\\u003Csvg xmlns=\\\"http:\\u002F\\u002Fwww.w3.org\\u002F2000\\u002Fsvg\\\" viewBox=\\\"0 0 24 24\\\"\\u003E\\u003Cpath d=\\\"M0 0h24v24H0V0z\\\" fill=\\\"none\\\"\\u002F\\u003E\\u003Cpath d=\\\"M1 3.54l1.53 1.53C1.65 5.28 1 6.06 1 7v12c0 1.1.9 2 2 2h15.46l2 2 1.26-1.27L2.27 2.27 1 3.54zM3 19V7h1.46l12 12H3zM21 5h-7.58l3.29-3.3L16 1l-4 4-4-4-.7.7L10.58 5H7.52l2 2H21v11.48l1.65 1.65c.22-.32.35-.71.35-1.13V7c0-1.11-.89-2-2-2z\\\"\\u002F\\u003E\\u003C\\u002Fsvg\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"title style-scope ytd-mini-guide-entry-renderer\\\"\\u003EBlocker\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\";\n    }.call(this, \"prefix\" in locals_for_with ?\n        locals_for_with.prefix :\n        typeof prefix !== 'undefined' ? prefix : undefined));\n    ;;return pug_html;};\nmodule.exports = { default: template, template: template };\n\n//# sourceURL=webpack:///./src/settings/settings-compact-button.pug?");

/***/ }),

/***/ "./src/settings/settings-compact-button.scss":
/*!***************************************************!*\
  !*** ./src/settings/settings-compact-button.scss ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js??ref--7-2!../../node_modules/sass-loader/dist/cjs.js??ref--7-3!./settings-compact-button.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/settings/settings-compact-button.scss\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./src/settings/settings-compact-button.scss?");

/***/ }),

/***/ "./src/settings/settings-full-button.pug":
/*!***********************************************!*\
  !*** ./src/settings/settings-full-button.pug ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var pug = __webpack_require__(/*! ../../node_modules/pug-runtime/index.js */ \"./node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n    var locals_for_with = (locals || {});\n    \n    (function (prefix) {\n      var prefix = prefix + '-full-button'\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"ytd-guide-section-renderer\\\"\"+pug.attr(\"id\", prefix, true, true)) + \"\\u003E\\u003Ca\" + (pug.attr(\"class\", pug.classes([\"yt-simple-endpoint\",\"ytd-guide-entry-renderer\",prefix + '__link'], [false,false,true]), false, true)+\" id=\\\"endpoint\\\"\") + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__icon'], [true]), false, true)) + \"\\u003E\\u003Csvg xmlns=\\\"http:\\u002F\\u002Fwww.w3.org\\u002F2000\\u002Fsvg\\\" viewBox=\\\"0 0 24 24\\\"\\u003E\\u003Cpath d=\\\"M0 0h24v24H0V0z\\\" fill=\\\"none\\\"\\u002F\\u003E\\u003Cpath d=\\\"M1 3.54l1.53 1.53C1.65 5.28 1 6.06 1 7v12c0 1.1.9 2 2 2h15.46l2 2 1.26-1.27L2.27 2.27 1 3.54zM3 19V7h1.46l12 12H3zM21 5h-7.58l3.29-3.3L16 1l-4 4-4-4-.7.7L10.58 5H7.52l2 2H21v11.48l1.65 1.65c.22-.32.35-.71.35-1.13V7c0-1.11-.89-2-2-2z\\\"\\u002F\\u003E\\u003C\\u002Fsvg\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"title\",\"ytd-guide-entry-renderer\",prefix + '__title'], [false,false,true]), false, true)) + \"\\u003EBlocker\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\";\n    }.call(this, \"prefix\" in locals_for_with ?\n        locals_for_with.prefix :\n        typeof prefix !== 'undefined' ? prefix : undefined));\n    ;;return pug_html;};\nmodule.exports = { default: template, template: template };\n\n//# sourceURL=webpack:///./src/settings/settings-full-button.pug?");

/***/ }),

/***/ "./src/settings/settings-full-button.scss":
/*!************************************************!*\
  !*** ./src/settings/settings-full-button.scss ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js??ref--7-2!../../node_modules/sass-loader/dist/cjs.js??ref--7-3!./settings-full-button.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/settings/settings-full-button.scss\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./src/settings/settings-full-button.scss?");

/***/ }),

/***/ "./src/settings/settings-modal.pug":
/*!*****************************************!*\
  !*** ./src/settings/settings-modal.pug ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var pug = __webpack_require__(/*! ../../node_modules/pug-runtime/index.js */ \"./node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;\n    var locals_for_with = (locals || {});\n    \n    (function (_prefix, formData, prefix, readOnly) {\n      var _prefix = 'youtube-blocker__info-tooltip'\npug_mixins[\"info-tooltip\"] = pug_interp = function(content){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cspan\" + (pug.attr(\"class\", pug.classes([_prefix], [true]), false, true)) + \"\\u003E\\u003Csvg xmlns=\\\"http:\\u002F\\u002Fwww.w3.org\\u002F2000\\u002Fsvg\\\" viewBox=\\\"0 0 24 24\\\"\\u003E\\u003Cpath d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"\\u002F\\u003E\\u003Cpath d=\\\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\\\"\\u002F\\u003E\\u003C\\u002Fsvg\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([_prefix + '__text'], [true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = content) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\";\n};\npug_html = pug_html + \"\\u003Cform\" + (pug.attr(\"id\", prefix, true, true)) + \"\\u003E\";\nif (readOnly) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__readonly-notification'], [true]), false, true)) + \"\\u003EThe setting are read only until the site is unblocked\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Csection\" + (pug.attr(\"class\", pug.classes([prefix + '__restricted-days'], [true]), false, true)) + \"\\u003E\\u003Ch3\" + (pug.attr(\"class\", pug.classes([prefix + '__section-header'], [true]), false, true)) + \"\\u003ERestricted days\";\npug_mixins[\"info-tooltip\"]('Site usage will be restricted during selected days');\npug_html = pug_html + \"\\u003C\\u002Fh3\\u003E\\u003Cul\" + (pug.attr(\"class\", pug.classes([prefix + '__days-list'], [true]), false, true)) + \"\\u003E\";\n// iterate ['Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.', 'Sun.']\n;(function(){\n  var $$obj = ['Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.', 'Sun.'];\n  if ('number' == typeof $$obj.length) {\n      for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n        var val = $$obj[index];\npug_html = pug_html + \"\\u003Cli\\u003E\\u003Clabel\\u003E\\u003Cinput\" + (\" type=\\\"checkbox\\\" name=\\\"days\\\"\"+pug.attr(\"value\", index, true, true)+pug.attr(\"checked\", formData.days.includes(index), true, true)+pug.attr(\"disabled\", readOnly, true, true)) + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__day-name'], [true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = val) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fli\\u003E\";\n      }\n  } else {\n    var $$l = 0;\n    for (var index in $$obj) {\n      $$l++;\n      var val = $$obj[index];\npug_html = pug_html + \"\\u003Cli\\u003E\\u003Clabel\\u003E\\u003Cinput\" + (\" type=\\\"checkbox\\\" name=\\\"days\\\"\"+pug.attr(\"value\", index, true, true)+pug.attr(\"checked\", formData.days.includes(index), true, true)+pug.attr(\"disabled\", readOnly, true, true)) + \"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([prefix + '__day-name'], [true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = val) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fli\\u003E\";\n    }\n  }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Ful\\u003E\\u003C\\u002Fsection\\u003E\\u003Csection\" + (pug.attr(\"class\", pug.classes([prefix + '__restricted-hours'], [true]), false, true)) + \"\\u003E\\u003Ch3\" + (pug.attr(\"class\", pug.classes([prefix + '__section-header'], [true]), false, true)) + \"\\u003ERestricted hours\\u003C\\u002Fh3\\u003E\\u003Clabel\" + (pug.attr(\"class\", pug.classes([prefix + '__field'], [true]), false, true)) + \"\\u003E\\u003Cinput\" + (\" type=\\\"time\\\" name=\\\"startTime\\\"\"+pug.attr(\"value\", formData.startTime, true, true)+pug.attr(\"required\", true, true, true)+pug.attr(\"disabled\", readOnly, true, true)) + \"\\u003EStart time\";\npug_mixins[\"info-tooltip\"]('Start of scheduled time when the site will be blocked');\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Clabel\" + (pug.attr(\"class\", pug.classes([prefix + '__field'], [true]), false, true)) + \"\\u003E\\u003Cinput\" + (\" type=\\\"time\\\" name=\\\"endTime\\\"\"+pug.attr(\"value\", formData.endTime, true, true)+pug.attr(\"required\", true, true, true)+pug.attr(\"disabled\", readOnly, true, true)) + \"\\u003EEnd time\";\npug_mixins[\"info-tooltip\"]('End of scheduled restricted time');\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Clabel\" + (pug.attr(\"class\", pug.classes([prefix + '__field'], [true]), false, true)) + \"\\u003E\\u003Cinput\" + (\" type=\\\"number\\\" name=\\\"dailyLimit\\\" min=\\\"0\\\" max=\\\"24\\\"\"+pug.attr(\"value\", formData.dailyLimit, true, true)+pug.attr(\"disabled\", readOnly, true, true)) + \"\\u003EAllowed hours per day\";\npug_mixins[\"info-tooltip\"]('The maximum amount of hours you can spend until the site will blocked');\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Clabel\" + (pug.attr(\"class\", pug.classes([prefix + '__field'], [true]), false, true)) + \"\\u003E\\u003Cinput\" + (\" type=\\\"checkbox\\\" name=\\\"breakAllowed\\\"\"+pug.attr(\"checked\", formData.breakAllowed, true, true)+pug.attr(\"disabled\", readOnly, true, true)) + \"\\u003EAllow to make a break during restricted hours\";\npug_mixins[\"info-tooltip\"]('Enables the small time period to take a break and unlock the site');\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Clabel\" + (pug.attr(\"class\", pug.classes([prefix + '__field'], [true]), false, true)+pug.attr(\"id\", prefix + '__break-field', true, true)+\" style=\\\"display: none;\\\"\") + \"\\u003E\\u003Cinput\" + (\" type=\\\"number\\\" name=\\\"breakDuration\\\" min=\\\"0\\\"\"+pug.attr(\"value\", formData.breakDuration, true, true)+pug.attr(\"required\", true, true, true)+pug.attr(\"disabled\", readOnly, true, true)) + \"\\u003EBreak duration (minutes)\";\npug_mixins[\"info-tooltip\"]('The amount of time allowed to spend on the site during restricted hours. May be used for a lunch timeout.');\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003Clabel\" + (pug.attr(\"class\", pug.classes([prefix + '__field'], [true]), false, true)) + \"\\u003E\\u003Cinput\" + (\" type=\\\"checkbox\\\" name=\\\"readonlyWhenBlocked\\\"\"+pug.attr(\"checked\", formData.readonlyWhenBlocked, true, true)+pug.attr(\"disabled\", readOnly, true, true)) + \"\\u003ERestrict settings editing when blocked\";\npug_mixins[\"info-tooltip\"]('Does not allow you to add \"just a bit\" more time after the block');\npug_html = pug_html + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fsection\\u003E\\u003C\\u002Fform\\u003E\";\n    }.call(this, \"_prefix\" in locals_for_with ?\n        locals_for_with._prefix :\n        typeof _prefix !== 'undefined' ? _prefix : undefined, \"formData\" in locals_for_with ?\n        locals_for_with.formData :\n        typeof formData !== 'undefined' ? formData : undefined, \"prefix\" in locals_for_with ?\n        locals_for_with.prefix :\n        typeof prefix !== 'undefined' ? prefix : undefined, \"readOnly\" in locals_for_with ?\n        locals_for_with.readOnly :\n        typeof readOnly !== 'undefined' ? readOnly : undefined));\n    ;;return pug_html;};\nmodule.exports = { default: template, template: template };\n\n//# sourceURL=webpack:///./src/settings/settings-modal.pug?");

/***/ }),

/***/ "./src/settings/settings-modal.scss":
/*!******************************************!*\
  !*** ./src/settings/settings-modal.scss ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = __webpack_require__(/*! !../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js??ref--7-2!../../node_modules/sass-loader/dist/cjs.js??ref--7-3!./settings-modal.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js?!./node_modules/sass-loader/dist/cjs.js?!./src/settings/settings-modal.scss\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.i, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./src/settings/settings-modal.scss?");

/***/ }),

/***/ "./src/settings/settings.ts":
/*!**********************************!*\
  !*** ./src/settings/settings.ts ***!
  \**********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = void 0;\n__webpack_require__(/*! ./settings-modal.scss */ \"./src/settings/settings-modal.scss\");\n__webpack_require__(/*! ./settings-compact-button.scss */ \"./src/settings/settings-compact-button.scss\");\n__webpack_require__(/*! ./settings-full-button.scss */ \"./src/settings/settings-full-button.scss\");\n__webpack_require__(/*! ../info-tooltip */ \"./src/info-tooltip/index.ts\");\nvar settings_modal_pug_1 = __webpack_require__(/*! ./settings-modal.pug */ \"./src/settings/settings-modal.pug\");\nvar settings_compact_button_pug_1 = __webpack_require__(/*! ./settings-compact-button.pug */ \"./src/settings/settings-compact-button.pug\");\nvar settings_full_button_pug_1 = __webpack_require__(/*! ./settings-full-button.pug */ \"./src/settings/settings-full-button.pug\");\nvar modal_1 = __webpack_require__(/*! ../modal */ \"./src/modal/index.ts\");\nvar typedi_1 = __webpack_require__(/*! typedi */ \"./node_modules/typedi/index.js\");\nvar window_token_1 = __webpack_require__(/*! ../window-token */ \"./src/window-token.ts\");\nvar flatpickr_1 = __webpack_require__(/*! ../flatpickr */ \"./src/flatpickr.ts\");\nvar Settings = /** @class */ (function () {\n    function Settings(container, window, modal) {\n        if (window === void 0) { window = typedi_1.Container.get(window_token_1.WINDOW_TOKEN); }\n        if (modal === void 0) { modal = typedi_1.Container.get(modal_1.Modal); }\n        this.window = window;\n        this.modal = modal;\n        this.prefix = \"youtube-blocker\" + \"__settings\";\n        this.storeKey = \"[Youtube Blocker]\" + \" Settings\";\n        this.defaults = {\n            days: [],\n            startTime: null,\n            endTime: null,\n            dailyLimit: null,\n            breakAllowed: false,\n            breakDuration: null,\n            readonlyWhenBlocked: true,\n        };\n        this.cachedSettings = null;\n        this.subscribers = [];\n        this.attachCompactButton();\n        this.attachFullViewButton();\n    }\n    Settings.prototype.isSettingsSpecified = function () {\n        return !!this.getSettings();\n    };\n    Settings.prototype.onSettingsChange = function (fn) {\n        this.subscribers.push(fn);\n    };\n    Settings.prototype.getSettings = function () {\n        if (this.cachedSettings) {\n            return this.cachedSettings;\n        }\n        var settingsString = this.window.localStorage.getItem(this.storeKey);\n        if (!settingsString) {\n            return null;\n        }\n        this.cachedSettings = JSON.parse(settingsString);\n        return this.cachedSettings;\n    };\n    Settings.prototype.getSetting = function (key) {\n        return __assign(__assign({}, this.defaults), this.getSettings())[key];\n    };\n    Settings.prototype.setSettings = function (settings) {\n        this.window.localStorage.setItem(this.storeKey, JSON.stringify(settings));\n        this.cachedSettings = settings;\n    };\n    Settings.prototype.showSettingsDialog = function (readOnly) {\n        var _a;\n        if (readOnly === void 0) { readOnly = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            var initialSettings, templateElement, form;\n            var _this = this;\n            return __generator(this, function (_b) {\n                initialSettings = (_a = this.getSettings()) !== null && _a !== void 0 ? _a : this.defaults;\n                templateElement = document.createElement(\"div\");\n                templateElement.innerHTML = settings_modal_pug_1.default(__assign(__assign({}, this), { formData: initialSettings, readOnly: readOnly }));\n                form = templateElement.querySelector(\"#\" + this.prefix);\n                if (!readOnly) {\n                    this.bindFormInteraction(form);\n                }\n                return [2 /*return*/, this.modal\n                        .show({\n                        title: \"Settings\",\n                        content: templateElement,\n                        validator: function () {\n                            var data = _this.normalizeFormData(form);\n                            return _this.validate(data);\n                        },\n                    })\n                        .then(function (result) {\n                        if (!readOnly && result) {\n                            return _this.onSettingsSubmit(form);\n                        }\n                        return null;\n                    })];\n            });\n        });\n    };\n    Settings.prototype.waitForCompactSidebar = function () {\n        var _this = this;\n        return new Promise(function (resolve) {\n            var waitFn = function () {\n                var buttonContainer = _this.window.document.querySelector(\"#content > ytd-mini-guide-renderer > #items\");\n                if (buttonContainer) {\n                    resolve(buttonContainer);\n                }\n                else {\n                    _this.window.setTimeout(function () { return waitFn(); }, 300);\n                }\n            };\n            waitFn();\n        });\n    };\n    Settings.prototype.waitForFullSidebarHistoryButton = function () {\n        var _this = this;\n        return new Promise(function (resolve) {\n            var waitFn = function () {\n                var fullViewHistoryButton = _this.window.document.querySelector('#content ytd-guide-renderer [href=\"/feed/history\"]');\n                if (fullViewHistoryButton) {\n                    resolve(fullViewHistoryButton);\n                }\n                else {\n                    _this.window.setTimeout(function () { return waitFn(); }, 300);\n                }\n            };\n            waitFn();\n        });\n    };\n    Settings.prototype.attachCompactButton = function () {\n        var _this = this;\n        var buttonRenderWrapper = this.window.document.createElement(\"div\");\n        buttonRenderWrapper.innerHTML = settings_compact_button_pug_1.default(this);\n        var buttonElement = buttonRenderWrapper.firstElementChild;\n        buttonElement.addEventListener(\"click\", function () { return _this.showSettingsDialog(); });\n        this.waitForCompactSidebar().then(function (buttonContainer) {\n            buttonContainer.appendChild(buttonElement);\n            new MutationObserver(function () {\n                if (!buttonContainer.querySelector(\"#\" + _this.prefix + \"-compact-button\")) {\n                    buttonContainer.appendChild(buttonElement);\n                }\n            }).observe(buttonContainer, { childList: true });\n        });\n    };\n    Settings.prototype.attachFullViewButton = function () {\n        var _this = this;\n        var buttonRenderWrapper = this.window.document.createElement(\"div\");\n        buttonRenderWrapper.innerHTML = settings_full_button_pug_1.default(this);\n        var buttonElement = buttonRenderWrapper.firstElementChild;\n        buttonElement.addEventListener(\"click\", function () { return _this.showSettingsDialog(); });\n        this.waitForFullSidebarHistoryButton().then(function (historyButton) {\n            var buttonContainer = historyButton.parentElement;\n            buttonContainer.after(buttonElement);\n            new MutationObserver(function () {\n                if (!buttonContainer.querySelector(\"#\" + _this.prefix + \"-button\")) {\n                    buttonContainer.appendChild(buttonElement);\n                }\n            }).observe(buttonContainer, { childList: true });\n        });\n    };\n    Settings.prototype.bindFormInteraction = function (form) {\n        var _this = this;\n        var breakCheckbox = form.querySelector('[name=\"breakAllowed\"]');\n        breakCheckbox.addEventListener(\"change\", function () {\n            var breakDurationField = form.querySelector(\"#\" + _this.prefix + \"__break-field\");\n            if (breakCheckbox.checked) {\n                breakDurationField.setAttribute(\"style\", \"display: block\");\n            }\n            else {\n                breakDurationField.setAttribute(\"style\", \"display: none\");\n            }\n        });\n        form\n            .querySelectorAll(\"input[type='time']\")\n            .forEach(function (input) {\n            var _a;\n            var picker = flatpickr_1.flatpickr(input, {\n                enableTime: true,\n                noCalendar: true,\n                dateFormat: \"H:i\",\n                time_24hr: true,\n                static: true,\n            });\n            var preventFlatpickrSetDefault = function (e, reset) {\n                var value = input.value;\n                picker.close();\n                picker.clear(true, false);\n                e.stopPropagation();\n                e.preventDefault();\n                setTimeout(function () { return (input.value = reset ? \"\" : value); });\n            };\n            (_a = picker.timeContainer) === null || _a === void 0 ? void 0 : _a.addEventListener(\"keydown\", function (e) {\n                switch (e.code) {\n                    case \"Escape\":\n                        preventFlatpickrSetDefault(e, false);\n                        break;\n                    case \"Backspace\":\n                    case \"Delete\":\n                        preventFlatpickrSetDefault(e, true);\n                        break;\n                }\n            });\n        });\n        // triggers initial state\n        breakCheckbox.dispatchEvent(new Event(\"change\"));\n    };\n    Settings.prototype.normalizeFormData = function (form) {\n        var _a;\n        var formData = new FormData(form);\n        var strData = Array.from(formData.entries())\n            .filter(function (v) { return !!v; })\n            .reduce(function (res, _a) {\n            var _b;\n            var key = _a[0], value = _a[1];\n            return (__assign(__assign({}, res), (_b = {}, _b[key] = res[key] ? [String(value)].concat(res[key]) : String(value), _b)));\n        }, {});\n        return __assign(__assign(__assign({}, this.defaults), strData), { breakAllowed: strData.breakAllowed === \"on\", breakDuration: Number(strData.breakDuration) || null, dailyLimit: strData.dailyLimit ? Number(strData.dailyLimit) : null, days: Array.from((_a = strData.days) !== null && _a !== void 0 ? _a : []).map(Number), readonlyWhenBlocked: strData.readonlyWhenBlocked === \"on\" });\n    };\n    Settings.prototype.onSettingsSubmit = function (form) {\n        var data = this.normalizeFormData(form);\n        this.setSettings(data);\n        this.notifyOnSettingsChange(data);\n        return data;\n    };\n    Settings.prototype.validate = function (data) {\n        var errors = {};\n        if (data.breakDuration !== null &&\n            (data.breakDuration < 0 || data.breakDuration > 1440)) {\n            errors.breakDuration = \"Break duration should be from 0 to 1440\";\n        }\n        if (data.dailyLimit !== null &&\n            (data.dailyLimit < 0 || data.dailyLimit > 24)) {\n            errors.dailyLimit = \"Allowed hours per day should be from 0 to 24\";\n        }\n        if (!data.endTime && !!data.startTime) {\n            errors.endTime =\n                \"You cannot leave the end time empty when the start time is specified\";\n        }\n        if (!data.startTime && !!data.endTime) {\n            errors.endTime =\n                \"You cannot leave the start time empty when the end time is specified\";\n        }\n        if (data.startTime && data.endTime && data.startTime >= data.endTime) {\n            errors.endTime = \"Start time cannot be before or equal the end time\";\n        }\n        return Object.keys(errors).length === 0 ? null : errors;\n    };\n    Settings.prototype.notifyOnSettingsChange = function (data) {\n        this.subscribers.forEach(function (fn) { return fn(data); });\n    };\n    Settings = __decorate([\n        typedi_1.Service(),\n        __metadata(\"design:paramtypes\", [typedi_1.Container, Object, Object])\n    ], Settings);\n    return Settings;\n}());\nexports.Settings = Settings;\n\n\n//# sourceURL=webpack:///./src/settings/settings.ts?");

/***/ }),

/***/ "./src/window-token.ts":
/*!*****************************!*\
  !*** ./src/window-token.ts ***!
  \*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WINDOW_TOKEN = void 0;\nvar typedi_1 = __webpack_require__(/*! typedi */ \"./node_modules/typedi/index.js\");\nexports.WINDOW_TOKEN = new typedi_1.Token(\"window\");\n\n\n//# sourceURL=webpack:///./src/window-token.ts?");

/***/ }),

/***/ 0:
/*!****************************!*\
  !*** multi ./src/index.ts ***!
  \****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__(/*! /Users/mshavliuk/projects/youtube-blocker/src/index.ts */\"./src/index.ts\");\n\n\n//# sourceURL=webpack:///multi_./src/index.ts?");

/***/ }),

/***/ 1:
/*!********************!*\
  !*** fs (ignored) ***!
  \********************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/* (ignored) */\n\n//# sourceURL=webpack:///fs_(ignored)?");

/***/ })

/******/ });