text: (window["webpackJsonp"] = window["webpackJsonp"] || []).push([[5],{
  
  /***/ "./node_modules/@material/floating-label/component.js":
  /*!************************************************************!*\
    !*** ./node_modules/@material/floating-label/component.js ***!
    \************************************************************/
  /*! exports provided: MDCFloatingLabel */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCFloatingLabel", function() { return MDCFloatingLabel; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/component */ "./node_modules/@material/base/component.js");
  /* harmony import */ var _foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation */ "./node_modules/@material/floating-label/foundation.js");
  /**
   * @license
   * Copyright 2016 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCFloatingLabel = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCFloatingLabel, _super);
      function MDCFloatingLabel() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      MDCFloatingLabel.attachTo = function (root) {
          return new MDCFloatingLabel(root);
      };
      /**
       * Styles the label to produce the label shake for errors.
       * @param shouldShake If true, shakes the label by adding a CSS class; otherwise, stops shaking by removing the class.
       */
      MDCFloatingLabel.prototype.shake = function (shouldShake) {
          this.foundation_.shake(shouldShake);
      };
      /**
       * Styles the label to float/dock.
       * @param shouldFloat If true, floats the label by adding a CSS class; otherwise, docks it by removing the class.
       */
      MDCFloatingLabel.prototype.float = function (shouldFloat) {
          this.foundation_.float(shouldFloat);
      };
      MDCFloatingLabel.prototype.getWidth = function () {
          return this.foundation_.getWidth();
      };
      MDCFloatingLabel.prototype.getDefaultFoundation = function () {
          var _this = this;
          // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.
          // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.
          // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
          var adapter = {
              addClass: function (className) { return _this.root_.classList.add(className); },
              removeClass: function (className) { return _this.root_.classList.remove(className); },
              getWidth: function () { return _this.root_.scrollWidth; },
              registerInteractionHandler: function (evtType, handler) { return _this.listen(evtType, handler); },
              deregisterInteractionHandler: function (evtType, handler) { return _this.unlisten(evtType, handler); },
          };
          // tslint:enable:object-literal-sort-keys
          return new _foundation__WEBPACK_IMPORTED_MODULE_2__["MDCFloatingLabelFoundation"](adapter);
      };
      return MDCFloatingLabel;
  }(_material_base_component__WEBPACK_IMPORTED_MODULE_1__["MDCComponent"]));
  
  //# sourceMappingURL=component.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/floating-label/constants.js":
  /*!************************************************************!*\
    !*** ./node_modules/@material/floating-label/constants.js ***!
    \************************************************************/
  /*! exports provided: cssClasses */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cssClasses", function() { return cssClasses; });
  /**
   * @license
   * Copyright 2016 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  var cssClasses = {
      LABEL_FLOAT_ABOVE: 'mdc-floating-label--float-above',
      LABEL_SHAKE: 'mdc-floating-label--shake',
      ROOT: 'mdc-floating-label',
  };
  //# sourceMappingURL=constants.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/floating-label/foundation.js":
  /*!*************************************************************!*\
    !*** ./node_modules/@material/floating-label/foundation.js ***!
    \*************************************************************/
  /*! exports provided: MDCFloatingLabelFoundation, default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCFloatingLabelFoundation", function() { return MDCFloatingLabelFoundation; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js");
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/floating-label/constants.js");
  /**
   * @license
   * Copyright 2016 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCFloatingLabelFoundation = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCFloatingLabelFoundation, _super);
      function MDCFloatingLabelFoundation(adapter) {
          var _this = _super.call(this, tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"]({}, MDCFloatingLabelFoundation.defaultAdapter, adapter)) || this;
          _this.shakeAnimationEndHandler_ = function () { return _this.handleShakeAnimationEnd_(); };
          return _this;
      }
      Object.defineProperty(MDCFloatingLabelFoundation, "cssClasses", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCFloatingLabelFoundation, "defaultAdapter", {
          /**
           * See {@link MDCFloatingLabelAdapter} for typing information on parameters and return types.
           */
          get: function () {
              // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
              return {
                  addClass: function () { return undefined; },
                  removeClass: function () { return undefined; },
                  getWidth: function () { return 0; },
                  registerInteractionHandler: function () { return undefined; },
                  deregisterInteractionHandler: function () { return undefined; },
              };
              // tslint:enable:object-literal-sort-keys
          },
          enumerable: true,
          configurable: true
      });
      MDCFloatingLabelFoundation.prototype.init = function () {
          this.adapter_.registerInteractionHandler('animationend', this.shakeAnimationEndHandler_);
      };
      MDCFloatingLabelFoundation.prototype.destroy = function () {
          this.adapter_.deregisterInteractionHandler('animationend', this.shakeAnimationEndHandler_);
      };
      /**
       * Returns the width of the label element.
       */
      MDCFloatingLabelFoundation.prototype.getWidth = function () {
          return this.adapter_.getWidth();
      };
      /**
       * Styles the label to produce a shake animation to indicate an error.
       * @param shouldShake If true, adds the shake CSS class; otherwise, removes shake class.
       */
      MDCFloatingLabelFoundation.prototype.shake = function (shouldShake) {
          var LABEL_SHAKE = MDCFloatingLabelFoundation.cssClasses.LABEL_SHAKE;
          if (shouldShake) {
              this.adapter_.addClass(LABEL_SHAKE);
          }
          else {
              this.adapter_.removeClass(LABEL_SHAKE);
          }
      };
      /**
       * Styles the label to float or dock.
       * @param shouldFloat If true, adds the float CSS class; otherwise, removes float and shake classes to dock the label.
       */
      MDCFloatingLabelFoundation.prototype.float = function (shouldFloat) {
          var _a = MDCFloatingLabelFoundation.cssClasses, LABEL_FLOAT_ABOVE = _a.LABEL_FLOAT_ABOVE, LABEL_SHAKE = _a.LABEL_SHAKE;
          if (shouldFloat) {
              this.adapter_.addClass(LABEL_FLOAT_ABOVE);
          }
          else {
              this.adapter_.removeClass(LABEL_FLOAT_ABOVE);
              this.adapter_.removeClass(LABEL_SHAKE);
          }
      };
      MDCFloatingLabelFoundation.prototype.handleShakeAnimationEnd_ = function () {
          var LABEL_SHAKE = MDCFloatingLabelFoundation.cssClasses.LABEL_SHAKE;
          this.adapter_.removeClass(LABEL_SHAKE);
      };
      return MDCFloatingLabelFoundation;
  }(_material_base_foundation__WEBPACK_IMPORTED_MODULE_1__["MDCFoundation"]));
  
  // tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
  /* harmony default export */ __webpack_exports__["default"] = (MDCFloatingLabelFoundation);
  //# sourceMappingURL=foundation.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/line-ripple/component.js":
  /*!*********************************************************!*\
    !*** ./node_modules/@material/line-ripple/component.js ***!
    \*********************************************************/
  /*! exports provided: MDCLineRipple */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCLineRipple", function() { return MDCLineRipple; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/component */ "./node_modules/@material/base/component.js");
  /* harmony import */ var _foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation */ "./node_modules/@material/line-ripple/foundation.js");
  /**
   * @license
   * Copyright 2018 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCLineRipple = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCLineRipple, _super);
      function MDCLineRipple() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      MDCLineRipple.attachTo = function (root) {
          return new MDCLineRipple(root);
      };
      /**
       * Activates the line ripple
       */
      MDCLineRipple.prototype.activate = function () {
          this.foundation_.activate();
      };
      /**
       * Deactivates the line ripple
       */
      MDCLineRipple.prototype.deactivate = function () {
          this.foundation_.deactivate();
      };
      /**
       * Sets the transform origin given a user's click location.
       * The `rippleCenter` is the x-coordinate of the middle of the ripple.
       */
      MDCLineRipple.prototype.setRippleCenter = function (xCoordinate) {
          this.foundation_.setRippleCenter(xCoordinate);
      };
      MDCLineRipple.prototype.getDefaultFoundation = function () {
          var _this = this;
          // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.
          // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.
          // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
          var adapter = {
              addClass: function (className) { return _this.root_.classList.add(className); },
              removeClass: function (className) { return _this.root_.classList.remove(className); },
              hasClass: function (className) { return _this.root_.classList.contains(className); },
              setStyle: function (propertyName, value) { return _this.root_.style.setProperty(propertyName, value); },
              registerEventHandler: function (evtType, handler) { return _this.listen(evtType, handler); },
              deregisterEventHandler: function (evtType, handler) { return _this.unlisten(evtType, handler); },
          };
          // tslint:enable:object-literal-sort-keys
          return new _foundation__WEBPACK_IMPORTED_MODULE_2__["MDCLineRippleFoundation"](adapter);
      };
      return MDCLineRipple;
  }(_material_base_component__WEBPACK_IMPORTED_MODULE_1__["MDCComponent"]));
  
  //# sourceMappingURL=component.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/line-ripple/constants.js":
  /*!*********************************************************!*\
    !*** ./node_modules/@material/line-ripple/constants.js ***!
    \*********************************************************/
  /*! exports provided: cssClasses */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cssClasses", function() { return cssClasses; });
  /**
   * @license
   * Copyright 2018 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  var cssClasses = {
      LINE_RIPPLE_ACTIVE: 'mdc-line-ripple--active',
      LINE_RIPPLE_DEACTIVATING: 'mdc-line-ripple--deactivating',
  };
  
  //# sourceMappingURL=constants.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/line-ripple/foundation.js":
  /*!**********************************************************!*\
    !*** ./node_modules/@material/line-ripple/foundation.js ***!
    \**********************************************************/
  /*! exports provided: MDCLineRippleFoundation, default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCLineRippleFoundation", function() { return MDCLineRippleFoundation; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js");
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/line-ripple/constants.js");
  /**
   * @license
   * Copyright 2018 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCLineRippleFoundation = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCLineRippleFoundation, _super);
      function MDCLineRippleFoundation(adapter) {
          var _this = _super.call(this, tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"]({}, MDCLineRippleFoundation.defaultAdapter, adapter)) || this;
          _this.transitionEndHandler_ = function (evt) { return _this.handleTransitionEnd(evt); };
          return _this;
      }
      Object.defineProperty(MDCLineRippleFoundation, "cssClasses", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCLineRippleFoundation, "defaultAdapter", {
          /**
           * See {@link MDCLineRippleAdapter} for typing information on parameters and return types.
           */
          get: function () {
              // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
              return {
                  addClass: function () { return undefined; },
                  removeClass: function () { return undefined; },
                  hasClass: function () { return false; },
                  setStyle: function () { return undefined; },
                  registerEventHandler: function () { return undefined; },
                  deregisterEventHandler: function () { return undefined; },
              };
              // tslint:enable:object-literal-sort-keys
          },
          enumerable: true,
          configurable: true
      });
      MDCLineRippleFoundation.prototype.init = function () {
          this.adapter_.registerEventHandler('transitionend', this.transitionEndHandler_);
      };
      MDCLineRippleFoundation.prototype.destroy = function () {
          this.adapter_.deregisterEventHandler('transitionend', this.transitionEndHandler_);
      };
      MDCLineRippleFoundation.prototype.activate = function () {
          this.adapter_.removeClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].LINE_RIPPLE_DEACTIVATING);
          this.adapter_.addClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].LINE_RIPPLE_ACTIVE);
      };
      MDCLineRippleFoundation.prototype.setRippleCenter = function (xCoordinate) {
          this.adapter_.setStyle('transform-origin', xCoordinate + "px center");
      };
      MDCLineRippleFoundation.prototype.deactivate = function () {
          this.adapter_.addClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].LINE_RIPPLE_DEACTIVATING);
      };
      MDCLineRippleFoundation.prototype.handleTransitionEnd = function (evt) {
          // Wait for the line ripple to be either transparent or opaque
          // before emitting the animation end event
          var isDeactivating = this.adapter_.hasClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].LINE_RIPPLE_DEACTIVATING);
          if (evt.propertyName === 'opacity') {
              if (isDeactivating) {
                  this.adapter_.removeClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].LINE_RIPPLE_ACTIVE);
                  this.adapter_.removeClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].LINE_RIPPLE_DEACTIVATING);
              }
          }
      };
      return MDCLineRippleFoundation;
  }(_material_base_foundation__WEBPACK_IMPORTED_MODULE_1__["MDCFoundation"]));
  
  // tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
  /* harmony default export */ __webpack_exports__["default"] = (MDCLineRippleFoundation);
  //# sourceMappingURL=foundation.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/notched-outline/component.js":
  /*!*************************************************************!*\
    !*** ./node_modules/@material/notched-outline/component.js ***!
    \*************************************************************/
  /*! exports provided: MDCNotchedOutline */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCNotchedOutline", function() { return MDCNotchedOutline; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/component */ "./node_modules/@material/base/component.js");
  /* harmony import */ var _material_floating_label_foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/floating-label/foundation */ "./node_modules/@material/floating-label/foundation.js");
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/notched-outline/constants.js");
  /* harmony import */ var _foundation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation */ "./node_modules/@material/notched-outline/foundation.js");
  /**
   * @license
   * Copyright 2017 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  
  
  var MDCNotchedOutline = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCNotchedOutline, _super);
      function MDCNotchedOutline() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      MDCNotchedOutline.attachTo = function (root) {
          return new MDCNotchedOutline(root);
      };
      MDCNotchedOutline.prototype.initialSyncWithDOM = function () {
          this.notchElement_ = this.root_.querySelector(_constants__WEBPACK_IMPORTED_MODULE_3__["strings"].NOTCH_ELEMENT_SELECTOR);
          var label = this.root_.querySelector('.' + _material_floating_label_foundation__WEBPACK_IMPORTED_MODULE_2__["MDCFloatingLabelFoundation"].cssClasses.ROOT);
          if (label) {
              label.style.transitionDuration = '0s';
              this.root_.classList.add(_constants__WEBPACK_IMPORTED_MODULE_3__["cssClasses"].OUTLINE_UPGRADED);
              requestAnimationFrame(function () {
                  label.style.transitionDuration = '';
              });
          }
          else {
              this.root_.classList.add(_constants__WEBPACK_IMPORTED_MODULE_3__["cssClasses"].NO_LABEL);
          }
      };
      /**
       * Updates classes and styles to open the notch to the specified width.
       * @param notchWidth The notch width in the outline.
       */
      MDCNotchedOutline.prototype.notch = function (notchWidth) {
          this.foundation_.notch(notchWidth);
      };
      /**
       * Updates classes and styles to close the notch.
       */
      MDCNotchedOutline.prototype.closeNotch = function () {
          this.foundation_.closeNotch();
      };
      MDCNotchedOutline.prototype.getDefaultFoundation = function () {
          var _this = this;
          // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.
          // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.
          // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
          var adapter = {
              addClass: function (className) { return _this.root_.classList.add(className); },
              removeClass: function (className) { return _this.root_.classList.remove(className); },
              setNotchWidthProperty: function (width) { return _this.notchElement_.style.setProperty('width', width + 'px'); },
              removeNotchWidthProperty: function () { return _this.notchElement_.style.removeProperty('width'); },
          };
          // tslint:enable:object-literal-sort-keys
          return new _foundation__WEBPACK_IMPORTED_MODULE_4__["MDCNotchedOutlineFoundation"](adapter);
      };
      return MDCNotchedOutline;
  }(_material_base_component__WEBPACK_IMPORTED_MODULE_1__["MDCComponent"]));
  
  //# sourceMappingURL=component.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/notched-outline/constants.js":
  /*!*************************************************************!*\
    !*** ./node_modules/@material/notched-outline/constants.js ***!
    \*************************************************************/
  /*! exports provided: cssClasses, numbers, strings */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cssClasses", function() { return cssClasses; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "numbers", function() { return numbers; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "strings", function() { return strings; });
  /**
   * @license
   * Copyright 2018 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  var strings = {
      NOTCH_ELEMENT_SELECTOR: '.mdc-notched-outline__notch',
  };
  var numbers = {
      // This should stay in sync with $mdc-notched-outline-padding * 2.
      NOTCH_ELEMENT_PADDING: 8,
  };
  var cssClasses = {
      NO_LABEL: 'mdc-notched-outline--no-label',
      OUTLINE_NOTCHED: 'mdc-notched-outline--notched',
      OUTLINE_UPGRADED: 'mdc-notched-outline--upgraded',
  };
  
  //# sourceMappingURL=constants.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/notched-outline/foundation.js":
  /*!**************************************************************!*\
    !*** ./node_modules/@material/notched-outline/foundation.js ***!
    \**************************************************************/
  /*! exports provided: MDCNotchedOutlineFoundation, default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCNotchedOutlineFoundation", function() { return MDCNotchedOutlineFoundation; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js");
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/notched-outline/constants.js");
  /**
   * @license
   * Copyright 2017 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCNotchedOutlineFoundation = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCNotchedOutlineFoundation, _super);
      function MDCNotchedOutlineFoundation(adapter) {
          return _super.call(this, tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"]({}, MDCNotchedOutlineFoundation.defaultAdapter, adapter)) || this;
      }
      Object.defineProperty(MDCNotchedOutlineFoundation, "strings", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["strings"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCNotchedOutlineFoundation, "cssClasses", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCNotchedOutlineFoundation, "numbers", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["numbers"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCNotchedOutlineFoundation, "defaultAdapter", {
          /**
           * See {@link MDCNotchedOutlineAdapter} for typing information on parameters and return types.
           */
          get: function () {
              // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
              return {
                  addClass: function () { return undefined; },
                  removeClass: function () { return undefined; },
                  setNotchWidthProperty: function () { return undefined; },
                  removeNotchWidthProperty: function () { return undefined; },
              };
              // tslint:enable:object-literal-sort-keys
          },
          enumerable: true,
          configurable: true
      });
      /**
       * Adds the outline notched selector and updates the notch width calculated based off of notchWidth.
       */
      MDCNotchedOutlineFoundation.prototype.notch = function (notchWidth) {
          var OUTLINE_NOTCHED = MDCNotchedOutlineFoundation.cssClasses.OUTLINE_NOTCHED;
          if (notchWidth > 0) {
              notchWidth += _constants__WEBPACK_IMPORTED_MODULE_2__["numbers"].NOTCH_ELEMENT_PADDING; // Add padding from left/right.
          }
          this.adapter_.setNotchWidthProperty(notchWidth);
          this.adapter_.addClass(OUTLINE_NOTCHED);
      };
      /**
       * Removes notched outline selector to close the notch in the outline.
       */
      MDCNotchedOutlineFoundation.prototype.closeNotch = function () {
          var OUTLINE_NOTCHED = MDCNotchedOutlineFoundation.cssClasses.OUTLINE_NOTCHED;
          this.adapter_.removeClass(OUTLINE_NOTCHED);
          this.adapter_.removeNotchWidthProperty();
      };
      return MDCNotchedOutlineFoundation;
  }(_material_base_foundation__WEBPACK_IMPORTED_MODULE_1__["MDCFoundation"]));
  
  // tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
  /* harmony default export */ __webpack_exports__["default"] = (MDCNotchedOutlineFoundation);
  //# sourceMappingURL=foundation.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/character-counter/component.js":
  /*!*************************************************************************!*\
    !*** ./node_modules/@material/textfield/character-counter/component.js ***!
    \*************************************************************************/
  /*! exports provided: MDCTextFieldCharacterCounter */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCTextFieldCharacterCounter", function() { return MDCTextFieldCharacterCounter; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/component */ "./node_modules/@material/base/component.js");
  /* harmony import */ var _foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation */ "./node_modules/@material/textfield/character-counter/foundation.js");
  /**
   * @license
   * Copyright 2019 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCTextFieldCharacterCounter = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCTextFieldCharacterCounter, _super);
      function MDCTextFieldCharacterCounter() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      MDCTextFieldCharacterCounter.attachTo = function (root) {
          return new MDCTextFieldCharacterCounter(root);
      };
      Object.defineProperty(MDCTextFieldCharacterCounter.prototype, "foundation", {
          get: function () {
              return this.foundation_;
          },
          enumerable: true,
          configurable: true
      });
      MDCTextFieldCharacterCounter.prototype.getDefaultFoundation = function () {
          var _this = this;
          // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.
          // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.
          var adapter = {
              setContent: function (content) {
                  _this.root_.textContent = content;
              },
          };
          return new _foundation__WEBPACK_IMPORTED_MODULE_2__["MDCTextFieldCharacterCounterFoundation"](adapter);
      };
      return MDCTextFieldCharacterCounter;
  }(_material_base_component__WEBPACK_IMPORTED_MODULE_1__["MDCComponent"]));
  
  //# sourceMappingURL=component.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/character-counter/constants.js":
  /*!*************************************************************************!*\
    !*** ./node_modules/@material/textfield/character-counter/constants.js ***!
    \*************************************************************************/
  /*! exports provided: strings, cssClasses */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "strings", function() { return strings; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cssClasses", function() { return cssClasses; });
  /**
   * @license
   * Copyright 2019 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  var cssClasses = {
      ROOT: 'mdc-text-field-character-counter',
  };
  var strings = {
      ROOT_SELECTOR: "." + cssClasses.ROOT,
  };
  
  //# sourceMappingURL=constants.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/character-counter/foundation.js":
  /*!**************************************************************************!*\
    !*** ./node_modules/@material/textfield/character-counter/foundation.js ***!
    \**************************************************************************/
  /*! exports provided: MDCTextFieldCharacterCounterFoundation, default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCTextFieldCharacterCounterFoundation", function() { return MDCTextFieldCharacterCounterFoundation; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js");
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/textfield/character-counter/constants.js");
  /**
   * @license
   * Copyright 2019 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCTextFieldCharacterCounterFoundation = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCTextFieldCharacterCounterFoundation, _super);
      function MDCTextFieldCharacterCounterFoundation(adapter) {
          return _super.call(this, tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"]({}, MDCTextFieldCharacterCounterFoundation.defaultAdapter, adapter)) || this;
      }
      Object.defineProperty(MDCTextFieldCharacterCounterFoundation, "cssClasses", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldCharacterCounterFoundation, "strings", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["strings"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldCharacterCounterFoundation, "defaultAdapter", {
          /**
           * See {@link MDCTextFieldCharacterCounterAdapter} for typing information on parameters and return types.
           */
          get: function () {
              return {
                  setContent: function () { return undefined; },
              };
          },
          enumerable: true,
          configurable: true
      });
      MDCTextFieldCharacterCounterFoundation.prototype.setCounterValue = function (currentLength, maxLength) {
          currentLength = Math.min(currentLength, maxLength);
          this.adapter_.setContent(currentLength + " / " + maxLength);
      };
      return MDCTextFieldCharacterCounterFoundation;
  }(_material_base_foundation__WEBPACK_IMPORTED_MODULE_1__["MDCFoundation"]));
  
  // tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
  /* harmony default export */ __webpack_exports__["default"] = (MDCTextFieldCharacterCounterFoundation);
  //# sourceMappingURL=foundation.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/component.js":
  /*!*******************************************************!*\
    !*** ./node_modules/@material/textfield/component.js ***!
    \*******************************************************/
  /*! exports provided: MDCTextField */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCTextField", function() { return MDCTextField; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/component */ "./node_modules/@material/base/component.js");
  /* harmony import */ var _material_dom_events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/dom/events */ "./node_modules/@material/dom/events.js");
  /* harmony import */ var _material_dom_ponyfill__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/dom/ponyfill */ "./node_modules/@material/dom/ponyfill.js");
  /* harmony import */ var _material_floating_label_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material/floating-label/component */ "./node_modules/@material/floating-label/component.js");
  /* harmony import */ var _material_line_ripple_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material/line-ripple/component */ "./node_modules/@material/line-ripple/component.js");
  /* harmony import */ var _material_notched_outline_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material/notched-outline/component */ "./node_modules/@material/notched-outline/component.js");
  /* harmony import */ var _material_ripple_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material/ripple/component */ "./node_modules/@material/ripple/component.js");
  /* harmony import */ var _material_ripple_foundation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material/ripple/foundation */ "./node_modules/@material/ripple/foundation.js");
  /* harmony import */ var _character_counter_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./character-counter/component */ "./node_modules/@material/textfield/character-counter/component.js");
  /* harmony import */ var _character_counter_foundation__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./character-counter/foundation */ "./node_modules/@material/textfield/character-counter/foundation.js");
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/textfield/constants.js");
  /* harmony import */ var _foundation__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./foundation */ "./node_modules/@material/textfield/foundation.js");
  /* harmony import */ var _helper_text_component__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./helper-text/component */ "./node_modules/@material/textfield/helper-text/component.js");
  /* harmony import */ var _helper_text_foundation__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./helper-text/foundation */ "./node_modules/@material/textfield/helper-text/foundation.js");
  /* harmony import */ var _icon_component__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./icon/component */ "./node_modules/@material/textfield/icon/component.js");
  /**
   * @license
   * Copyright 2016 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  var MDCTextField = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCTextField, _super);
      function MDCTextField() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      MDCTextField.attachTo = function (root) {
          return new MDCTextField(root);
      };
      MDCTextField.prototype.initialize = function (rippleFactory, lineRippleFactory, helperTextFactory, characterCounterFactory, iconFactory, labelFactory, outlineFactory) {
          if (rippleFactory === void 0) { rippleFactory = function (el, foundation) { return new _material_ripple_component__WEBPACK_IMPORTED_MODULE_7__["MDCRipple"](el, foundation); }; }
          if (lineRippleFactory === void 0) { lineRippleFactory = function (el) { return new _material_line_ripple_component__WEBPACK_IMPORTED_MODULE_5__["MDCLineRipple"](el); }; }
          if (helperTextFactory === void 0) { helperTextFactory = function (el) { return new _helper_text_component__WEBPACK_IMPORTED_MODULE_13__["MDCTextFieldHelperText"](el); }; }
          if (characterCounterFactory === void 0) { characterCounterFactory = function (el) { return new _character_counter_component__WEBPACK_IMPORTED_MODULE_9__["MDCTextFieldCharacterCounter"](el); }; }
          if (iconFactory === void 0) { iconFactory = function (el) { return new _icon_component__WEBPACK_IMPORTED_MODULE_15__["MDCTextFieldIcon"](el); }; }
          if (labelFactory === void 0) { labelFactory = function (el) { return new _material_floating_label_component__WEBPACK_IMPORTED_MODULE_4__["MDCFloatingLabel"](el); }; }
          if (outlineFactory === void 0) { outlineFactory = function (el) { return new _material_notched_outline_component__WEBPACK_IMPORTED_MODULE_6__["MDCNotchedOutline"](el); }; }
          this.input_ = this.root_.querySelector(_constants__WEBPACK_IMPORTED_MODULE_11__["strings"].INPUT_SELECTOR);
          var labelElement = this.root_.querySelector(_constants__WEBPACK_IMPORTED_MODULE_11__["strings"].LABEL_SELECTOR);
          this.label_ = labelElement ? labelFactory(labelElement) : null;
          var lineRippleElement = this.root_.querySelector(_constants__WEBPACK_IMPORTED_MODULE_11__["strings"].LINE_RIPPLE_SELECTOR);
          this.lineRipple_ = lineRippleElement ? lineRippleFactory(lineRippleElement) : null;
          var outlineElement = this.root_.querySelector(_constants__WEBPACK_IMPORTED_MODULE_11__["strings"].OUTLINE_SELECTOR);
          this.outline_ = outlineElement ? outlineFactory(outlineElement) : null;
          // Helper text
          var helperTextStrings = _helper_text_foundation__WEBPACK_IMPORTED_MODULE_14__["MDCTextFieldHelperTextFoundation"].strings;
          var nextElementSibling = this.root_.nextElementSibling;
          var hasHelperLine = (nextElementSibling && nextElementSibling.classList.contains(_constants__WEBPACK_IMPORTED_MODULE_11__["cssClasses"].HELPER_LINE));
          var helperTextEl = hasHelperLine && nextElementSibling && nextElementSibling.querySelector(helperTextStrings.ROOT_SELECTOR);
          this.helperText_ = helperTextEl ? helperTextFactory(helperTextEl) : null;
          // Character counter
          var characterCounterStrings = _character_counter_foundation__WEBPACK_IMPORTED_MODULE_10__["MDCTextFieldCharacterCounterFoundation"].strings;
          var characterCounterEl = this.root_.querySelector(characterCounterStrings.ROOT_SELECTOR);
          // If character counter is not found in root element search in sibling element.
          if (!characterCounterEl && hasHelperLine && nextElementSibling) {
              characterCounterEl = nextElementSibling.querySelector(characterCounterStrings.ROOT_SELECTOR);
          }
          this.characterCounter_ = characterCounterEl ? characterCounterFactory(characterCounterEl) : null;
          this.leadingIcon_ = null;
          this.trailingIcon_ = null;
          var iconElements = this.root_.querySelectorAll(_constants__WEBPACK_IMPORTED_MODULE_11__["strings"].ICON_SELECTOR);
          if (iconElements.length > 0) {
              if (iconElements.length > 1) { // Has both icons.
                  this.leadingIcon_ = iconFactory(iconElements[0]);
                  this.trailingIcon_ = iconFactory(iconElements[1]);
              }
              else {
                  if (this.root_.classList.contains(_constants__WEBPACK_IMPORTED_MODULE_11__["cssClasses"].WITH_LEADING_ICON)) {
                      this.leadingIcon_ = iconFactory(iconElements[0]);
                  }
                  else {
                      this.trailingIcon_ = iconFactory(iconElements[0]);
                  }
              }
          }
          this.ripple = this.createRipple_(rippleFactory);
      };
      MDCTextField.prototype.destroy = function () {
          if (this.ripple) {
              this.ripple.destroy();
          }
          if (this.lineRipple_) {
              this.lineRipple_.destroy();
          }
          if (this.helperText_) {
              this.helperText_.destroy();
          }
          if (this.characterCounter_) {
              this.characterCounter_.destroy();
          }
          if (this.leadingIcon_) {
              this.leadingIcon_.destroy();
          }
          if (this.trailingIcon_) {
              this.trailingIcon_.destroy();
          }
          if (this.label_) {
              this.label_.destroy();
          }
          if (this.outline_) {
              this.outline_.destroy();
          }
          _super.prototype.destroy.call(this);
      };
      /**
       * Initializes the Text Field's internal state based on the environment's
       * state.
       */
      MDCTextField.prototype.initialSyncWithDOM = function () {
          this.disabled = this.input_.disabled;
      };
      Object.defineProperty(MDCTextField.prototype, "value", {
          get: function () {
              return this.foundation_.getValue();
          },
          /**
           * @param value The value to set on the input.
           */
          set: function (value) {
              this.foundation_.setValue(value);
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "disabled", {
          get: function () {
              return this.foundation_.isDisabled();
          },
          /**
           * @param disabled Sets the Text Field disabled or enabled.
           */
          set: function (disabled) {
              this.foundation_.setDisabled(disabled);
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "valid", {
          get: function () {
              return this.foundation_.isValid();
          },
          /**
           * @param valid Sets the Text Field valid or invalid.
           */
          set: function (valid) {
              this.foundation_.setValid(valid);
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "required", {
          get: function () {
              return this.input_.required;
          },
          /**
           * @param required Sets the Text Field to required.
           */
          set: function (required) {
              this.input_.required = required;
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "pattern", {
          get: function () {
              return this.input_.pattern;
          },
          /**
           * @param pattern Sets the input element's validation pattern.
           */
          set: function (pattern) {
              this.input_.pattern = pattern;
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "minLength", {
          get: function () {
              return this.input_.minLength;
          },
          /**
           * @param minLength Sets the input element's minLength.
           */
          set: function (minLength) {
              this.input_.minLength = minLength;
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "maxLength", {
          get: function () {
              return this.input_.maxLength;
          },
          /**
           * @param maxLength Sets the input element's maxLength.
           */
          set: function (maxLength) {
              // Chrome throws exception if maxLength is set to a value less than zero
              if (maxLength < 0) {
                  this.input_.removeAttribute('maxLength');
              }
              else {
                  this.input_.maxLength = maxLength;
              }
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "min", {
          get: function () {
              return this.input_.min;
          },
          /**
           * @param min Sets the input element's min.
           */
          set: function (min) {
              this.input_.min = min;
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "max", {
          get: function () {
              return this.input_.max;
          },
          /**
           * @param max Sets the input element's max.
           */
          set: function (max) {
              this.input_.max = max;
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "step", {
          get: function () {
              return this.input_.step;
          },
          /**
           * @param step Sets the input element's step.
           */
          set: function (step) {
              this.input_.step = step;
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "helperTextContent", {
          /**
           * Sets the helper text element content.
           */
          set: function (content) {
              this.foundation_.setHelperTextContent(content);
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "leadingIconAriaLabel", {
          /**
           * Sets the aria label of the leading icon.
           */
          set: function (label) {
              this.foundation_.setLeadingIconAriaLabel(label);
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "leadingIconContent", {
          /**
           * Sets the text content of the leading icon.
           */
          set: function (content) {
              this.foundation_.setLeadingIconContent(content);
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "trailingIconAriaLabel", {
          /**
           * Sets the aria label of the trailing icon.
           */
          set: function (label) {
              this.foundation_.setTrailingIconAriaLabel(label);
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "trailingIconContent", {
          /**
           * Sets the text content of the trailing icon.
           */
          set: function (content) {
              this.foundation_.setTrailingIconContent(content);
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextField.prototype, "useNativeValidation", {
          /**
           * Enables or disables the use of native validation. Use this for custom validation.
           * @param useNativeValidation Set this to false to ignore native input validation.
           */
          set: function (useNativeValidation) {
              this.foundation_.setUseNativeValidation(useNativeValidation);
          },
          enumerable: true,
          configurable: true
      });
      /**
       * Focuses the input element.
       */
      MDCTextField.prototype.focus = function () {
          this.input_.focus();
      };
      /**
       * Recomputes the outline SVG path for the outline element.
       */
      MDCTextField.prototype.layout = function () {
          var openNotch = this.foundation_.shouldFloat;
          this.foundation_.notchOutline(openNotch);
      };
      MDCTextField.prototype.getDefaultFoundation = function () {
          // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.
          // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.
          // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
          var adapter = tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"]({}, this.getRootAdapterMethods_(), this.getInputAdapterMethods_(), this.getLabelAdapterMethods_(), this.getLineRippleAdapterMethods_(), this.getOutlineAdapterMethods_());
          // tslint:enable:object-literal-sort-keys
          return new _foundation__WEBPACK_IMPORTED_MODULE_12__["MDCTextFieldFoundation"](adapter, this.getFoundationMap_());
      };
      MDCTextField.prototype.getRootAdapterMethods_ = function () {
          var _this = this;
          // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
          return {
              addClass: function (className) { return _this.root_.classList.add(className); },
              removeClass: function (className) { return _this.root_.classList.remove(className); },
              hasClass: function (className) { return _this.root_.classList.contains(className); },
              registerTextFieldInteractionHandler: function (evtType, handler) { return _this.listen(evtType, handler); },
              deregisterTextFieldInteractionHandler: function (evtType, handler) { return _this.unlisten(evtType, handler); },
              registerValidationAttributeChangeHandler: function (handler) {
                  var getAttributesList = function (mutationsList) {
                      return mutationsList
                          .map(function (mutation) { return mutation.attributeName; })
                          .filter(function (attributeName) { return attributeName; });
                  };
                  var observer = new MutationObserver(function (mutationsList) { return handler(getAttributesList(mutationsList)); });
                  var config = { attributes: true };
                  observer.observe(_this.input_, config);
                  return observer;
              },
              deregisterValidationAttributeChangeHandler: function (observer) { return observer.disconnect(); },
          };
          // tslint:enable:object-literal-sort-keys
      };
      MDCTextField.prototype.getInputAdapterMethods_ = function () {
          var _this = this;
          // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
          return {
              getNativeInput: function () { return _this.input_; },
              isFocused: function () { return document.activeElement === _this.input_; },
              registerInputInteractionHandler: function (evtType, handler) {
                  return _this.input_.addEventListener(evtType, handler, Object(_material_dom_events__WEBPACK_IMPORTED_MODULE_2__["applyPassive"])());
              },
              deregisterInputInteractionHandler: function (evtType, handler) {
                  return _this.input_.removeEventListener(evtType, handler, Object(_material_dom_events__WEBPACK_IMPORTED_MODULE_2__["applyPassive"])());
              },
          };
          // tslint:enable:object-literal-sort-keys
      };
      MDCTextField.prototype.getLabelAdapterMethods_ = function () {
          var _this = this;
          return {
              floatLabel: function (shouldFloat) { return _this.label_ && _this.label_.float(shouldFloat); },
              getLabelWidth: function () { return _this.label_ ? _this.label_.getWidth() : 0; },
              hasLabel: function () { return Boolean(_this.label_); },
              shakeLabel: function (shouldShake) { return _this.label_ && _this.label_.shake(shouldShake); },
          };
      };
      MDCTextField.prototype.getLineRippleAdapterMethods_ = function () {
          var _this = this;
          return {
              activateLineRipple: function () {
                  if (_this.lineRipple_) {
                      _this.lineRipple_.activate();
                  }
              },
              deactivateLineRipple: function () {
                  if (_this.lineRipple_) {
                      _this.lineRipple_.deactivate();
                  }
              },
              setLineRippleTransformOrigin: function (normalizedX) {
                  if (_this.lineRipple_) {
                      _this.lineRipple_.setRippleCenter(normalizedX);
                  }
              },
          };
      };
      MDCTextField.prototype.getOutlineAdapterMethods_ = function () {
          var _this = this;
          return {
              closeOutline: function () { return _this.outline_ && _this.outline_.closeNotch(); },
              hasOutline: function () { return Boolean(_this.outline_); },
              notchOutline: function (labelWidth) { return _this.outline_ && _this.outline_.notch(labelWidth); },
          };
      };
      /**
       * @return A map of all subcomponents to subfoundations.
       */
      MDCTextField.prototype.getFoundationMap_ = function () {
          return {
              characterCounter: this.characterCounter_ ? this.characterCounter_.foundation : undefined,
              helperText: this.helperText_ ? this.helperText_.foundation : undefined,
              leadingIcon: this.leadingIcon_ ? this.leadingIcon_.foundation : undefined,
              trailingIcon: this.trailingIcon_ ? this.trailingIcon_.foundation : undefined,
          };
      };
      MDCTextField.prototype.createRipple_ = function (rippleFactory) {
          var _this = this;
          var isTextArea = this.root_.classList.contains(_constants__WEBPACK_IMPORTED_MODULE_11__["cssClasses"].TEXTAREA);
          var isOutlined = this.root_.classList.contains(_constants__WEBPACK_IMPORTED_MODULE_11__["cssClasses"].OUTLINED);
          if (isTextArea || isOutlined) {
              return null;
          }
          // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.
          // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.
          // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
          var adapter = tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"]({}, _material_ripple_component__WEBPACK_IMPORTED_MODULE_7__["MDCRipple"].createAdapter(this), { isSurfaceActive: function () { return _material_dom_ponyfill__WEBPACK_IMPORTED_MODULE_3__["matches"](_this.input_, ':active'); }, registerInteractionHandler: function (evtType, handler) { return _this.input_.addEventListener(evtType, handler, Object(_material_dom_events__WEBPACK_IMPORTED_MODULE_2__["applyPassive"])()); }, deregisterInteractionHandler: function (evtType, handler) {
                  return _this.input_.removeEventListener(evtType, handler, Object(_material_dom_events__WEBPACK_IMPORTED_MODULE_2__["applyPassive"])());
              } });
          // tslint:enable:object-literal-sort-keys
          return rippleFactory(this.root_, new _material_ripple_foundation__WEBPACK_IMPORTED_MODULE_8__["MDCRippleFoundation"](adapter));
      };
      return MDCTextField;
  }(_material_base_component__WEBPACK_IMPORTED_MODULE_1__["MDCComponent"]));
  
  //# sourceMappingURL=component.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/constants.js":
  /*!*******************************************************!*\
    !*** ./node_modules/@material/textfield/constants.js ***!
    \*******************************************************/
  /*! exports provided: cssClasses, strings, numbers, VALIDATION_ATTR_WHITELIST, ALWAYS_FLOAT_TYPES */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cssClasses", function() { return cssClasses; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "strings", function() { return strings; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "numbers", function() { return numbers; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VALIDATION_ATTR_WHITELIST", function() { return VALIDATION_ATTR_WHITELIST; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ALWAYS_FLOAT_TYPES", function() { return ALWAYS_FLOAT_TYPES; });
  /**
   * @license
   * Copyright 2016 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  var strings = {
      ARIA_CONTROLS: 'aria-controls',
      ICON_SELECTOR: '.mdc-text-field__icon',
      INPUT_SELECTOR: '.mdc-text-field__input',
      LABEL_SELECTOR: '.mdc-floating-label',
      LINE_RIPPLE_SELECTOR: '.mdc-line-ripple',
      OUTLINE_SELECTOR: '.mdc-notched-outline',
  };
  var cssClasses = {
      DENSE: 'mdc-text-field--dense',
      DISABLED: 'mdc-text-field--disabled',
      FOCUSED: 'mdc-text-field--focused',
      FULLWIDTH: 'mdc-text-field--fullwidth',
      HELPER_LINE: 'mdc-text-field-helper-line',
      INVALID: 'mdc-text-field--invalid',
      NO_LABEL: 'mdc-text-field--no-label',
      OUTLINED: 'mdc-text-field--outlined',
      ROOT: 'mdc-text-field',
      TEXTAREA: 'mdc-text-field--textarea',
      WITH_LEADING_ICON: 'mdc-text-field--with-leading-icon',
      WITH_TRAILING_ICON: 'mdc-text-field--with-trailing-icon',
  };
  var numbers = {
      DENSE_LABEL_SCALE: 0.923,
      LABEL_SCALE: 0.75,
  };
  /**
   * Whitelist based off of https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation
   * under the "Validation-related attributes" section.
   */
  var VALIDATION_ATTR_WHITELIST = [
      'pattern', 'min', 'max', 'required', 'step', 'minlength', 'maxlength',
  ];
  /**
   * Label should always float for these types as they show some UI even if value is empty.
   */
  var ALWAYS_FLOAT_TYPES = [
      'color', 'date', 'datetime-local', 'month', 'range', 'time', 'week',
  ];
  
  //# sourceMappingURL=constants.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/foundation.js":
  /*!********************************************************!*\
    !*** ./node_modules/@material/textfield/foundation.js ***!
    \********************************************************/
  /*! exports provided: MDCTextFieldFoundation, default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCTextFieldFoundation", function() { return MDCTextFieldFoundation; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js");
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/textfield/constants.js");
  /**
   * @license
   * Copyright 2016 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var POINTERDOWN_EVENTS = ['mousedown', 'touchstart'];
  var INTERACTION_EVENTS = ['click', 'keydown'];
  var MDCTextFieldFoundation = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCTextFieldFoundation, _super);
      /**
       * @param adapter
       * @param foundationMap Map from subcomponent names to their subfoundations.
       */
      function MDCTextFieldFoundation(adapter, foundationMap) {
          if (foundationMap === void 0) { foundationMap = {}; }
          var _this = _super.call(this, tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"]({}, MDCTextFieldFoundation.defaultAdapter, adapter)) || this;
          _this.isFocused_ = false;
          _this.receivedUserInput_ = false;
          _this.isValid_ = true;
          _this.useNativeValidation_ = true;
          _this.helperText_ = foundationMap.helperText;
          _this.characterCounter_ = foundationMap.characterCounter;
          _this.leadingIcon_ = foundationMap.leadingIcon;
          _this.trailingIcon_ = foundationMap.trailingIcon;
          _this.inputFocusHandler_ = function () { return _this.activateFocus(); };
          _this.inputBlurHandler_ = function () { return _this.deactivateFocus(); };
          _this.inputInputHandler_ = function () { return _this.handleInput(); };
          _this.setPointerXOffset_ = function (evt) { return _this.setTransformOrigin(evt); };
          _this.textFieldInteractionHandler_ = function () { return _this.handleTextFieldInteraction(); };
          _this.validationAttributeChangeHandler_ = function (attributesList) { return _this.handleValidationAttributeChange(attributesList); };
          return _this;
      }
      Object.defineProperty(MDCTextFieldFoundation, "cssClasses", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldFoundation, "strings", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["strings"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldFoundation, "numbers", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["numbers"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldFoundation.prototype, "shouldAlwaysFloat_", {
          get: function () {
              var type = this.getNativeInput_().type;
              return _constants__WEBPACK_IMPORTED_MODULE_2__["ALWAYS_FLOAT_TYPES"].indexOf(type) >= 0;
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldFoundation.prototype, "shouldFloat", {
          get: function () {
              return this.shouldAlwaysFloat_ || this.isFocused_ || !!this.getValue() || this.isBadInput_();
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldFoundation.prototype, "shouldShake", {
          get: function () {
              return !this.isFocused_ && !this.isValid() && !!this.getValue();
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldFoundation, "defaultAdapter", {
          /**
           * See {@link MDCTextFieldAdapter} for typing information on parameters and return types.
           */
          get: function () {
              // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
              return {
                  addClass: function () { return undefined; },
                  removeClass: function () { return undefined; },
                  hasClass: function () { return true; },
                  registerTextFieldInteractionHandler: function () { return undefined; },
                  deregisterTextFieldInteractionHandler: function () { return undefined; },
                  registerInputInteractionHandler: function () { return undefined; },
                  deregisterInputInteractionHandler: function () { return undefined; },
                  registerValidationAttributeChangeHandler: function () { return new MutationObserver(function () { return undefined; }); },
                  deregisterValidationAttributeChangeHandler: function () { return undefined; },
                  getNativeInput: function () { return null; },
                  isFocused: function () { return false; },
                  activateLineRipple: function () { return undefined; },
                  deactivateLineRipple: function () { return undefined; },
                  setLineRippleTransformOrigin: function () { return undefined; },
                  shakeLabel: function () { return undefined; },
                  floatLabel: function () { return undefined; },
                  hasLabel: function () { return false; },
                  getLabelWidth: function () { return 0; },
                  hasOutline: function () { return false; },
                  notchOutline: function () { return undefined; },
                  closeOutline: function () { return undefined; },
              };
              // tslint:enable:object-literal-sort-keys
          },
          enumerable: true,
          configurable: true
      });
      MDCTextFieldFoundation.prototype.init = function () {
          var _this = this;
          if (this.adapter_.isFocused()) {
              this.inputFocusHandler_();
          }
          else if (this.adapter_.hasLabel() && this.shouldFloat) {
              this.notchOutline(true);
              this.adapter_.floatLabel(true);
          }
          this.adapter_.registerInputInteractionHandler('focus', this.inputFocusHandler_);
          this.adapter_.registerInputInteractionHandler('blur', this.inputBlurHandler_);
          this.adapter_.registerInputInteractionHandler('input', this.inputInputHandler_);
          POINTERDOWN_EVENTS.forEach(function (evtType) {
              _this.adapter_.registerInputInteractionHandler(evtType, _this.setPointerXOffset_);
          });
          INTERACTION_EVENTS.forEach(function (evtType) {
              _this.adapter_.registerTextFieldInteractionHandler(evtType, _this.textFieldInteractionHandler_);
          });
          this.validationObserver_ =
              this.adapter_.registerValidationAttributeChangeHandler(this.validationAttributeChangeHandler_);
          this.setCharacterCounter_(this.getValue().length);
      };
      MDCTextFieldFoundation.prototype.destroy = function () {
          var _this = this;
          this.adapter_.deregisterInputInteractionHandler('focus', this.inputFocusHandler_);
          this.adapter_.deregisterInputInteractionHandler('blur', this.inputBlurHandler_);
          this.adapter_.deregisterInputInteractionHandler('input', this.inputInputHandler_);
          POINTERDOWN_EVENTS.forEach(function (evtType) {
              _this.adapter_.deregisterInputInteractionHandler(evtType, _this.setPointerXOffset_);
          });
          INTERACTION_EVENTS.forEach(function (evtType) {
              _this.adapter_.deregisterTextFieldInteractionHandler(evtType, _this.textFieldInteractionHandler_);
          });
          this.adapter_.deregisterValidationAttributeChangeHandler(this.validationObserver_);
      };
      /**
       * Handles user interactions with the Text Field.
       */
      MDCTextFieldFoundation.prototype.handleTextFieldInteraction = function () {
          var nativeInput = this.adapter_.getNativeInput();
          if (nativeInput && nativeInput.disabled) {
              return;
          }
          this.receivedUserInput_ = true;
      };
      /**
       * Handles validation attribute changes
       */
      MDCTextFieldFoundation.prototype.handleValidationAttributeChange = function (attributesList) {
          var _this = this;
          attributesList.some(function (attributeName) {
              if (_constants__WEBPACK_IMPORTED_MODULE_2__["VALIDATION_ATTR_WHITELIST"].indexOf(attributeName) > -1) {
                  _this.styleValidity_(true);
                  return true;
              }
              return false;
          });
          if (attributesList.indexOf('maxlength') > -1) {
              this.setCharacterCounter_(this.getValue().length);
          }
      };
      /**
       * Opens/closes the notched outline.
       */
      MDCTextFieldFoundation.prototype.notchOutline = function (openNotch) {
          if (!this.adapter_.hasOutline()) {
              return;
          }
          if (openNotch) {
              var isDense = this.adapter_.hasClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].DENSE);
              var labelScale = isDense ? _constants__WEBPACK_IMPORTED_MODULE_2__["numbers"].DENSE_LABEL_SCALE : _constants__WEBPACK_IMPORTED_MODULE_2__["numbers"].LABEL_SCALE;
              var labelWidth = this.adapter_.getLabelWidth() * labelScale;
              this.adapter_.notchOutline(labelWidth);
          }
          else {
              this.adapter_.closeOutline();
          }
      };
      /**
       * Activates the text field focus state.
       */
      MDCTextFieldFoundation.prototype.activateFocus = function () {
          this.isFocused_ = true;
          this.styleFocused_(this.isFocused_);
          this.adapter_.activateLineRipple();
          if (this.adapter_.hasLabel()) {
              this.notchOutline(this.shouldFloat);
              this.adapter_.floatLabel(this.shouldFloat);
              this.adapter_.shakeLabel(this.shouldShake);
          }
          if (this.helperText_) {
              this.helperText_.showToScreenReader();
          }
      };
      /**
       * Sets the line ripple's transform origin, so that the line ripple activate
       * animation will animate out from the user's click location.
       */
      MDCTextFieldFoundation.prototype.setTransformOrigin = function (evt) {
          var touches = evt.touches;
          var targetEvent = touches ? touches[0] : evt;
          var targetClientRect = targetEvent.target.getBoundingClientRect();
          var normalizedX = targetEvent.clientX - targetClientRect.left;
          this.adapter_.setLineRippleTransformOrigin(normalizedX);
      };
      /**
       * Handles input change of text input and text area.
       */
      MDCTextFieldFoundation.prototype.handleInput = function () {
          this.autoCompleteFocus();
          this.setCharacterCounter_(this.getValue().length);
      };
      /**
       * Activates the Text Field's focus state in cases when the input value
       * changes without user input (e.g. programmatically).
       */
      MDCTextFieldFoundation.prototype.autoCompleteFocus = function () {
          if (!this.receivedUserInput_) {
              this.activateFocus();
          }
      };
      /**
       * Deactivates the Text Field's focus state.
       */
      MDCTextFieldFoundation.prototype.deactivateFocus = function () {
          this.isFocused_ = false;
          this.adapter_.deactivateLineRipple();
          var isValid = this.isValid();
          this.styleValidity_(isValid);
          this.styleFocused_(this.isFocused_);
          if (this.adapter_.hasLabel()) {
              this.notchOutline(this.shouldFloat);
              this.adapter_.floatLabel(this.shouldFloat);
              this.adapter_.shakeLabel(this.shouldShake);
          }
          if (!this.shouldFloat) {
              this.receivedUserInput_ = false;
          }
      };
      MDCTextFieldFoundation.prototype.getValue = function () {
          return this.getNativeInput_().value;
      };
      /**
       * @param value The value to set on the input Element.
       */
      MDCTextFieldFoundation.prototype.setValue = function (value) {
          // Prevent Safari from moving the caret to the end of the input when the value has not changed.
          if (this.getValue() !== value) {
              this.getNativeInput_().value = value;
          }
          this.setCharacterCounter_(value.length);
          var isValid = this.isValid();
          this.styleValidity_(isValid);
          if (this.adapter_.hasLabel()) {
              this.notchOutline(this.shouldFloat);
              this.adapter_.floatLabel(this.shouldFloat);
              this.adapter_.shakeLabel(this.shouldShake);
          }
      };
      /**
       * @return The custom validity state, if set; otherwise, the result of a native validity check.
       */
      MDCTextFieldFoundation.prototype.isValid = function () {
          return this.useNativeValidation_
              ? this.isNativeInputValid_() : this.isValid_;
      };
      /**
       * @param isValid Sets the custom validity state of the Text Field.
       */
      MDCTextFieldFoundation.prototype.setValid = function (isValid) {
          this.isValid_ = isValid;
          this.styleValidity_(isValid);
          var shouldShake = !isValid && !this.isFocused_ && !!this.getValue();
          if (this.adapter_.hasLabel()) {
              this.adapter_.shakeLabel(shouldShake);
          }
      };
      /**
       * Enables or disables the use of native validation. Use this for custom validation.
       * @param useNativeValidation Set this to false to ignore native input validation.
       */
      MDCTextFieldFoundation.prototype.setUseNativeValidation = function (useNativeValidation) {
          this.useNativeValidation_ = useNativeValidation;
      };
      MDCTextFieldFoundation.prototype.isDisabled = function () {
          return this.getNativeInput_().disabled;
      };
      /**
       * @param disabled Sets the text-field disabled or enabled.
       */
      MDCTextFieldFoundation.prototype.setDisabled = function (disabled) {
          this.getNativeInput_().disabled = disabled;
          this.styleDisabled_(disabled);
      };
      /**
       * @param content Sets the content of the helper text.
       */
      MDCTextFieldFoundation.prototype.setHelperTextContent = function (content) {
          if (this.helperText_) {
              this.helperText_.setContent(content);
          }
      };
      /**
       * Sets the aria label of the leading icon.
       */
      MDCTextFieldFoundation.prototype.setLeadingIconAriaLabel = function (label) {
          if (this.leadingIcon_) {
              this.leadingIcon_.setAriaLabel(label);
          }
      };
      /**
       * Sets the text content of the leading icon.
       */
      MDCTextFieldFoundation.prototype.setLeadingIconContent = function (content) {
          if (this.leadingIcon_) {
              this.leadingIcon_.setContent(content);
          }
      };
      /**
       * Sets the aria label of the trailing icon.
       */
      MDCTextFieldFoundation.prototype.setTrailingIconAriaLabel = function (label) {
          if (this.trailingIcon_) {
              this.trailingIcon_.setAriaLabel(label);
          }
      };
      /**
       * Sets the text content of the trailing icon.
       */
      MDCTextFieldFoundation.prototype.setTrailingIconContent = function (content) {
          if (this.trailingIcon_) {
              this.trailingIcon_.setContent(content);
          }
      };
      /**
       * Sets character counter values that shows characters used and the total character limit.
       */
      MDCTextFieldFoundation.prototype.setCharacterCounter_ = function (currentLength) {
          if (!this.characterCounter_) {
              return;
          }
          var maxLength = this.getNativeInput_().maxLength;
          if (maxLength === -1) {
              throw new Error('MDCTextFieldFoundation: Expected maxlength html property on text input or textarea.');
          }
          this.characterCounter_.setCounterValue(currentLength, maxLength);
      };
      /**
       * @return True if the Text Field input fails in converting the user-supplied value.
       */
      MDCTextFieldFoundation.prototype.isBadInput_ = function () {
          // The badInput property is not supported in IE 11 💩.
          return this.getNativeInput_().validity.badInput || false;
      };
      /**
       * @return The result of native validity checking (ValidityState.valid).
       */
      MDCTextFieldFoundation.prototype.isNativeInputValid_ = function () {
          return this.getNativeInput_().validity.valid;
      };
      /**
       * Styles the component based on the validity state.
       */
      MDCTextFieldFoundation.prototype.styleValidity_ = function (isValid) {
          var INVALID = MDCTextFieldFoundation.cssClasses.INVALID;
          if (isValid) {
              this.adapter_.removeClass(INVALID);
          }
          else {
              this.adapter_.addClass(INVALID);
          }
          if (this.helperText_) {
              this.helperText_.setValidity(isValid);
          }
      };
      /**
       * Styles the component based on the focused state.
       */
      MDCTextFieldFoundation.prototype.styleFocused_ = function (isFocused) {
          var FOCUSED = MDCTextFieldFoundation.cssClasses.FOCUSED;
          if (isFocused) {
              this.adapter_.addClass(FOCUSED);
          }
          else {
              this.adapter_.removeClass(FOCUSED);
          }
      };
      /**
       * Styles the component based on the disabled state.
       */
      MDCTextFieldFoundation.prototype.styleDisabled_ = function (isDisabled) {
          var _a = MDCTextFieldFoundation.cssClasses, DISABLED = _a.DISABLED, INVALID = _a.INVALID;
          if (isDisabled) {
              this.adapter_.addClass(DISABLED);
              this.adapter_.removeClass(INVALID);
          }
          else {
              this.adapter_.removeClass(DISABLED);
          }
          if (this.leadingIcon_) {
              this.leadingIcon_.setDisabled(isDisabled);
          }
          if (this.trailingIcon_) {
              this.trailingIcon_.setDisabled(isDisabled);
          }
      };
      /**
       * @return The native text input element from the host environment, or an object with the same shape for unit tests.
       */
      MDCTextFieldFoundation.prototype.getNativeInput_ = function () {
          // this.adapter_ may be undefined in foundation unit tests. This happens when testdouble is creating a mock object
          // and invokes the shouldShake/shouldFloat getters (which in turn call getValue(), which calls this method) before
          // init() has been called from the MDCTextField constructor. To work around that issue, we return a dummy object.
          var nativeInput = this.adapter_ ? this.adapter_.getNativeInput() : null;
          return nativeInput || {
              disabled: false,
              maxLength: -1,
              type: 'input',
              validity: {
                  badInput: false,
                  valid: true,
              },
              value: '',
          };
      };
      return MDCTextFieldFoundation;
  }(_material_base_foundation__WEBPACK_IMPORTED_MODULE_1__["MDCFoundation"]));
  
  // tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
  /* harmony default export */ __webpack_exports__["default"] = (MDCTextFieldFoundation);
  //# sourceMappingURL=foundation.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/helper-text/component.js":
  /*!*******************************************************************!*\
    !*** ./node_modules/@material/textfield/helper-text/component.js ***!
    \*******************************************************************/
  /*! exports provided: MDCTextFieldHelperText */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCTextFieldHelperText", function() { return MDCTextFieldHelperText; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/component */ "./node_modules/@material/base/component.js");
  /* harmony import */ var _foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation */ "./node_modules/@material/textfield/helper-text/foundation.js");
  /**
   * @license
   * Copyright 2017 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCTextFieldHelperText = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCTextFieldHelperText, _super);
      function MDCTextFieldHelperText() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      MDCTextFieldHelperText.attachTo = function (root) {
          return new MDCTextFieldHelperText(root);
      };
      Object.defineProperty(MDCTextFieldHelperText.prototype, "foundation", {
          get: function () {
              return this.foundation_;
          },
          enumerable: true,
          configurable: true
      });
      MDCTextFieldHelperText.prototype.getDefaultFoundation = function () {
          var _this = this;
          // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.
          // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.
          // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
          var adapter = {
              addClass: function (className) { return _this.root_.classList.add(className); },
              removeClass: function (className) { return _this.root_.classList.remove(className); },
              hasClass: function (className) { return _this.root_.classList.contains(className); },
              setAttr: function (attr, value) { return _this.root_.setAttribute(attr, value); },
              removeAttr: function (attr) { return _this.root_.removeAttribute(attr); },
              setContent: function (content) {
                  _this.root_.textContent = content;
              },
          };
          // tslint:enable:object-literal-sort-keys
          return new _foundation__WEBPACK_IMPORTED_MODULE_2__["MDCTextFieldHelperTextFoundation"](adapter);
      };
      return MDCTextFieldHelperText;
  }(_material_base_component__WEBPACK_IMPORTED_MODULE_1__["MDCComponent"]));
  
  //# sourceMappingURL=component.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/helper-text/constants.js":
  /*!*******************************************************************!*\
    !*** ./node_modules/@material/textfield/helper-text/constants.js ***!
    \*******************************************************************/
  /*! exports provided: strings, cssClasses */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "strings", function() { return strings; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cssClasses", function() { return cssClasses; });
  /**
   * @license
   * Copyright 2016 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  var cssClasses = {
      HELPER_TEXT_PERSISTENT: 'mdc-text-field-helper-text--persistent',
      HELPER_TEXT_VALIDATION_MSG: 'mdc-text-field-helper-text--validation-msg',
      ROOT: 'mdc-text-field-helper-text',
  };
  var strings = {
      ARIA_HIDDEN: 'aria-hidden',
      ROLE: 'role',
      ROOT_SELECTOR: "." + cssClasses.ROOT,
  };
  
  //# sourceMappingURL=constants.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/helper-text/foundation.js":
  /*!********************************************************************!*\
    !*** ./node_modules/@material/textfield/helper-text/foundation.js ***!
    \********************************************************************/
  /*! exports provided: MDCTextFieldHelperTextFoundation, default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCTextFieldHelperTextFoundation", function() { return MDCTextFieldHelperTextFoundation; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js");
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/textfield/helper-text/constants.js");
  /**
   * @license
   * Copyright 2017 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCTextFieldHelperTextFoundation = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCTextFieldHelperTextFoundation, _super);
      function MDCTextFieldHelperTextFoundation(adapter) {
          return _super.call(this, tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"]({}, MDCTextFieldHelperTextFoundation.defaultAdapter, adapter)) || this;
      }
      Object.defineProperty(MDCTextFieldHelperTextFoundation, "cssClasses", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldHelperTextFoundation, "strings", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["strings"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldHelperTextFoundation, "defaultAdapter", {
          /**
           * See {@link MDCTextFieldHelperTextAdapter} for typing information on parameters and return types.
           */
          get: function () {
              // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
              return {
                  addClass: function () { return undefined; },
                  removeClass: function () { return undefined; },
                  hasClass: function () { return false; },
                  setAttr: function () { return undefined; },
                  removeAttr: function () { return undefined; },
                  setContent: function () { return undefined; },
              };
              // tslint:enable:object-literal-sort-keys
          },
          enumerable: true,
          configurable: true
      });
      /**
       * Sets the content of the helper text field.
       */
      MDCTextFieldHelperTextFoundation.prototype.setContent = function (content) {
          this.adapter_.setContent(content);
      };
      /**
       * @param isPersistent Sets the persistency of the helper text.
       */
      MDCTextFieldHelperTextFoundation.prototype.setPersistent = function (isPersistent) {
          if (isPersistent) {
              this.adapter_.addClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].HELPER_TEXT_PERSISTENT);
          }
          else {
              this.adapter_.removeClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].HELPER_TEXT_PERSISTENT);
          }
      };
      /**
       * @param isValidation True to make the helper text act as an error validation message.
       */
      MDCTextFieldHelperTextFoundation.prototype.setValidation = function (isValidation) {
          if (isValidation) {
              this.adapter_.addClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].HELPER_TEXT_VALIDATION_MSG);
          }
          else {
              this.adapter_.removeClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].HELPER_TEXT_VALIDATION_MSG);
          }
      };
      /**
       * Makes the helper text visible to the screen reader.
       */
      MDCTextFieldHelperTextFoundation.prototype.showToScreenReader = function () {
          this.adapter_.removeAttr(_constants__WEBPACK_IMPORTED_MODULE_2__["strings"].ARIA_HIDDEN);
      };
      /**
       * Sets the validity of the helper text based on the input validity.
       */
      MDCTextFieldHelperTextFoundation.prototype.setValidity = function (inputIsValid) {
          var helperTextIsPersistent = this.adapter_.hasClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].HELPER_TEXT_PERSISTENT);
          var helperTextIsValidationMsg = this.adapter_.hasClass(_constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"].HELPER_TEXT_VALIDATION_MSG);
          var validationMsgNeedsDisplay = helperTextIsValidationMsg && !inputIsValid;
          if (validationMsgNeedsDisplay) {
              this.adapter_.setAttr(_constants__WEBPACK_IMPORTED_MODULE_2__["strings"].ROLE, 'alert');
          }
          else {
              this.adapter_.removeAttr(_constants__WEBPACK_IMPORTED_MODULE_2__["strings"].ROLE);
          }
          if (!helperTextIsPersistent && !validationMsgNeedsDisplay) {
              this.hide_();
          }
      };
      /**
       * Hides the help text from screen readers.
       */
      MDCTextFieldHelperTextFoundation.prototype.hide_ = function () {
          this.adapter_.setAttr(_constants__WEBPACK_IMPORTED_MODULE_2__["strings"].ARIA_HIDDEN, 'true');
      };
      return MDCTextFieldHelperTextFoundation;
  }(_material_base_foundation__WEBPACK_IMPORTED_MODULE_1__["MDCFoundation"]));
  
  // tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
  /* harmony default export */ __webpack_exports__["default"] = (MDCTextFieldHelperTextFoundation);
  //# sourceMappingURL=foundation.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/icon/component.js":
  /*!************************************************************!*\
    !*** ./node_modules/@material/textfield/icon/component.js ***!
    \************************************************************/
  /*! exports provided: MDCTextFieldIcon */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCTextFieldIcon", function() { return MDCTextFieldIcon; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/component */ "./node_modules/@material/base/component.js");
  /* harmony import */ var _foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation */ "./node_modules/@material/textfield/icon/foundation.js");
  /**
   * @license
   * Copyright 2017 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var MDCTextFieldIcon = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCTextFieldIcon, _super);
      function MDCTextFieldIcon() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      MDCTextFieldIcon.attachTo = function (root) {
          return new MDCTextFieldIcon(root);
      };
      Object.defineProperty(MDCTextFieldIcon.prototype, "foundation", {
          get: function () {
              return this.foundation_;
          },
          enumerable: true,
          configurable: true
      });
      MDCTextFieldIcon.prototype.getDefaultFoundation = function () {
          var _this = this;
          // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.
          // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.
          // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
          var adapter = {
              getAttr: function (attr) { return _this.root_.getAttribute(attr); },
              setAttr: function (attr, value) { return _this.root_.setAttribute(attr, value); },
              removeAttr: function (attr) { return _this.root_.removeAttribute(attr); },
              setContent: function (content) {
                  _this.root_.textContent = content;
              },
              registerInteractionHandler: function (evtType, handler) { return _this.listen(evtType, handler); },
              deregisterInteractionHandler: function (evtType, handler) { return _this.unlisten(evtType, handler); },
              notifyIconAction: function () { return _this.emit(_foundation__WEBPACK_IMPORTED_MODULE_2__["MDCTextFieldIconFoundation"].strings.ICON_EVENT, {} /* evtData */, true /* shouldBubble */); },
          };
          // tslint:enable:object-literal-sort-keys
          return new _foundation__WEBPACK_IMPORTED_MODULE_2__["MDCTextFieldIconFoundation"](adapter);
      };
      return MDCTextFieldIcon;
  }(_material_base_component__WEBPACK_IMPORTED_MODULE_1__["MDCComponent"]));
  
  //# sourceMappingURL=component.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/icon/constants.js":
  /*!************************************************************!*\
    !*** ./node_modules/@material/textfield/icon/constants.js ***!
    \************************************************************/
  /*! exports provided: strings, cssClasses */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "strings", function() { return strings; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cssClasses", function() { return cssClasses; });
  /**
   * @license
   * Copyright 2016 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  var strings = {
      ICON_EVENT: 'MDCTextField:icon',
      ICON_ROLE: 'button',
  };
  var cssClasses = {
      ROOT: 'mdc-text-field__icon',
  };
  
  //# sourceMappingURL=constants.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@material/textfield/icon/foundation.js":
  /*!*************************************************************!*\
    !*** ./node_modules/@material/textfield/icon/foundation.js ***!
    \*************************************************************/
  /*! exports provided: MDCTextFieldIconFoundation, default */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCTextFieldIconFoundation", function() { return MDCTextFieldIconFoundation; });
  /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
  /* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js");
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/textfield/icon/constants.js");
  /**
   * @license
   * Copyright 2017 Google Inc.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  
  
  var INTERACTION_EVENTS = ['click', 'keydown'];
  var MDCTextFieldIconFoundation = /** @class */ (function (_super) {
      tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MDCTextFieldIconFoundation, _super);
      function MDCTextFieldIconFoundation(adapter) {
          var _this = _super.call(this, tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"]({}, MDCTextFieldIconFoundation.defaultAdapter, adapter)) || this;
          _this.savedTabIndex_ = null;
          _this.interactionHandler_ = function (evt) { return _this.handleInteraction(evt); };
          return _this;
      }
      Object.defineProperty(MDCTextFieldIconFoundation, "strings", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["strings"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldIconFoundation, "cssClasses", {
          get: function () {
              return _constants__WEBPACK_IMPORTED_MODULE_2__["cssClasses"];
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(MDCTextFieldIconFoundation, "defaultAdapter", {
          /**
           * See {@link MDCTextFieldIconAdapter} for typing information on parameters and return types.
           */
          get: function () {
              // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.
              return {
                  getAttr: function () { return null; },
                  setAttr: function () { return undefined; },
                  removeAttr: function () { return undefined; },
                  setContent: function () { return undefined; },
                  registerInteractionHandler: function () { return undefined; },
                  deregisterInteractionHandler: function () { return undefined; },
                  notifyIconAction: function () { return undefined; },
              };
              // tslint:enable:object-literal-sort-keys
          },
          enumerable: true,
          configurable: true
      });
      MDCTextFieldIconFoundation.prototype.init = function () {
          var _this = this;
          this.savedTabIndex_ = this.adapter_.getAttr('tabindex');
          INTERACTION_EVENTS.forEach(function (evtType) {
              _this.adapter_.registerInteractionHandler(evtType, _this.interactionHandler_);
          });
      };
      MDCTextFieldIconFoundation.prototype.destroy = function () {
          var _this = this;
          INTERACTION_EVENTS.forEach(function (evtType) {
              _this.adapter_.deregisterInteractionHandler(evtType, _this.interactionHandler_);
          });
      };
      MDCTextFieldIconFoundation.prototype.setDisabled = function (disabled) {
          if (!this.savedTabIndex_) {
              return;
          }
          if (disabled) {
              this.adapter_.setAttr('tabindex', '-1');
              this.adapter_.removeAttr('role');
          }
          else {
              this.adapter_.setAttr('tabindex', this.savedTabIndex_);
              this.adapter_.setAttr('role', _constants__WEBPACK_IMPORTED_MODULE_2__["strings"].ICON_ROLE);
          }
      };
      MDCTextFieldIconFoundation.prototype.setAriaLabel = function (label) {
          this.adapter_.setAttr('aria-label', label);
      };
      MDCTextFieldIconFoundation.prototype.setContent = function (content) {
          this.adapter_.setContent(content);
      };
      MDCTextFieldIconFoundation.prototype.handleInteraction = function (evt) {
          var isEnterKey = evt.key === 'Enter' || evt.keyCode === 13;
          if (evt.type === 'click' || isEnterKey) {
              this.adapter_.notifyIconAction();
          }
      };
      return MDCTextFieldIconFoundation;
  }(_material_base_foundation__WEBPACK_IMPORTED_MODULE_1__["MDCFoundation"]));
  
  // tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.
  /* harmony default export */ __webpack_exports__["default"] = (MDCTextFieldIconFoundation);
  //# sourceMappingURL=foundation.js.map
  
  /***/ }),
  
  /***/ "./node_modules/@tarekraafat/autocomplete.js/dist/js/autoComplete.js":
  /*!***************************************************************************!*\
    !*** ./node_modules/@tarekraafat/autocomplete.js/dist/js/autoComplete.js ***!
    \***************************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  (function (global, factory) {
     true ? module.exports = factory() :
    undefined;
  }(this, (function () { 'use strict';
  
    function _classCallCheck(instance, Constructor) {
      if (!(instance instanceof Constructor)) {
        throw new TypeError("Cannot call a class as a function");
      }
    }
  
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        if ("value" in descriptor) descriptor.writable = true;
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
  
    function _createClass(Constructor, protoProps, staticProps) {
      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
      if (staticProps) _defineProperties(Constructor, staticProps);
      return Constructor;
    }
  
    var dataAttribute = "data-id";
    var select = {
      resultsList: "autoComplete_list",
      result: "autoComplete_result",
      highlight: "autoComplete_highlighted",
      selectedResult: "autoComplete_selected"
    };
    var keys = {
      ENTER: 13,
      ARROW_UP: 38,
      ARROW_DOWN: 40
    };
    var getInput = function getInput(selector) {
      return typeof selector === "string" ? document.querySelector(selector) : selector();
    };
    var createResultsList = function createResultsList(renderResults) {
      var resultsList = document.createElement(renderResults.element);
      resultsList.setAttribute("id", select.resultsList);
      if (renderResults.container) {
        renderResults.container(resultsList);
      }
      renderResults.destination.insertAdjacentElement(renderResults.position, resultsList);
      return resultsList;
    };
    var highlight = function highlight(value) {
      return "<span class=".concat(select.highlight, ">").concat(value, "</span>");
    };
    var addResultsToList = function addResultsToList(resultsList, dataSrc, resultItem) {
      var fragment = document.createDocumentFragment();
      dataSrc.forEach(function (event, record) {
        var result = document.createElement(resultItem.element);
        var resultIndex = dataSrc[record].index;
        result.setAttribute(dataAttribute, resultIndex);
        result.setAttribute("class", select.result);
        resultItem.content ? resultItem.content(event, result) : result.innerHTML = event.match || event;
        fragment.appendChild(result);
      });
      resultsList.appendChild(fragment);
    };
    var clearResults = function clearResults(resultsList) {
      return resultsList.innerHTML = "";
    };
    var onSelection = function onSelection(event, field, resultsList, feedback, resultsValues, selection) {
      feedback({
        event: event,
        query: field instanceof HTMLInputElement ? field.value : field.innerHTML,
        matches: resultsValues.matches,
        results: resultsValues.list.map(function (record) {
          return record.value;
        }),
        selection: resultsValues.list.find(function (value) {
          if (event.keyCode === keys.ENTER) {
            return value.index === Number(selection.getAttribute(dataAttribute));
          } else if (event.type === "mousedown") {
            return value.index === Number(event.currentTarget.getAttribute(dataAttribute));
          }
        })
      });
      clearResults(resultsList);
    };
    var navigation = function navigation(input, resultsList, feedback, resultsValues) {
      var li = resultsList.childNodes,
          liLength = li.length - 1;
      var liSelected = undefined,
          next;
      var removeSelection = function removeSelection(direction) {
        liSelected.classList.remove(select.selectedResult);
        if (direction === 1) {
          next = liSelected.nextSibling;
        } else {
          next = liSelected.previousSibling;
        }
      };
      var highlightSelection = function highlightSelection(current) {
        liSelected = current;
        liSelected.classList.add(select.selectedResult);
      };
      input.onkeydown = function (event) {
        if (li.length > 0) {
          switch (event.keyCode) {
            case keys.ARROW_UP:
              if (liSelected) {
                removeSelection(0);
                if (next) {
                  highlightSelection(next);
                } else {
                  highlightSelection(li[liLength]);
                }
              } else {
                highlightSelection(li[liLength]);
              }
              break;
            case keys.ARROW_DOWN:
              if (liSelected) {
                removeSelection(1);
                if (next) {
                  highlightSelection(next);
                } else {
                  highlightSelection(li[0]);
                }
              } else {
                highlightSelection(li[0]);
              }
              break;
            case keys.ENTER:
              if (liSelected) {
                onSelection(event, input, resultsList, feedback, resultsValues, liSelected);
              }
          }
        }
      };
      li.forEach(function (selection) {
        selection.onmousedown = function (event) {
          return onSelection(event, input, resultsList, feedback, resultsValues);
        };
      });
    };
    var autoCompleteView = {
      getInput: getInput,
      createResultsList: createResultsList,
      highlight: highlight,
      addResultsToList: addResultsToList,
      navigation: navigation,
      clearResults: clearResults
    };
  
    var CustomEventPolyfill = function CustomEventPolyfill(event, params) {
      params = params || {
        bubbles: false,
        cancelable: false,
        detail: undefined
      };
      var evt = document.createEvent("CustomEvent");
      evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
      return evt;
    };
    CustomEventPolyfill.prototype = window.Event.prototype;
    var CustomEventWrapper = typeof window.CustomEvent === "function" && window.CustomEvent || CustomEventPolyfill;
    var initElementClosestPolyfill = function initElementClosestPolyfill() {
      if (!Element.prototype.matches) {
        Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
      }
      if (!Element.prototype.closest) {
        Element.prototype.closest = function (s) {
          var el = this;
          do {
            if (el.matches(s)) {
              return el;
            }
            el = el.parentElement || el.parentNode;
          } while (el !== null && el.nodeType === 1);
          return null;
        };
      }
    };
    var Polyfill = {
      CustomEventWrapper: CustomEventWrapper,
      initElementClosestPolyfill: initElementClosestPolyfill
    };
  
    var autoComplete =
    function () {
      function autoComplete(config) {
        _classCallCheck(this, autoComplete);
        var _config$selector = config.selector,
            selector = _config$selector === void 0 ? "#autoComplete" : _config$selector,
            _config$data = config.data,
            key = _config$data.key,
            _src = _config$data.src,
            _config$data$cache = _config$data.cache,
            cache = _config$data$cache === void 0 ? true : _config$data$cache,
            query = config.query,
            _config$trigger = config.trigger;
        _config$trigger = _config$trigger === void 0 ? {} : _config$trigger;
        var _config$trigger$event = _config$trigger.event,
            event = _config$trigger$event === void 0 ? ["input"] : _config$trigger$event,
            _config$trigger$condi = _config$trigger.condition,
            condition = _config$trigger$condi === void 0 ? false : _config$trigger$condi,
            _config$searchEngine = config.searchEngine,
            searchEngine = _config$searchEngine === void 0 ? "strict" : _config$searchEngine,
            _config$threshold = config.threshold,
            threshold = _config$threshold === void 0 ? 0 : _config$threshold,
            _config$debounce = config.debounce,
            debounce = _config$debounce === void 0 ? 0 : _config$debounce,
            _config$resultsList = config.resultsList;
        _config$resultsList = _config$resultsList === void 0 ? {} : _config$resultsList;
        var _config$resultsList$r = _config$resultsList.render,
            render = _config$resultsList$r === void 0 ? false : _config$resultsList$r,
            _config$resultsList$c = _config$resultsList.container,
            container = _config$resultsList$c === void 0 ? false : _config$resultsList$c,
            destination = _config$resultsList.destination,
            _config$resultsList$p = _config$resultsList.position,
            position = _config$resultsList$p === void 0 ? "afterend" : _config$resultsList$p,
            _config$resultsList$e = _config$resultsList.element,
            resultsListElement = _config$resultsList$e === void 0 ? "ul" : _config$resultsList$e,
            _config$resultsList$n = _config$resultsList.navigation,
            navigation = _config$resultsList$n === void 0 ? false : _config$resultsList$n,
            _config$sort = config.sort,
            sort = _config$sort === void 0 ? false : _config$sort,
            placeHolder = config.placeHolder,
            _config$maxResults = config.maxResults,
            maxResults = _config$maxResults === void 0 ? 5 : _config$maxResults,
            _config$resultItem = config.resultItem;
        _config$resultItem = _config$resultItem === void 0 ? {} : _config$resultItem;
        var _config$resultItem$co = _config$resultItem.content,
            content = _config$resultItem$co === void 0 ? false : _config$resultItem$co,
            _config$resultItem$el = _config$resultItem.element,
            resultItemElement = _config$resultItem$el === void 0 ? "li" : _config$resultItem$el,
            noResults = config.noResults,
            _config$highlight = config.highlight,
            highlight = _config$highlight === void 0 ? false : _config$highlight,
            onSelection = config.onSelection;
        var resultsListView = render ? autoCompleteView.createResultsList({
          container: container,
          destination: destination || autoCompleteView.getInput(selector),
          position: position,
          element: resultsListElement
        }) : null;
        this.selector = selector;
        this.data = {
          src: function src() {
            return typeof _src === "function" ? _src() : _src;
          },
          key: key,
          cache: cache
        };
        this.query = query;
        this.trigger = {
          event: event,
          condition: condition
        };
        this.searchEngine = searchEngine === "loose" ? "loose" : typeof searchEngine === "function" ? searchEngine : "strict";
        this.threshold = threshold;
        this.debounce = debounce;
        this.resultsList = {
          render: render,
          view: resultsListView,
          navigation: navigation
        };
        this.sort = sort;
        this.placeHolder = placeHolder;
        this.maxResults = maxResults;
        this.resultItem = {
          content: content,
          element: resultItemElement
        };
        this.noResults = noResults;
        this.highlight = highlight;
        this.onSelection = onSelection;
        this.init();
      }
      _createClass(autoComplete, [{
        key: "search",
        value: function search(query, record) {
          var recordLowerCase = record.toLowerCase();
          if (this.searchEngine === "loose") {
            query = query.replace(/ /g, "");
            var match = [];
            var searchPosition = 0;
            for (var number = 0; number < recordLowerCase.length; number++) {
              var recordChar = record[number];
              if (searchPosition < query.length && recordLowerCase[number] === query[searchPosition]) {
                recordChar = this.highlight ? autoCompleteView.highlight(recordChar) : recordChar;
                searchPosition++;
              }
              match.push(recordChar);
            }
            if (searchPosition !== query.length) {
              return false;
            }
            return match.join("");
          } else {
            if (recordLowerCase.includes(query)) {
              var pattern = new RegExp("".concat(query), "i");
              query = pattern.exec(record);
              return this.highlight ? record.replace(query, autoCompleteView.highlight(query)) : record;
            }
          }
        }
      }, {
        key: "listMatchedResults",
        value: function listMatchedResults(data) {
          var _this = this;
          return new Promise(function (resolve) {
            var resList = [];
            data.filter(function (record, index) {
              var search = function search(key) {
                var recordValue = key ? record[key] : record;
                if (recordValue) {
                  var match = typeof _this.searchEngine === "function" ? _this.searchEngine(_this.queryValue, recordValue) : _this.search(_this.queryValue, recordValue);
                  if (match && key) {
                    resList.push({
                      key: key,
                      index: index,
                      match: match,
                      value: record
                    });
                  } else if (match && !key) {
                    resList.push({
                      index: index,
                      match: match,
                      value: record
                    });
                  }
                }
              };
              if (_this.data.key) {
                var _iteratorNormalCompletion = true;
                var _didIteratorError = false;
                var _iteratorError = undefined;
                try {
                  for (var _iterator = _this.data.key[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
                    var key = _step.value;
                    search(key);
                  }
                } catch (err) {
                  _didIteratorError = true;
                  _iteratorError = err;
                } finally {
                  try {
                    if (!_iteratorNormalCompletion && _iterator["return"] != null) {
                      _iterator["return"]();
                    }
                  } finally {
                    if (_didIteratorError) {
                      throw _iteratorError;
                    }
                  }
                }
              } else {
                search();
              }
            });
            var list = _this.sort ? resList.sort(_this.sort).slice(0, _this.maxResults) : resList.slice(0, _this.maxResults);
            return resolve({
              matches: resList.length,
              list: list
            });
          });
        }
      }, {
        key: "ignite",
        value: function ignite() {
          var _this2 = this;
          var input = autoCompleteView.getInput(this.selector);
          if (this.placeHolder) {
            input.setAttribute("placeholder", this.placeHolder);
          }
          var debounce = function debounce(func, delay) {
            var inDebounce;
            return function () {
              var context = this;
              var args = arguments;
              clearTimeout(inDebounce);
              inDebounce = setTimeout(function () {
                return func.apply(context, args);
              }, delay);
            };
          };
          var exec = function exec(event) {
            var inputValue = input instanceof HTMLInputElement || input instanceof HTMLTextAreaElement ? input.value.toLowerCase() : input.innerHTML.toLowerCase();
            var queryValue = _this2.queryValue = _this2.query && _this2.query.manipulate ? _this2.query.manipulate(inputValue) : inputValue;
            var renderResultsList = _this2.resultsList.render;
            var triggerCondition = _this2.trigger.condition ? _this2.trigger.condition(queryValue) : queryValue.length > _this2.threshold && queryValue.replace(/ /g, "").length;
            var eventEmitter = function eventEmitter(event, results) {
              input.dispatchEvent(new Polyfill.CustomEventWrapper("autoComplete", {
                bubbles: true,
                detail: {
                  event: event,
                  input: inputValue,
                  query: queryValue,
                  matches: results ? results.matches : null,
                  results: results ? results.list : null
                },
                cancelable: true
              }));
            };
            if (renderResultsList) {
              var resultsList = _this2.resultsList.view;
              var clearResults = autoCompleteView.clearResults(resultsList);
              if (triggerCondition) {
                _this2.listMatchedResults(_this2.dataStream, event).then(function (list) {
                  eventEmitter(event, list);
                  if (_this2.resultsList.render) {
                    if (list.list.length === 0 && _this2.noResults) {
                      _this2.noResults();
                    } else {
                      autoCompleteView.addResultsToList(resultsList, list.list, _this2.resultItem);
                      if (_this2.onSelection) {
                        _this2.resultsList.navigation ? _this2.resultsList.navigation(event, input, resultsList, _this2.onSelection, list) : autoCompleteView.navigation(input, resultsList, _this2.onSelection, list);
                      }
                    }
                  }
                });
              } else {
                eventEmitter(event);
              }
            } else if (!renderResultsList && triggerCondition) {
              _this2.listMatchedResults(_this2.dataStream, event).then(function (list) {
                eventEmitter(event, list);
              });
            }
          };
          var run = function run(event) {
            Promise.resolve(_this2.data.cache ? _this2.dataStream : _this2.data.src()).then(function (data) {
              _this2.dataStream = data;
              exec(event);
            });
          };
          this.trigger.event.forEach(function (eventType) {
            input.addEventListener(eventType, debounce(function (event) {
              return run(event);
            }, _this2.debounce));
          });
        }
      }, {
        key: "init",
        value: function init() {
          var _this3 = this;
          if (this.data.cache) {
            Promise.resolve(this.data.src()).then(function (data) {
              _this3.dataStream = data;
              _this3.ignite();
            });
          } else {
            this.ignite();
          }
          Polyfill.initElementClosestPolyfill();
        }
      }]);
      return autoComplete;
    }();
  
    return autoComplete;
  
  })));
  
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/core/lib/Plugin.js":
  /*!***********************************************!*\
    !*** ./node_modules/@uppy/core/lib/Plugin.js ***!
    \***********************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
  
  var preact = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.esm.js");
  
  var findDOMElement = __webpack_require__(/*! @uppy/utils/lib/findDOMElement */ "./node_modules/@uppy/utils/lib/findDOMElement.js");
  /**
   * Defer a frequent call to the microtask queue.
   */
  
  
  function debounce(fn) {
    var calling = null;
    var latestArgs = null;
    return function () {
      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }
  
      latestArgs = args;
  
      if (!calling) {
        calling = Promise.resolve().then(function () {
          calling = null; // At this point `args` may be different from the most
          // recent state, if multiple calls happened since this task
          // was queued. So we use the `latestArgs`, which definitely
          // is the most recent call.
  
          return fn.apply(void 0, latestArgs);
        });
      }
  
      return calling;
    };
  }
  /**
   * Boilerplate that all Plugins share - and should not be used
   * directly. It also shows which methods final plugins should implement/override,
   * this deciding on structure.
   *
   * @param {object} main Uppy core object
   * @param {object} object with plugin options
   * @returns {Array|string} files or success/fail message
   */
  
  
  module.exports =
  /*#__PURE__*/
  function () {
    function Plugin(uppy, opts) {
      this.uppy = uppy;
      this.opts = opts || {};
      this.update = this.update.bind(this);
      this.mount = this.mount.bind(this);
      this.install = this.install.bind(this);
      this.uninstall = this.uninstall.bind(this);
    }
  
    var _proto = Plugin.prototype;
  
    _proto.getPluginState = function getPluginState() {
      var _this$uppy$getState = this.uppy.getState(),
          plugins = _this$uppy$getState.plugins;
  
      return plugins[this.id] || {};
    };
  
    _proto.setPluginState = function setPluginState(update) {
      var _extends2;
  
      var _this$uppy$getState2 = this.uppy.getState(),
          plugins = _this$uppy$getState2.plugins;
  
      this.uppy.setState({
        plugins: _extends({}, plugins, (_extends2 = {}, _extends2[this.id] = _extends({}, plugins[this.id], {}, update), _extends2))
      });
    };
  
    _proto.setOptions = function setOptions(newOpts) {
      this.opts = _extends({}, this.opts, {}, newOpts);
      this.setPluginState(); // so that UI re-renders with new options
    };
  
    _proto.update = function update(state) {
      if (typeof this.el === 'undefined') {
        return;
      }
  
      if (this._updateUI) {
        this._updateUI(state);
      }
    } // Called after every state update, after everything's mounted. Debounced.
    ;
  
    _proto.afterUpdate = function afterUpdate() {}
    /**
     * Called when plugin is mounted, whether in DOM or into another plugin.
     * Needed because sometimes plugins are mounted separately/after `install`,
     * so this.el and this.parent might not be available in `install`.
     * This is the case with @uppy/react plugins, for example.
     */
    ;
  
    _proto.onMount = function onMount() {}
    /**
     * Check if supplied `target` is a DOM element or an `object`.
     * If it’s an object — target is a plugin, and we search `plugins`
     * for a plugin with same name and return its target.
     *
     * @param {string|object} target
     *
     */
    ;
  
    _proto.mount = function mount(target, plugin) {
      var _this = this;
  
      var callerPluginName = plugin.id;
      var targetElement = findDOMElement(target);
  
      if (targetElement) {
        this.isTargetDOMEl = true; // API for plugins that require a synchronous rerender.
  
        this.rerender = function (state) {
          // plugin could be removed, but this.rerender is debounced below,
          // so it could still be called even after uppy.removePlugin or uppy.close
          // hence the check
          if (!_this.uppy.getPlugin(_this.id)) return;
          _this.el = preact.render(_this.render(state), targetElement, _this.el);
  
          _this.afterUpdate();
        };
  
        this._updateUI = debounce(this.rerender);
        this.uppy.log("Installing " + callerPluginName + " to a DOM element '" + target + "'"); // clear everything inside the target container
  
        if (this.opts.replaceTargetContent) {
          targetElement.innerHTML = '';
        }
  
        this.el = preact.render(this.render(this.uppy.getState()), targetElement);
        this.onMount();
        return this.el;
      }
  
      var targetPlugin;
  
      if (typeof target === 'object' && target instanceof Plugin) {
        // Targeting a plugin *instance*
        targetPlugin = target;
      } else if (typeof target === 'function') {
        // Targeting a plugin type
        var Target = target; // Find the target plugin instance.
  
        this.uppy.iteratePlugins(function (plugin) {
          if (plugin instanceof Target) {
            targetPlugin = plugin;
            return false;
          }
        });
      }
  
      if (targetPlugin) {
        this.uppy.log("Installing " + callerPluginName + " to " + targetPlugin.id);
        this.parent = targetPlugin;
        this.el = targetPlugin.addTarget(plugin);
        this.onMount();
        return this.el;
      }
  
      this.uppy.log("Not installing " + callerPluginName);
      throw new Error("Invalid target option given to " + callerPluginName + ". Please make sure that the element\n      exists on the page, or that the plugin you are targeting has been installed. Check that the <script> tag initializing Uppy\n      comes at the bottom of the page, before the closing </body> tag (see https://github.com/transloadit/uppy/issues/1042).");
    };
  
    _proto.render = function render(state) {
      throw new Error('Extend the render method to add your plugin to a DOM element');
    };
  
    _proto.addTarget = function addTarget(plugin) {
      throw new Error('Extend the addTarget method to add your plugin to another plugin\'s target');
    };
  
    _proto.unmount = function unmount() {
      if (this.isTargetDOMEl && this.el && this.el.parentNode) {
        this.el.parentNode.removeChild(this.el);
      }
    };
  
    _proto.install = function install() {};
  
    _proto.uninstall = function uninstall() {
      this.unmount();
    };
  
    return Plugin;
  }();
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/core/lib/index.js":
  /*!**********************************************!*\
    !*** ./node_modules/@uppy/core/lib/index.js ***!
    \**********************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
  
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  
  function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  
  function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
  
  function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  
  function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
  
  function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
  
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
  
  function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
  
  var Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ "./node_modules/@uppy/utils/lib/Translator.js");
  
  var ee = __webpack_require__(/*! namespace-emitter */ "./node_modules/namespace-emitter/index.js");
  
  var cuid = __webpack_require__(/*! cuid */ "./node_modules/cuid/index.js");
  
  var throttle = __webpack_require__(/*! lodash.throttle */ "./node_modules/lodash.throttle/index.js");
  
  var prettyBytes = __webpack_require__(/*! @uppy/utils/lib/prettyBytes */ "./node_modules/@uppy/utils/lib/prettyBytes.js");
  
  var match = __webpack_require__(/*! mime-match */ "./node_modules/mime-match/index.js");
  
  var DefaultStore = __webpack_require__(/*! @uppy/store-default */ "./node_modules/@uppy/store-default/lib/index.js");
  
  var getFileType = __webpack_require__(/*! @uppy/utils/lib/getFileType */ "./node_modules/@uppy/utils/lib/getFileType.js");
  
  var getFileNameAndExtension = __webpack_require__(/*! @uppy/utils/lib/getFileNameAndExtension */ "./node_modules/@uppy/utils/lib/getFileNameAndExtension.js");
  
  var generateFileID = __webpack_require__(/*! @uppy/utils/lib/generateFileID */ "./node_modules/@uppy/utils/lib/generateFileID.js");
  
  var supportsUploadProgress = __webpack_require__(/*! ./supportsUploadProgress */ "./node_modules/@uppy/core/lib/supportsUploadProgress.js");
  
  var _require = __webpack_require__(/*! ./loggers */ "./node_modules/@uppy/core/lib/loggers.js"),
      nullLogger = _require.nullLogger,
      debugLogger = _require.debugLogger;
  
  var Plugin = __webpack_require__(/*! ./Plugin */ "./node_modules/@uppy/core/lib/Plugin.js"); // Exported from here.
  
  
  var RestrictionError =
  /*#__PURE__*/
  function (_Error) {
    _inheritsLoose(RestrictionError, _Error);
  
    function RestrictionError() {
      var _this;
  
      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }
  
      _this = _Error.call.apply(_Error, [this].concat(args)) || this;
      _this.isRestriction = true;
      return _this;
    }
  
    return RestrictionError;
  }(_wrapNativeSuper(Error));
  /**
   * Uppy Core module.
   * Manages plugins, state updates, acts as an event bus,
   * adds/removes files and metadata.
   */
  
  
  var Uppy =
  /*#__PURE__*/
  function () {
    /**
     * Instantiate Uppy
     *
     * @param {object} opts — Uppy options
     */
    function Uppy(opts) {
      var _this2 = this;
  
      this.defaultLocale = {
        strings: {
          youCanOnlyUploadX: {
            0: 'You can only upload %{smart_count} file',
            1: 'You can only upload %{smart_count} files',
            2: 'You can only upload %{smart_count} files'
          },
          youHaveToAtLeastSelectX: {
            0: 'You have to select at least %{smart_count} file',
            1: 'You have to select at least %{smart_count} files',
            2: 'You have to select at least %{smart_count} files'
          },
          exceedsSize: 'This file exceeds maximum allowed size of',
          youCanOnlyUploadFileTypes: 'You can only upload: %{types}',
          companionError: 'Connection with Companion failed',
          companionAuthError: 'Authorization required',
          companionUnauthorizeHint: 'To unauthorize to your %{provider} account, please go to %{url}',
          failedToUpload: 'Failed to upload %{file}',
          noInternetConnection: 'No Internet connection',
          connectedToInternet: 'Connected to the Internet',
          // Strings for remote providers
          noFilesFound: 'You have no files or folders here',
          selectX: {
            0: 'Select %{smart_count}',
            1: 'Select %{smart_count}',
            2: 'Select %{smart_count}'
          },
          selectAllFilesFromFolderNamed: 'Select all files from folder %{name}',
          unselectAllFilesFromFolderNamed: 'Unselect all files from folder %{name}',
          selectFileNamed: 'Select file %{name}',
          unselectFileNamed: 'Unselect file %{name}',
          openFolderNamed: 'Open folder %{name}',
          cancel: 'Cancel',
          logOut: 'Log out',
          filter: 'Filter',
          resetFilter: 'Reset filter',
          loading: 'Loading...',
          authenticateWithTitle: 'Please authenticate with %{pluginName} to select files',
          authenticateWith: 'Connect to %{pluginName}',
          emptyFolderAdded: 'No files were added from empty folder',
          folderAdded: {
            0: 'Added %{smart_count} file from %{folder}',
            1: 'Added %{smart_count} files from %{folder}',
            2: 'Added %{smart_count} files from %{folder}'
          }
        }
      };
      var defaultOptions = {
        id: 'uppy',
        autoProceed: false,
        allowMultipleUploads: true,
        debug: false,
        restrictions: {
          maxFileSize: null,
          maxNumberOfFiles: null,
          minNumberOfFiles: null,
          allowedFileTypes: null
        },
        meta: {},
        onBeforeFileAdded: function onBeforeFileAdded(currentFile, files) {
          return currentFile;
        },
        onBeforeUpload: function onBeforeUpload(files) {
          return files;
        },
        store: DefaultStore(),
        logger: nullLogger
      }; // Merge default options with the ones set by user,
      // making sure to merge restrictions too
  
      this.opts = _extends({}, defaultOptions, {}, opts, {
        restrictions: _extends({}, defaultOptions.restrictions, {}, opts && opts.restrictions)
      }); // Support debug: true for backwards-compatability, unless logger is set in opts
      // opts instead of this.opts to avoid comparing objects — we set logger: nullLogger in defaultOptions
  
      if (opts && opts.logger && opts.debug) {
        this.log('You are using a custom `logger`, but also set `debug: true`, which uses built-in logger to output logs to console. Ignoring `debug: true` and using your custom `logger`.', 'warning');
      } else if (opts && opts.debug) {
        this.opts.logger = debugLogger;
      }
  
      this.log("Using Core v" + this.constructor.VERSION);
  
      if (this.opts.restrictions.allowedFileTypes && this.opts.restrictions.allowedFileTypes !== null && !Array.isArray(this.opts.restrictions.allowedFileTypes)) {
        throw new TypeError('`restrictions.allowedFileTypes` must be an array');
      }
  
      this.i18nInit(); // Container for different types of plugins
  
      this.plugins = {};
      this.getState = this.getState.bind(this);
      this.getPlugin = this.getPlugin.bind(this);
      this.setFileMeta = this.setFileMeta.bind(this);
      this.setFileState = this.setFileState.bind(this);
      this.log = this.log.bind(this);
      this.info = this.info.bind(this);
      this.hideInfo = this.hideInfo.bind(this);
      this.addFile = this.addFile.bind(this);
      this.removeFile = this.removeFile.bind(this);
      this.pauseResume = this.pauseResume.bind(this); // ___Why throttle at 500ms?
      //    - We must throttle at >250ms for superfocus in Dashboard to work well (because animation takes 0.25s, and we want to wait for all animations to be over before refocusing).
      //    [Practical Check]: if thottle is at 100ms, then if you are uploading a file, and click 'ADD MORE FILES', - focus won't activate in Firefox.
      //    - We must throttle at around >500ms to avoid performance lags.
      //    [Practical Check] Firefox, try to upload a big file for a prolonged period of time. Laptop will start to heat up.
  
      this._calculateProgress = throttle(this._calculateProgress.bind(this), 500, {
        leading: true,
        trailing: true
      });
      this.updateOnlineStatus = this.updateOnlineStatus.bind(this);
      this.resetProgress = this.resetProgress.bind(this);
      this.pauseAll = this.pauseAll.bind(this);
      this.resumeAll = this.resumeAll.bind(this);
      this.retryAll = this.retryAll.bind(this);
      this.cancelAll = this.cancelAll.bind(this);
      this.retryUpload = this.retryUpload.bind(this);
      this.upload = this.upload.bind(this);
      this.emitter = ee();
      this.on = this.on.bind(this);
      this.off = this.off.bind(this);
      this.once = this.emitter.once.bind(this.emitter);
      this.emit = this.emitter.emit.bind(this.emitter);
      this.preProcessors = [];
      this.uploaders = [];
      this.postProcessors = [];
      this.store = this.opts.store;
      this.setState({
        plugins: {},
        files: {},
        currentUploads: {},
        allowNewUpload: true,
        capabilities: {
          uploadProgress: supportsUploadProgress(),
          individualCancellation: true,
          resumableUploads: false
        },
        totalProgress: 0,
        meta: _extends({}, this.opts.meta),
        info: {
          isHidden: true,
          type: 'info',
          message: ''
        }
      });
      this._storeUnsubscribe = this.store.subscribe(function (prevState, nextState, patch) {
        _this2.emit('state-update', prevState, nextState, patch);
  
        _this2.updateAll(nextState);
      }); // Exposing uppy object on window for debugging and testing
  
      if (this.opts.debug && typeof window !== 'undefined') {
        window[this.opts.id] = this;
      }
  
      this._addListeners();
    }
  
    var _proto = Uppy.prototype;
  
    _proto.on = function on(event, callback) {
      this.emitter.on(event, callback);
      return this;
    };
  
    _proto.off = function off(event, callback) {
      this.emitter.off(event, callback);
      return this;
    }
    /**
     * Iterate on all plugins and run `update` on them.
     * Called each time state changes.
     *
     */
    ;
  
    _proto.updateAll = function updateAll(state) {
      this.iteratePlugins(function (plugin) {
        plugin.update(state);
      });
    }
    /**
     * Updates state with a patch
     *
     * @param {object} patch {foo: 'bar'}
     */
    ;
  
    _proto.setState = function setState(patch) {
      this.store.setState(patch);
    }
    /**
     * Returns current state.
     *
     * @returns {object}
     */
    ;
  
    _proto.getState = function getState() {
      return this.store.getState();
    }
    /**
     * Back compat for when uppy.state is used instead of uppy.getState().
     */
    ;
  
    /**
     * Shorthand to set state for a specific file.
     */
    _proto.setFileState = function setFileState(fileID, state) {
      var _extends2;
  
      if (!this.getState().files[fileID]) {
        throw new Error("Can\u2019t set state for " + fileID + " (the file could have been removed)");
      }
  
      this.setState({
        files: _extends({}, this.getState().files, (_extends2 = {}, _extends2[fileID] = _extends({}, this.getState().files[fileID], state), _extends2))
      });
    };
  
    _proto.i18nInit = function i18nInit() {
      this.translator = new Translator([this.defaultLocale, this.opts.locale]);
      this.locale = this.translator.locale;
      this.i18n = this.translator.translate.bind(this.translator);
      this.i18nArray = this.translator.translateArray.bind(this.translator);
    };
  
    _proto.setOptions = function setOptions(newOpts) {
      this.opts = _extends({}, this.opts, {}, newOpts, {
        restrictions: _extends({}, this.opts.restrictions, {}, newOpts && newOpts.restrictions)
      });
  
      if (newOpts.meta) {
        this.setMeta(newOpts.meta);
      }
  
      this.i18nInit();
  
      if (newOpts.locale) {
        this.iteratePlugins(function (plugin) {
          plugin.setOptions();
        });
      }
  
      this.setState(); // so that UI re-renders with new options
    };
  
    _proto.resetProgress = function resetProgress() {
      var defaultProgress = {
        percentage: 0,
        bytesUploaded: 0,
        uploadComplete: false,
        uploadStarted: null
      };
  
      var files = _extends({}, this.getState().files);
  
      var updatedFiles = {};
      Object.keys(files).forEach(function (fileID) {
        var updatedFile = _extends({}, files[fileID]);
  
        updatedFile.progress = _extends({}, updatedFile.progress, defaultProgress);
        updatedFiles[fileID] = updatedFile;
      });
      this.setState({
        files: updatedFiles,
        totalProgress: 0
      });
      this.emit('reset-progress');
    };
  
    _proto.addPreProcessor = function addPreProcessor(fn) {
      this.preProcessors.push(fn);
    };
  
    _proto.removePreProcessor = function removePreProcessor(fn) {
      var i = this.preProcessors.indexOf(fn);
  
      if (i !== -1) {
        this.preProcessors.splice(i, 1);
      }
    };
  
    _proto.addPostProcessor = function addPostProcessor(fn) {
      this.postProcessors.push(fn);
    };
  
    _proto.removePostProcessor = function removePostProcessor(fn) {
      var i = this.postProcessors.indexOf(fn);
  
      if (i !== -1) {
        this.postProcessors.splice(i, 1);
      }
    };
  
    _proto.addUploader = function addUploader(fn) {
      this.uploaders.push(fn);
    };
  
    _proto.removeUploader = function removeUploader(fn) {
      var i = this.uploaders.indexOf(fn);
  
      if (i !== -1) {
        this.uploaders.splice(i, 1);
      }
    };
  
    _proto.setMeta = function setMeta(data) {
      var updatedMeta = _extends({}, this.getState().meta, data);
  
      var updatedFiles = _extends({}, this.getState().files);
  
      Object.keys(updatedFiles).forEach(function (fileID) {
        updatedFiles[fileID] = _extends({}, updatedFiles[fileID], {
          meta: _extends({}, updatedFiles[fileID].meta, data)
        });
      });
      this.log('Adding metadata:');
      this.log(data);
      this.setState({
        meta: updatedMeta,
        files: updatedFiles
      });
    };
  
    _proto.setFileMeta = function setFileMeta(fileID, data) {
      var updatedFiles = _extends({}, this.getState().files);
  
      if (!updatedFiles[fileID]) {
        this.log('Was trying to set metadata for a file that has been removed: ', fileID);
        return;
      }
  
      var newMeta = _extends({}, updatedFiles[fileID].meta, data);
  
      updatedFiles[fileID] = _extends({}, updatedFiles[fileID], {
        meta: newMeta
      });
      this.setState({
        files: updatedFiles
      });
    }
    /**
     * Get a file object.
     *
     * @param {string} fileID The ID of the file object to return.
     */
    ;
  
    _proto.getFile = function getFile(fileID) {
      return this.getState().files[fileID];
    }
    /**
     * Get all files in an array.
     */
    ;
  
    _proto.getFiles = function getFiles() {
      var _this$getState = this.getState(),
          files = _this$getState.files;
  
      return Object.keys(files).map(function (fileID) {
        return files[fileID];
      });
    }
    /**
     * Check if minNumberOfFiles restriction is reached before uploading.
     *
     * @private
     */
    ;
  
    _proto._checkMinNumberOfFiles = function _checkMinNumberOfFiles(files) {
      var minNumberOfFiles = this.opts.restrictions.minNumberOfFiles;
  
      if (Object.keys(files).length < minNumberOfFiles) {
        throw new RestrictionError("" + this.i18n('youHaveToAtLeastSelectX', {
          smart_count: minNumberOfFiles
        }));
      }
    }
    /**
     * Check if file passes a set of restrictions set in options: maxFileSize,
     * maxNumberOfFiles and allowedFileTypes.
     *
     * @param {object} file object to check
     * @private
     */
    ;
  
    _proto._checkRestrictions = function _checkRestrictions(file) {
      var _this$opts$restrictio = this.opts.restrictions,
          maxFileSize = _this$opts$restrictio.maxFileSize,
          maxNumberOfFiles = _this$opts$restrictio.maxNumberOfFiles,
          allowedFileTypes = _this$opts$restrictio.allowedFileTypes;
  
      if (maxNumberOfFiles) {
        if (Object.keys(this.getState().files).length + 1 > maxNumberOfFiles) {
          throw new RestrictionError("" + this.i18n('youCanOnlyUploadX', {
            smart_count: maxNumberOfFiles
          }));
        }
      }
  
      if (allowedFileTypes) {
        var isCorrectFileType = allowedFileTypes.some(function (type) {
          // is this is a mime-type
          if (type.indexOf('/') > -1) {
            if (!file.type) return false;
            return match(file.type, type);
          } // otherwise this is likely an extension
  
  
          if (type[0] === '.') {
            return file.extension.toLowerCase() === type.substr(1).toLowerCase();
          }
  
          return false;
        });
  
        if (!isCorrectFileType) {
          var allowedFileTypesString = allowedFileTypes.join(', ');
          throw new RestrictionError(this.i18n('youCanOnlyUploadFileTypes', {
            types: allowedFileTypesString
          }));
        }
      } // We can't check maxFileSize if the size is unknown.
  
  
      if (maxFileSize && file.data.size != null) {
        if (file.data.size > maxFileSize) {
          throw new RestrictionError(this.i18n('exceedsSize') + " " + prettyBytes(maxFileSize));
        }
      }
    };
  
    _proto._showOrLogErrorAndThrow = function _showOrLogErrorAndThrow(err, _temp) {
      var _ref = _temp === void 0 ? {} : _temp,
          _ref$showInformer = _ref.showInformer,
          showInformer = _ref$showInformer === void 0 ? true : _ref$showInformer,
          _ref$file = _ref.file,
          file = _ref$file === void 0 ? null : _ref$file;
  
      var message = typeof err === 'object' ? err.message : err;
      var details = typeof err === 'object' && err.details ? err.details : ''; // Restriction errors should be logged, but not as errors,
      // as they are expected and shown in the UI.
  
      if (err.isRestriction) {
        this.log(message + " " + details);
        this.emit('restriction-failed', file, err);
      } else {
        this.log(message + " " + details, 'error');
      } // Sometimes informer has to be shown manually by the developer,
      // for example, in `onBeforeFileAdded`.
  
  
      if (showInformer) {
        this.info({
          message: message,
          details: details
        }, 'error', 5000);
      }
  
      throw typeof err === 'object' ? err : new Error(err);
    }
    /**
     * Add a new file to `state.files`. This will run `onBeforeFileAdded`,
     * try to guess file type in a clever way, check file against restrictions,
     * and start an upload if `autoProceed === true`.
     *
     * @param {object} file object to add
     * @returns {string} id for the added file
     */
    ;
  
    _proto.addFile = function addFile(file) {
      var _extends3,
          _this3 = this;
  
      var _this$getState2 = this.getState(),
          files = _this$getState2.files,
          allowNewUpload = _this$getState2.allowNewUpload;
  
      if (allowNewUpload === false) {
        this._showOrLogErrorAndThrow(new RestrictionError('Cannot add new files: already uploading.'), {
          file: file
        });
      }
  
      var fileType = getFileType(file);
      file.type = fileType;
      var onBeforeFileAddedResult = this.opts.onBeforeFileAdded(file, files);
  
      if (onBeforeFileAddedResult === false) {
        // Don’t show UI info for this error, as it should be done by the developer
        this._showOrLogErrorAndThrow(new RestrictionError('Cannot add the file because onBeforeFileAdded returned false.'), {
          showInformer: false,
          file: file
        });
      }
  
      if (typeof onBeforeFileAddedResult === 'object' && onBeforeFileAddedResult) {
        file = onBeforeFileAddedResult;
      }
  
      var fileName;
  
      if (file.name) {
        fileName = file.name;
      } else if (fileType.split('/')[0] === 'image') {
        fileName = fileType.split('/')[0] + '.' + fileType.split('/')[1];
      } else {
        fileName = 'noname';
      }
  
      var fileExtension = getFileNameAndExtension(fileName).extension;
      var isRemote = file.isRemote || false;
      var fileID = generateFileID(file);
  
      if (files[fileID]) {
        this._showOrLogErrorAndThrow(new RestrictionError("Cannot add the duplicate file '" + fileName + "', it already exists."), {
          file: file
        });
      }
  
      var meta = file.meta || {};
      meta.name = fileName;
      meta.type = fileType; // `null` means the size is unknown.
  
      var size = isFinite(file.data.size) ? file.data.size : null;
      var newFile = {
        source: file.source || '',
        id: fileID,
        name: fileName,
        extension: fileExtension || '',
        meta: _extends({}, this.getState().meta, meta),
        type: fileType,
        data: file.data,
        progress: {
          percentage: 0,
          bytesUploaded: 0,
          bytesTotal: size,
          uploadComplete: false,
          uploadStarted: null
        },
        size: size,
        isRemote: isRemote,
        remote: file.remote || '',
        preview: file.preview
      };
  
      try {
        this._checkRestrictions(newFile);
      } catch (err) {
        this._showOrLogErrorAndThrow(err, {
          file: newFile
        });
      }
  
      this.setState({
        files: _extends({}, files, (_extends3 = {}, _extends3[fileID] = newFile, _extends3))
      });
      this.emit('file-added', newFile);
      this.log("Added file: " + fileName + ", " + fileID + ", mime type: " + fileType);
  
      if (this.opts.autoProceed && !this.scheduledAutoProceed) {
        this.scheduledAutoProceed = setTimeout(function () {
          _this3.scheduledAutoProceed = null;
  
          _this3.upload().catch(function (err) {
            if (!err.isRestriction) {
              _this3.log(err.stack || err.message || err);
            }
          });
        }, 4);
      }
  
      return fileID;
    };
  
    _proto.removeFile = function removeFile(fileID) {
      var _this4 = this;
  
      var _this$getState3 = this.getState(),
          files = _this$getState3.files,
          currentUploads = _this$getState3.currentUploads;
  
      var updatedFiles = _extends({}, files);
  
      var removedFile = updatedFiles[fileID];
      delete updatedFiles[fileID]; // Remove this file from its `currentUpload`.
  
      var updatedUploads = _extends({}, currentUploads);
  
      var removeUploads = [];
      Object.keys(updatedUploads).forEach(function (uploadID) {
        var newFileIDs = currentUploads[uploadID].fileIDs.filter(function (uploadFileID) {
          return uploadFileID !== fileID;
        }); // Remove the upload if no files are associated with it anymore.
  
        if (newFileIDs.length === 0) {
          removeUploads.push(uploadID);
          return;
        }
  
        updatedUploads[uploadID] = _extends({}, currentUploads[uploadID], {
          fileIDs: newFileIDs
        });
      });
      this.setState(_extends({
        currentUploads: updatedUploads,
        files: updatedFiles
      }, // If this is the last file we just removed - allow new uploads!
      Object.keys(updatedFiles).length === 0 && {
        allowNewUpload: true
      }));
      removeUploads.forEach(function (uploadID) {
        _this4._removeUpload(uploadID);
      });
  
      this._calculateTotalProgress();
  
      this.emit('file-removed', removedFile);
      this.log("File removed: " + removedFile.id);
    };
  
    _proto.pauseResume = function pauseResume(fileID) {
      if (!this.getState().capabilities.resumableUploads || this.getFile(fileID).uploadComplete) {
        return;
      }
  
      var wasPaused = this.getFile(fileID).isPaused || false;
      var isPaused = !wasPaused;
      this.setFileState(fileID, {
        isPaused: isPaused
      });
      this.emit('upload-pause', fileID, isPaused);
      return isPaused;
    };
  
    _proto.pauseAll = function pauseAll() {
      var updatedFiles = _extends({}, this.getState().files);
  
      var inProgressUpdatedFiles = Object.keys(updatedFiles).filter(function (file) {
        return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;
      });
      inProgressUpdatedFiles.forEach(function (file) {
        var updatedFile = _extends({}, updatedFiles[file], {
          isPaused: true
        });
  
        updatedFiles[file] = updatedFile;
      });
      this.setState({
        files: updatedFiles
      });
      this.emit('pause-all');
    };
  
    _proto.resumeAll = function resumeAll() {
      var updatedFiles = _extends({}, this.getState().files);
  
      var inProgressUpdatedFiles = Object.keys(updatedFiles).filter(function (file) {
        return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;
      });
      inProgressUpdatedFiles.forEach(function (file) {
        var updatedFile = _extends({}, updatedFiles[file], {
          isPaused: false,
          error: null
        });
  
        updatedFiles[file] = updatedFile;
      });
      this.setState({
        files: updatedFiles
      });
      this.emit('resume-all');
    };
  
    _proto.retryAll = function retryAll() {
      var updatedFiles = _extends({}, this.getState().files);
  
      var filesToRetry = Object.keys(updatedFiles).filter(function (file) {
        return updatedFiles[file].error;
      });
      filesToRetry.forEach(function (file) {
        var updatedFile = _extends({}, updatedFiles[file], {
          isPaused: false,
          error: null
        });
  
        updatedFiles[file] = updatedFile;
      });
      this.setState({
        files: updatedFiles,
        error: null
      });
      this.emit('retry-all', filesToRetry);
  
      var uploadID = this._createUpload(filesToRetry);
  
      return this._runUpload(uploadID);
    };
  
    _proto.cancelAll = function cancelAll() {
      var _this5 = this;
  
      this.emit('cancel-all');
      var files = Object.keys(this.getState().files);
      files.forEach(function (fileID) {
        _this5.removeFile(fileID);
      });
      this.setState({
        totalProgress: 0,
        error: null
      });
    };
  
    _proto.retryUpload = function retryUpload(fileID) {
      this.setFileState(fileID, {
        error: null,
        isPaused: false
      });
      this.emit('upload-retry', fileID);
  
      var uploadID = this._createUpload([fileID]);
  
      return this._runUpload(uploadID);
    };
  
    _proto.reset = function reset() {
      this.cancelAll();
    };
  
    _proto._calculateProgress = function _calculateProgress(file, data) {
      if (!this.getFile(file.id)) {
        this.log("Not setting progress for a file that has been removed: " + file.id);
        return;
      } // bytesTotal may be null or zero; in that case we can't divide by it
  
  
      var canHavePercentage = isFinite(data.bytesTotal) && data.bytesTotal > 0;
      this.setFileState(file.id, {
        progress: _extends({}, this.getFile(file.id).progress, {
          bytesUploaded: data.bytesUploaded,
          bytesTotal: data.bytesTotal,
          percentage: canHavePercentage // TODO(goto-bus-stop) flooring this should probably be the choice of the UI?
          // we get more accurate calculations if we don't round this at all.
          ? Math.round(data.bytesUploaded / data.bytesTotal * 100) : 0
        })
      });
  
      this._calculateTotalProgress();
    };
  
    _proto._calculateTotalProgress = function _calculateTotalProgress() {
      // calculate total progress, using the number of files currently uploading,
      // multiplied by 100 and the summ of individual progress of each file
      var files = this.getFiles();
      var inProgress = files.filter(function (file) {
        return file.progress.uploadStarted;
      });
  
      if (inProgress.length === 0) {
        this.emit('progress', 0);
        this.setState({
          totalProgress: 0
        });
        return;
      }
  
      var sizedFiles = inProgress.filter(function (file) {
        return file.progress.bytesTotal != null;
      });
      var unsizedFiles = inProgress.filter(function (file) {
        return file.progress.bytesTotal == null;
      });
  
      if (sizedFiles.length === 0) {
        var progressMax = inProgress.length * 100;
        var currentProgress = unsizedFiles.reduce(function (acc, file) {
          return acc + file.progress.percentage;
        }, 0);
  
        var _totalProgress = Math.round(currentProgress / progressMax * 100);
  
        this.setState({
          totalProgress: _totalProgress
        });
        return;
      }
  
      var totalSize = sizedFiles.reduce(function (acc, file) {
        return acc + file.progress.bytesTotal;
      }, 0);
      var averageSize = totalSize / sizedFiles.length;
      totalSize += averageSize * unsizedFiles.length;
      var uploadedSize = 0;
      sizedFiles.forEach(function (file) {
        uploadedSize += file.progress.bytesUploaded;
      });
      unsizedFiles.forEach(function (file) {
        uploadedSize += averageSize * (file.progress.percentage || 0) / 100;
      });
      var totalProgress = totalSize === 0 ? 0 : Math.round(uploadedSize / totalSize * 100); // hot fix, because:
      // uploadedSize ended up larger than totalSize, resulting in 1325% total
  
      if (totalProgress > 100) {
        totalProgress = 100;
      }
  
      this.setState({
        totalProgress: totalProgress
      });
      this.emit('progress', totalProgress);
    }
    /**
     * Registers listeners for all global actions, like:
     * `error`, `file-removed`, `upload-progress`
     */
    ;
  
    _proto._addListeners = function _addListeners() {
      var _this6 = this;
  
      this.on('error', function (error) {
        _this6.setState({
          error: error.message || 'Unknown error'
        });
      });
      this.on('upload-error', function (file, error, response) {
        _this6.setFileState(file.id, {
          error: error.message || 'Unknown error',
          response: response
        });
  
        _this6.setState({
          error: error.message
        });
  
        var message = _this6.i18n('failedToUpload', {
          file: file.name
        });
  
        if (typeof error === 'object' && error.message) {
          message = {
            message: message,
            details: error.message
          };
        }
  
        _this6.info(message, 'error', 5000);
      });
      this.on('upload', function () {
        _this6.setState({
          error: null
        });
      });
      this.on('upload-started', function (file, upload) {
        if (!_this6.getFile(file.id)) {
          _this6.log("Not setting progress for a file that has been removed: " + file.id);
  
          return;
        }
  
        _this6.setFileState(file.id, {
          progress: {
            uploadStarted: Date.now(),
            uploadComplete: false,
            percentage: 0,
            bytesUploaded: 0,
            bytesTotal: file.size
          }
        });
      });
      this.on('upload-progress', this._calculateProgress);
      this.on('upload-success', function (file, uploadResp) {
        if (!_this6.getFile(file.id)) {
          _this6.log("Not setting progress for a file that has been removed: " + file.id);
  
          return;
        }
  
        var currentProgress = _this6.getFile(file.id).progress;
  
        _this6.setFileState(file.id, {
          progress: _extends({}, currentProgress, {
            uploadComplete: true,
            percentage: 100,
            bytesUploaded: currentProgress.bytesTotal
          }),
          response: uploadResp,
          uploadURL: uploadResp.uploadURL,
          isPaused: false
        });
  
        _this6._calculateTotalProgress();
      });
      this.on('preprocess-progress', function (file, progress) {
        if (!_this6.getFile(file.id)) {
          _this6.log("Not setting progress for a file that has been removed: " + file.id);
  
          return;
        }
  
        _this6.setFileState(file.id, {
          progress: _extends({}, _this6.getFile(file.id).progress, {
            preprocess: progress
          })
        });
      });
      this.on('preprocess-complete', function (file) {
        if (!_this6.getFile(file.id)) {
          _this6.log("Not setting progress for a file that has been removed: " + file.id);
  
          return;
        }
  
        var files = _extends({}, _this6.getState().files);
  
        files[file.id] = _extends({}, files[file.id], {
          progress: _extends({}, files[file.id].progress)
        });
        delete files[file.id].progress.preprocess;
  
        _this6.setState({
          files: files
        });
      });
      this.on('postprocess-progress', function (file, progress) {
        if (!_this6.getFile(file.id)) {
          _this6.log("Not setting progress for a file that has been removed: " + file.id);
  
          return;
        }
  
        _this6.setFileState(file.id, {
          progress: _extends({}, _this6.getState().files[file.id].progress, {
            postprocess: progress
          })
        });
      });
      this.on('postprocess-complete', function (file) {
        if (!_this6.getFile(file.id)) {
          _this6.log("Not setting progress for a file that has been removed: " + file.id);
  
          return;
        }
  
        var files = _extends({}, _this6.getState().files);
  
        files[file.id] = _extends({}, files[file.id], {
          progress: _extends({}, files[file.id].progress)
        });
        delete files[file.id].progress.postprocess; // TODO should we set some kind of `fullyComplete` property on the file object
        // so it's easier to see that the file is upload…fully complete…rather than
        // what we have to do now (`uploadComplete && !postprocess`)
  
        _this6.setState({
          files: files
        });
      });
      this.on('restored', function () {
        // Files may have changed--ensure progress is still accurate.
        _this6._calculateTotalProgress();
      }); // show informer if offline
  
      if (typeof window !== 'undefined' && window.addEventListener) {
        window.addEventListener('online', function () {
          return _this6.updateOnlineStatus();
        });
        window.addEventListener('offline', function () {
          return _this6.updateOnlineStatus();
        });
        setTimeout(function () {
          return _this6.updateOnlineStatus();
        }, 3000);
      }
    };
  
    _proto.updateOnlineStatus = function updateOnlineStatus() {
      var online = typeof window.navigator.onLine !== 'undefined' ? window.navigator.onLine : true;
  
      if (!online) {
        this.emit('is-offline');
        this.info(this.i18n('noInternetConnection'), 'error', 0);
        this.wasOffline = true;
      } else {
        this.emit('is-online');
  
        if (this.wasOffline) {
          this.emit('back-online');
          this.info(this.i18n('connectedToInternet'), 'success', 3000);
          this.wasOffline = false;
        }
      }
    };
  
    _proto.getID = function getID() {
      return this.opts.id;
    }
    /**
     * Registers a plugin with Core.
     *
     * @param {object} Plugin object
     * @param {object} [opts] object with options to be passed to Plugin
     * @returns {object} self for chaining
     */
    ;
  
    _proto.use = function use(Plugin, opts) {
      if (typeof Plugin !== 'function') {
        var msg = "Expected a plugin class, but got " + (Plugin === null ? 'null' : typeof Plugin) + "." + ' Please verify that the plugin was imported and spelled correctly.';
        throw new TypeError(msg);
      } // Instantiate
  
  
      var plugin = new Plugin(this, opts);
      var pluginId = plugin.id;
      this.plugins[plugin.type] = this.plugins[plugin.type] || [];
  
      if (!pluginId) {
        throw new Error('Your plugin must have an id');
      }
  
      if (!plugin.type) {
        throw new Error('Your plugin must have a type');
      }
  
      var existsPluginAlready = this.getPlugin(pluginId);
  
      if (existsPluginAlready) {
        var _msg = "Already found a plugin named '" + existsPluginAlready.id + "'. " + ("Tried to use: '" + pluginId + "'.\n") + 'Uppy plugins must have unique `id` options. See https://uppy.io/docs/plugins/#id.';
  
        throw new Error(_msg);
      }
  
      if (Plugin.VERSION) {
        this.log("Using " + pluginId + " v" + Plugin.VERSION);
      }
  
      this.plugins[plugin.type].push(plugin);
      plugin.install();
      return this;
    }
    /**
     * Find one Plugin by name.
     *
     * @param {string} id plugin id
     * @returns {object|boolean}
     */
    ;
  
    _proto.getPlugin = function getPlugin(id) {
      var foundPlugin = null;
      this.iteratePlugins(function (plugin) {
        if (plugin.id === id) {
          foundPlugin = plugin;
          return false;
        }
      });
      return foundPlugin;
    }
    /**
     * Iterate through all `use`d plugins.
     *
     * @param {Function} method that will be run on each plugin
     */
    ;
  
    _proto.iteratePlugins = function iteratePlugins(method) {
      var _this7 = this;
  
      Object.keys(this.plugins).forEach(function (pluginType) {
        _this7.plugins[pluginType].forEach(method);
      });
    }
    /**
     * Uninstall and remove a plugin.
     *
     * @param {object} instance The plugin instance to remove.
     */
    ;
  
    _proto.removePlugin = function removePlugin(instance) {
      this.log("Removing plugin " + instance.id);
      this.emit('plugin-remove', instance);
  
      if (instance.uninstall) {
        instance.uninstall();
      }
  
      var list = this.plugins[instance.type].slice();
      var index = list.indexOf(instance);
  
      if (index !== -1) {
        list.splice(index, 1);
        this.plugins[instance.type] = list;
      }
  
      var updatedState = this.getState();
      delete updatedState.plugins[instance.id];
      this.setState(updatedState);
    }
    /**
     * Uninstall all plugins and close down this Uppy instance.
     */
    ;
  
    _proto.close = function close() {
      var _this8 = this;
  
      this.log("Closing Uppy instance " + this.opts.id + ": removing all files and uninstalling plugins");
      this.reset();
  
      this._storeUnsubscribe();
  
      this.iteratePlugins(function (plugin) {
        _this8.removePlugin(plugin);
      });
    }
    /**
     * Set info message in `state.info`, so that UI plugins like `Informer`
     * can display the message.
     *
     * @param {string | object} message Message to be displayed by the informer
     * @param {string} [type]
     * @param {number} [duration]
     */
    ;
  
    _proto.info = function info(message, type, duration) {
      if (type === void 0) {
        type = 'info';
      }
  
      if (duration === void 0) {
        duration = 3000;
      }
  
      var isComplexMessage = typeof message === 'object';
      this.setState({
        info: {
          isHidden: false,
          type: type,
          message: isComplexMessage ? message.message : message,
          details: isComplexMessage ? message.details : null
        }
      });
      this.emit('info-visible');
      clearTimeout(this.infoTimeoutID);
  
      if (duration === 0) {
        this.infoTimeoutID = undefined;
        return;
      } // hide the informer after `duration` milliseconds
  
  
      this.infoTimeoutID = setTimeout(this.hideInfo, duration);
    };
  
    _proto.hideInfo = function hideInfo() {
      var newInfo = _extends({}, this.getState().info, {
        isHidden: true
      });
  
      this.setState({
        info: newInfo
      });
      this.emit('info-hidden');
    }
    /**
     * Passes messages to a function, provided in `opts.logger`.
     * If `opts.logger: Uppy.debugLogger` or `opts.debug: true`, logs to the browser console.
     *
     * @param {string|object} message to log
     * @param {string} [type] optional `error` or `warning`
     */
    ;
  
    _proto.log = function log(message, type) {
      var logger = this.opts.logger;
  
      switch (type) {
        case 'error':
          logger.error(message);
          break;
  
        case 'warning':
          logger.warn(message);
          break;
  
        default:
          logger.debug(message);
          break;
      }
    }
    /**
     * Obsolete, event listeners are now added in the constructor.
     */
    ;
  
    _proto.run = function run() {
      this.log('Calling run() is no longer necessary.', 'warning');
      return this;
    }
    /**
     * Restore an upload by its ID.
     */
    ;
  
    _proto.restore = function restore(uploadID) {
      this.log("Core: attempting to restore upload \"" + uploadID + "\"");
  
      if (!this.getState().currentUploads[uploadID]) {
        this._removeUpload(uploadID);
  
        return Promise.reject(new Error('Nonexistent upload'));
      }
  
      return this._runUpload(uploadID);
    }
    /**
     * Create an upload for a bunch of files.
     *
     * @param {Array<string>} fileIDs File IDs to include in this upload.
     * @returns {string} ID of this upload.
     */
    ;
  
    _proto._createUpload = function _createUpload(fileIDs) {
      var _extends4;
  
      var _this$getState4 = this.getState(),
          allowNewUpload = _this$getState4.allowNewUpload,
          currentUploads = _this$getState4.currentUploads;
  
      if (!allowNewUpload) {
        throw new Error('Cannot create a new upload: already uploading.');
      }
  
      var uploadID = cuid();
      this.emit('upload', {
        id: uploadID,
        fileIDs: fileIDs
      });
      this.setState({
        allowNewUpload: this.opts.allowMultipleUploads !== false,
        currentUploads: _extends({}, currentUploads, (_extends4 = {}, _extends4[uploadID] = {
          fileIDs: fileIDs,
          step: 0,
          result: {}
        }, _extends4))
      });
      return uploadID;
    };
  
    _proto._getUpload = function _getUpload(uploadID) {
      var _this$getState5 = this.getState(),
          currentUploads = _this$getState5.currentUploads;
  
      return currentUploads[uploadID];
    }
    /**
     * Add data to an upload's result object.
     *
     * @param {string} uploadID The ID of the upload.
     * @param {object} data Data properties to add to the result object.
     */
    ;
  
    _proto.addResultData = function addResultData(uploadID, data) {
      var _extends5;
  
      if (!this._getUpload(uploadID)) {
        this.log("Not setting result for an upload that has been removed: " + uploadID);
        return;
      }
  
      var currentUploads = this.getState().currentUploads;
  
      var currentUpload = _extends({}, currentUploads[uploadID], {
        result: _extends({}, currentUploads[uploadID].result, data)
      });
  
      this.setState({
        currentUploads: _extends({}, currentUploads, (_extends5 = {}, _extends5[uploadID] = currentUpload, _extends5))
      });
    }
    /**
     * Remove an upload, eg. if it has been canceled or completed.
     *
     * @param {string} uploadID The ID of the upload.
     */
    ;
  
    _proto._removeUpload = function _removeUpload(uploadID) {
      var currentUploads = _extends({}, this.getState().currentUploads);
  
      delete currentUploads[uploadID];
      this.setState({
        currentUploads: currentUploads
      });
    }
    /**
     * Run an upload. This picks up where it left off in case the upload is being restored.
     *
     * @private
     */
    ;
  
    _proto._runUpload = function _runUpload(uploadID) {
      var _this9 = this;
  
      var uploadData = this.getState().currentUploads[uploadID];
      var restoreStep = uploadData.step;
      var steps = [].concat(this.preProcessors, this.uploaders, this.postProcessors);
      var lastStep = Promise.resolve();
      steps.forEach(function (fn, step) {
        // Skip this step if we are restoring and have already completed this step before.
        if (step < restoreStep) {
          return;
        }
  
        lastStep = lastStep.then(function () {
          var _extends6;
  
          var _this9$getState = _this9.getState(),
              currentUploads = _this9$getState.currentUploads;
  
          var currentUpload = currentUploads[uploadID];
  
          if (!currentUpload) {
            return;
          }
  
          var updatedUpload = _extends({}, currentUpload, {
            step: step
          });
  
          _this9.setState({
            currentUploads: _extends({}, currentUploads, (_extends6 = {}, _extends6[uploadID] = updatedUpload, _extends6))
          }); // TODO give this the `updatedUpload` object as its only parameter maybe?
          // Otherwise when more metadata may be added to the upload this would keep getting more parameters
  
  
          return fn(updatedUpload.fileIDs, uploadID);
        }).then(function (result) {
          return null;
        });
      }); // Not returning the `catch`ed promise, because we still want to return a rejected
      // promise from this method if the upload failed.
  
      lastStep.catch(function (err) {
        _this9.emit('error', err, uploadID);
  
        _this9._removeUpload(uploadID);
      });
      return lastStep.then(function () {
        // Set result data.
        var _this9$getState2 = _this9.getState(),
            currentUploads = _this9$getState2.currentUploads;
  
        var currentUpload = currentUploads[uploadID];
  
        if (!currentUpload) {
          return;
        }
  
        var files = currentUpload.fileIDs.map(function (fileID) {
          return _this9.getFile(fileID);
        });
        var successful = files.filter(function (file) {
          return !file.error;
        });
        var failed = files.filter(function (file) {
          return file.error;
        });
  
        _this9.addResultData(uploadID, {
          successful: successful,
          failed: failed,
          uploadID: uploadID
        });
      }).then(function () {
        // Emit completion events.
        // This is in a separate function so that the `currentUploads` variable
        // always refers to the latest state. In the handler right above it refers
        // to an outdated object without the `.result` property.
        var _this9$getState3 = _this9.getState(),
            currentUploads = _this9$getState3.currentUploads;
  
        if (!currentUploads[uploadID]) {
          return;
        }
  
        var currentUpload = currentUploads[uploadID];
        var result = currentUpload.result;
  
        _this9.emit('complete', result);
  
        _this9._removeUpload(uploadID);
  
        return result;
      }).then(function (result) {
        if (result == null) {
          _this9.log("Not setting result for an upload that has been removed: " + uploadID);
        }
  
        return result;
      });
    }
    /**
     * Start an upload for all the files that are not currently being uploaded.
     *
     * @returns {Promise}
     */
    ;
  
    _proto.upload = function upload() {
      var _this10 = this;
  
      if (!this.plugins.uploader) {
        this.log('No uploader type plugins are used', 'warning');
      }
  
      var files = this.getState().files;
      var onBeforeUploadResult = this.opts.onBeforeUpload(files);
  
      if (onBeforeUploadResult === false) {
        return Promise.reject(new Error('Not starting the upload because onBeforeUpload returned false'));
      }
  
      if (onBeforeUploadResult && typeof onBeforeUploadResult === 'object') {
        files = onBeforeUploadResult;
      }
  
      return Promise.resolve().then(function () {
        return _this10._checkMinNumberOfFiles(files);
      }).then(function () {
        var _this10$getState = _this10.getState(),
            currentUploads = _this10$getState.currentUploads; // get a list of files that are currently assigned to uploads
  
  
        var currentlyUploadingFiles = Object.keys(currentUploads).reduce(function (prev, curr) {
          return prev.concat(currentUploads[curr].fileIDs);
        }, []);
        var waitingFileIDs = [];
        Object.keys(files).forEach(function (fileID) {
          var file = _this10.getFile(fileID); // if the file hasn't started uploading and hasn't already been assigned to an upload..
  
  
          if (!file.progress.uploadStarted && currentlyUploadingFiles.indexOf(fileID) === -1) {
            waitingFileIDs.push(file.id);
          }
        });
  
        var uploadID = _this10._createUpload(waitingFileIDs);
  
        return _this10._runUpload(uploadID);
      }).catch(function (err) {
        _this10._showOrLogErrorAndThrow(err);
      });
    };
  
    _createClass(Uppy, [{
      key: "state",
      get: function get() {
        return this.getState();
      }
    }]);
  
    return Uppy;
  }();
  
  Uppy.VERSION = "1.7.0";
  
  module.exports = function (opts) {
    return new Uppy(opts);
  }; // Expose class constructor.
  
  
  module.exports.Uppy = Uppy;
  module.exports.Plugin = Plugin;
  module.exports.debugLogger = debugLogger;
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/core/lib/loggers.js":
  /*!************************************************!*\
    !*** ./node_modules/@uppy/core/lib/loggers.js ***!
    \************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  var getTimeStamp = __webpack_require__(/*! @uppy/utils/lib/getTimeStamp */ "./node_modules/@uppy/utils/lib/getTimeStamp.js"); // Swallow logs, default if logger is not set or debug: false
  
  
  var nullLogger = {
    debug: function debug() {},
    warn: function warn() {},
    error: function error() {}
  }; // Print logs to console with namespace + timestamp,
  // set by logger: Uppy.debugLogger or debug: true
  
  var debugLogger = {
    debug: function debug() {
      // IE 10 doesn’t support console.debug
      var debug = console.debug || console.log;
  
      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }
  
      debug.call.apply(debug, [console, "[Uppy] [" + getTimeStamp() + "]"].concat(args));
    },
    warn: function warn() {
      var _console;
  
      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
        args[_key2] = arguments[_key2];
      }
  
      return (_console = console).warn.apply(_console, ["[Uppy] [" + getTimeStamp() + "]"].concat(args));
    },
    error: function error() {
      var _console2;
  
      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
        args[_key3] = arguments[_key3];
      }
  
      return (_console2 = console).error.apply(_console2, ["[Uppy] [" + getTimeStamp() + "]"].concat(args));
    }
  };
  module.exports = {
    nullLogger: nullLogger,
    debugLogger: debugLogger
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/core/lib/supportsUploadProgress.js":
  /*!***************************************************************!*\
    !*** ./node_modules/@uppy/core/lib/supportsUploadProgress.js ***!
    \***************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  // Edge 15.x does not fire 'progress' events on uploads.
  // See https://github.com/transloadit/uppy/issues/945
  // And https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12224510/
  module.exports = function supportsUploadProgress(userAgent) {
    // Allow passing in userAgent for tests
    if (userAgent == null) {
      userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null;
    } // Assume it works because basically everything supports progress events.
  
  
    if (!userAgent) return true;
    var m = /Edge\/(\d+\.\d+)/.exec(userAgent);
    if (!m) return true;
    var edgeVersion = m[1];
  
    var _edgeVersion$split = edgeVersion.split('.'),
        major = _edgeVersion$split[0],
        minor = _edgeVersion$split[1];
  
    major = parseInt(major, 10);
    minor = parseInt(minor, 10); // Worked before:
    // Edge 40.15063.0.0
    // Microsoft EdgeHTML 15.15063
  
    if (major < 15 || major === 15 && minor < 15063) {
      return true;
    } // Fixed in:
    // Microsoft EdgeHTML 18.18218
  
  
    if (major > 18 || major === 18 && minor >= 18218) {
      return true;
    } // other versions don't work.
  
  
    return false;
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/store-default/lib/index.js":
  /*!*******************************************************!*\
    !*** ./node_modules/@uppy/store-default/lib/index.js ***!
    \*******************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
  
  /**
   * Default store that keeps state in a simple object.
   */
  var DefaultStore =
  /*#__PURE__*/
  function () {
    function DefaultStore() {
      this.state = {};
      this.callbacks = [];
    }
  
    var _proto = DefaultStore.prototype;
  
    _proto.getState = function getState() {
      return this.state;
    };
  
    _proto.setState = function setState(patch) {
      var prevState = _extends({}, this.state);
  
      var nextState = _extends({}, this.state, patch);
  
      this.state = nextState;
  
      this._publish(prevState, nextState, patch);
    };
  
    _proto.subscribe = function subscribe(listener) {
      var _this = this;
  
      this.callbacks.push(listener);
      return function () {
        // Remove the listener.
        _this.callbacks.splice(_this.callbacks.indexOf(listener), 1);
      };
    };
  
    _proto._publish = function _publish() {
      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }
  
      this.callbacks.forEach(function (listener) {
        listener.apply(void 0, args);
      });
    };
  
    return DefaultStore;
  }();
  
  DefaultStore.VERSION = "1.2.0";
  
  module.exports = function defaultStore() {
    return new DefaultStore();
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/thumbnail-generator/lib/exif.js":
  /*!************************************************************!*\
    !*** ./node_modules/@uppy/thumbnail-generator/lib/exif.js ***!
    \************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  // Adapted from https://github.com/exif-js/exif-js
  // Removed XMP and IPTC metadata parsing and EXIF thumbnail generation
  // MIT License (c) Jacob Seidelin https://github.com/exif-js/exif-js/blob/master/LICENSE.md
  var ExifTags = {
    // version tags
    0x9000: 'ExifVersion',
    // EXIF version
    0xA000: 'FlashpixVersion',
    // Flashpix format version
    // colorspace tags
    0xA001: 'ColorSpace',
    // Color space information tag
    // image configuration
    0xA002: 'PixelXDimension',
    // Valid width of meaningful image
    0xA003: 'PixelYDimension',
    // Valid height of meaningful image
    0x9101: 'ComponentsConfiguration',
    // Information about channels
    0x9102: 'CompressedBitsPerPixel',
    // Compressed bits per pixel
    // user information
    0x927C: 'MakerNote',
    // Any desired information written by the manufacturer
    0x9286: 'UserComment',
    // Comments by user
    // related file
    0xA004: 'RelatedSoundFile',
    // Name of related sound file
    // date and time
    0x9003: 'DateTimeOriginal',
    // Date and time when the original image was generated
    0x9004: 'DateTimeDigitized',
    // Date and time when the image was stored digitally
    0x9290: 'SubsecTime',
    // Fractions of seconds for DateTime
    0x9291: 'SubsecTimeOriginal',
    // Fractions of seconds for DateTimeOriginal
    0x9292: 'SubsecTimeDigitized',
    // Fractions of seconds for DateTimeDigitized
    // picture-taking conditions
    0x829A: 'ExposureTime',
    // Exposure time (in seconds)
    0x829D: 'FNumber',
    // F number
    0x8822: 'ExposureProgram',
    // Exposure program
    0x8824: 'SpectralSensitivity',
    // Spectral sensitivity
    0x8827: 'ISOSpeedRatings',
    // ISO speed rating
    0x8828: 'OECF',
    // Optoelectric conversion factor
    0x9201: 'ShutterSpeedValue',
    // Shutter speed
    0x9202: 'ApertureValue',
    // Lens aperture
    0x9203: 'BrightnessValue',
    // Value of brightness
    0x9204: 'ExposureBias',
    // Exposure bias
    0x9205: 'MaxApertureValue',
    // Smallest F number of lens
    0x9206: 'SubjectDistance',
    // Distance to subject in meters
    0x9207: 'MeteringMode',
    // Metering mode
    0x9208: 'LightSource',
    // Kind of light source
    0x9209: 'Flash',
    // Flash status
    0x9214: 'SubjectArea',
    // Location and area of main subject
    0x920A: 'FocalLength',
    // Focal length of the lens in mm
    0xA20B: 'FlashEnergy',
    // Strobe energy in BCPS
    0xA20C: 'SpatialFrequencyResponse',
    //
    0xA20E: 'FocalPlaneXResolution',
    // Number of pixels in width direction per FocalPlaneResolutionUnit
    0xA20F: 'FocalPlaneYResolution',
    // Number of pixels in height direction per FocalPlaneResolutionUnit
    0xA210: 'FocalPlaneResolutionUnit',
    // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution
    0xA214: 'SubjectLocation',
    // Location of subject in image
    0xA215: 'ExposureIndex',
    // Exposure index selected on camera
    0xA217: 'SensingMethod',
    // Image sensor type
    0xA300: 'FileSource',
    // Image source (3 === DSC)
    0xA301: 'SceneType',
    // Scene type (1 === directly photographed)
    0xA302: 'CFAPattern',
    // Color filter array geometric pattern
    0xA401: 'CustomRendered',
    // Special processing
    0xA402: 'ExposureMode',
    // Exposure mode
    0xA403: 'WhiteBalance',
    // 1 = auto white balance, 2 = manual
    0xA404: 'DigitalZoomRation',
    // Digital zoom ratio
    0xA405: 'FocalLengthIn35mmFilm',
    // Equivalent foacl length assuming 35mm film camera (in mm)
    0xA406: 'SceneCaptureType',
    // Type of scene
    0xA407: 'GainControl',
    // Degree of overall image gain adjustment
    0xA408: 'Contrast',
    // Direction of contrast processing applied by camera
    0xA409: 'Saturation',
    // Direction of saturation processing applied by camera
    0xA40A: 'Sharpness',
    // Direction of sharpness processing applied by camera
    0xA40B: 'DeviceSettingDescription',
    //
    0xA40C: 'SubjectDistanceRange',
    // Distance to subject
    // other tags
    0xA005: 'InteroperabilityIFDPointer',
    0xA420: 'ImageUniqueID' // Identifier assigned uniquely to each image
  
  };
  var TiffTags = {
    0x0100: 'ImageWidth',
    0x0101: 'ImageHeight',
    0x8769: 'ExifIFDPointer',
    0x8825: 'GPSInfoIFDPointer',
    0xA005: 'InteroperabilityIFDPointer',
    0x0102: 'BitsPerSample',
    0x0103: 'Compression',
    0x0106: 'PhotometricInterpretation',
    0x0112: 'Orientation',
    0x0115: 'SamplesPerPixel',
    0x011C: 'PlanarConfiguration',
    0x0212: 'YCbCrSubSampling',
    0x0213: 'YCbCrPositioning',
    0x011A: 'XResolution',
    0x011B: 'YResolution',
    0x0128: 'ResolutionUnit',
    0x0111: 'StripOffsets',
    0x0116: 'RowsPerStrip',
    0x0117: 'StripByteCounts',
    0x0201: 'JPEGInterchangeFormat',
    0x0202: 'JPEGInterchangeFormatLength',
    0x012D: 'TransferFunction',
    0x013E: 'WhitePoint',
    0x013F: 'PrimaryChromaticities',
    0x0211: 'YCbCrCoefficients',
    0x0214: 'ReferenceBlackWhite',
    0x0132: 'DateTime',
    0x010E: 'ImageDescription',
    0x010F: 'Make',
    0x0110: 'Model',
    0x0131: 'Software',
    0x013B: 'Artist',
    0x8298: 'Copyright'
  };
  var GPSTags = {
    0x0000: 'GPSVersionID',
    0x0001: 'GPSLatitudeRef',
    0x0002: 'GPSLatitude',
    0x0003: 'GPSLongitudeRef',
    0x0004: 'GPSLongitude',
    0x0005: 'GPSAltitudeRef',
    0x0006: 'GPSAltitude',
    0x0007: 'GPSTimeStamp',
    0x0008: 'GPSSatellites',
    0x0009: 'GPSStatus',
    0x000A: 'GPSMeasureMode',
    0x000B: 'GPSDOP',
    0x000C: 'GPSSpeedRef',
    0x000D: 'GPSSpeed',
    0x000E: 'GPSTrackRef',
    0x000F: 'GPSTrack',
    0x0010: 'GPSImgDirectionRef',
    0x0011: 'GPSImgDirection',
    0x0012: 'GPSMapDatum',
    0x0013: 'GPSDestLatitudeRef',
    0x0014: 'GPSDestLatitude',
    0x0015: 'GPSDestLongitudeRef',
    0x0016: 'GPSDestLongitude',
    0x0017: 'GPSDestBearingRef',
    0x0018: 'GPSDestBearing',
    0x0019: 'GPSDestDistanceRef',
    0x001A: 'GPSDestDistance',
    0x001B: 'GPSProcessingMethod',
    0x001C: 'GPSAreaInformation',
    0x001D: 'GPSDateStamp',
    0x001E: 'GPSDifferential'
  };
  var StringValues = {
    ExposureProgram: {
      0: 'Not defined',
      1: 'Manual',
      2: 'Normal program',
      3: 'Aperture priority',
      4: 'Shutter priority',
      5: 'Creative program',
      6: 'Action program',
      7: 'Portrait mode',
      8: 'Landscape mode'
    },
    MeteringMode: {
      0: 'Unknown',
      1: 'Average',
      2: 'CenterWeightedAverage',
      3: 'Spot',
      4: 'MultiSpot',
      5: 'Pattern',
      6: 'Partial',
      255: 'Other'
    },
    LightSource: {
      0: 'Unknown',
      1: 'Daylight',
      2: 'Fluorescent',
      3: 'Tungsten (incandescent light)',
      4: 'Flash',
      9: 'Fine weather',
      10: 'Cloudy weather',
      11: 'Shade',
      12: 'Daylight fluorescent (D 5700 - 7100K)',
      13: 'Day white fluorescent (N 4600 - 5400K)',
      14: 'Cool white fluorescent (W 3900 - 4500K)',
      15: 'White fluorescent (WW 3200 - 3700K)',
      17: 'Standard light A',
      18: 'Standard light B',
      19: 'Standard light C',
      20: 'D55',
      21: 'D65',
      22: 'D75',
      23: 'D50',
      24: 'ISO studio tungsten',
      255: 'Other'
    },
    Flash: {
      0x0000: 'Flash did not fire',
      0x0001: 'Flash fired',
      0x0005: 'Strobe return light not detected',
      0x0007: 'Strobe return light detected',
      0x0009: 'Flash fired, compulsory flash mode',
      0x000D: 'Flash fired, compulsory flash mode, return light not detected',
      0x000F: 'Flash fired, compulsory flash mode, return light detected',
      0x0010: 'Flash did not fire, compulsory flash mode',
      0x0018: 'Flash did not fire, auto mode',
      0x0019: 'Flash fired, auto mode',
      0x001D: 'Flash fired, auto mode, return light not detected',
      0x001F: 'Flash fired, auto mode, return light detected',
      0x0020: 'No flash function',
      0x0041: 'Flash fired, red-eye reduction mode',
      0x0045: 'Flash fired, red-eye reduction mode, return light not detected',
      0x0047: 'Flash fired, red-eye reduction mode, return light detected',
      0x0049: 'Flash fired, compulsory flash mode, red-eye reduction mode',
      0x004D: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected',
      0x004F: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected',
      0x0059: 'Flash fired, auto mode, red-eye reduction mode',
      0x005D: 'Flash fired, auto mode, return light not detected, red-eye reduction mode',
      0x005F: 'Flash fired, auto mode, return light detected, red-eye reduction mode'
    },
    SensingMethod: {
      1: 'Not defined',
      2: 'One-chip color area sensor',
      3: 'Two-chip color area sensor',
      4: 'Three-chip color area sensor',
      5: 'Color sequential area sensor',
      7: 'Trilinear sensor',
      8: 'Color sequential linear sensor'
    },
    SceneCaptureType: {
      0: 'Standard',
      1: 'Landscape',
      2: 'Portrait',
      3: 'Night scene'
    },
    SceneType: {
      1: 'Directly photographed'
    },
    CustomRendered: {
      0: 'Normal process',
      1: 'Custom process'
    },
    WhiteBalance: {
      0: 'Auto white balance',
      1: 'Manual white balance'
    },
    GainControl: {
      0: 'None',
      1: 'Low gain up',
      2: 'High gain up',
      3: 'Low gain down',
      4: 'High gain down'
    },
    Contrast: {
      0: 'Normal',
      1: 'Soft',
      2: 'Hard'
    },
    Saturation: {
      0: 'Normal',
      1: 'Low saturation',
      2: 'High saturation'
    },
    Sharpness: {
      0: 'Normal',
      1: 'Soft',
      2: 'Hard'
    },
    SubjectDistanceRange: {
      0: 'Unknown',
      1: 'Macro',
      2: 'Close view',
      3: 'Distant view'
    },
    FileSource: {
      3: 'DSC'
    },
    Components: {
      0: '',
      1: 'Y',
      2: 'Cb',
      3: 'Cr',
      4: 'R',
      5: 'G',
      6: 'B'
    }
  };
  
  function imageHasData(img) {
    return !!img.exifdata;
  }
  
  function base64ToArrayBuffer(base64, contentType) {
    contentType = contentType || base64.match(/^data:([^;]+);base64,/mi)[1] || ''; // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg'
  
    base64 = base64.replace(/^data:([^;]+);base64,/gmi, '');
    var binary = atob(base64);
    var len = binary.length;
    var buffer = new ArrayBuffer(len); // eslint-disable-next-line compat/compat
  
    var view = new Uint8Array(buffer);
  
    for (var i = 0; i < len; i++) {
      view[i] = binary.charCodeAt(i);
    }
  
    return buffer;
  }
  
  function objectURLToBlob(url, callback) {
    var http = new XMLHttpRequest();
    http.open('GET', url, true);
    http.responseType = 'blob';
  
    http.onload = function (e) {
      if (this.status === 200 || this.status === 0) {
        callback(this.response);
      }
    };
  
    http.send();
  }
  
  function getImageData(img, callback) {
    function handleBinaryFile(binFile) {
      var data = findEXIFinJPEG(binFile);
      img.exifdata = data || {};
  
      if (callback) {
        callback.call(img);
      }
    }
  
    if (img.src) {
      if (/^data:/i.test(img.src)) {
        // Data URI
        var arrayBuffer = base64ToArrayBuffer(img.src);
        handleBinaryFile(arrayBuffer);
      } else if (/^blob:/i.test(img.src)) {
        // Object URL
        var fileReader = new FileReader();
  
        fileReader.onload = function (e) {
          handleBinaryFile(e.target.result);
        };
  
        objectURLToBlob(img.src, function (blob) {
          fileReader.readAsArrayBuffer(blob);
        });
      } else {
        var http = new XMLHttpRequest();
  
        http.onload = function () {
          if (this.status === 200 || this.status === 0) {
            handleBinaryFile(http.response);
          } else {
            throw new Error('Could not load image');
          }
  
          http = null;
        };
  
        http.open('GET', img.src, true);
        http.responseType = 'arraybuffer';
        http.send(null);
      }
    } else if (self.FileReader && (img instanceof self.Blob || img instanceof self.File)) {
      var _fileReader = new FileReader();
  
      _fileReader.onload = function (e) {
        handleBinaryFile(e.target.result);
      };
  
      _fileReader.readAsArrayBuffer(img);
    }
  }
  
  function findEXIFinJPEG(file) {
    var dataView = new DataView(file);
  
    if (dataView.getUint8(0) !== 0xFF || dataView.getUint8(1) !== 0xD8) {
      return false; // not a valid jpeg
    }
  
    var offset = 2;
    var length = file.byteLength;
    var marker;
  
    while (offset < length) {
      if (dataView.getUint8(offset) !== 0xFF) {
        return false; // not a valid marker, something is wrong
      }
  
      marker = dataView.getUint8(offset + 1); // we could implement handling for other markers here,
      // but we're only looking for 0xFFE1 for EXIF data
  
      if (marker === 225) {
        return readEXIFData(dataView, offset + 4, dataView.getUint16(offset + 2) - 2);
      } else {
        offset += 2 + dataView.getUint16(offset + 2);
      }
    }
  }
  
  function readTags(file, tiffStart, dirStart, strings, bigEnd) {
    var entries = file.getUint16(dirStart, !bigEnd);
    var tags = {};
    var entryOffset;
    var tag;
    var i;
  
    for (i = 0; i < entries; i++) {
      entryOffset = dirStart + i * 12 + 2;
      tag = strings[file.getUint16(entryOffset, !bigEnd)];
      tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);
    }
  
    return tags;
  }
  
  function readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) {
    var type = file.getUint16(entryOffset + 2, !bigEnd);
    var numValues = file.getUint32(entryOffset + 4, !bigEnd);
    var valueOffset = file.getUint32(entryOffset + 8, !bigEnd) + tiffStart;
    var offset;
    var vals;
    var val;
    var n;
    var numerator;
    var denominator;
  
    switch (type) {
      case 1: // byte, 8-bit unsigned int
  
      case 7:
        // undefined, 8-bit byte, value depending on field
        if (numValues === 1) {
          return file.getUint8(entryOffset + 8, !bigEnd);
        } else {
          offset = numValues > 4 ? valueOffset : entryOffset + 8;
          vals = [];
  
          for (n = 0; n < numValues; n++) {
            vals[n] = file.getUint8(offset + n);
          }
  
          return vals;
        }
  
      case 2:
        // ascii, 8-bit byte
        offset = numValues > 4 ? valueOffset : entryOffset + 8;
        return getStringFromDB(file, offset, numValues - 1);
  
      case 3:
        // short, 16 bit int
        if (numValues === 1) {
          return file.getUint16(entryOffset + 8, !bigEnd);
        } else {
          offset = numValues > 2 ? valueOffset : entryOffset + 8;
          vals = [];
  
          for (n = 0; n < numValues; n++) {
            vals[n] = file.getUint16(offset + 2 * n, !bigEnd);
          }
  
          return vals;
        }
  
      case 4:
        // long, 32 bit int
        if (numValues === 1) {
          return file.getUint32(entryOffset + 8, !bigEnd);
        } else {
          vals = [];
  
          for (n = 0; n < numValues; n++) {
            vals[n] = file.getUint32(valueOffset + 4 * n, !bigEnd);
          }
  
          return vals;
        }
  
      case 5:
        // rational = two long values, first is numerator, second is denominator
        if (numValues === 1) {
          numerator = file.getUint32(valueOffset, !bigEnd);
          denominator = file.getUint32(valueOffset + 4, !bigEnd);
          val = +(numerator / denominator);
          val.numerator = numerator;
          val.denominator = denominator;
          return val;
        } else {
          vals = [];
  
          for (n = 0; n < numValues; n++) {
            numerator = file.getUint32(valueOffset + 8 * n, !bigEnd);
            denominator = file.getUint32(valueOffset + 4 + 8 * n, !bigEnd);
            vals[n] = +(numerator / denominator);
            vals[n].numerator = numerator;
            vals[n].denominator = denominator;
          }
  
          return vals;
        }
  
      case 9:
        // slong, 32 bit signed int
        if (numValues === 1) {
          return file.getInt32(entryOffset + 8, !bigEnd);
        } else {
          vals = [];
  
          for (n = 0; n < numValues; n++) {
            vals[n] = file.getInt32(valueOffset + 4 * n, !bigEnd);
          }
  
          return vals;
        }
  
      case 10:
        // signed rational, two slongs, first is numerator, second is denominator
        if (numValues === 1) {
          return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset + 4, !bigEnd);
        } else {
          vals = [];
  
          for (n = 0; n < numValues; n++) {
            vals[n] = file.getInt32(valueOffset + 8 * n, !bigEnd) / file.getInt32(valueOffset + 4 + 8 * n, !bigEnd);
          }
  
          return vals;
        }
  
    }
  }
  
  function getStringFromDB(buffer, start, length) {
    var outstr = '';
  
    for (var n = start; n < start + length; n++) {
      outstr += String.fromCharCode(buffer.getUint8(n));
    }
  
    return outstr;
  }
  
  function readEXIFData(file, start) {
    if (getStringFromDB(file, start, 4) !== 'Exif') {
      return false;
    }
  
    var bigEnd;
    var tags;
    var tag;
    var exifData;
    var gpsData;
    var tiffOffset = start + 6; // test for TIFF validity and endianness
  
    if (file.getUint16(tiffOffset) === 0x4949) {
      bigEnd = false;
    } else if (file.getUint16(tiffOffset) === 0x4D4D) {
      bigEnd = true;
    } else {
      return false;
    }
  
    if (file.getUint16(tiffOffset + 2, !bigEnd) !== 0x002A) {
      return false;
    }
  
    var firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd);
  
    if (firstIFDOffset < 0x00000008) {
      return false;
    }
  
    tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, TiffTags, bigEnd);
  
    if (tags.ExifIFDPointer) {
      exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd);
  
      for (tag in exifData) {
        switch (tag) {
          case 'LightSource':
          case 'Flash':
          case 'MeteringMode':
          case 'ExposureProgram':
          case 'SensingMethod':
          case 'SceneCaptureType':
          case 'SceneType':
          case 'CustomRendered':
          case 'WhiteBalance':
          case 'GainControl':
          case 'Contrast':
          case 'Saturation':
          case 'Sharpness':
          case 'SubjectDistanceRange':
          case 'FileSource':
            exifData[tag] = StringValues[tag][exifData[tag]];
            break;
  
          case 'ExifVersion':
          case 'FlashpixVersion':
            exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], exifData[tag][3]);
            break;
  
          case 'ComponentsConfiguration':
            exifData[tag] = StringValues.Components[exifData[tag][0]] + StringValues.Components[exifData[tag][1]] + StringValues.Components[exifData[tag][2]] + StringValues.Components[exifData[tag][3]];
            break;
        }
  
        tags[tag] = exifData[tag];
      }
    }
  
    if (tags.GPSInfoIFDPointer) {
      gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd);
  
      for (tag in gpsData) {
        switch (tag) {
          case 'GPSVersionID':
            gpsData[tag] = gpsData[tag][0] + '.' + gpsData[tag][1] + '.' + gpsData[tag][2] + '.' + gpsData[tag][3];
            break;
        }
  
        tags[tag] = gpsData[tag];
      }
    }
  
    return tags;
  }
  
  function getData(img, callback) {
    if ((self.Image && img instanceof self.Image || self.HTMLImageElement && img instanceof self.HTMLImageElement) && !img.complete) {
      return false;
    }
  
    if (!imageHasData(img)) {
      getImageData(img, callback);
    } else {
      if (callback) {
        callback.call(img);
      }
    }
  
    return true;
  }
  
  function getTag(img, tag) {
    if (!imageHasData(img)) return;
    return img.exifdata[tag];
  }
  
  function getAllTags(img) {
    if (!imageHasData(img)) return {};
    return img.exifdata;
  }
  
  module.exports = {
    getAllTags: getAllTags,
    getData: getData,
    getTag: getTag
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/thumbnail-generator/lib/image-orientations.js":
  /*!**************************************************************************!*\
    !*** ./node_modules/@uppy/thumbnail-generator/lib/image-orientations.js ***!
    \**************************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  var ORIENTATIONS = {
    1: {
      rotation: 0,
      xScale: 1,
      yScale: 1
    },
    2: {
      rotation: 0,
      xScale: -1,
      yScale: 1
    },
    3: {
      rotation: 180,
      xScale: 1,
      yScale: 1
    },
    4: {
      rotation: 180,
      xScale: -1,
      yScale: 1
    },
    5: {
      rotation: 90,
      xScale: 1,
      yScale: -1
    },
    6: {
      rotation: 90,
      xScale: 1,
      yScale: 1
    },
    7: {
      rotation: 270,
      xScale: 1,
      yScale: -1
    },
    8: {
      rotation: 270,
      xScale: 1,
      yScale: 1
    }
  };
  module.exports = ORIENTATIONS;
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/thumbnail-generator/lib/index.js":
  /*!*************************************************************!*\
    !*** ./node_modules/@uppy/thumbnail-generator/lib/index.js ***!
    \*************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  var _class, _temp;
  
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
  
  function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  
  var _require = __webpack_require__(/*! @uppy/core */ "./node_modules/@uppy/core/lib/index.js"),
      Plugin = _require.Plugin;
  
  var Translator = __webpack_require__(/*! @uppy/utils/lib/Translator */ "./node_modules/@uppy/utils/lib/Translator.js");
  
  var dataURItoBlob = __webpack_require__(/*! @uppy/utils/lib/dataURItoBlob */ "./node_modules/@uppy/utils/lib/dataURItoBlob.js");
  
  var isObjectURL = __webpack_require__(/*! @uppy/utils/lib/isObjectURL */ "./node_modules/@uppy/utils/lib/isObjectURL.js");
  
  var isPreviewSupported = __webpack_require__(/*! @uppy/utils/lib/isPreviewSupported */ "./node_modules/@uppy/utils/lib/isPreviewSupported.js");
  
  var ORIENTATIONS = __webpack_require__(/*! ./image-orientations */ "./node_modules/@uppy/thumbnail-generator/lib/image-orientations.js");
  
  var Exif = __webpack_require__(/*! ./exif */ "./node_modules/@uppy/thumbnail-generator/lib/exif.js");
  /**
   * The Thumbnail Generator plugin
   */
  
  
  module.exports = (_temp = _class =
  /*#__PURE__*/
  function (_Plugin) {
    _inheritsLoose(ThumbnailGenerator, _Plugin);
  
    function ThumbnailGenerator(uppy, opts) {
      var _this;
  
      _this = _Plugin.call(this, uppy, opts) || this;
  
      _this.onFileAdded = function (file) {
        if (!file.preview) {
          _this.addToQueue(file);
        }
      };
  
      _this.onFileRemoved = function (file) {
        var index = _this.queue.indexOf(file);
  
        if (index !== -1) {
          _this.queue.splice(index, 1);
        } // Clean up object URLs.
  
  
        if (file.preview && isObjectURL(file.preview)) {
          URL.revokeObjectURL(file.preview);
        }
      };
  
      _this.onRestored = function () {
        var _this$uppy$getState = _this.uppy.getState(),
            files = _this$uppy$getState.files;
  
        var fileIDs = Object.keys(files);
        fileIDs.forEach(function (fileID) {
          var file = _this.uppy.getFile(fileID);
  
          if (!file.isRestored) return; // Only add blob URLs; they are likely invalid after being restored.
  
          if (!file.preview || isObjectURL(file.preview)) {
            _this.addToQueue(file);
          }
        });
      };
  
      _this.waitUntilAllProcessed = function (fileIDs) {
        fileIDs.forEach(function (fileID) {
          var file = _this.uppy.getFile(fileID);
  
          _this.uppy.emit('preprocess-progress', file, {
            mode: 'indeterminate',
            message: _this.i18n('generatingThumbnails')
          });
        });
  
        var emitPreprocessCompleteForAll = function emitPreprocessCompleteForAll() {
          fileIDs.forEach(function (fileID) {
            var file = _this.uppy.getFile(fileID);
  
            _this.uppy.emit('preprocess-complete', file);
          });
        };
  
        return new Promise(function (resolve, reject) {
          if (_this.queueProcessing) {
            _this.uppy.once('thumbnail:all-generated', function () {
              emitPreprocessCompleteForAll();
              resolve();
            });
          } else {
            emitPreprocessCompleteForAll();
            resolve();
          }
        });
      };
  
      _this.type = 'modifier';
      _this.id = _this.opts.id || 'ThumbnailGenerator';
      _this.title = 'Thumbnail Generator';
      _this.queue = [];
      _this.queueProcessing = false;
      _this.defaultThumbnailDimension = 200;
      _this.defaultLocale = {
        strings: {
          generatingThumbnails: 'Generating thumbnails...'
        }
      };
      var defaultOptions = {
        thumbnailWidth: null,
        thumbnailHeight: null,
        waitForThumbnailsBeforeUpload: false
      };
      _this.opts = _extends({}, defaultOptions, {}, opts);
  
      _this.i18nInit();
  
      return _this;
    }
  
    var _proto = ThumbnailGenerator.prototype;
  
    _proto.setOptions = function setOptions(newOpts) {
      _Plugin.prototype.setOptions.call(this, newOpts);
  
      this.i18nInit();
    };
  
    _proto.i18nInit = function i18nInit() {
      this.translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);
      this.i18n = this.translator.translate.bind(this.translator);
      this.setPluginState(); // so that UI re-renders and we see the updated locale
    }
    /**
     * Create a thumbnail for the given Uppy file object.
     *
     * @param {{data: Blob}} file
     * @param {number} targetWidth
     * @param {number} targetHeight
     * @returns {Promise}
     */
    ;
  
    _proto.createThumbnail = function createThumbnail(file, targetWidth, targetHeight) {
      var _this2 = this;
  
      var originalUrl = URL.createObjectURL(file.data);
      var onload = new Promise(function (resolve, reject) {
        var image = new Image();
        image.src = originalUrl;
        image.addEventListener('load', function () {
          URL.revokeObjectURL(originalUrl);
          resolve(image);
        });
        image.addEventListener('error', function (event) {
          URL.revokeObjectURL(originalUrl);
          reject(event.error || new Error('Could not create thumbnail'));
        });
      });
      return Promise.all([onload, this.getOrientation(file)]).then(function (values) {
        var image = values[0];
        var orientation = values[1];
  
        var dimensions = _this2.getProportionalDimensions(image, targetWidth, targetHeight, orientation.rotation);
  
        var rotatedImage = _this2.rotateImage(image, orientation);
  
        var resizedImage = _this2.resizeImage(rotatedImage, dimensions.width, dimensions.height);
  
        return _this2.canvasToBlob(resizedImage, 'image/png');
      }).then(function (blob) {
        return URL.createObjectURL(blob);
      });
    }
    /**
     * Get the new calculated dimensions for the given image and a target width
     * or height. If both width and height are given, only width is taken into
     * account. If neither width nor height are given, the default dimension
     * is used.
     */
    ;
  
    _proto.getProportionalDimensions = function getProportionalDimensions(img, width, height, rotation) {
      var aspect = img.width / img.height;
  
      if (rotation === 90 || rotation === 270) {
        aspect = img.height / img.width;
      }
  
      if (width != null) {
        return {
          width: width,
          height: Math.round(width / aspect)
        };
      }
  
      if (height != null) {
        return {
          width: Math.round(height * aspect),
          height: height
        };
      }
  
      return {
        width: this.defaultThumbnailDimension,
        height: Math.round(this.defaultThumbnailDimension / aspect)
      };
    };
  
    _proto.getOrientation = function getOrientation(file) {
      var _this3 = this;
  
      return new Promise(function (resolve) {
        var uppy = _this3.uppy;
        Exif.getData(file.data, function exifGetDataCallback() {
          uppy.setFileMeta(file.id, {
            exifdata: Exif.getAllTags(this)
          });
          var orientation = Exif.getTag(this, 'Orientation') || 1;
          resolve(ORIENTATIONS[orientation]);
        });
      });
    }
    /**
     * Make sure the image doesn’t exceed browser/device canvas limits.
     * For ios with 256 RAM and ie
     */
    ;
  
    _proto.protect = function protect(image) {
      // https://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element
      var ratio = image.width / image.height;
      var maxSquare = 5000000; // ios max canvas square
  
      var maxSize = 4096; // ie max canvas dimensions
  
      var maxW = Math.floor(Math.sqrt(maxSquare * ratio));
      var maxH = Math.floor(maxSquare / Math.sqrt(maxSquare * ratio));
  
      if (maxW > maxSize) {
        maxW = maxSize;
        maxH = Math.round(maxW / ratio);
      }
  
      if (maxH > maxSize) {
        maxH = maxSize;
        maxW = Math.round(ratio * maxH);
      }
  
      if (image.width > maxW) {
        var canvas = document.createElement('canvas');
        canvas.width = maxW;
        canvas.height = maxH;
        canvas.getContext('2d').drawImage(image, 0, 0, maxW, maxH);
        image = canvas;
      }
  
      return image;
    }
    /**
     * Resize an image to the target `width` and `height`.
     *
     * Returns a Canvas with the resized image on it.
     */
    ;
  
    _proto.resizeImage = function resizeImage(image, targetWidth, targetHeight) {
      // Resizing in steps refactored to use a solution from
      // https://blog.uploadcare.com/image-resize-in-browsers-is-broken-e38eed08df01
      image = this.protect(image); // Use the Polyfill for Math.log2() since IE doesn't support log2
      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
  
      var steps = Math.ceil(Math.log(image.width / targetWidth) * Math.LOG2E);
  
      if (steps < 1) {
        steps = 1;
      }
  
      var sW = targetWidth * Math.pow(2, steps - 1);
      var sH = targetHeight * Math.pow(2, steps - 1);
      var x = 2;
  
      while (steps--) {
        var canvas = document.createElement('canvas');
        canvas.width = sW;
        canvas.height = sH;
        canvas.getContext('2d').drawImage(image, 0, 0, sW, sH);
        image = canvas;
        sW = Math.round(sW / x);
        sH = Math.round(sH / x);
      }
  
      return image;
    };
  
    _proto.rotateImage = function rotateImage(image, translate) {
      var w = image.width;
      var h = image.height;
  
      if (translate.rotation === 90 || translate.rotation === 270) {
        w = image.height;
        h = image.width;
      }
  
      var canvas = document.createElement('canvas');
      canvas.width = w;
      canvas.height = h;
      var context = canvas.getContext('2d');
      context.translate(w / 2, h / 2);
      context.rotate(translate.rotation * Math.PI / 180);
      context.scale(translate.xScale, translate.yScale);
      context.drawImage(image, -image.width / 2, -image.height / 2, image.width, image.height);
      return canvas;
    }
    /**
     * Save a <canvas> element's content to a Blob object.
     *
     * @param {HTMLCanvasElement} canvas
     * @returns {Promise}
     */
    ;
  
    _proto.canvasToBlob = function canvasToBlob(canvas, type, quality) {
      try {
        canvas.getContext('2d').getImageData(0, 0, 1, 1);
      } catch (err) {
        if (err.code === 18) {
          return Promise.reject(new Error('cannot read image, probably an svg with external resources'));
        }
      }
  
      if (canvas.toBlob) {
        return new Promise(function (resolve) {
          canvas.toBlob(resolve, type, quality);
        }).then(function (blob) {
          if (blob === null) {
            throw new Error('cannot read image, probably an svg with external resources');
          }
  
          return blob;
        });
      }
  
      return Promise.resolve().then(function () {
        return dataURItoBlob(canvas.toDataURL(type, quality), {});
      }).then(function (blob) {
        if (blob === null) {
          throw new Error('could not extract blob, probably an old browser');
        }
  
        return blob;
      });
    }
    /**
     * Set the preview URL for a file.
     */
    ;
  
    _proto.setPreviewURL = function setPreviewURL(fileID, preview) {
      this.uppy.setFileState(fileID, {
        preview: preview
      });
    };
  
    _proto.addToQueue = function addToQueue(item) {
      this.queue.push(item);
  
      if (this.queueProcessing === false) {
        this.processQueue();
      }
    };
  
    _proto.processQueue = function processQueue() {
      var _this4 = this;
  
      this.queueProcessing = true;
  
      if (this.queue.length > 0) {
        var current = this.queue.shift();
        return this.requestThumbnail(current).catch(function (err) {}) // eslint-disable-line handle-callback-err
        .then(function () {
          return _this4.processQueue();
        });
      } else {
        this.queueProcessing = false;
        this.uppy.log('[ThumbnailGenerator] Emptied thumbnail queue');
        this.uppy.emit('thumbnail:all-generated');
      }
    };
  
    _proto.requestThumbnail = function requestThumbnail(file) {
      var _this5 = this;
  
      if (isPreviewSupported(file.type) && !file.isRemote) {
        return this.createThumbnail(file, this.opts.thumbnailWidth, this.opts.thumbnailHeight).then(function (preview) {
          _this5.setPreviewURL(file.id, preview);
  
          _this5.uppy.log("[ThumbnailGenerator] Generated thumbnail for " + file.id);
  
          _this5.uppy.emit('thumbnail:generated', _this5.uppy.getFile(file.id), preview);
        }).catch(function (err) {
          _this5.uppy.log("[ThumbnailGenerator] Failed thumbnail for " + file.id + ":", 'warning');
  
          _this5.uppy.log(err, 'warning');
  
          _this5.uppy.emit('thumbnail:error', _this5.uppy.getFile(file.id), err);
        });
      }
  
      return Promise.resolve();
    };
  
    _proto.install = function install() {
      this.uppy.on('file-added', this.onFileAdded);
      this.uppy.on('file-removed', this.onFileRemoved);
      this.uppy.on('restored', this.onRestored);
  
      if (this.opts.waitForThumbnailsBeforeUpload) {
        this.uppy.addPreProcessor(this.waitUntilAllProcessed);
      }
    };
  
    _proto.uninstall = function uninstall() {
      this.uppy.off('file-added', this.onFileAdded);
      this.uppy.off('file-removed', this.onFileRemoved);
      this.uppy.off('restored', this.onRestored);
  
      if (this.opts.waitForThumbnailsBeforeUpload) {
        this.uppy.removePreProcessor(this.waitUntilAllProcessed);
      }
    };
  
    return ThumbnailGenerator;
  }(Plugin), _class.VERSION = "1.5.1", _temp);
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/Translator.js":
  /*!****************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/Translator.js ***!
    \****************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
  
  var has = __webpack_require__(/*! ./hasProperty */ "./node_modules/@uppy/utils/lib/hasProperty.js");
  /**
   * Translates strings with interpolation & pluralization support.
   * Extensible with custom dictionaries and pluralization functions.
   *
   * Borrows heavily from and inspired by Polyglot https://github.com/airbnb/polyglot.js,
   * basically a stripped-down version of it. Differences: pluralization functions are not hardcoded
   * and can be easily added among with dictionaries, nested objects are used for pluralization
   * as opposed to `||||` delimeter
   *
   * Usage example: `translator.translate('files_chosen', {smart_count: 3})`
   */
  
  
  module.exports =
  /*#__PURE__*/
  function () {
    /**
     * @param {object|Array<object>} locales - locale or list of locales.
     */
    function Translator(locales) {
      var _this = this;
  
      this.locale = {
        strings: {},
        pluralize: function pluralize(n) {
          if (n === 1) {
            return 0;
          }
  
          return 1;
        }
      };
  
      if (Array.isArray(locales)) {
        locales.forEach(function (locale) {
          return _this._apply(locale);
        });
      } else {
        this._apply(locales);
      }
    }
  
    var _proto = Translator.prototype;
  
    _proto._apply = function _apply(locale) {
      if (!locale || !locale.strings) {
        return;
      }
  
      var prevLocale = this.locale;
      this.locale = _extends({}, prevLocale, {
        strings: _extends({}, prevLocale.strings, locale.strings)
      });
      this.locale.pluralize = locale.pluralize || prevLocale.pluralize;
    }
    /**
     * Takes a string with placeholder variables like `%{smart_count} file selected`
     * and replaces it with values from options `{smart_count: 5}`
     *
     * @license https://github.com/airbnb/polyglot.js/blob/master/LICENSE
     * taken from https://github.com/airbnb/polyglot.js/blob/master/lib/polyglot.js#L299
     *
     * @param {string} phrase that needs interpolation, with placeholders
     * @param {object} options with values that will be used to replace placeholders
     * @returns {string} interpolated
     */
    ;
  
    _proto.interpolate = function interpolate(phrase, options) {
      var _String$prototype = String.prototype,
          split = _String$prototype.split,
          replace = _String$prototype.replace;
      var dollarRegex = /\$/g;
      var dollarBillsYall = '$$$$';
      var interpolated = [phrase];
  
      for (var arg in options) {
        if (arg !== '_' && has(options, arg)) {
          // Ensure replacement value is escaped to prevent special $-prefixed
          // regex replace tokens. the "$$$$" is needed because each "$" needs to
          // be escaped with "$" itself, and we need two in the resulting output.
          var replacement = options[arg];
  
          if (typeof replacement === 'string') {
            replacement = replace.call(options[arg], dollarRegex, dollarBillsYall);
          } // We create a new `RegExp` each time instead of using a more-efficient
          // string replace so that the same argument can be replaced multiple times
          // in the same phrase.
  
  
          interpolated = insertReplacement(interpolated, new RegExp('%\\{' + arg + '\\}', 'g'), replacement);
        }
      }
  
      return interpolated;
  
      function insertReplacement(source, rx, replacement) {
        var newParts = [];
        source.forEach(function (chunk) {
          split.call(chunk, rx).forEach(function (raw, i, list) {
            if (raw !== '') {
              newParts.push(raw);
            } // Interlace with the `replacement` value
  
  
            if (i < list.length - 1) {
              newParts.push(replacement);
            }
          });
        });
        return newParts;
      }
    }
    /**
     * Public translate method
     *
     * @param {string} key
     * @param {object} options with values that will be used later to replace placeholders in string
     * @returns {string} translated (and interpolated)
     */
    ;
  
    _proto.translate = function translate(key, options) {
      return this.translateArray(key, options).join('');
    }
    /**
     * Get a translation and return the translated and interpolated parts as an array.
     *
     * @param {string} key
     * @param {object} options with values that will be used to replace placeholders
     * @returns {Array} The translated and interpolated parts, in order.
     */
    ;
  
    _proto.translateArray = function translateArray(key, options) {
      if (options && typeof options.smart_count !== 'undefined') {
        var plural = this.locale.pluralize(options.smart_count);
        return this.interpolate(this.locale.strings[key][plural], options);
      }
  
      return this.interpolate(this.locale.strings[key], options);
    };
  
    return Translator;
  }();
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/dataURItoBlob.js":
  /*!*******************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/dataURItoBlob.js ***!
    \*******************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  module.exports = function dataURItoBlob(dataURI, opts, toFile) {
    // get the base64 data
    var data = dataURI.split(',')[1]; // user may provide mime type, if not get it from data URI
  
    var mimeType = opts.mimeType || dataURI.split(',')[0].split(':')[1].split(';')[0]; // default to plain/text if data URI has no mimeType
  
    if (mimeType == null) {
      mimeType = 'plain/text';
    }
  
    var binary = atob(data);
    var array = [];
  
    for (var i = 0; i < binary.length; i++) {
      array.push(binary.charCodeAt(i));
    }
  
    var bytes;
  
    try {
      bytes = new Uint8Array(array); // eslint-disable-line compat/compat
    } catch (err) {
      return null;
    } // Convert to a File?
  
  
    if (toFile) {
      return new File([bytes], opts.name || '', {
        type: mimeType
      });
    }
  
    return new Blob([bytes], {
      type: mimeType
    });
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/findDOMElement.js":
  /*!********************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/findDOMElement.js ***!
    \********************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  var isDOMElement = __webpack_require__(/*! ./isDOMElement */ "./node_modules/@uppy/utils/lib/isDOMElement.js");
  /**
   * Find a DOM element.
   *
   * @param {Node|string} element
   * @returns {Node|null}
   */
  
  
  module.exports = function findDOMElement(element, context) {
    if (context === void 0) {
      context = document;
    }
  
    if (typeof element === 'string') {
      return context.querySelector(element);
    }
  
    if (typeof element === 'object' && isDOMElement(element)) {
      return element;
    }
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/generateFileID.js":
  /*!********************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/generateFileID.js ***!
    \********************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  /**
   * Takes a file object and turns it into fileID, by converting file.name to lowercase,
   * removing extra characters and adding type, size and lastModified
   *
   * @param {object} file
   * @returns {string} the fileID
   *
   */
  module.exports = function generateFileID(file) {
    // filter is needed to not join empty values with `-`
    return ['uppy', file.name ? encodeFilename(file.name.toLowerCase()) : '', file.type, file.meta && file.meta.relativePath ? encodeFilename(file.meta.relativePath.toLowerCase()) : '', file.data.size, file.data.lastModified].filter(function (val) {
      return val;
    }).join('-');
  };
  
  function encodeFilename(name) {
    var suffix = '';
    return name.replace(/[^A-Z0-9]/ig, function (character) {
      suffix += '-' + encodeCharacter(character);
      return '/';
    }) + suffix;
  }
  
  function encodeCharacter(character) {
    return character.charCodeAt(0).toString(32);
  }
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/getFileNameAndExtension.js":
  /*!*****************************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/getFileNameAndExtension.js ***!
    \*****************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  /**
   * Takes a full filename string and returns an object {name, extension}
   *
   * @param {string} fullFileName
   * @returns {object} {name, extension}
   */
  module.exports = function getFileNameAndExtension(fullFileName) {
    var re = /(?:\.([^.]+))?$/;
    var fileExt = re.exec(fullFileName)[1];
    var fileName = fullFileName.replace('.' + fileExt, '');
    return {
      name: fileName,
      extension: fileExt
    };
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/getFileType.js":
  /*!*****************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/getFileType.js ***!
    \*****************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  var getFileNameAndExtension = __webpack_require__(/*! ./getFileNameAndExtension */ "./node_modules/@uppy/utils/lib/getFileNameAndExtension.js");
  
  var mimeTypes = __webpack_require__(/*! ./mimeTypes */ "./node_modules/@uppy/utils/lib/mimeTypes.js");
  
  module.exports = function getFileType(file) {
    var fileExtension = file.name ? getFileNameAndExtension(file.name).extension : null;
    fileExtension = fileExtension ? fileExtension.toLowerCase() : null;
  
    if (file.type) {
      // if mime type is set in the file object already, use that
      return file.type;
    } else if (fileExtension && mimeTypes[fileExtension]) {
      // else, see if we can map extension to a mime type
      return mimeTypes[fileExtension];
    } else {
      // if all fails, fall back to a generic byte stream type
      return 'application/octet-stream';
    }
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/getTimeStamp.js":
  /*!******************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/getTimeStamp.js ***!
    \******************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  /**
   * Returns a timestamp in the format of `hours:minutes:seconds`
   */
  module.exports = function getTimeStamp() {
    var date = new Date();
    var hours = pad(date.getHours().toString());
    var minutes = pad(date.getMinutes().toString());
    var seconds = pad(date.getSeconds().toString());
    return hours + ':' + minutes + ':' + seconds;
  };
  /**
   * Adds zero to strings shorter than two characters
   */
  
  
  function pad(str) {
    return str.length !== 2 ? 0 + str : str;
  }
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/hasProperty.js":
  /*!*****************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/hasProperty.js ***!
    \*****************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  module.exports = function has(object, key) {
    return Object.prototype.hasOwnProperty.call(object, key);
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/isDOMElement.js":
  /*!******************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/isDOMElement.js ***!
    \******************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  /**
   * Check if an object is a DOM element. Duck-typing based on `nodeType`.
   *
   * @param {*} obj
   */
  module.exports = function isDOMElement(obj) {
    return obj && typeof obj === 'object' && obj.nodeType === Node.ELEMENT_NODE;
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/isObjectURL.js":
  /*!*****************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/isObjectURL.js ***!
    \*****************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  /**
   * Check if a URL string is an object URL from `URL.createObjectURL`.
   *
   * @param {string} url
   * @returns {boolean}
   */
  module.exports = function isObjectURL(url) {
    return url.indexOf('blob:') === 0;
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/isPreviewSupported.js":
  /*!************************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/isPreviewSupported.js ***!
    \************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  module.exports = function isPreviewSupported(fileType) {
    if (!fileType) return false;
    var fileTypeSpecific = fileType.split('/')[1]; // list of images that browsers can preview
  
    if (/^(jpe?g|gif|png|svg|svg\+xml|bmp|webp)$/.test(fileTypeSpecific)) {
      return true;
    }
  
    return false;
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/mimeTypes.js":
  /*!***************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/mimeTypes.js ***!
    \***************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  // ___Why not add the mime-types package?
  //    It's 19.7kB gzipped, and we only need mime types for well-known extensions (for file previews).
  // ___Where to take new extensions from?
  //    https://github.com/jshttp/mime-db/blob/master/db.json
  module.exports = {
    md: 'text/markdown',
    markdown: 'text/markdown',
    mp4: 'video/mp4',
    mp3: 'audio/mp3',
    svg: 'image/svg+xml',
    jpg: 'image/jpeg',
    png: 'image/png',
    gif: 'image/gif',
    heic: 'image/heic',
    heif: 'image/heif',
    yaml: 'text/yaml',
    yml: 'text/yaml',
    csv: 'text/csv',
    avi: 'video/x-msvideo',
    mks: 'video/x-matroska',
    mkv: 'video/x-matroska',
    mov: 'video/quicktime',
    doc: 'application/msword',
    docm: 'application/vnd.ms-word.document.macroenabled.12',
    docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    dot: 'application/msword',
    dotm: 'application/vnd.ms-word.template.macroenabled.12',
    dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
    xla: 'application/vnd.ms-excel',
    xlam: 'application/vnd.ms-excel.addin.macroenabled.12',
    xlc: 'application/vnd.ms-excel',
    xlf: 'application/x-xliff+xml',
    xlm: 'application/vnd.ms-excel',
    xls: 'application/vnd.ms-excel',
    xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
    xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',
    xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    xlt: 'application/vnd.ms-excel',
    xltm: 'application/vnd.ms-excel.template.macroenabled.12',
    xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
    xlw: 'application/vnd.ms-excel',
    txt: 'text/plain',
    text: 'text/plain',
    conf: 'text/plain',
    log: 'text/plain',
    pdf: 'application/pdf'
  };
  
  /***/ }),
  
  /***/ "./node_modules/@uppy/utils/lib/prettyBytes.js":
  /*!*****************************************************!*\
    !*** ./node_modules/@uppy/utils/lib/prettyBytes.js ***!
    \*****************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  // Adapted from https://github.com/Flet/prettier-bytes/
  // Changing 1000 bytes to 1024, so we can keep uppercase KB vs kB
  // ISC License (c) Dan Flettre https://github.com/Flet/prettier-bytes/blob/master/LICENSE
  module.exports = prettierBytes;
  
  function prettierBytes(num) {
    if (typeof num !== 'number' || isNaN(num)) {
      throw new TypeError('Expected a number, got ' + typeof num);
    }
  
    var neg = num < 0;
    var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
  
    if (neg) {
      num = -num;
    }
  
    if (num < 1) {
      return (neg ? '-' : '') + num + ' B';
    }
  
    var exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1);
    num = Number(num / Math.pow(1024, exponent));
    var unit = units[exponent];
  
    if (num >= 10 || num % 1 === 0) {
      // Do not show decimals when the number is two-digit, or if the number has no
      // decimal component.
      return (neg ? '-' : '') + num.toFixed(0) + ' ' + unit;
    } else {
      return (neg ? '-' : '') + num.toFixed(1) + ' ' + unit;
    }
  }
  
  /***/ }),
  
  /***/ "./node_modules/cuid/index.js":
  /*!************************************!*\
    !*** ./node_modules/cuid/index.js ***!
    \************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  /**
   * cuid.js
   * Collision-resistant UID generator for browsers and node.
   * Sequential for fast db lookups and recency sorting.
   * Safe for element IDs and server-side lookups.
   *
   * Extracted from CLCTR
   *
   * Copyright (c) Eric Elliott 2012
   * MIT License
   */
  
  var fingerprint = __webpack_require__(/*! ./lib/fingerprint.js */ "./node_modules/cuid/lib/fingerprint.browser.js");
  var pad = __webpack_require__(/*! ./lib/pad.js */ "./node_modules/cuid/lib/pad.js");
  var getRandomValue = __webpack_require__(/*! ./lib/getRandomValue.js */ "./node_modules/cuid/lib/getRandomValue.browser.js");
  
  var c = 0,
    blockSize = 4,
    base = 36,
    discreteValues = Math.pow(base, blockSize);
  
  function randomBlock () {
    return pad((getRandomValue() *
      discreteValues << 0)
      .toString(base), blockSize);
  }
  
  function safeCounter () {
    c = c < discreteValues ? c : 0;
    c++; // this is not subliminal
    return c - 1;
  }
  
  function cuid () {
    // Starting with a lowercase letter makes
    // it HTML element ID friendly.
    var letter = 'c', // hard-coded allows for sequential access
  
      // timestamp
      // warning: this exposes the exact date and time
      // that the uid was created.
      timestamp = (new Date().getTime()).toString(base),
  
      // Prevent same-machine collisions.
      counter = pad(safeCounter().toString(base), blockSize),
  
      // A few chars to generate distinct ids for different
      // clients (so different computers are far less
      // likely to generate the same id)
      print = fingerprint(),
  
      // Grab some more chars from Math.random()
      random = randomBlock() + randomBlock();
  
    return letter + timestamp + counter + print + random;
  }
  
  cuid.slug = function slug () {
    var date = new Date().getTime().toString(36),
      counter = safeCounter().toString(36).slice(-4),
      print = fingerprint().slice(0, 1) +
        fingerprint().slice(-1),
      random = randomBlock().slice(-2);
  
    return date.slice(-2) +
      counter + print + random;
  };
  
  cuid.isCuid = function isCuid (stringToCheck) {
    if (typeof stringToCheck !== 'string') return false;
    if (stringToCheck.startsWith('c')) return true;
    return false;
  };
  
  cuid.isSlug = function isSlug (stringToCheck) {
    if (typeof stringToCheck !== 'string') return false;
    var stringLength = stringToCheck.length;
    if (stringLength >= 7 && stringLength <= 10) return true;
    return false;
  };
  
  cuid.fingerprint = fingerprint;
  
  module.exports = cuid;
  
  
  /***/ }),
  
  /***/ "./node_modules/cuid/lib/fingerprint.browser.js":
  /*!******************************************************!*\
    !*** ./node_modules/cuid/lib/fingerprint.browser.js ***!
    \******************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  var pad = __webpack_require__(/*! ./pad.js */ "./node_modules/cuid/lib/pad.js");
  
  var env = typeof window === 'object' ? window : self;
  var globalCount = Object.keys(env).length;
  var mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;
  var clientId = pad((mimeTypesLength +
    navigator.userAgent.length).toString(36) +
    globalCount.toString(36), 4);
  
  module.exports = function fingerprint () {
    return clientId;
  };
  
  
  /***/ }),
  
  /***/ "./node_modules/cuid/lib/getRandomValue.browser.js":
  /*!*********************************************************!*\
    !*** ./node_modules/cuid/lib/getRandomValue.browser.js ***!
    \*********************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  
  var getRandomValue;
  
  var crypto = typeof window !== 'undefined' &&
    (window.crypto || window.msCrypto) ||
    typeof self !== 'undefined' &&
    self.crypto;
  
  if (crypto) {
      var lim = Math.pow(2, 32) - 1;
      getRandomValue = function () {
          return Math.abs(crypto.getRandomValues(new Uint32Array(1))[0] / lim);
      };
  } else {
      getRandomValue = Math.random;
  }
  
  module.exports = getRandomValue;
  
  
  /***/ }),
  
  /***/ "./node_modules/cuid/lib/pad.js":
  /*!**************************************!*\
    !*** ./node_modules/cuid/lib/pad.js ***!
    \**************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  module.exports = function pad (num, size) {
    var s = '000000000' + num;
    return s.substr(s.length - size);
  };
  
  
  /***/ }),
  
  /***/ "./node_modules/lodash.throttle/index.js":
  /*!***********************************************!*\
    !*** ./node_modules/lodash.throttle/index.js ***!
    \***********************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  /* WEBPACK VAR INJECTION */(function(global) {/**
   * lodash (Custom Build) <https://lodash.com/>
   * Build: `lodash modularize exports="npm" -o ./`
   * Copyright jQuery Foundation and other contributors <https://jquery.org/>
   * Released under MIT license <https://lodash.com/license>
   * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
   * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
   */
  
  /** Used as the `TypeError` message for "Functions" methods. */
  var FUNC_ERROR_TEXT = 'Expected a function';
  
  /** Used as references for various `Number` constants. */
  var NAN = 0 / 0;
  
  /** `Object#toString` result references. */
  var symbolTag = '[object Symbol]';
  
  /** Used to match leading and trailing whitespace. */
  var reTrim = /^\s+|\s+$/g;
  
  /** Used to detect bad signed hexadecimal string values. */
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
  
  /** Used to detect binary string values. */
  var reIsBinary = /^0b[01]+$/i;
  
  /** Used to detect octal string values. */
  var reIsOctal = /^0o[0-7]+$/i;
  
  /** Built-in method references without a dependency on `root`. */
  var freeParseInt = parseInt;
  
  /** Detect free variable `global` from Node.js. */
  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
  
  /** Detect free variable `self`. */
  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
  
  /** Used as a reference to the global object. */
  var root = freeGlobal || freeSelf || Function('return this')();
  
  /** Used for built-in method references. */
  var objectProto = Object.prototype;
  
  /**
   * Used to resolve the
   * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
   * of values.
   */
  var objectToString = objectProto.toString;
  
  /* Built-in method references for those with the same name as other `lodash` methods. */
  var nativeMax = Math.max,
      nativeMin = Math.min;
  
  /**
   * Gets the timestamp of the number of milliseconds that have elapsed since
   * the Unix epoch (1 January 1970 00:00:00 UTC).
   *
   * @static
   * @memberOf _
   * @since 2.4.0
   * @category Date
   * @returns {number} Returns the timestamp.
   * @example
   *
   * _.defer(function(stamp) {
   *   console.log(_.now() - stamp);
   * }, _.now());
   * // => Logs the number of milliseconds it took for the deferred invocation.
   */
  var now = function() {
    return root.Date.now();
  };
  
  /**
   * Creates a debounced function that delays invoking `func` until after `wait`
   * milliseconds have elapsed since the last time the debounced function was
   * invoked. The debounced function comes with a `cancel` method to cancel
   * delayed `func` invocations and a `flush` method to immediately invoke them.
   * Provide `options` to indicate whether `func` should be invoked on the
   * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
   * with the last arguments provided to the debounced function. Subsequent
   * calls to the debounced function return the result of the last `func`
   * invocation.
   *
   * **Note:** If `leading` and `trailing` options are `true`, `func` is
   * invoked on the trailing edge of the timeout only if the debounced function
   * is invoked more than once during the `wait` timeout.
   *
   * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
   * until to the next tick, similar to `setTimeout` with a timeout of `0`.
   *
   * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
   * for details over the differences between `_.debounce` and `_.throttle`.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Function
   * @param {Function} func The function to debounce.
   * @param {number} [wait=0] The number of milliseconds to delay.
   * @param {Object} [options={}] The options object.
   * @param {boolean} [options.leading=false]
   *  Specify invoking on the leading edge of the timeout.
   * @param {number} [options.maxWait]
   *  The maximum time `func` is allowed to be delayed before it's invoked.
   * @param {boolean} [options.trailing=true]
   *  Specify invoking on the trailing edge of the timeout.
   * @returns {Function} Returns the new debounced function.
   * @example
   *
   * // Avoid costly calculations while the window size is in flux.
   * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
   *
   * // Invoke `sendMail` when clicked, debouncing subsequent calls.
   * jQuery(element).on('click', _.debounce(sendMail, 300, {
   *   'leading': true,
   *   'trailing': false
   * }));
   *
   * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
   * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
   * var source = new EventSource('/stream');
   * jQuery(source).on('message', debounced);
   *
   * // Cancel the trailing debounced invocation.
   * jQuery(window).on('popstate', debounced.cancel);
   */
  function debounce(func, wait, options) {
    var lastArgs,
        lastThis,
        maxWait,
        result,
        timerId,
        lastCallTime,
        lastInvokeTime = 0,
        leading = false,
        maxing = false,
        trailing = true;
  
    if (typeof func != 'function') {
      throw new TypeError(FUNC_ERROR_TEXT);
    }
    wait = toNumber(wait) || 0;
    if (isObject(options)) {
      leading = !!options.leading;
      maxing = 'maxWait' in options;
      maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
      trailing = 'trailing' in options ? !!options.trailing : trailing;
    }
  
    function invokeFunc(time) {
      var args = lastArgs,
          thisArg = lastThis;
  
      lastArgs = lastThis = undefined;
      lastInvokeTime = time;
      result = func.apply(thisArg, args);
      return result;
    }
  
    function leadingEdge(time) {
      // Reset any `maxWait` timer.
      lastInvokeTime = time;
      // Start the timer for the trailing edge.
      timerId = setTimeout(timerExpired, wait);
      // Invoke the leading edge.
      return leading ? invokeFunc(time) : result;
    }
  
    function remainingWait(time) {
      var timeSinceLastCall = time - lastCallTime,
          timeSinceLastInvoke = time - lastInvokeTime,
          result = wait - timeSinceLastCall;
  
      return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
    }
  
    function shouldInvoke(time) {
      var timeSinceLastCall = time - lastCallTime,
          timeSinceLastInvoke = time - lastInvokeTime;
  
      // Either this is the first call, activity has stopped and we're at the
      // trailing edge, the system time has gone backwards and we're treating
      // it as the trailing edge, or we've hit the `maxWait` limit.
      return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
        (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
    }
  
    function timerExpired() {
      var time = now();
      if (shouldInvoke(time)) {
        return trailingEdge(time);
      }
      // Restart the timer.
      timerId = setTimeout(timerExpired, remainingWait(time));
    }
  
    function trailingEdge(time) {
      timerId = undefined;
  
      // Only invoke if we have `lastArgs` which means `func` has been
      // debounced at least once.
      if (trailing && lastArgs) {
        return invokeFunc(time);
      }
      lastArgs = lastThis = undefined;
      return result;
    }
  
    function cancel() {
      if (timerId !== undefined) {
        clearTimeout(timerId);
      }
      lastInvokeTime = 0;
      lastArgs = lastCallTime = lastThis = timerId = undefined;
    }
  
    function flush() {
      return timerId === undefined ? result : trailingEdge(now());
    }
  
    function debounced() {
      var time = now(),
          isInvoking = shouldInvoke(time);
  
      lastArgs = arguments;
      lastThis = this;
      lastCallTime = time;
  
      if (isInvoking) {
        if (timerId === undefined) {
          return leadingEdge(lastCallTime);
        }
        if (maxing) {
          // Handle invocations in a tight loop.
          timerId = setTimeout(timerExpired, wait);
          return invokeFunc(lastCallTime);
        }
      }
      if (timerId === undefined) {
        timerId = setTimeout(timerExpired, wait);
      }
      return result;
    }
    debounced.cancel = cancel;
    debounced.flush = flush;
    return debounced;
  }
  
  /**
   * Creates a throttled function that only invokes `func` at most once per
   * every `wait` milliseconds. The throttled function comes with a `cancel`
   * method to cancel delayed `func` invocations and a `flush` method to
   * immediately invoke them. Provide `options` to indicate whether `func`
   * should be invoked on the leading and/or trailing edge of the `wait`
   * timeout. The `func` is invoked with the last arguments provided to the
   * throttled function. Subsequent calls to the throttled function return the
   * result of the last `func` invocation.
   *
   * **Note:** If `leading` and `trailing` options are `true`, `func` is
   * invoked on the trailing edge of the timeout only if the throttled function
   * is invoked more than once during the `wait` timeout.
   *
   * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
   * until to the next tick, similar to `setTimeout` with a timeout of `0`.
   *
   * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
   * for details over the differences between `_.throttle` and `_.debounce`.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Function
   * @param {Function} func The function to throttle.
   * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
   * @param {Object} [options={}] The options object.
   * @param {boolean} [options.leading=true]
   *  Specify invoking on the leading edge of the timeout.
   * @param {boolean} [options.trailing=true]
   *  Specify invoking on the trailing edge of the timeout.
   * @returns {Function} Returns the new throttled function.
   * @example
   *
   * // Avoid excessively updating the position while scrolling.
   * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
   *
   * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
   * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
   * jQuery(element).on('click', throttled);
   *
   * // Cancel the trailing throttled invocation.
   * jQuery(window).on('popstate', throttled.cancel);
   */
  function throttle(func, wait, options) {
    var leading = true,
        trailing = true;
  
    if (typeof func != 'function') {
      throw new TypeError(FUNC_ERROR_TEXT);
    }
    if (isObject(options)) {
      leading = 'leading' in options ? !!options.leading : leading;
      trailing = 'trailing' in options ? !!options.trailing : trailing;
    }
    return debounce(func, wait, {
      'leading': leading,
      'maxWait': wait,
      'trailing': trailing
    });
  }
  
  /**
   * Checks if `value` is the
   * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
   * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is an object, else `false`.
   * @example
   *
   * _.isObject({});
   * // => true
   *
   * _.isObject([1, 2, 3]);
   * // => true
   *
   * _.isObject(_.noop);
   * // => true
   *
   * _.isObject(null);
   * // => false
   */
  function isObject(value) {
    var type = typeof value;
    return !!value && (type == 'object' || type == 'function');
  }
  
  /**
   * Checks if `value` is object-like. A value is object-like if it's not `null`
   * and has a `typeof` result of "object".
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
   * @example
   *
   * _.isObjectLike({});
   * // => true
   *
   * _.isObjectLike([1, 2, 3]);
   * // => true
   *
   * _.isObjectLike(_.noop);
   * // => false
   *
   * _.isObjectLike(null);
   * // => false
   */
  function isObjectLike(value) {
    return !!value && typeof value == 'object';
  }
  
  /**
   * Checks if `value` is classified as a `Symbol` primitive or object.
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
   * @example
   *
   * _.isSymbol(Symbol.iterator);
   * // => true
   *
   * _.isSymbol('abc');
   * // => false
   */
  function isSymbol(value) {
    return typeof value == 'symbol' ||
      (isObjectLike(value) && objectToString.call(value) == symbolTag);
  }
  
  /**
   * Converts `value` to a number.
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to process.
   * @returns {number} Returns the number.
   * @example
   *
   * _.toNumber(3.2);
   * // => 3.2
   *
   * _.toNumber(Number.MIN_VALUE);
   * // => 5e-324
   *
   * _.toNumber(Infinity);
   * // => Infinity
   *
   * _.toNumber('3.2');
   * // => 3.2
   */
  function toNumber(value) {
    if (typeof value == 'number') {
      return value;
    }
    if (isSymbol(value)) {
      return NAN;
    }
    if (isObject(value)) {
      var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
      value = isObject(other) ? (other + '') : other;
    }
    if (typeof value != 'string') {
      return value === 0 ? value : +value;
    }
    value = value.replace(reTrim, '');
    var isBinary = reIsBinary.test(value);
    return (isBinary || reIsOctal.test(value))
      ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
      : (reIsBadHex.test(value) ? NAN : +value);
  }
  
  module.exports = throttle;
  
  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
  
  /***/ }),
  
  /***/ "./node_modules/mime-match/index.js":
  /*!******************************************!*\
    !*** ./node_modules/mime-match/index.js ***!
    \******************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  var wildcard = __webpack_require__(/*! wildcard */ "./node_modules/wildcard/index.js");
  var reMimePartSplit = /[\/\+\.]/;
  
  /**
    # mime-match
  
    A simple function to checker whether a target mime type matches a mime-type
    pattern (e.g. image/jpeg matches image/jpeg OR image/*).
  
    ## Example Usage
  
    <<< example.js
  
  **/
  module.exports = function(target, pattern) {
    function test(pattern) {
      var result = wildcard(pattern, target, reMimePartSplit);
  
      // ensure that we have a valid mime type (should have two parts)
      return result && result.length >= 2;
    }
  
    return pattern ? test(pattern.split(';')[0]) : test;
  };
  
  
  /***/ }),
  
  /***/ "./node_modules/namespace-emitter/index.js":
  /*!*************************************************!*\
    !*** ./node_modules/namespace-emitter/index.js ***!
    \*************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  /**
  * Create an event emitter with namespaces
  * @name createNamespaceEmitter
  * @example
  * var emitter = require('./index')()
  *
  * emitter.on('*', function () {
  *   console.log('all events emitted', this.event)
  * })
  *
  * emitter.on('example', function () {
  *   console.log('example event emitted')
  * })
  */
  module.exports = function createNamespaceEmitter () {
    var emitter = {}
    var _fns = emitter._fns = {}
  
    /**
    * Emit an event. Optionally namespace the event. Handlers are fired in the order in which they were added with exact matches taking precedence. Separate the namespace and event with a `:`
    * @name emit
    * @param {String} event – the name of the event, with optional namespace
    * @param {...*} data – up to 6 arguments that are passed to the event listener
    * @example
    * emitter.emit('example')
    * emitter.emit('demo:test')
    * emitter.emit('data', { example: true}, 'a string', 1)
    */
    emitter.emit = function emit (event, arg1, arg2, arg3, arg4, arg5, arg6) {
      var toEmit = getListeners(event)
  
      if (toEmit.length) {
        emitAll(event, toEmit, [arg1, arg2, arg3, arg4, arg5, arg6])
      }
    }
  
    /**
    * Create en event listener.
    * @name on
    * @param {String} event
    * @param {Function} fn
    * @example
    * emitter.on('example', function () {})
    * emitter.on('demo', function () {})
    */
    emitter.on = function on (event, fn) {
      if (!_fns[event]) {
        _fns[event] = []
      }
  
      _fns[event].push(fn)
    }
  
    /**
    * Create en event listener that fires once.
    * @name once
    * @param {String} event
    * @param {Function} fn
    * @example
    * emitter.once('example', function () {})
    * emitter.once('demo', function () {})
    */
    emitter.once = function once (event, fn) {
      function one () {
        fn.apply(this, arguments)
        emitter.off(event, one)
      }
      this.on(event, one)
    }
  
    /**
    * Stop listening to an event. Stop all listeners on an event by only passing the event name. Stop a single listener by passing that event handler as a callback.
    * You must be explicit about what will be unsubscribed: `emitter.off('demo')` will unsubscribe an `emitter.on('demo')` listener,
    * `emitter.off('demo:example')` will unsubscribe an `emitter.on('demo:example')` listener
    * @name off
    * @param {String} event
    * @param {Function} [fn] – the specific handler
    * @example
    * emitter.off('example')
    * emitter.off('demo', function () {})
    */
    emitter.off = function off (event, fn) {
      var keep = []
  
      if (event && fn) {
        var fns = this._fns[event]
        var i = 0
        var l = fns ? fns.length : 0
  
        for (i; i < l; i++) {
          if (fns[i] !== fn) {
            keep.push(fns[i])
          }
        }
      }
  
      keep.length ? this._fns[event] = keep : delete this._fns[event]
    }
  
    function getListeners (e) {
      var out = _fns[e] ? _fns[e] : []
      var idx = e.indexOf(':')
      var args = (idx === -1) ? [e] : [e.substring(0, idx), e.substring(idx + 1)]
  
      var keys = Object.keys(_fns)
      var i = 0
      var l = keys.length
  
      for (i; i < l; i++) {
        var key = keys[i]
        if (key === '*') {
          out = out.concat(_fns[key])
        }
  
        if (args.length === 2 && args[0] === key) {
          out = out.concat(_fns[key])
          break
        }
      }
  
      return out
    }
  
    function emitAll (e, fns, args) {
      var i = 0
      var l = fns.length
  
      for (i; i < l; i++) {
        if (!fns[i]) break
        fns[i].event = e
        fns[i].apply(fns[i], args)
      }
    }
  
    return emitter
  }
  
  
  /***/ }),
  
  /***/ "./node_modules/preact/dist/preact.esm.js":
  /*!************************************************!*\
    !*** ./node_modules/preact/dist/preact.esm.js ***!
    \************************************************/
  /*! exports provided: default, h, createElement, cloneElement, Component, render, rerender, options */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  __webpack_require__.r(__webpack_exports__);
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return h; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return h; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneElement", function() { return cloneElement; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return Component; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rerender", function() { return rerender; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "options", function() { return options; });
  /** Virtual DOM Node */
  function VNode() {}
  
  /** Global options
   *	@public
   *	@namespace options {Object}
   */
  var options = {
  
  	/** If `true`, `prop` changes trigger synchronous component updates.
    *	@name syncComponentUpdates
    *	@type Boolean
    *	@default true
    */
  	//syncComponentUpdates: true,
  
  	/** Processes all created VNodes.
    *	@param {VNode} vnode	A newly-created VNode to normalize/process
    */
  	//vnode(vnode) { }
  
  	/** Hook invoked after a component is mounted. */
  	// afterMount(component) { }
  
  	/** Hook invoked after the DOM is updated with a component's latest render. */
  	// afterUpdate(component) { }
  
  	/** Hook invoked immediately before a component is unmounted. */
  	// beforeUnmount(component) { }
  };
  
  var stack = [];
  
  var EMPTY_CHILDREN = [];
  
  /**
   * JSX/hyperscript reviver.
   * @see http://jasonformat.com/wtf-is-jsx
   * Benchmarks: https://esbench.com/bench/57ee8f8e330ab09900a1a1a0
   *
   * Note: this is exported as both `h()` and `createElement()` for compatibility reasons.
   *
   * Creates a VNode (virtual DOM element). A tree of VNodes can be used as a lightweight representation
   * of the structure of a DOM tree. This structure can be realized by recursively comparing it against
   * the current _actual_ DOM structure, and applying only the differences.
   *
   * `h()`/`createElement()` accepts an element name, a list of attributes/props,
   * and optionally children to append to the element.
   *
   * @example The following DOM tree
   *
   * `<div id="foo" name="bar">Hello!</div>`
   *
   * can be constructed using this function as:
   *
   * `h('div', { id: 'foo', name : 'bar' }, 'Hello!');`
   *
   * @param {string} nodeName	An element name. Ex: `div`, `a`, `span`, etc.
   * @param {Object} attributes	Any attributes/props to set on the created element.
   * @param rest			Additional arguments are taken to be children to append. Can be infinitely nested Arrays.
   *
   * @public
   */
  function h(nodeName, attributes) {
  	var children = EMPTY_CHILDREN,
  	    lastSimple,
  	    child,
  	    simple,
  	    i;
  	for (i = arguments.length; i-- > 2;) {
  		stack.push(arguments[i]);
  	}
  	if (attributes && attributes.children != null) {
  		if (!stack.length) stack.push(attributes.children);
  		delete attributes.children;
  	}
  	while (stack.length) {
  		if ((child = stack.pop()) && child.pop !== undefined) {
  			for (i = child.length; i--;) {
  				stack.push(child[i]);
  			}
  		} else {
  			if (typeof child === 'boolean') child = null;
  
  			if (simple = typeof nodeName !== 'function') {
  				if (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;
  			}
  
  			if (simple && lastSimple) {
  				children[children.length - 1] += child;
  			} else if (children === EMPTY_CHILDREN) {
  				children = [child];
  			} else {
  				children.push(child);
  			}
  
  			lastSimple = simple;
  		}
  	}
  
  	var p = new VNode();
  	p.nodeName = nodeName;
  	p.children = children;
  	p.attributes = attributes == null ? undefined : attributes;
  	p.key = attributes == null ? undefined : attributes.key;
  
  	// if a "vnode hook" is defined, pass every created VNode to it
  	if (options.vnode !== undefined) options.vnode(p);
  
  	return p;
  }
  
  /**
   *  Copy all properties from `props` onto `obj`.
   *  @param {Object} obj		Object onto which properties should be copied.
   *  @param {Object} props	Object from which to copy properties.
   *  @returns obj
   *  @private
   */
  function extend(obj, props) {
    for (var i in props) {
      obj[i] = props[i];
    }return obj;
  }
  
  /**
   * Call a function asynchronously, as soon as possible. Makes
   * use of HTML Promise to schedule the callback if available,
   * otherwise falling back to `setTimeout` (mainly for IE<11).
   *
   * @param {Function} callback
   */
  var defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;
  
  /**
   * Clones the given VNode, optionally adding attributes/props and replacing its children.
   * @param {VNode} vnode		The virtual DOM element to clone
   * @param {Object} props	Attributes/props to add when cloning
   * @param {VNode} rest		Any additional arguments will be used as replacement children.
   */
  function cloneElement(vnode, props) {
    return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);
  }
  
  // DOM properties that should NOT have "px" added when numeric
  var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
  
  /** Managed queue of dirty components to be re-rendered */
  
  var items = [];
  
  function enqueueRender(component) {
  	if (!component._dirty && (component._dirty = true) && items.push(component) == 1) {
  		(options.debounceRendering || defer)(rerender);
  	}
  }
  
  function rerender() {
  	var p,
  	    list = items;
  	items = [];
  	while (p = list.pop()) {
  		if (p._dirty) renderComponent(p);
  	}
  }
  
  /**
   * Check if two nodes are equivalent.
   *
   * @param {Node} node			DOM Node to compare
   * @param {VNode} vnode			Virtual DOM node to compare
   * @param {boolean} [hydrating=false]	If true, ignores component constructors when comparing.
   * @private
   */
  function isSameNodeType(node, vnode, hydrating) {
    if (typeof vnode === 'string' || typeof vnode === 'number') {
      return node.splitText !== undefined;
    }
    if (typeof vnode.nodeName === 'string') {
      return !node._componentConstructor && isNamedNode(node, vnode.nodeName);
    }
    return hydrating || node._componentConstructor === vnode.nodeName;
  }
  
  /**
   * Check if an Element has a given nodeName, case-insensitively.
   *
   * @param {Element} node	A DOM Element to inspect the name of.
   * @param {String} nodeName	Unnormalized name to compare against.
   */
  function isNamedNode(node, nodeName) {
    return node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();
  }
  
  /**
   * Reconstruct Component-style `props` from a VNode.
   * Ensures default/fallback values from `defaultProps`:
   * Own-properties of `defaultProps` not present in `vnode.attributes` are added.
   *
   * @param {VNode} vnode
   * @returns {Object} props
   */
  function getNodeProps(vnode) {
    var props = extend({}, vnode.attributes);
    props.children = vnode.children;
  
    var defaultProps = vnode.nodeName.defaultProps;
    if (defaultProps !== undefined) {
      for (var i in defaultProps) {
        if (props[i] === undefined) {
          props[i] = defaultProps[i];
        }
      }
    }
  
    return props;
  }
  
  /** Create an element with the given nodeName.
   *	@param {String} nodeName
   *	@param {Boolean} [isSvg=false]	If `true`, creates an element within the SVG namespace.
   *	@returns {Element} node
   */
  function createNode(nodeName, isSvg) {
  	var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);
  	node.normalizedNodeName = nodeName;
  	return node;
  }
  
  /** Remove a child node from its parent if attached.
   *	@param {Element} node		The node to remove
   */
  function removeNode(node) {
  	var parentNode = node.parentNode;
  	if (parentNode) parentNode.removeChild(node);
  }
  
  /** Set a named attribute on the given Node, with special behavior for some names and event handlers.
   *	If `value` is `null`, the attribute/handler will be removed.
   *	@param {Element} node	An element to mutate
   *	@param {string} name	The name/key to set, such as an event or attribute name
   *	@param {any} old	The last value that was set for this name/node pair
   *	@param {any} value	An attribute value, such as a function to be used as an event handler
   *	@param {Boolean} isSvg	Are we currently diffing inside an svg?
   *	@private
   */
  function setAccessor(node, name, old, value, isSvg) {
  	if (name === 'className') name = 'class';
  
  	if (name === 'key') {
  		// ignore
  	} else if (name === 'ref') {
  		if (old) old(null);
  		if (value) value(node);
  	} else if (name === 'class' && !isSvg) {
  		node.className = value || '';
  	} else if (name === 'style') {
  		if (!value || typeof value === 'string' || typeof old === 'string') {
  			node.style.cssText = value || '';
  		}
  		if (value && typeof value === 'object') {
  			if (typeof old !== 'string') {
  				for (var i in old) {
  					if (!(i in value)) node.style[i] = '';
  				}
  			}
  			for (var i in value) {
  				node.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];
  			}
  		}
  	} else if (name === 'dangerouslySetInnerHTML') {
  		if (value) node.innerHTML = value.__html || '';
  	} else if (name[0] == 'o' && name[1] == 'n') {
  		var useCapture = name !== (name = name.replace(/Capture$/, ''));
  		name = name.toLowerCase().substring(2);
  		if (value) {
  			if (!old) node.addEventListener(name, eventProxy, useCapture);
  		} else {
  			node.removeEventListener(name, eventProxy, useCapture);
  		}
  		(node._listeners || (node._listeners = {}))[name] = value;
  	} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {
  		setProperty(node, name, value == null ? '' : value);
  		if (value == null || value === false) node.removeAttribute(name);
  	} else {
  		var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));
  		if (value == null || value === false) {
  			if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);
  		} else if (typeof value !== 'function') {
  			if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);
  		}
  	}
  }
  
  /** Attempt to set a DOM property to the given value.
   *	IE & FF throw for certain property-value combinations.
   */
  function setProperty(node, name, value) {
  	try {
  		node[name] = value;
  	} catch (e) {}
  }
  
  /** Proxy an event to hooked event handlers
   *	@private
   */
  function eventProxy(e) {
  	return this._listeners[e.type](options.event && options.event(e) || e);
  }
  
  /** Queue of components that have been mounted and are awaiting componentDidMount */
  var mounts = [];
  
  /** Diff recursion count, used to track the end of the diff cycle. */
  var diffLevel = 0;
  
  /** Global flag indicating if the diff is currently within an SVG */
  var isSvgMode = false;
  
  /** Global flag indicating if the diff is performing hydration */
  var hydrating = false;
  
  /** Invoke queued componentDidMount lifecycle methods */
  function flushMounts() {
  	var c;
  	while (c = mounts.pop()) {
  		if (options.afterMount) options.afterMount(c);
  		if (c.componentDidMount) c.componentDidMount();
  	}
  }
  
  /** Apply differences in a given vnode (and it's deep children) to a real DOM Node.
   *	@param {Element} [dom=null]		A DOM node to mutate into the shape of the `vnode`
   *	@param {VNode} vnode			A VNode (with descendants forming a tree) representing the desired DOM structure
   *	@returns {Element} dom			The created/mutated element
   *	@private
   */
  function diff(dom, vnode, context, mountAll, parent, componentRoot) {
  	// diffLevel having been 0 here indicates initial entry into the diff (not a subdiff)
  	if (!diffLevel++) {
  		// when first starting the diff, check if we're diffing an SVG or within an SVG
  		isSvgMode = parent != null && parent.ownerSVGElement !== undefined;
  
  		// hydration is indicated by the existing element to be diffed not having a prop cache
  		hydrating = dom != null && !('__preactattr_' in dom);
  	}
  
  	var ret = idiff(dom, vnode, context, mountAll, componentRoot);
  
  	// append the element if its a new parent
  	if (parent && ret.parentNode !== parent) parent.appendChild(ret);
  
  	// diffLevel being reduced to 0 means we're exiting the diff
  	if (! --diffLevel) {
  		hydrating = false;
  		// invoke queued componentDidMount lifecycle methods
  		if (!componentRoot) flushMounts();
  	}
  
  	return ret;
  }
  
  /** Internals of `diff()`, separated to allow bypassing diffLevel / mount flushing. */
  function idiff(dom, vnode, context, mountAll, componentRoot) {
  	var out = dom,
  	    prevSvgMode = isSvgMode;
  
  	// empty values (null, undefined, booleans) render as empty Text nodes
  	if (vnode == null || typeof vnode === 'boolean') vnode = '';
  
  	// Fast case: Strings & Numbers create/update Text nodes.
  	if (typeof vnode === 'string' || typeof vnode === 'number') {
  
  		// update if it's already a Text node:
  		if (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {
  			/* istanbul ignore if */ /* Browser quirk that can't be covered: https://github.com/developit/preact/commit/fd4f21f5c45dfd75151bd27b4c217d8003aa5eb9 */
  			if (dom.nodeValue != vnode) {
  				dom.nodeValue = vnode;
  			}
  		} else {
  			// it wasn't a Text node: replace it with one and recycle the old Element
  			out = document.createTextNode(vnode);
  			if (dom) {
  				if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
  				recollectNodeTree(dom, true);
  			}
  		}
  
  		out['__preactattr_'] = true;
  
  		return out;
  	}
  
  	// If the VNode represents a Component, perform a component diff:
  	var vnodeName = vnode.nodeName;
  	if (typeof vnodeName === 'function') {
  		return buildComponentFromVNode(dom, vnode, context, mountAll);
  	}
  
  	// Tracks entering and exiting SVG namespace when descending through the tree.
  	isSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;
  
  	// If there's no existing element or it's the wrong type, create a new one:
  	vnodeName = String(vnodeName);
  	if (!dom || !isNamedNode(dom, vnodeName)) {
  		out = createNode(vnodeName, isSvgMode);
  
  		if (dom) {
  			// move children into the replacement node
  			while (dom.firstChild) {
  				out.appendChild(dom.firstChild);
  			} // if the previous Element was mounted into the DOM, replace it inline
  			if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
  
  			// recycle the old element (skips non-Element node types)
  			recollectNodeTree(dom, true);
  		}
  	}
  
  	var fc = out.firstChild,
  	    props = out['__preactattr_'],
  	    vchildren = vnode.children;
  
  	if (props == null) {
  		props = out['__preactattr_'] = {};
  		for (var a = out.attributes, i = a.length; i--;) {
  			props[a[i].name] = a[i].value;
  		}
  	}
  
  	// Optimization: fast-path for elements containing a single TextNode:
  	if (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {
  		if (fc.nodeValue != vchildren[0]) {
  			fc.nodeValue = vchildren[0];
  		}
  	}
  	// otherwise, if there are existing or new children, diff them:
  	else if (vchildren && vchildren.length || fc != null) {
  			innerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);
  		}
  
  	// Apply attributes/props from VNode to the DOM Element:
  	diffAttributes(out, vnode.attributes, props);
  
  	// restore previous SVG mode: (in case we're exiting an SVG namespace)
  	isSvgMode = prevSvgMode;
  
  	return out;
  }
  
  /** Apply child and attribute changes between a VNode and a DOM Node to the DOM.
   *	@param {Element} dom			Element whose children should be compared & mutated
   *	@param {Array} vchildren		Array of VNodes to compare to `dom.childNodes`
   *	@param {Object} context			Implicitly descendant context object (from most recent `getChildContext()`)
   *	@param {Boolean} mountAll
   *	@param {Boolean} isHydrating	If `true`, consumes externally created elements similar to hydration
   */
  function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {
  	var originalChildren = dom.childNodes,
  	    children = [],
  	    keyed = {},
  	    keyedLen = 0,
  	    min = 0,
  	    len = originalChildren.length,
  	    childrenLen = 0,
  	    vlen = vchildren ? vchildren.length : 0,
  	    j,
  	    c,
  	    f,
  	    vchild,
  	    child;
  
  	// Build up a map of keyed children and an Array of unkeyed children:
  	if (len !== 0) {
  		for (var i = 0; i < len; i++) {
  			var _child = originalChildren[i],
  			    props = _child['__preactattr_'],
  			    key = vlen && props ? _child._component ? _child._component.__key : props.key : null;
  			if (key != null) {
  				keyedLen++;
  				keyed[key] = _child;
  			} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {
  				children[childrenLen++] = _child;
  			}
  		}
  	}
  
  	if (vlen !== 0) {
  		for (var i = 0; i < vlen; i++) {
  			vchild = vchildren[i];
  			child = null;
  
  			// attempt to find a node based on key matching
  			var key = vchild.key;
  			if (key != null) {
  				if (keyedLen && keyed[key] !== undefined) {
  					child = keyed[key];
  					keyed[key] = undefined;
  					keyedLen--;
  				}
  			}
  			// attempt to pluck a node of the same type from the existing children
  			else if (!child && min < childrenLen) {
  					for (j = min; j < childrenLen; j++) {
  						if (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {
  							child = c;
  							children[j] = undefined;
  							if (j === childrenLen - 1) childrenLen--;
  							if (j === min) min++;
  							break;
  						}
  					}
  				}
  
  			// morph the matched/found/created DOM child to match vchild (deep)
  			child = idiff(child, vchild, context, mountAll);
  
  			f = originalChildren[i];
  			if (child && child !== dom && child !== f) {
  				if (f == null) {
  					dom.appendChild(child);
  				} else if (child === f.nextSibling) {
  					removeNode(f);
  				} else {
  					dom.insertBefore(child, f);
  				}
  			}
  		}
  	}
  
  	// remove unused keyed children:
  	if (keyedLen) {
  		for (var i in keyed) {
  			if (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);
  		}
  	}
  
  	// remove orphaned unkeyed children:
  	while (min <= childrenLen) {
  		if ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);
  	}
  }
  
  /** Recursively recycle (or just unmount) a node and its descendants.
   *	@param {Node} node						DOM node to start unmount/removal from
   *	@param {Boolean} [unmountOnly=false]	If `true`, only triggers unmount lifecycle, skips removal
   */
  function recollectNodeTree(node, unmountOnly) {
  	var component = node._component;
  	if (component) {
  		// if node is owned by a Component, unmount that component (ends up recursing back here)
  		unmountComponent(component);
  	} else {
  		// If the node's VNode had a ref function, invoke it with null here.
  		// (this is part of the React spec, and smart for unsetting references)
  		if (node['__preactattr_'] != null && node['__preactattr_'].ref) node['__preactattr_'].ref(null);
  
  		if (unmountOnly === false || node['__preactattr_'] == null) {
  			removeNode(node);
  		}
  
  		removeChildren(node);
  	}
  }
  
  /** Recollect/unmount all children.
   *	- we use .lastChild here because it causes less reflow than .firstChild
   *	- it's also cheaper than accessing the .childNodes Live NodeList
   */
  function removeChildren(node) {
  	node = node.lastChild;
  	while (node) {
  		var next = node.previousSibling;
  		recollectNodeTree(node, true);
  		node = next;
  	}
  }
  
  /** Apply differences in attributes from a VNode to the given DOM Element.
   *	@param {Element} dom		Element with attributes to diff `attrs` against
   *	@param {Object} attrs		The desired end-state key-value attribute pairs
   *	@param {Object} old			Current/previous attributes (from previous VNode or element's prop cache)
   */
  function diffAttributes(dom, attrs, old) {
  	var name;
  
  	// remove attributes no longer present on the vnode by setting them to undefined
  	for (name in old) {
  		if (!(attrs && attrs[name] != null) && old[name] != null) {
  			setAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);
  		}
  	}
  
  	// add new & update changed attributes
  	for (name in attrs) {
  		if (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {
  			setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);
  		}
  	}
  }
  
  /** Retains a pool of Components for re-use, keyed on component name.
   *	Note: since component names are not unique or even necessarily available, these are primarily a form of sharding.
   *	@private
   */
  var components = {};
  
  /** Reclaim a component for later re-use by the recycler. */
  function collectComponent(component) {
  	var name = component.constructor.name;
  	(components[name] || (components[name] = [])).push(component);
  }
  
  /** Create a component. Normalizes differences between PFC's and classful Components. */
  function createComponent(Ctor, props, context) {
  	var list = components[Ctor.name],
  	    inst;
  
  	if (Ctor.prototype && Ctor.prototype.render) {
  		inst = new Ctor(props, context);
  		Component.call(inst, props, context);
  	} else {
  		inst = new Component(props, context);
  		inst.constructor = Ctor;
  		inst.render = doRender;
  	}
  
  	if (list) {
  		for (var i = list.length; i--;) {
  			if (list[i].constructor === Ctor) {
  				inst.nextBase = list[i].nextBase;
  				list.splice(i, 1);
  				break;
  			}
  		}
  	}
  	return inst;
  }
  
  /** The `.render()` method for a PFC backing instance. */
  function doRender(props, state, context) {
  	return this.constructor(props, context);
  }
  
  /** Set a component's `props` (generally derived from JSX attributes).
   *	@param {Object} props
   *	@param {Object} [opts]
   *	@param {boolean} [opts.renderSync=false]	If `true` and {@link options.syncComponentUpdates} is `true`, triggers synchronous rendering.
   *	@param {boolean} [opts.render=true]			If `false`, no render will be triggered.
   */
  function setComponentProps(component, props, opts, context, mountAll) {
  	if (component._disable) return;
  	component._disable = true;
  
  	if (component.__ref = props.ref) delete props.ref;
  	if (component.__key = props.key) delete props.key;
  
  	if (!component.base || mountAll) {
  		if (component.componentWillMount) component.componentWillMount();
  	} else if (component.componentWillReceiveProps) {
  		component.componentWillReceiveProps(props, context);
  	}
  
  	if (context && context !== component.context) {
  		if (!component.prevContext) component.prevContext = component.context;
  		component.context = context;
  	}
  
  	if (!component.prevProps) component.prevProps = component.props;
  	component.props = props;
  
  	component._disable = false;
  
  	if (opts !== 0) {
  		if (opts === 1 || options.syncComponentUpdates !== false || !component.base) {
  			renderComponent(component, 1, mountAll);
  		} else {
  			enqueueRender(component);
  		}
  	}
  
  	if (component.__ref) component.__ref(component);
  }
  
  /** Render a Component, triggering necessary lifecycle events and taking High-Order Components into account.
   *	@param {Component} component
   *	@param {Object} [opts]
   *	@param {boolean} [opts.build=false]		If `true`, component will build and store a DOM node if not already associated with one.
   *	@private
   */
  function renderComponent(component, opts, mountAll, isChild) {
  	if (component._disable) return;
  
  	var props = component.props,
  	    state = component.state,
  	    context = component.context,
  	    previousProps = component.prevProps || props,
  	    previousState = component.prevState || state,
  	    previousContext = component.prevContext || context,
  	    isUpdate = component.base,
  	    nextBase = component.nextBase,
  	    initialBase = isUpdate || nextBase,
  	    initialChildComponent = component._component,
  	    skip = false,
  	    rendered,
  	    inst,
  	    cbase;
  
  	// if updating
  	if (isUpdate) {
  		component.props = previousProps;
  		component.state = previousState;
  		component.context = previousContext;
  		if (opts !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {
  			skip = true;
  		} else if (component.componentWillUpdate) {
  			component.componentWillUpdate(props, state, context);
  		}
  		component.props = props;
  		component.state = state;
  		component.context = context;
  	}
  
  	component.prevProps = component.prevState = component.prevContext = component.nextBase = null;
  	component._dirty = false;
  
  	if (!skip) {
  		rendered = component.render(props, state, context);
  
  		// context to pass to the child, can be updated via (grand-)parent component
  		if (component.getChildContext) {
  			context = extend(extend({}, context), component.getChildContext());
  		}
  
  		var childComponent = rendered && rendered.nodeName,
  		    toUnmount,
  		    base;
  
  		if (typeof childComponent === 'function') {
  			// set up high order component link
  
  			var childProps = getNodeProps(rendered);
  			inst = initialChildComponent;
  
  			if (inst && inst.constructor === childComponent && childProps.key == inst.__key) {
  				setComponentProps(inst, childProps, 1, context, false);
  			} else {
  				toUnmount = inst;
  
  				component._component = inst = createComponent(childComponent, childProps, context);
  				inst.nextBase = inst.nextBase || nextBase;
  				inst._parentComponent = component;
  				setComponentProps(inst, childProps, 0, context, false);
  				renderComponent(inst, 1, mountAll, true);
  			}
  
  			base = inst.base;
  		} else {
  			cbase = initialBase;
  
  			// destroy high order component link
  			toUnmount = initialChildComponent;
  			if (toUnmount) {
  				cbase = component._component = null;
  			}
  
  			if (initialBase || opts === 1) {
  				if (cbase) cbase._component = null;
  				base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);
  			}
  		}
  
  		if (initialBase && base !== initialBase && inst !== initialChildComponent) {
  			var baseParent = initialBase.parentNode;
  			if (baseParent && base !== baseParent) {
  				baseParent.replaceChild(base, initialBase);
  
  				if (!toUnmount) {
  					initialBase._component = null;
  					recollectNodeTree(initialBase, false);
  				}
  			}
  		}
  
  		if (toUnmount) {
  			unmountComponent(toUnmount);
  		}
  
  		component.base = base;
  		if (base && !isChild) {
  			var componentRef = component,
  			    t = component;
  			while (t = t._parentComponent) {
  				(componentRef = t).base = base;
  			}
  			base._component = componentRef;
  			base._componentConstructor = componentRef.constructor;
  		}
  	}
  
  	if (!isUpdate || mountAll) {
  		mounts.unshift(component);
  	} else if (!skip) {
  		// Ensure that pending componentDidMount() hooks of child components
  		// are called before the componentDidUpdate() hook in the parent.
  		// Note: disabled as it causes duplicate hooks, see https://github.com/developit/preact/issues/750
  		// flushMounts();
  
  		if (component.componentDidUpdate) {
  			component.componentDidUpdate(previousProps, previousState, previousContext);
  		}
  		if (options.afterUpdate) options.afterUpdate(component);
  	}
  
  	if (component._renderCallbacks != null) {
  		while (component._renderCallbacks.length) {
  			component._renderCallbacks.pop().call(component);
  		}
  	}
  
  	if (!diffLevel && !isChild) flushMounts();
  }
  
  /** Apply the Component referenced by a VNode to the DOM.
   *	@param {Element} dom	The DOM node to mutate
   *	@param {VNode} vnode	A Component-referencing VNode
   *	@returns {Element} dom	The created/mutated element
   *	@private
   */
  function buildComponentFromVNode(dom, vnode, context, mountAll) {
  	var c = dom && dom._component,
  	    originalComponent = c,
  	    oldDom = dom,
  	    isDirectOwner = c && dom._componentConstructor === vnode.nodeName,
  	    isOwner = isDirectOwner,
  	    props = getNodeProps(vnode);
  	while (c && !isOwner && (c = c._parentComponent)) {
  		isOwner = c.constructor === vnode.nodeName;
  	}
  
  	if (c && isOwner && (!mountAll || c._component)) {
  		setComponentProps(c, props, 3, context, mountAll);
  		dom = c.base;
  	} else {
  		if (originalComponent && !isDirectOwner) {
  			unmountComponent(originalComponent);
  			dom = oldDom = null;
  		}
  
  		c = createComponent(vnode.nodeName, props, context);
  		if (dom && !c.nextBase) {
  			c.nextBase = dom;
  			// passing dom/oldDom as nextBase will recycle it if unused, so bypass recycling on L229:
  			oldDom = null;
  		}
  		setComponentProps(c, props, 1, context, mountAll);
  		dom = c.base;
  
  		if (oldDom && dom !== oldDom) {
  			oldDom._component = null;
  			recollectNodeTree(oldDom, false);
  		}
  	}
  
  	return dom;
  }
  
  /** Remove a component from the DOM and recycle it.
   *	@param {Component} component	The Component instance to unmount
   *	@private
   */
  function unmountComponent(component) {
  	if (options.beforeUnmount) options.beforeUnmount(component);
  
  	var base = component.base;
  
  	component._disable = true;
  
  	if (component.componentWillUnmount) component.componentWillUnmount();
  
  	component.base = null;
  
  	// recursively tear down & recollect high-order component children:
  	var inner = component._component;
  	if (inner) {
  		unmountComponent(inner);
  	} else if (base) {
  		if (base['__preactattr_'] && base['__preactattr_'].ref) base['__preactattr_'].ref(null);
  
  		component.nextBase = base;
  
  		removeNode(base);
  		collectComponent(component);
  
  		removeChildren(base);
  	}
  
  	if (component.__ref) component.__ref(null);
  }
  
  /** Base Component class.
   *	Provides `setState()` and `forceUpdate()`, which trigger rendering.
   *	@public
   *
   *	@example
   *	class MyFoo extends Component {
   *		render(props, state) {
   *			return <div />;
   *		}
   *	}
   */
  function Component(props, context) {
  	this._dirty = true;
  
  	/** @public
    *	@type {object}
    */
  	this.context = context;
  
  	/** @public
    *	@type {object}
    */
  	this.props = props;
  
  	/** @public
    *	@type {object}
    */
  	this.state = this.state || {};
  }
  
  extend(Component.prototype, {
  
  	/** Returns a `boolean` indicating if the component should re-render when receiving the given `props` and `state`.
    *	@param {object} nextProps
    *	@param {object} nextState
    *	@param {object} nextContext
    *	@returns {Boolean} should the component re-render
    *	@name shouldComponentUpdate
    *	@function
    */
  
  	/** Update component state by copying properties from `state` to `this.state`.
    *	@param {object} state		A hash of state properties to update with new values
    *	@param {function} callback	A function to be called once component state is updated
    */
  	setState: function setState(state, callback) {
  		var s = this.state;
  		if (!this.prevState) this.prevState = extend({}, s);
  		extend(s, typeof state === 'function' ? state(s, this.props) : state);
  		if (callback) (this._renderCallbacks = this._renderCallbacks || []).push(callback);
  		enqueueRender(this);
  	},
  
  
  	/** Immediately perform a synchronous re-render of the component.
    *	@param {function} callback		A function to be called after component is re-rendered.
    *	@private
    */
  	forceUpdate: function forceUpdate(callback) {
  		if (callback) (this._renderCallbacks = this._renderCallbacks || []).push(callback);
  		renderComponent(this, 2);
  	},
  
  
  	/** Accepts `props` and `state`, and returns a new Virtual DOM tree to build.
    *	Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).
    *	@param {object} props		Props (eg: JSX attributes) received from parent element/component
    *	@param {object} state		The component's current state
    *	@param {object} context		Context object (if a parent component has provided context)
    *	@returns VNode
    */
  	render: function render() {}
  });
  
  /** Render JSX into a `parent` Element.
   *	@param {VNode} vnode		A (JSX) VNode to render
   *	@param {Element} parent		DOM element to render into
   *	@param {Element} [merge]	Attempt to re-use an existing DOM tree rooted at `merge`
   *	@public
   *
   *	@example
   *	// render a div into <body>:
   *	render(<div id="hello">hello!</div>, document.body);
   *
   *	@example
   *	// render a "Thing" component into #foo:
   *	const Thing = ({ name }) => <span>{ name }</span>;
   *	render(<Thing name="one" />, document.querySelector('#foo'));
   */
  function render(vnode, parent, merge) {
    return diff(merge, vnode, {}, false, parent, false);
  }
  
  var preact = {
  	h: h,
  	createElement: h,
  	cloneElement: cloneElement,
  	Component: Component,
  	render: render,
  	rerender: rerender,
  	options: options
  };
  
  /* harmony default export */ __webpack_exports__["default"] = (preact);
  
  //# sourceMappingURL=preact.esm.js.map
  
  
  /***/ }),
  
  /***/ "./node_modules/wildcard/index.js":
  /*!****************************************!*\
    !*** ./node_modules/wildcard/index.js ***!
    \****************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  /* jshint node: true */
  
  
  /**
    # wildcard
  
    Very simple wildcard matching, which is designed to provide the same
    functionality that is found in the
    [eve](https://github.com/adobe-webplatform/eve) eventing library.
  
    ## Usage
  
    It works with strings:
  
    <<< examples/strings.js
  
    Arrays:
  
    <<< examples/arrays.js
  
    Objects (matching against keys):
  
    <<< examples/objects.js
  
    While the library works in Node, if you are are looking for file-based
    wildcard matching then you should have a look at:
  
    <https://github.com/isaacs/node-glob>
  **/
  
  function WildcardMatcher(text, separator) {
    this.text = text = text || '';
    this.hasWild = ~text.indexOf('*');
    this.separator = separator;
    this.parts = text.split(separator);
  }
  
  WildcardMatcher.prototype.match = function(input) {
    var matches = true;
    var parts = this.parts;
    var ii;
    var partsCount = parts.length;
    var testParts;
  
    if (typeof input == 'string' || input instanceof String) {
      if (!this.hasWild && this.text != input) {
        matches = false;
      } else {
        testParts = (input || '').split(this.separator);
        for (ii = 0; matches && ii < partsCount; ii++) {
          if (parts[ii] === '*')  {
            continue;
          } else if (ii < testParts.length) {
            matches = parts[ii] === testParts[ii];
          } else {
            matches = false;
          }
        }
  
        // If matches, then return the component parts
        matches = matches && testParts;
      }
    }
    else if (typeof input.splice == 'function') {
      matches = [];
  
      for (ii = input.length; ii--; ) {
        if (this.match(input[ii])) {
          matches[matches.length] = input[ii];
        }
      }
    }
    else if (typeof input == 'object') {
      matches = {};
  
      for (var key in input) {
        if (this.match(key)) {
          matches[key] = input[key];
        }
      }
    }
  
    return matches;
  };
  
  module.exports = function(text, test, separator) {
    var matcher = new WildcardMatcher(text, separator || /[\/\.]/);
    if (typeof test != 'undefined') {
      return matcher.match(test);
    }
  
    return matcher;
  };
  
  
  /***/ })
  
  }]);