text: /******/ (function(modules) { // webpackBootstrap
  /******/ 	// The module cache
  /******/ 	var installedModules = {};
  /******/
  /******/ 	// The require function
  /******/ 	function __webpack_require__(moduleId) {
  /******/
  /******/ 		// Check if module is in cache
  /******/ 		if(installedModules[moduleId]) {
  /******/ 			return installedModules[moduleId].exports;
  /******/ 		}
  /******/ 		// Create a new module (and put it into the cache)
  /******/ 		var module = installedModules[moduleId] = {
  /******/ 			i: moduleId,
  /******/ 			l: false,
  /******/ 			exports: {}
  /******/ 		};
  /******/
  /******/ 		// Execute the module function
  /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  /******/
  /******/ 		// Flag the module as loaded
  /******/ 		module.l = true;
  /******/
  /******/ 		// Return the exports of the module
  /******/ 		return module.exports;
  /******/ 	}
  /******/
  /******/
  /******/ 	// expose the modules object (__webpack_modules__)
  /******/ 	__webpack_require__.m = modules;
  /******/
  /******/ 	// expose the module cache
  /******/ 	__webpack_require__.c = installedModules;
  /******/
  /******/ 	// define getter function for harmony exports
  /******/ 	__webpack_require__.d = function(exports, name, getter) {
  /******/ 		if(!__webpack_require__.o(exports, name)) {
  /******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
  /******/ 		}
  /******/ 	};
  /******/
  /******/ 	// define __esModule on exports
  /******/ 	__webpack_require__.r = function(exports) {
  /******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  /******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  /******/ 		}
  /******/ 		Object.defineProperty(exports, '__esModule', { value: true });
  /******/ 	};
  /******/
  /******/ 	// create a fake namespace object
  /******/ 	// mode & 1: value is a module id, require it
  /******/ 	// mode & 2: merge all properties of value into the ns
  /******/ 	// mode & 4: return value when already ns object
  /******/ 	// mode & 8|1: behave like require
  /******/ 	__webpack_require__.t = function(value, mode) {
  /******/ 		if(mode & 1) value = __webpack_require__(value);
  /******/ 		if(mode & 8) return value;
  /******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  /******/ 		var ns = Object.create(null);
  /******/ 		__webpack_require__.r(ns);
  /******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  /******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  /******/ 		return ns;
  /******/ 	};
  /******/
  /******/ 	// getDefaultExport function for compatibility with non-harmony modules
  /******/ 	__webpack_require__.n = function(module) {
  /******/ 		var getter = module && module.__esModule ?
  /******/ 			function getDefault() { return module['default']; } :
  /******/ 			function getModuleExports() { return module; };
  /******/ 		__webpack_require__.d(getter, 'a', getter);
  /******/ 		return getter;
  /******/ 	};
  /******/
  /******/ 	// Object.prototype.hasOwnProperty.call
  /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  /******/
  /******/ 	// __webpack_public_path__
  /******/ 	__webpack_require__.p = "";
  /******/
  /******/
  /******/ 	// Load entry module and return exports
  /******/ 	return __webpack_require__(__webpack_require__.s = "./index.js");
  /******/ })
  /************************************************************************/
  /******/ ({
  
  /***/ "./index.js":
  /*!******************!*\
    !*** ./index.js ***!
    \******************/
  /*! no exports provided */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _tsc_out_rocwct__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tsc_out/rocwct */ \"./tsc_out/rocwct.js\");\n/* harmony import */ var _tsc_out_webcomponents_rcp_tester__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tsc_out/webcomponents/rcp-tester */ \"./tsc_out/webcomponents/rcp-tester.js\");\n/* harmony import */ var _tsc_out_webcomponents_loco_function__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tsc_out/webcomponents/loco-function */ \"./tsc_out/webcomponents/loco-function.js\");\n/* harmony import */ var _tsc_out_webcomponents_loco_direction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tsc_out/webcomponents/loco-direction */ \"./tsc_out/webcomponents/loco-direction.js\");\n/* harmony import */ var _tsc_out_webcomponents_loco_throttle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tsc_out/webcomponents/loco-throttle */ \"./tsc_out/webcomponents/loco-throttle.js\");\n/* harmony import */ var _tsc_out_webcomponents_power_switch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tsc_out/webcomponents/power-switch */ \"./tsc_out/webcomponents/power-switch.js\");\n/* harmony import */ var _tsc_out_webcomponents_auto_switch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tsc_out/webcomponents/auto-switch */ \"./tsc_out/webcomponents/auto-switch.js\");\n/* harmony import */ var _tsc_out_webcomponents_loco_stop__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tsc_out/webcomponents/loco-stop */ \"./tsc_out/webcomponents/loco-stop.js\");\n/* harmony import */ var _tsc_out_webcomponents_loco_chooser__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tsc_out/webcomponents/loco-chooser */ \"./tsc_out/webcomponents/loco-chooser.js\");\n/* harmony import */ var _tsc_out_webcomponents_loco_display__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tsc_out/webcomponents/loco-display */ \"./tsc_out/webcomponents/loco-display.js\");\n/* harmony import */ var _tsc_out_webcomponents_loco_auto_switch__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./tsc_out/webcomponents/loco-auto-switch */ \"./tsc_out/webcomponents/loco-auto-switch.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n//# sourceURL=webpack:///./index.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-element/lib/css-tag.js":
  /*!*************************************************!*\
    !*** ./node_modules/lit-element/lib/css-tag.js ***!
    \*************************************************/
  /*! exports provided: supportsAdoptingStyleSheets, CSSResult, unsafeCSS, css */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"supportsAdoptingStyleSheets\", function() { return supportsAdoptingStyleSheets; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CSSResult\", function() { return CSSResult; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unsafeCSS\", function() { return unsafeCSS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"css\", function() { return css; });\n/**\n@license\nCopyright (c) 2019 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nconst supportsAdoptingStyleSheets = ('adoptedStyleSheets' in Document.prototype) &&\n    ('replace' in CSSStyleSheet.prototype);\nconst constructionToken = Symbol();\nclass CSSResult {\n    constructor(cssText, safeToken) {\n        if (safeToken !== constructionToken) {\n            throw new Error('CSSResult is not constructable. Use `unsafeCSS` or `css` instead.');\n        }\n        this.cssText = cssText;\n    }\n    // Note, this is a getter so that it's lazy. In practice, this means\n    // stylesheets are not created until the first element instance is made.\n    get styleSheet() {\n        if (this._styleSheet === undefined) {\n            // Note, if `adoptedStyleSheets` is supported then we assume CSSStyleSheet\n            // is constructable.\n            if (supportsAdoptingStyleSheets) {\n                this._styleSheet = new CSSStyleSheet();\n                this._styleSheet.replaceSync(this.cssText);\n            }\n            else {\n                this._styleSheet = null;\n            }\n        }\n        return this._styleSheet;\n    }\n    toString() {\n        return this.cssText;\n    }\n}\n/**\n * Wrap a value for interpolation in a css tagged template literal.\n *\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n */\nconst unsafeCSS = (value) => {\n    return new CSSResult(String(value), constructionToken);\n};\nconst textFromCSSResult = (value) => {\n    if (value instanceof CSSResult) {\n        return value.cssText;\n    }\n    else {\n        throw new Error(`Value passed to 'css' function must be a 'css' function result: ${value}. Use 'unsafeCSS' to pass non-literal values, but\n            take care to ensure page security.`);\n    }\n};\n/**\n * Template tag which which can be used with LitElement's `style` property to\n * set element styles. For security reasons, only literal string values may be\n * used. To incorporate non-literal values `unsafeCSS` may be used inside a\n * template string part.\n */\nconst css = (strings, ...values) => {\n    const cssText = values.reduce((acc, v, idx) => acc + textFromCSSResult(v) + strings[idx + 1], strings[0]);\n    return new CSSResult(cssText, constructionToken);\n};\n//# sourceMappingURL=css-tag.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-element/lib/css-tag.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-element/lib/decorators.js":
  /*!****************************************************!*\
    !*** ./node_modules/lit-element/lib/decorators.js ***!
    \****************************************************/
  /*! exports provided: customElement, property, query, queryAll, eventOptions */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"customElement\", function() { return customElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return property; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"query\", function() { return query; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"queryAll\", function() { return queryAll; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"eventOptions\", function() { return eventOptions; });\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst legacyCustomElement = (tagName, clazz) => {\n    window.customElements.define(tagName, clazz);\n    // Cast as any because TS doesn't recognize the return type as being a\n    // subtype of the decorated class when clazz is typed as\n    // `Constructor<HTMLElement>` for some reason.\n    // `Constructor<HTMLElement>` is helpful to make sure the decorator is\n    // applied to elements however.\n    // tslint:disable-next-line:no-any\n    return clazz;\n};\nconst standardCustomElement = (tagName, descriptor) => {\n    const { kind, elements } = descriptor;\n    return {\n        kind,\n        elements,\n        // This callback is called once the class is otherwise fully defined\n        finisher(clazz) {\n            window.customElements.define(tagName, clazz);\n        }\n    };\n};\n/**\n * Class decorator factory that defines the decorated class as a custom element.\n *\n * @param tagName the name of the custom element to define\n */\nconst customElement = (tagName) => (classOrDescriptor) => (typeof classOrDescriptor === 'function') ?\n    legacyCustomElement(tagName, classOrDescriptor) :\n    standardCustomElement(tagName, classOrDescriptor);\nconst standardProperty = (options, element) => {\n    // When decorating an accessor, pass it through and add property metadata.\n    // Note, the `hasOwnProperty` check in `createProperty` ensures we don't\n    // stomp over the user's accessor.\n    if (element.kind === 'method' && element.descriptor &&\n        !('value' in element.descriptor)) {\n        return Object.assign({}, element, { finisher(clazz) {\n                clazz.createProperty(element.key, options);\n            } });\n    }\n    else {\n        // createProperty() takes care of defining the property, but we still\n        // must return some kind of descriptor, so return a descriptor for an\n        // unused prototype field. The finisher calls createProperty().\n        return {\n            kind: 'field',\n            key: Symbol(),\n            placement: 'own',\n            descriptor: {},\n            // When @babel/plugin-proposal-decorators implements initializers,\n            // do this instead of the initializer below. See:\n            // https://github.com/babel/babel/issues/9260 extras: [\n            //   {\n            //     kind: 'initializer',\n            //     placement: 'own',\n            //     initializer: descriptor.initializer,\n            //   }\n            // ],\n            // tslint:disable-next-line:no-any decorator\n            initializer() {\n                if (typeof element.initializer === 'function') {\n                    this[element.key] = element.initializer.call(this);\n                }\n            },\n            finisher(clazz) {\n                clazz.createProperty(element.key, options);\n            }\n        };\n    }\n};\nconst legacyProperty = (options, proto, name) => {\n    proto.constructor\n        .createProperty(name, options);\n};\n/**\n * A property decorator which creates a LitElement property which reflects a\n * corresponding attribute value. A `PropertyDeclaration` may optionally be\n * supplied to configure property features.\n *\n * @ExportDecoratedItems\n */\nfunction property(options) {\n    // tslint:disable-next-line:no-any decorator\n    return (protoOrDescriptor, name) => (name !== undefined) ?\n        legacyProperty(options, protoOrDescriptor, name) :\n        standardProperty(options, protoOrDescriptor);\n}\n/**\n * A property decorator that converts a class property into a getter that\n * executes a querySelector on the element's renderRoot.\n *\n * @ExportDecoratedItems\n */\nfunction query(selector) {\n    return (protoOrDescriptor, \n    // tslint:disable-next-line:no-any decorator\n    name) => {\n        const descriptor = {\n            get() {\n                return this.renderRoot.querySelector(selector);\n            },\n            enumerable: true,\n            configurable: true,\n        };\n        return (name !== undefined) ?\n            legacyQuery(descriptor, protoOrDescriptor, name) :\n            standardQuery(descriptor, protoOrDescriptor);\n    };\n}\n/**\n * A property decorator that converts a class property into a getter\n * that executes a querySelectorAll on the element's renderRoot.\n *\n * @ExportDecoratedItems\n */\nfunction queryAll(selector) {\n    return (protoOrDescriptor, \n    // tslint:disable-next-line:no-any decorator\n    name) => {\n        const descriptor = {\n            get() {\n                return this.renderRoot.querySelectorAll(selector);\n            },\n            enumerable: true,\n            configurable: true,\n        };\n        return (name !== undefined) ?\n            legacyQuery(descriptor, protoOrDescriptor, name) :\n            standardQuery(descriptor, protoOrDescriptor);\n    };\n}\nconst legacyQuery = (descriptor, proto, name) => {\n    Object.defineProperty(proto, name, descriptor);\n};\nconst standardQuery = (descriptor, element) => ({\n    kind: 'method',\n    placement: 'prototype',\n    key: element.key,\n    descriptor,\n});\nconst standardEventOptions = (options, element) => {\n    return Object.assign({}, element, { finisher(clazz) {\n            Object.assign(clazz.prototype[element.key], options);\n        } });\n};\nconst legacyEventOptions = \n// tslint:disable-next-line:no-any legacy decorator\n(options, proto, name) => {\n    Object.assign(proto[name], options);\n};\n/**\n * Adds event listener options to a method used as an event listener in a\n * lit-html template.\n *\n * @param options An object that specifis event listener options as accepted by\n * `EventTarget#addEventListener` and `EventTarget#removeEventListener`.\n *\n * Current browsers support the `capture`, `passive`, and `once` options. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters\n *\n * @example\n *\n *     class MyElement {\n *\n *       clicked = false;\n *\n *       render() {\n *         return html`<div @click=${this._onClick}`><button></button></div>`;\n *       }\n *\n *       @eventOptions({capture: true})\n *       _onClick(e) {\n *         this.clicked = true;\n *       }\n *     }\n */\nconst eventOptions = (options) => \n// Return value typed as any to prevent TypeScript from complaining that\n// standard decorator function signature does not match TypeScript decorator\n// signature\n// TODO(kschaaf): unclear why it was only failing on this decorator and not\n// the others\n((protoOrDescriptor, name) => (name !== undefined) ?\n    legacyEventOptions(options, protoOrDescriptor, name) :\n    standardEventOptions(options, protoOrDescriptor));\n//# sourceMappingURL=decorators.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-element/lib/decorators.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-element/lib/updating-element.js":
  /*!**********************************************************!*\
    !*** ./node_modules/lit-element/lib/updating-element.js ***!
    \**********************************************************/
  /*! exports provided: defaultConverter, notEqual, UpdatingElement */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultConverter\", function() { return defaultConverter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"notEqual\", function() { return notEqual; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UpdatingElement\", function() { return UpdatingElement; });\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\nwindow.JSCompiler_renameProperty =\n    (prop, _obj) => prop;\nconst defaultConverter = {\n    toAttribute(value, type) {\n        switch (type) {\n            case Boolean:\n                return value ? '' : null;\n            case Object:\n            case Array:\n                // if the value is `null` or `undefined` pass this through\n                // to allow removing/no change behavior.\n                return value == null ? value : JSON.stringify(value);\n        }\n        return value;\n    },\n    fromAttribute(value, type) {\n        switch (type) {\n            case Boolean:\n                return value !== null;\n            case Number:\n                return value === null ? null : Number(value);\n            case Object:\n            case Array:\n                return JSON.parse(value);\n        }\n        return value;\n    }\n};\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nconst notEqual = (value, old) => {\n    // This ensures (old==NaN, value==NaN) always returns false\n    return old !== value && (old === old || value === value);\n};\nconst defaultPropertyDeclaration = {\n    attribute: true,\n    type: String,\n    converter: defaultConverter,\n    reflect: false,\n    hasChanged: notEqual\n};\nconst microtaskPromise = Promise.resolve(true);\nconst STATE_HAS_UPDATED = 1;\nconst STATE_UPDATE_REQUESTED = 1 << 2;\nconst STATE_IS_REFLECTING_TO_ATTRIBUTE = 1 << 3;\nconst STATE_IS_REFLECTING_TO_PROPERTY = 1 << 4;\nconst STATE_HAS_CONNECTED = 1 << 5;\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclassers to render updates as desired.\n */\nclass UpdatingElement extends HTMLElement {\n    constructor() {\n        super();\n        this._updateState = 0;\n        this._instanceProperties = undefined;\n        this._updatePromise = microtaskPromise;\n        this._hasConnectedResolver = undefined;\n        /**\n         * Map with keys for any properties that have changed since the last\n         * update cycle with previous values.\n         */\n        this._changedProperties = new Map();\n        /**\n         * Map with keys of properties that should be reflected when updated.\n         */\n        this._reflectingProperties = undefined;\n        this.initialize();\n    }\n    /**\n     * Returns a list of attributes corresponding to the registered properties.\n     * @nocollapse\n     */\n    static get observedAttributes() {\n        // note: piggy backing on this to ensure we're finalized.\n        this.finalize();\n        const attributes = [];\n        // Use forEach so this works even if for/of loops are compiled to for loops\n        // expecting arrays\n        this._classProperties.forEach((v, p) => {\n            const attr = this._attributeNameForProperty(p, v);\n            if (attr !== undefined) {\n                this._attributeToPropertyMap.set(attr, p);\n                attributes.push(attr);\n            }\n        });\n        return attributes;\n    }\n    /**\n     * Ensures the private `_classProperties` property metadata is created.\n     * In addition to `finalize` this is also called in `createProperty` to\n     * ensure the `@property` decorator can add property metadata.\n     */\n    /** @nocollapse */\n    static _ensureClassProperties() {\n        // ensure private storage for property declarations.\n        if (!this.hasOwnProperty(JSCompiler_renameProperty('_classProperties', this))) {\n            this._classProperties = new Map();\n            // NOTE: Workaround IE11 not supporting Map constructor argument.\n            const superProperties = Object.getPrototypeOf(this)._classProperties;\n            if (superProperties !== undefined) {\n                superProperties.forEach((v, k) => this._classProperties.set(k, v));\n            }\n        }\n    }\n    /**\n     * Creates a property accessor on the element prototype if one does not exist.\n     * The property setter calls the property's `hasChanged` property option\n     * or uses a strict identity check to determine whether or not to request\n     * an update.\n     * @nocollapse\n     */\n    static createProperty(name, options = defaultPropertyDeclaration) {\n        // Note, since this can be called by the `@property` decorator which\n        // is called before `finalize`, we ensure storage exists for property\n        // metadata.\n        this._ensureClassProperties();\n        this._classProperties.set(name, options);\n        // Do not generate an accessor if the prototype already has one, since\n        // it would be lost otherwise and that would never be the user's intention;\n        // Instead, we expect users to call `requestUpdate` themselves from\n        // user-defined accessors. Note that if the super has an accessor we will\n        // still overwrite it\n        if (options.noAccessor || this.prototype.hasOwnProperty(name)) {\n            return;\n        }\n        const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n        Object.defineProperty(this.prototype, name, {\n            // tslint:disable-next-line:no-any no symbol in index\n            get() {\n                return this[key];\n            },\n            set(value) {\n                // tslint:disable-next-line:no-any no symbol in index\n                const oldValue = this[name];\n                // tslint:disable-next-line:no-any no symbol in index\n                this[key] = value;\n                this._requestUpdate(name, oldValue);\n            },\n            configurable: true,\n            enumerable: true\n        });\n    }\n    /**\n     * Creates property accessors for registered properties and ensures\n     * any superclasses are also finalized.\n     * @nocollapse\n     */\n    static finalize() {\n        if (this.hasOwnProperty(JSCompiler_renameProperty('finalized', this)) &&\n            this.finalized) {\n            return;\n        }\n        // finalize any superclasses\n        const superCtor = Object.getPrototypeOf(this);\n        if (typeof superCtor.finalize === 'function') {\n            superCtor.finalize();\n        }\n        this.finalized = true;\n        this._ensureClassProperties();\n        // initialize Map populated in observedAttributes\n        this._attributeToPropertyMap = new Map();\n        // make any properties\n        // Note, only process \"own\" properties since this element will inherit\n        // any properties defined on the superClass, and finalization ensures\n        // the entire prototype chain is finalized.\n        if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n            const props = this.properties;\n            // support symbols in properties (IE11 does not support this)\n            const propKeys = [\n                ...Object.getOwnPropertyNames(props),\n                ...(typeof Object.getOwnPropertySymbols === 'function') ?\n                    Object.getOwnPropertySymbols(props) :\n                    []\n            ];\n            // This for/of is ok because propKeys is an array\n            for (const p of propKeys) {\n                // note, use of `any` is due to TypeSript lack of support for symbol in\n                // index types\n                // tslint:disable-next-line:no-any no symbol in index\n                this.createProperty(p, props[p]);\n            }\n        }\n    }\n    /**\n     * Returns the property name for the given attribute `name`.\n     * @nocollapse\n     */\n    static _attributeNameForProperty(name, options) {\n        const attribute = options.attribute;\n        return attribute === false ?\n            undefined :\n            (typeof attribute === 'string' ?\n                attribute :\n                (typeof name === 'string' ? name.toLowerCase() : undefined));\n    }\n    /**\n     * Returns true if a property should request an update.\n     * Called when a property value is set and uses the `hasChanged`\n     * option for the property if present or a strict identity check.\n     * @nocollapse\n     */\n    static _valueHasChanged(value, old, hasChanged = notEqual) {\n        return hasChanged(value, old);\n    }\n    /**\n     * Returns the property value for the given attribute value.\n     * Called via the `attributeChangedCallback` and uses the property's\n     * `converter` or `converter.fromAttribute` property option.\n     * @nocollapse\n     */\n    static _propertyValueFromAttribute(value, options) {\n        const type = options.type;\n        const converter = options.converter || defaultConverter;\n        const fromAttribute = (typeof converter === 'function' ? converter : converter.fromAttribute);\n        return fromAttribute ? fromAttribute(value, type) : value;\n    }\n    /**\n     * Returns the attribute value for the given property value. If this\n     * returns undefined, the property will *not* be reflected to an attribute.\n     * If this returns null, the attribute will be removed, otherwise the\n     * attribute will be set to the value.\n     * This uses the property's `reflect` and `type.toAttribute` property options.\n     * @nocollapse\n     */\n    static _propertyValueToAttribute(value, options) {\n        if (options.reflect === undefined) {\n            return;\n        }\n        const type = options.type;\n        const converter = options.converter;\n        const toAttribute = converter && converter.toAttribute ||\n            defaultConverter.toAttribute;\n        return toAttribute(value, type);\n    }\n    /**\n     * Performs element initialization. By default captures any pre-set values for\n     * registered properties.\n     */\n    initialize() {\n        this._saveInstanceProperties();\n        // ensures first update will be caught by an early access of `updateComplete`\n        this._requestUpdate();\n    }\n    /**\n     * Fixes any properties set on the instance before upgrade time.\n     * Otherwise these would shadow the accessor and break these properties.\n     * The properties are stored in a Map which is played back after the\n     * constructor runs. Note, on very old versions of Safari (<=9) or Chrome\n     * (<=41), properties created for native platform properties like (`id` or\n     * `name`) may not have default values set in the element constructor. On\n     * these browsers native properties appear on instances and therefore their\n     * default value will overwrite any element default (e.g. if the element sets\n     * this.id = 'id' in the constructor, the 'id' will become '' since this is\n     * the native platform default).\n     */\n    _saveInstanceProperties() {\n        // Use forEach so this works even if for/of loops are compiled to for loops\n        // expecting arrays\n        this.constructor\n            ._classProperties.forEach((_v, p) => {\n            if (this.hasOwnProperty(p)) {\n                const value = this[p];\n                delete this[p];\n                if (!this._instanceProperties) {\n                    this._instanceProperties = new Map();\n                }\n                this._instanceProperties.set(p, value);\n            }\n        });\n    }\n    /**\n     * Applies previously saved instance properties.\n     */\n    _applyInstanceProperties() {\n        // Use forEach so this works even if for/of loops are compiled to for loops\n        // expecting arrays\n        // tslint:disable-next-line:no-any\n        this._instanceProperties.forEach((v, p) => this[p] = v);\n        this._instanceProperties = undefined;\n    }\n    connectedCallback() {\n        this._updateState = this._updateState | STATE_HAS_CONNECTED;\n        // Ensure first connection completes an update. Updates cannot complete before\n        // connection and if one is pending connection the `_hasConnectionResolver`\n        // will exist. If so, resolve it to complete the update, otherwise\n        // requestUpdate.\n        if (this._hasConnectedResolver) {\n            this._hasConnectedResolver();\n            this._hasConnectedResolver = undefined;\n        }\n    }\n    /**\n     * Allows for `super.disconnectedCallback()` in extensions while\n     * reserving the possibility of making non-breaking feature additions\n     * when disconnecting at some point in the future.\n     */\n    disconnectedCallback() {\n    }\n    /**\n     * Synchronizes property values when attributes change.\n     */\n    attributeChangedCallback(name, old, value) {\n        if (old !== value) {\n            this._attributeToProperty(name, value);\n        }\n    }\n    _propertyToAttribute(name, value, options = defaultPropertyDeclaration) {\n        const ctor = this.constructor;\n        const attr = ctor._attributeNameForProperty(name, options);\n        if (attr !== undefined) {\n            const attrValue = ctor._propertyValueToAttribute(value, options);\n            // an undefined value does not change the attribute.\n            if (attrValue === undefined) {\n                return;\n            }\n            // Track if the property is being reflected to avoid\n            // setting the property again via `attributeChangedCallback`. Note:\n            // 1. this takes advantage of the fact that the callback is synchronous.\n            // 2. will behave incorrectly if multiple attributes are in the reaction\n            // stack at time of calling. However, since we process attributes\n            // in `update` this should not be possible (or an extreme corner case\n            // that we'd like to discover).\n            // mark state reflecting\n            this._updateState = this._updateState | STATE_IS_REFLECTING_TO_ATTRIBUTE;\n            if (attrValue == null) {\n                this.removeAttribute(attr);\n            }\n            else {\n                this.setAttribute(attr, attrValue);\n            }\n            // mark state not reflecting\n            this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_ATTRIBUTE;\n        }\n    }\n    _attributeToProperty(name, value) {\n        // Use tracking info to avoid deserializing attribute value if it was\n        // just set from a property setter.\n        if (this._updateState & STATE_IS_REFLECTING_TO_ATTRIBUTE) {\n            return;\n        }\n        const ctor = this.constructor;\n        const propName = ctor._attributeToPropertyMap.get(name);\n        if (propName !== undefined) {\n            const options = ctor._classProperties.get(propName) || defaultPropertyDeclaration;\n            // mark state reflecting\n            this._updateState = this._updateState | STATE_IS_REFLECTING_TO_PROPERTY;\n            this[propName] =\n                // tslint:disable-next-line:no-any\n                ctor._propertyValueFromAttribute(value, options);\n            // mark state not reflecting\n            this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_PROPERTY;\n        }\n    }\n    /**\n     * This private version of `requestUpdate` does not access or return the\n     * `updateComplete` promise. This promise can be overridden and is therefore\n     * not free to access.\n     */\n    _requestUpdate(name, oldValue) {\n        let shouldRequestUpdate = true;\n        // If we have a property key, perform property update steps.\n        if (name !== undefined) {\n            const ctor = this.constructor;\n            const options = ctor._classProperties.get(name) || defaultPropertyDeclaration;\n            if (ctor._valueHasChanged(this[name], oldValue, options.hasChanged)) {\n                if (!this._changedProperties.has(name)) {\n                    this._changedProperties.set(name, oldValue);\n                }\n                // Add to reflecting properties set.\n                // Note, it's important that every change has a chance to add the\n                // property to `_reflectingProperties`. This ensures setting\n                // attribute + property reflects correctly.\n                if (options.reflect === true &&\n                    !(this._updateState & STATE_IS_REFLECTING_TO_PROPERTY)) {\n                    if (this._reflectingProperties === undefined) {\n                        this._reflectingProperties = new Map();\n                    }\n                    this._reflectingProperties.set(name, options);\n                }\n            }\n            else {\n                // Abort the request if the property should not be considered changed.\n                shouldRequestUpdate = false;\n            }\n        }\n        if (!this._hasRequestedUpdate && shouldRequestUpdate) {\n            this._enqueueUpdate();\n        }\n    }\n    /**\n     * Requests an update which is processed asynchronously. This should\n     * be called when an element should update based on some state not triggered\n     * by setting a property. In this case, pass no arguments. It should also be\n     * called when manually implementing a property setter. In this case, pass the\n     * property `name` and `oldValue` to ensure that any configured property\n     * options are honored. Returns the `updateComplete` Promise which is resolved\n     * when the update completes.\n     *\n     * @param name {PropertyKey} (optional) name of requesting property\n     * @param oldValue {any} (optional) old value of requesting property\n     * @returns {Promise} A Promise that is resolved when the update completes.\n     */\n    requestUpdate(name, oldValue) {\n        this._requestUpdate(name, oldValue);\n        return this.updateComplete;\n    }\n    /**\n     * Sets up the element to asynchronously update.\n     */\n    async _enqueueUpdate() {\n        // Mark state updating...\n        this._updateState = this._updateState | STATE_UPDATE_REQUESTED;\n        let resolve;\n        let reject;\n        const previousUpdatePromise = this._updatePromise;\n        this._updatePromise = new Promise((res, rej) => {\n            resolve = res;\n            reject = rej;\n        });\n        try {\n            // Ensure any previous update has resolved before updating.\n            // This `await` also ensures that property changes are batched.\n            await previousUpdatePromise;\n        }\n        catch (e) {\n            // Ignore any previous errors. We only care that the previous cycle is\n            // done. Any error should have been handled in the previous update.\n        }\n        // Make sure the element has connected before updating.\n        if (!this._hasConnected) {\n            await new Promise((res) => this._hasConnectedResolver = res);\n        }\n        try {\n            const result = this.performUpdate();\n            // If `performUpdate` returns a Promise, we await it. This is done to\n            // enable coordinating updates with a scheduler. Note, the result is\n            // checked to avoid delaying an additional microtask unless we need to.\n            if (result != null) {\n                await result;\n            }\n        }\n        catch (e) {\n            reject(e);\n        }\n        resolve(!this._hasRequestedUpdate);\n    }\n    get _hasConnected() {\n        return (this._updateState & STATE_HAS_CONNECTED);\n    }\n    get _hasRequestedUpdate() {\n        return (this._updateState & STATE_UPDATE_REQUESTED);\n    }\n    get hasUpdated() {\n        return (this._updateState & STATE_HAS_UPDATED);\n    }\n    /**\n     * Performs an element update. Note, if an exception is thrown during the\n     * update, `firstUpdated` and `updated` will not be called.\n     *\n     * You can override this method to change the timing of updates. If this\n     * method is overridden, `super.performUpdate()` must be called.\n     *\n     * For instance, to schedule updates to occur just before the next frame:\n     *\n     * ```\n     * protected async performUpdate(): Promise<unknown> {\n     *   await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n     *   super.performUpdate();\n     * }\n     * ```\n     */\n    performUpdate() {\n        // Mixin instance properties once, if they exist.\n        if (this._instanceProperties) {\n            this._applyInstanceProperties();\n        }\n        let shouldUpdate = false;\n        const changedProperties = this._changedProperties;\n        try {\n            shouldUpdate = this.shouldUpdate(changedProperties);\n            if (shouldUpdate) {\n                this.update(changedProperties);\n            }\n        }\n        catch (e) {\n            // Prevent `firstUpdated` and `updated` from running when there's an\n            // update exception.\n            shouldUpdate = false;\n            throw e;\n        }\n        finally {\n            // Ensure element can accept additional updates after an exception.\n            this._markUpdated();\n        }\n        if (shouldUpdate) {\n            if (!(this._updateState & STATE_HAS_UPDATED)) {\n                this._updateState = this._updateState | STATE_HAS_UPDATED;\n                this.firstUpdated(changedProperties);\n            }\n            this.updated(changedProperties);\n        }\n    }\n    _markUpdated() {\n        this._changedProperties = new Map();\n        this._updateState = this._updateState & ~STATE_UPDATE_REQUESTED;\n    }\n    /**\n     * Returns a Promise that resolves when the element has completed updating.\n     * The Promise value is a boolean that is `true` if the element completed the\n     * update without triggering another update. The Promise result is `false` if\n     * a property was set inside `updated()`. If the Promise is rejected, an\n     * exception was thrown during the update. This getter can be implemented to\n     * await additional state. For example, it is sometimes useful to await a\n     * rendered element before fulfilling this Promise. To do this, first await\n     * `super.updateComplete` then any subsequent state.\n     *\n     * @returns {Promise} The Promise returns a boolean that indicates if the\n     * update resolved without triggering another update.\n     */\n    get updateComplete() {\n        return this._updatePromise;\n    }\n    /**\n     * Controls whether or not `update` should be called when the element requests\n     * an update. By default, this method always returns `true`, but this can be\n     * customized to control when to update.\n     *\n     * * @param _changedProperties Map of changed properties with old values\n     */\n    shouldUpdate(_changedProperties) {\n        return true;\n    }\n    /**\n     * Updates the element. This method reflects property values to attributes.\n     * It can be overridden to render and keep updated element DOM.\n     * Setting properties inside this method will *not* trigger\n     * another update.\n     *\n     * * @param _changedProperties Map of changed properties with old values\n     */\n    update(_changedProperties) {\n        if (this._reflectingProperties !== undefined &&\n            this._reflectingProperties.size > 0) {\n            // Use forEach so this works even if for/of loops are compiled to for\n            // loops expecting arrays\n            this._reflectingProperties.forEach((v, k) => this._propertyToAttribute(k, this[k], v));\n            this._reflectingProperties = undefined;\n        }\n    }\n    /**\n     * Invoked whenever the element is updated. Implement to perform\n     * post-updating tasks via DOM APIs, for example, focusing an element.\n     *\n     * Setting properties inside this method will trigger the element to update\n     * again after this update cycle completes.\n     *\n     * * @param _changedProperties Map of changed properties with old values\n     */\n    updated(_changedProperties) {\n    }\n    /**\n     * Invoked when the element is first updated. Implement to perform one time\n     * work on the element after update.\n     *\n     * Setting properties inside this method will trigger the element to update\n     * again after this update cycle completes.\n     *\n     * * @param _changedProperties Map of changed properties with old values\n     */\n    firstUpdated(_changedProperties) {\n    }\n}\n/**\n * Marks class as having finished creating properties.\n */\nUpdatingElement.finalized = true;\n//# sourceMappingURL=updating-element.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-element/lib/updating-element.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-element/lit-element.js":
  /*!*************************************************!*\
    !*** ./node_modules/lit-element/lit-element.js ***!
    \*************************************************/
  /*! exports provided: html, svg, TemplateResult, SVGTemplateResult, LitElement, defaultConverter, notEqual, UpdatingElement, customElement, property, query, queryAll, eventOptions, supportsAdoptingStyleSheets, CSSResult, unsafeCSS, css */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LitElement\", function() { return LitElement; });\n/* harmony import */ var lit_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-html */ \"./node_modules/lit-html/lit-html.js\");\n/* harmony import */ var lit_html_lib_shady_render_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit-html/lib/shady-render.js */ \"./node_modules/lit-html/lib/shady-render.js\");\n/* harmony import */ var _lib_updating_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/updating-element.js */ \"./node_modules/lit-element/lib/updating-element.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultConverter\", function() { return _lib_updating_element_js__WEBPACK_IMPORTED_MODULE_2__[\"defaultConverter\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"notEqual\", function() { return _lib_updating_element_js__WEBPACK_IMPORTED_MODULE_2__[\"notEqual\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UpdatingElement\", function() { return _lib_updating_element_js__WEBPACK_IMPORTED_MODULE_2__[\"UpdatingElement\"]; });\n\n/* harmony import */ var _lib_decorators_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/decorators.js */ \"./node_modules/lit-element/lib/decorators.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"customElement\", function() { return _lib_decorators_js__WEBPACK_IMPORTED_MODULE_3__[\"customElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _lib_decorators_js__WEBPACK_IMPORTED_MODULE_3__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"query\", function() { return _lib_decorators_js__WEBPACK_IMPORTED_MODULE_3__[\"query\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"queryAll\", function() { return _lib_decorators_js__WEBPACK_IMPORTED_MODULE_3__[\"queryAll\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"eventOptions\", function() { return _lib_decorators_js__WEBPACK_IMPORTED_MODULE_3__[\"eventOptions\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return lit_html__WEBPACK_IMPORTED_MODULE_0__[\"html\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"svg\", function() { return lit_html__WEBPACK_IMPORTED_MODULE_0__[\"svg\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TemplateResult\", function() { return lit_html__WEBPACK_IMPORTED_MODULE_0__[\"TemplateResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SVGTemplateResult\", function() { return lit_html__WEBPACK_IMPORTED_MODULE_0__[\"SVGTemplateResult\"]; });\n\n/* harmony import */ var _lib_css_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/css-tag.js */ \"./node_modules/lit-element/lib/css-tag.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"supportsAdoptingStyleSheets\", function() { return _lib_css_tag_js__WEBPACK_IMPORTED_MODULE_4__[\"supportsAdoptingStyleSheets\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CSSResult\", function() { return _lib_css_tag_js__WEBPACK_IMPORTED_MODULE_4__[\"CSSResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"unsafeCSS\", function() { return _lib_css_tag_js__WEBPACK_IMPORTED_MODULE_4__[\"unsafeCSS\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"css\", function() { return _lib_css_tag_js__WEBPACK_IMPORTED_MODULE_4__[\"css\"]; });\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n\n\n\n\n\n\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litElementVersions'] || (window['litElementVersions'] = []))\n    .push('2.0.1');\n/**\n * Minimal implementation of Array.prototype.flat\n * @param arr the array to flatten\n * @param result the accumlated result\n */\nfunction arrayFlat(styles, result = []) {\n    for (let i = 0, length = styles.length; i < length; i++) {\n        const value = styles[i];\n        if (Array.isArray(value)) {\n            arrayFlat(value, result);\n        }\n        else {\n            result.push(value);\n        }\n    }\n    return result;\n}\n/** Deeply flattens styles array. Uses native flat if available. */\nconst flattenStyles = (styles) => styles.flat ? styles.flat(Infinity) : arrayFlat(styles);\nclass LitElement extends _lib_updating_element_js__WEBPACK_IMPORTED_MODULE_2__[\"UpdatingElement\"] {\n    /** @nocollapse */\n    static finalize() {\n        super.finalize();\n        // Prepare styling that is stamped at first render time. Styling\n        // is built from user provided `styles` or is inherited from the superclass.\n        this._styles =\n            this.hasOwnProperty(JSCompiler_renameProperty('styles', this)) ?\n                this._getUniqueStyles() :\n                this._styles || [];\n    }\n    /** @nocollapse */\n    static _getUniqueStyles() {\n        // Take care not to call `this.styles` multiple times since this generates\n        // new CSSResults each time.\n        // TODO(sorvell): Since we do not cache CSSResults by input, any\n        // shared styles will generate new stylesheet objects, which is wasteful.\n        // This should be addressed when a browser ships constructable\n        // stylesheets.\n        const userStyles = this.styles;\n        const styles = [];\n        if (Array.isArray(userStyles)) {\n            const flatStyles = flattenStyles(userStyles);\n            // As a performance optimization to avoid duplicated styling that can\n            // occur especially when composing via subclassing, de-duplicate styles\n            // preserving the last item in the list. The last item is kept to\n            // try to preserve cascade order with the assumption that it's most\n            // important that last added styles override previous styles.\n            const styleSet = flatStyles.reduceRight((set, s) => {\n                set.add(s);\n                // on IE set.add does not return the set.\n                return set;\n            }, new Set());\n            // Array.from does not work on Set in IE\n            styleSet.forEach((v) => styles.unshift(v));\n        }\n        else if (userStyles) {\n            styles.push(userStyles);\n        }\n        return styles;\n    }\n    /**\n     * Performs element initialization. By default this calls `createRenderRoot`\n     * to create the element `renderRoot` node and captures any pre-set values for\n     * registered properties.\n     */\n    initialize() {\n        super.initialize();\n        this.renderRoot =\n            this.createRenderRoot();\n        // Note, if renderRoot is not a shadowRoot, styles would/could apply to the\n        // element's getRootNode(). While this could be done, we're choosing not to\n        // support this now since it would require different logic around de-duping.\n        if (window.ShadowRoot && this.renderRoot instanceof window.ShadowRoot) {\n            this.adoptStyles();\n        }\n    }\n    /**\n     * Returns the node into which the element should render and by default\n     * creates and returns an open shadowRoot. Implement to customize where the\n     * element's DOM is rendered. For example, to render into the element's\n     * childNodes, return `this`.\n     * @returns {Element|DocumentFragment} Returns a node into which to render.\n     */\n    createRenderRoot() {\n        return this.attachShadow({ mode: 'open' });\n    }\n    /**\n     * Applies styling to the element shadowRoot using the `static get styles`\n     * property. Styling will apply using `shadowRoot.adoptedStyleSheets` where\n     * available and will fallback otherwise. When Shadow DOM is polyfilled,\n     * ShadyCSS scopes styles and adds them to the document. When Shadow DOM\n     * is available but `adoptedStyleSheets` is not, styles are appended to the\n     * end of the `shadowRoot` to [mimic spec\n     * behavior](https://wicg.github.io/construct-stylesheets/#using-constructed-stylesheets).\n     */\n    adoptStyles() {\n        const styles = this.constructor._styles;\n        if (styles.length === 0) {\n            return;\n        }\n        // There are three separate cases here based on Shadow DOM support.\n        // (1) shadowRoot polyfilled: use ShadyCSS\n        // (2) shadowRoot.adoptedStyleSheets available: use it.\n        // (3) shadowRoot.adoptedStyleSheets polyfilled: append styles after\n        // rendering\n        if (window.ShadyCSS !== undefined && !window.ShadyCSS.nativeShadow) {\n            window.ShadyCSS.ScopingShim.prepareAdoptedCssText(styles.map((s) => s.cssText), this.localName);\n        }\n        else if (_lib_css_tag_js__WEBPACK_IMPORTED_MODULE_4__[\"supportsAdoptingStyleSheets\"]) {\n            this.renderRoot.adoptedStyleSheets =\n                styles.map((s) => s.styleSheet);\n        }\n        else {\n            // This must be done after rendering so the actual style insertion is done\n            // in `update`.\n            this._needsShimAdoptedStyleSheets = true;\n        }\n    }\n    connectedCallback() {\n        super.connectedCallback();\n        // Note, first update/render handles styleElement so we only call this if\n        // connected after first update.\n        if (this.hasUpdated && window.ShadyCSS !== undefined) {\n            window.ShadyCSS.styleElement(this);\n        }\n    }\n    /**\n     * Updates the element. This method reflects property values to attributes\n     * and calls `render` to render DOM via lit-html. Setting properties inside\n     * this method will *not* trigger another update.\n     * * @param _changedProperties Map of changed properties with old values\n     */\n    update(changedProperties) {\n        super.update(changedProperties);\n        const templateResult = this.render();\n        if (templateResult instanceof lit_html__WEBPACK_IMPORTED_MODULE_0__[\"TemplateResult\"]) {\n            this.constructor\n                .render(templateResult, this.renderRoot, { scopeName: this.localName, eventContext: this });\n        }\n        // When native Shadow DOM is used but adoptedStyles are not supported,\n        // insert styling after rendering to ensure adoptedStyles have highest\n        // priority.\n        if (this._needsShimAdoptedStyleSheets) {\n            this._needsShimAdoptedStyleSheets = false;\n            this.constructor._styles.forEach((s) => {\n                const style = document.createElement('style');\n                style.textContent = s.cssText;\n                this.renderRoot.appendChild(style);\n            });\n        }\n    }\n    /**\n     * Invoked on each update to perform rendering tasks. This method must return\n     * a lit-html TemplateResult. Setting properties inside this method will *not*\n     * trigger the element to update.\n     */\n    render() {\n    }\n}\n/**\n * Ensure this class is marked as `finalized` as an optimization ensuring\n * it will not needlessly try to `finalize`.\n */\nLitElement.finalized = true;\n/**\n * Render method used to render the lit-html TemplateResult to the element's\n * DOM.\n * @param {TemplateResult} Template to render.\n * @param {Element|DocumentFragment} Node into which to render.\n * @param {String} Element name.\n * @nocollapse\n */\nLitElement.render = lit_html_lib_shady_render_js__WEBPACK_IMPORTED_MODULE_1__[\"render\"];\n//# sourceMappingURL=lit-element.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-element/lit-element.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/default-template-processor.js":
  /*!*****************************************************************!*\
    !*** ./node_modules/lit-html/lib/default-template-processor.js ***!
    \*****************************************************************/
  /*! exports provided: DefaultTemplateProcessor, defaultTemplateProcessor */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DefaultTemplateProcessor\", function() { return DefaultTemplateProcessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultTemplateProcessor\", function() { return defaultTemplateProcessor; });\n/* harmony import */ var _parts_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parts.js */ \"./node_modules/lit-html/lib/parts.js\");\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Creates Parts when a template is instantiated.\n */\nclass DefaultTemplateProcessor {\n    /**\n     * Create parts for an attribute-position binding, given the event, attribute\n     * name, and string literals.\n     *\n     * @param element The element containing the binding\n     * @param name  The attribute name\n     * @param strings The string literals. There are always at least two strings,\n     *   event for fully-controlled bindings with a single expression.\n     */\n    handleAttributeExpressions(element, name, strings, options) {\n        const prefix = name[0];\n        if (prefix === '.') {\n            const comitter = new _parts_js__WEBPACK_IMPORTED_MODULE_0__[\"PropertyCommitter\"](element, name.slice(1), strings);\n            return comitter.parts;\n        }\n        if (prefix === '@') {\n            return [new _parts_js__WEBPACK_IMPORTED_MODULE_0__[\"EventPart\"](element, name.slice(1), options.eventContext)];\n        }\n        if (prefix === '?') {\n            return [new _parts_js__WEBPACK_IMPORTED_MODULE_0__[\"BooleanAttributePart\"](element, name.slice(1), strings)];\n        }\n        const comitter = new _parts_js__WEBPACK_IMPORTED_MODULE_0__[\"AttributeCommitter\"](element, name, strings);\n        return comitter.parts;\n    }\n    /**\n     * Create parts for a text-position binding.\n     * @param templateFactory\n     */\n    handleTextExpression(options) {\n        return new _parts_js__WEBPACK_IMPORTED_MODULE_0__[\"NodePart\"](options);\n    }\n}\nconst defaultTemplateProcessor = new DefaultTemplateProcessor();\n//# sourceMappingURL=default-template-processor.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/default-template-processor.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/directive.js":
  /*!************************************************!*\
    !*** ./node_modules/lit-html/lib/directive.js ***!
    \************************************************/
  /*! exports provided: directive, isDirective */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"directive\", function() { return directive; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isDirective\", function() { return isDirective; });\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst directives = new WeakMap();\n/**\n * Brands a function as a directive so that lit-html will call the function\n * during template rendering, rather than passing as a value.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object\n *\n * @example\n *\n * ```\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n *   if (part.value !== v) {\n *     part.setValue(v)\n *   }\n * });\n * ```\n */\n// tslint:disable-next-line:no-any\nconst directive = (f) => ((...args) => {\n    const d = f(...args);\n    directives.set(d, true);\n    return d;\n});\nconst isDirective = (o) => {\n    return typeof o === 'function' && directives.has(o);\n};\n//# sourceMappingURL=directive.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/directive.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/dom.js":
  /*!******************************************!*\
    !*** ./node_modules/lit-html/lib/dom.js ***!
    \******************************************/
  /*! exports provided: isCEPolyfill, reparentNodes, removeNodes */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isCEPolyfill\", function() { return isCEPolyfill; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reparentNodes\", function() { return reparentNodes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeNodes\", function() { return removeNodes; });\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * True if the custom elements polyfill is in use.\n */\nconst isCEPolyfill = window.customElements !== undefined &&\n    window.customElements.polyfillWrapFlushCallback !==\n        undefined;\n/**\n * Reparents nodes, starting from `startNode` (inclusive) to `endNode`\n * (exclusive), into another container (could be the same container), before\n * `beforeNode`. If `beforeNode` is null, it appends the nodes to the\n * container.\n */\nconst reparentNodes = (container, start, end = null, before = null) => {\n    let node = start;\n    while (node !== end) {\n        const n = node.nextSibling;\n        container.insertBefore(node, before);\n        node = n;\n    }\n};\n/**\n * Removes nodes, starting from `startNode` (inclusive) to `endNode`\n * (exclusive), from `container`.\n */\nconst removeNodes = (container, startNode, endNode = null) => {\n    let node = startNode;\n    while (node !== endNode) {\n        const n = node.nextSibling;\n        container.removeChild(node);\n        node = n;\n    }\n};\n//# sourceMappingURL=dom.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/dom.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/modify-template.js":
  /*!******************************************************!*\
    !*** ./node_modules/lit-html/lib/modify-template.js ***!
    \******************************************************/
  /*! exports provided: removeNodesFromTemplate, insertNodeIntoTemplate */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeNodesFromTemplate\", function() { return removeNodesFromTemplate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"insertNodeIntoTemplate\", function() { return insertNodeIntoTemplate; });\n/* harmony import */ var _template_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./template.js */ \"./node_modules/lit-html/lib/template.js\");\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module shady-render\n */\n\nconst walkerNodeFilter = 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */;\n/**\n * Removes the list of nodes from a Template safely. In addition to removing\n * nodes from the Template, the Template part indices are updated to match\n * the mutated Template DOM.\n *\n * As the template is walked the removal state is tracked and\n * part indices are adjusted as needed.\n *\n * div\n *   div#1 (remove) <-- start removing (removing node is div#1)\n *     div\n *       div#2 (remove)  <-- continue removing (removing node is still div#1)\n *         div\n * div <-- stop removing since previous sibling is the removing node (div#1,\n * removed 4 nodes)\n */\nfunction removeNodesFromTemplate(template, nodesToRemove) {\n    const { element: { content }, parts } = template;\n    const walker = document.createTreeWalker(content, walkerNodeFilter, null, false);\n    let partIndex = nextActiveIndexInTemplateParts(parts);\n    let part = parts[partIndex];\n    let nodeIndex = -1;\n    let removeCount = 0;\n    const nodesToRemoveInTemplate = [];\n    let currentRemovingNode = null;\n    while (walker.nextNode()) {\n        nodeIndex++;\n        const node = walker.currentNode;\n        // End removal if stepped past the removing node\n        if (node.previousSibling === currentRemovingNode) {\n            currentRemovingNode = null;\n        }\n        // A node to remove was found in the template\n        if (nodesToRemove.has(node)) {\n            nodesToRemoveInTemplate.push(node);\n            // Track node we're removing\n            if (currentRemovingNode === null) {\n                currentRemovingNode = node;\n            }\n        }\n        // When removing, increment count by which to adjust subsequent part indices\n        if (currentRemovingNode !== null) {\n            removeCount++;\n        }\n        while (part !== undefined && part.index === nodeIndex) {\n            // If part is in a removed node deactivate it by setting index to -1 or\n            // adjust the index as needed.\n            part.index = currentRemovingNode !== null ? -1 : part.index - removeCount;\n            // go to the next active part.\n            partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n            part = parts[partIndex];\n        }\n    }\n    nodesToRemoveInTemplate.forEach((n) => n.parentNode.removeChild(n));\n}\nconst countNodes = (node) => {\n    let count = (node.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */) ? 0 : 1;\n    const walker = document.createTreeWalker(node, walkerNodeFilter, null, false);\n    while (walker.nextNode()) {\n        count++;\n    }\n    return count;\n};\nconst nextActiveIndexInTemplateParts = (parts, startIndex = -1) => {\n    for (let i = startIndex + 1; i < parts.length; i++) {\n        const part = parts[i];\n        if (Object(_template_js__WEBPACK_IMPORTED_MODULE_0__[\"isTemplatePartActive\"])(part)) {\n            return i;\n        }\n    }\n    return -1;\n};\n/**\n * Inserts the given node into the Template, optionally before the given\n * refNode. In addition to inserting the node into the Template, the Template\n * part indices are updated to match the mutated Template DOM.\n */\nfunction insertNodeIntoTemplate(template, node, refNode = null) {\n    const { element: { content }, parts } = template;\n    // If there's no refNode, then put node at end of template.\n    // No part indices need to be shifted in this case.\n    if (refNode === null || refNode === undefined) {\n        content.appendChild(node);\n        return;\n    }\n    const walker = document.createTreeWalker(content, walkerNodeFilter, null, false);\n    let partIndex = nextActiveIndexInTemplateParts(parts);\n    let insertCount = 0;\n    let walkerIndex = -1;\n    while (walker.nextNode()) {\n        walkerIndex++;\n        const walkerNode = walker.currentNode;\n        if (walkerNode === refNode) {\n            insertCount = countNodes(node);\n            refNode.parentNode.insertBefore(node, refNode);\n        }\n        while (partIndex !== -1 && parts[partIndex].index === walkerIndex) {\n            // If we've inserted the node, simply adjust all subsequent parts\n            if (insertCount > 0) {\n                while (partIndex !== -1) {\n                    parts[partIndex].index += insertCount;\n                    partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n                }\n                return;\n            }\n            partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n        }\n    }\n}\n//# sourceMappingURL=modify-template.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/modify-template.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/part.js":
  /*!*******************************************!*\
    !*** ./node_modules/lit-html/lib/part.js ***!
    \*******************************************/
  /*! exports provided: noChange, nothing */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"noChange\", function() { return noChange; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"nothing\", function() { return nothing; });\n/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nconst noChange = {};\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nconst nothing = {};\n//# sourceMappingURL=part.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/part.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/parts.js":
  /*!********************************************!*\
    !*** ./node_modules/lit-html/lib/parts.js ***!
    \********************************************/
  /*! exports provided: isPrimitive, AttributeCommitter, AttributePart, NodePart, BooleanAttributePart, PropertyCommitter, PropertyPart, EventPart */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPrimitive\", function() { return isPrimitive; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AttributeCommitter\", function() { return AttributeCommitter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AttributePart\", function() { return AttributePart; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NodePart\", function() { return NodePart; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BooleanAttributePart\", function() { return BooleanAttributePart; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PropertyCommitter\", function() { return PropertyCommitter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PropertyPart\", function() { return PropertyPart; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EventPart\", function() { return EventPart; });\n/* harmony import */ var _directive_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./directive.js */ \"./node_modules/lit-html/lib/directive.js\");\n/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom.js */ \"./node_modules/lit-html/lib/dom.js\");\n/* harmony import */ var _part_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./part.js */ \"./node_modules/lit-html/lib/part.js\");\n/* harmony import */ var _template_instance_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./template-instance.js */ \"./node_modules/lit-html/lib/template-instance.js\");\n/* harmony import */ var _template_result_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./template-result.js */ \"./node_modules/lit-html/lib/template-result.js\");\n/* harmony import */ var _template_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./template.js */ \"./node_modules/lit-html/lib/template.js\");\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\n\n\n\n\n\n\nconst isPrimitive = (value) => {\n    return (value === null ||\n        !(typeof value === 'object' || typeof value === 'function'));\n};\n/**\n * Sets attribute values for AttributeParts, so that the value is only set once\n * even if there are multiple parts for an attribute.\n */\nclass AttributeCommitter {\n    constructor(element, name, strings) {\n        this.dirty = true;\n        this.element = element;\n        this.name = name;\n        this.strings = strings;\n        this.parts = [];\n        for (let i = 0; i < strings.length - 1; i++) {\n            this.parts[i] = this._createPart();\n        }\n    }\n    /**\n     * Creates a single part. Override this to create a differnt type of part.\n     */\n    _createPart() {\n        return new AttributePart(this);\n    }\n    _getValue() {\n        const strings = this.strings;\n        const l = strings.length - 1;\n        let text = '';\n        for (let i = 0; i < l; i++) {\n            text += strings[i];\n            const part = this.parts[i];\n            if (part !== undefined) {\n                const v = part.value;\n                if (v != null &&\n                    (Array.isArray(v) ||\n                        // tslint:disable-next-line:no-any\n                        typeof v !== 'string' && v[Symbol.iterator])) {\n                    for (const t of v) {\n                        text += typeof t === 'string' ? t : String(t);\n                    }\n                }\n                else {\n                    text += typeof v === 'string' ? v : String(v);\n                }\n            }\n        }\n        text += strings[l];\n        return text;\n    }\n    commit() {\n        if (this.dirty) {\n            this.dirty = false;\n            this.element.setAttribute(this.name, this._getValue());\n        }\n    }\n}\nclass AttributePart {\n    constructor(comitter) {\n        this.value = undefined;\n        this.committer = comitter;\n    }\n    setValue(value) {\n        if (value !== _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"] && (!isPrimitive(value) || value !== this.value)) {\n            this.value = value;\n            // If the value is a not a directive, dirty the committer so that it'll\n            // call setAttribute. If the value is a directive, it'll dirty the\n            // committer if it calls setValue().\n            if (!Object(_directive_js__WEBPACK_IMPORTED_MODULE_0__[\"isDirective\"])(value)) {\n                this.committer.dirty = true;\n            }\n        }\n    }\n    commit() {\n        while (Object(_directive_js__WEBPACK_IMPORTED_MODULE_0__[\"isDirective\"])(this.value)) {\n            const directive = this.value;\n            this.value = _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"];\n            directive(this);\n        }\n        if (this.value === _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"]) {\n            return;\n        }\n        this.committer.commit();\n    }\n}\nclass NodePart {\n    constructor(options) {\n        this.value = undefined;\n        this._pendingValue = undefined;\n        this.options = options;\n    }\n    /**\n     * Inserts this part into a container.\n     *\n     * This part must be empty, as its contents are not automatically moved.\n     */\n    appendInto(container) {\n        this.startNode = container.appendChild(Object(_template_js__WEBPACK_IMPORTED_MODULE_5__[\"createMarker\"])());\n        this.endNode = container.appendChild(Object(_template_js__WEBPACK_IMPORTED_MODULE_5__[\"createMarker\"])());\n    }\n    /**\n     * Inserts this part between `ref` and `ref`'s next sibling. Both `ref` and\n     * its next sibling must be static, unchanging nodes such as those that appear\n     * in a literal section of a template.\n     *\n     * This part must be empty, as its contents are not automatically moved.\n     */\n    insertAfterNode(ref) {\n        this.startNode = ref;\n        this.endNode = ref.nextSibling;\n    }\n    /**\n     * Appends this part into a parent part.\n     *\n     * This part must be empty, as its contents are not automatically moved.\n     */\n    appendIntoPart(part) {\n        part._insert(this.startNode = Object(_template_js__WEBPACK_IMPORTED_MODULE_5__[\"createMarker\"])());\n        part._insert(this.endNode = Object(_template_js__WEBPACK_IMPORTED_MODULE_5__[\"createMarker\"])());\n    }\n    /**\n     * Appends this part after `ref`\n     *\n     * This part must be empty, as its contents are not automatically moved.\n     */\n    insertAfterPart(ref) {\n        ref._insert(this.startNode = Object(_template_js__WEBPACK_IMPORTED_MODULE_5__[\"createMarker\"])());\n        this.endNode = ref.endNode;\n        ref.endNode = this.startNode;\n    }\n    setValue(value) {\n        this._pendingValue = value;\n    }\n    commit() {\n        while (Object(_directive_js__WEBPACK_IMPORTED_MODULE_0__[\"isDirective\"])(this._pendingValue)) {\n            const directive = this._pendingValue;\n            this._pendingValue = _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"];\n            directive(this);\n        }\n        const value = this._pendingValue;\n        if (value === _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"]) {\n            return;\n        }\n        if (isPrimitive(value)) {\n            if (value !== this.value) {\n                this._commitText(value);\n            }\n        }\n        else if (value instanceof _template_result_js__WEBPACK_IMPORTED_MODULE_4__[\"TemplateResult\"]) {\n            this._commitTemplateResult(value);\n        }\n        else if (value instanceof Node) {\n            this._commitNode(value);\n        }\n        else if (Array.isArray(value) ||\n            // tslint:disable-next-line:no-any\n            value[Symbol.iterator]) {\n            this._commitIterable(value);\n        }\n        else if (value === _part_js__WEBPACK_IMPORTED_MODULE_2__[\"nothing\"]) {\n            this.value = _part_js__WEBPACK_IMPORTED_MODULE_2__[\"nothing\"];\n            this.clear();\n        }\n        else {\n            // Fallback, will render the string representation\n            this._commitText(value);\n        }\n    }\n    _insert(node) {\n        this.endNode.parentNode.insertBefore(node, this.endNode);\n    }\n    _commitNode(value) {\n        if (this.value === value) {\n            return;\n        }\n        this.clear();\n        this._insert(value);\n        this.value = value;\n    }\n    _commitText(value) {\n        const node = this.startNode.nextSibling;\n        value = value == null ? '' : value;\n        if (node === this.endNode.previousSibling &&\n            node.nodeType === 3 /* Node.TEXT_NODE */) {\n            // If we only have a single text node between the markers, we can just\n            // set its value, rather than replacing it.\n            // TODO(justinfagnani): Can we just check if this.value is primitive?\n            node.data = value;\n        }\n        else {\n            this._commitNode(document.createTextNode(typeof value === 'string' ? value : String(value)));\n        }\n        this.value = value;\n    }\n    _commitTemplateResult(value) {\n        const template = this.options.templateFactory(value);\n        if (this.value instanceof _template_instance_js__WEBPACK_IMPORTED_MODULE_3__[\"TemplateInstance\"] &&\n            this.value.template === template) {\n            this.value.update(value.values);\n        }\n        else {\n            // Make sure we propagate the template processor from the TemplateResult\n            // so that we use its syntax extension, etc. The template factory comes\n            // from the render function options so that it can control template\n            // caching and preprocessing.\n            const instance = new _template_instance_js__WEBPACK_IMPORTED_MODULE_3__[\"TemplateInstance\"](template, value.processor, this.options);\n            const fragment = instance._clone();\n            instance.update(value.values);\n            this._commitNode(fragment);\n            this.value = instance;\n        }\n    }\n    _commitIterable(value) {\n        // For an Iterable, we create a new InstancePart per item, then set its\n        // value to the item. This is a little bit of overhead for every item in\n        // an Iterable, but it lets us recurse easily and efficiently update Arrays\n        // of TemplateResults that will be commonly returned from expressions like:\n        // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n        // If _value is an array, then the previous render was of an\n        // iterable and _value will contain the NodeParts from the previous\n        // render. If _value is not an array, clear this part and make a new\n        // array for NodeParts.\n        if (!Array.isArray(this.value)) {\n            this.value = [];\n            this.clear();\n        }\n        // Lets us keep track of how many items we stamped so we can clear leftover\n        // items from a previous render\n        const itemParts = this.value;\n        let partIndex = 0;\n        let itemPart;\n        for (const item of value) {\n            // Try to reuse an existing part\n            itemPart = itemParts[partIndex];\n            // If no existing part, create a new one\n            if (itemPart === undefined) {\n                itemPart = new NodePart(this.options);\n                itemParts.push(itemPart);\n                if (partIndex === 0) {\n                    itemPart.appendIntoPart(this);\n                }\n                else {\n                    itemPart.insertAfterPart(itemParts[partIndex - 1]);\n                }\n            }\n            itemPart.setValue(item);\n            itemPart.commit();\n            partIndex++;\n        }\n        if (partIndex < itemParts.length) {\n            // Truncate the parts array so _value reflects the current state\n            itemParts.length = partIndex;\n            this.clear(itemPart && itemPart.endNode);\n        }\n    }\n    clear(startNode = this.startNode) {\n        Object(_dom_js__WEBPACK_IMPORTED_MODULE_1__[\"removeNodes\"])(this.startNode.parentNode, startNode.nextSibling, this.endNode);\n    }\n}\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nclass BooleanAttributePart {\n    constructor(element, name, strings) {\n        this.value = undefined;\n        this._pendingValue = undefined;\n        if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n            throw new Error('Boolean attributes can only contain a single expression');\n        }\n        this.element = element;\n        this.name = name;\n        this.strings = strings;\n    }\n    setValue(value) {\n        this._pendingValue = value;\n    }\n    commit() {\n        while (Object(_directive_js__WEBPACK_IMPORTED_MODULE_0__[\"isDirective\"])(this._pendingValue)) {\n            const directive = this._pendingValue;\n            this._pendingValue = _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"];\n            directive(this);\n        }\n        if (this._pendingValue === _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"]) {\n            return;\n        }\n        const value = !!this._pendingValue;\n        if (this.value !== value) {\n            if (value) {\n                this.element.setAttribute(this.name, '');\n            }\n            else {\n                this.element.removeAttribute(this.name);\n            }\n        }\n        this.value = value;\n        this._pendingValue = _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"];\n    }\n}\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nclass PropertyCommitter extends AttributeCommitter {\n    constructor(element, name, strings) {\n        super(element, name, strings);\n        this.single =\n            (strings.length === 2 && strings[0] === '' && strings[1] === '');\n    }\n    _createPart() {\n        return new PropertyPart(this);\n    }\n    _getValue() {\n        if (this.single) {\n            return this.parts[0].value;\n        }\n        return super._getValue();\n    }\n    commit() {\n        if (this.dirty) {\n            this.dirty = false;\n            // tslint:disable-next-line:no-any\n            this.element[this.name] = this._getValue();\n        }\n    }\n}\nclass PropertyPart extends AttributePart {\n}\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the thrid\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\ntry {\n    const options = {\n        get capture() {\n            eventOptionsSupported = true;\n            return false;\n        }\n    };\n    // tslint:disable-next-line:no-any\n    window.addEventListener('test', options, options);\n    // tslint:disable-next-line:no-any\n    window.removeEventListener('test', options, options);\n}\ncatch (_e) {\n}\nclass EventPart {\n    constructor(element, eventName, eventContext) {\n        this.value = undefined;\n        this._pendingValue = undefined;\n        this.element = element;\n        this.eventName = eventName;\n        this.eventContext = eventContext;\n        this._boundHandleEvent = (e) => this.handleEvent(e);\n    }\n    setValue(value) {\n        this._pendingValue = value;\n    }\n    commit() {\n        while (Object(_directive_js__WEBPACK_IMPORTED_MODULE_0__[\"isDirective\"])(this._pendingValue)) {\n            const directive = this._pendingValue;\n            this._pendingValue = _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"];\n            directive(this);\n        }\n        if (this._pendingValue === _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"]) {\n            return;\n        }\n        const newListener = this._pendingValue;\n        const oldListener = this.value;\n        const shouldRemoveListener = newListener == null ||\n            oldListener != null &&\n                (newListener.capture !== oldListener.capture ||\n                    newListener.once !== oldListener.once ||\n                    newListener.passive !== oldListener.passive);\n        const shouldAddListener = newListener != null && (oldListener == null || shouldRemoveListener);\n        if (shouldRemoveListener) {\n            this.element.removeEventListener(this.eventName, this._boundHandleEvent, this._options);\n        }\n        if (shouldAddListener) {\n            this._options = getOptions(newListener);\n            this.element.addEventListener(this.eventName, this._boundHandleEvent, this._options);\n        }\n        this.value = newListener;\n        this._pendingValue = _part_js__WEBPACK_IMPORTED_MODULE_2__[\"noChange\"];\n    }\n    handleEvent(event) {\n        if (typeof this.value === 'function') {\n            this.value.call(this.eventContext || this.element, event);\n        }\n        else {\n            this.value.handleEvent(event);\n        }\n    }\n}\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o) => o &&\n    (eventOptionsSupported ?\n        { capture: o.capture, passive: o.passive, once: o.once } :\n        o.capture);\n//# sourceMappingURL=parts.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/parts.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/render.js":
  /*!*********************************************!*\
    !*** ./node_modules/lit-html/lib/render.js ***!
    \*********************************************/
  /*! exports provided: parts, render */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parts\", function() { return parts; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom.js */ \"./node_modules/lit-html/lib/dom.js\");\n/* harmony import */ var _parts_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parts.js */ \"./node_modules/lit-html/lib/parts.js\");\n/* harmony import */ var _template_factory_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./template-factory.js */ \"./node_modules/lit-html/lib/template-factory.js\");\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\n\n\n\nconst parts = new WeakMap();\n/**\n * Renders a template to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result a TemplateResult created by evaluating a template tag like\n *     `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n *     replaced, or efficiently updated if the same result type was previous\n *     rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n *     container. Render options must *not* change between renders to the same\n *     container, as those changes will not effect previously rendered DOM.\n */\nconst render = (result, container, options) => {\n    let part = parts.get(container);\n    if (part === undefined) {\n        Object(_dom_js__WEBPACK_IMPORTED_MODULE_0__[\"removeNodes\"])(container, container.firstChild);\n        parts.set(container, part = new _parts_js__WEBPACK_IMPORTED_MODULE_1__[\"NodePart\"](Object.assign({ templateFactory: _template_factory_js__WEBPACK_IMPORTED_MODULE_2__[\"templateFactory\"] }, options)));\n        part.appendInto(container);\n    }\n    part.setValue(result);\n    part.commit();\n};\n//# sourceMappingURL=render.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/render.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/shady-render.js":
  /*!***************************************************!*\
    !*** ./node_modules/lit-html/lib/shady-render.js ***!
    \***************************************************/
  /*! exports provided: html, svg, TemplateResult, render */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom.js */ \"./node_modules/lit-html/lib/dom.js\");\n/* harmony import */ var _modify_template_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modify-template.js */ \"./node_modules/lit-html/lib/modify-template.js\");\n/* harmony import */ var _render_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./render.js */ \"./node_modules/lit-html/lib/render.js\");\n/* harmony import */ var _template_factory_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./template-factory.js */ \"./node_modules/lit-html/lib/template-factory.js\");\n/* harmony import */ var _template_instance_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./template-instance.js */ \"./node_modules/lit-html/lib/template-instance.js\");\n/* harmony import */ var _template_result_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./template-result.js */ \"./node_modules/lit-html/lib/template-result.js\");\n/* harmony import */ var _template_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./template.js */ \"./node_modules/lit-html/lib/template.js\");\n/* harmony import */ var _lit_html_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lit-html.js */ \"./node_modules/lit-html/lit-html.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return _lit_html_js__WEBPACK_IMPORTED_MODULE_7__[\"html\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"svg\", function() { return _lit_html_js__WEBPACK_IMPORTED_MODULE_7__[\"svg\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TemplateResult\", function() { return _lit_html_js__WEBPACK_IMPORTED_MODULE_7__[\"TemplateResult\"]; });\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * Module to add shady DOM/shady CSS polyfill support to lit-html template\n * rendering. See the [[render]] method for details.\n *\n * @module shady-render\n * @preferred\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\n\n\n\n\n\n\n\n\n// Get a key to lookup in `templateCaches`.\nconst getTemplateCacheKey = (type, scopeName) => `${type}--${scopeName}`;\nlet compatibleShadyCSSVersion = true;\nif (typeof window.ShadyCSS === 'undefined') {\n    compatibleShadyCSSVersion = false;\n}\nelse if (typeof window.ShadyCSS.prepareTemplateDom === 'undefined') {\n    console.warn(`Incompatible ShadyCSS version detected.` +\n        `Please update to at least @webcomponents/webcomponentsjs@2.0.2 and` +\n        `@webcomponents/shadycss@1.3.1.`);\n    compatibleShadyCSSVersion = false;\n}\n/**\n * Template factory which scopes template DOM using ShadyCSS.\n * @param scopeName {string}\n */\nconst shadyTemplateFactory = (scopeName) => (result) => {\n    const cacheKey = getTemplateCacheKey(result.type, scopeName);\n    let templateCache = _template_factory_js__WEBPACK_IMPORTED_MODULE_3__[\"templateCaches\"].get(cacheKey);\n    if (templateCache === undefined) {\n        templateCache = {\n            stringsArray: new WeakMap(),\n            keyString: new Map()\n        };\n        _template_factory_js__WEBPACK_IMPORTED_MODULE_3__[\"templateCaches\"].set(cacheKey, templateCache);\n    }\n    let template = templateCache.stringsArray.get(result.strings);\n    if (template !== undefined) {\n        return template;\n    }\n    const key = result.strings.join(_template_js__WEBPACK_IMPORTED_MODULE_6__[\"marker\"]);\n    template = templateCache.keyString.get(key);\n    if (template === undefined) {\n        const element = result.getTemplateElement();\n        if (compatibleShadyCSSVersion) {\n            window.ShadyCSS.prepareTemplateDom(element, scopeName);\n        }\n        template = new _template_js__WEBPACK_IMPORTED_MODULE_6__[\"Template\"](result, element);\n        templateCache.keyString.set(key, template);\n    }\n    templateCache.stringsArray.set(result.strings, template);\n    return template;\n};\nconst TEMPLATE_TYPES = ['html', 'svg'];\n/**\n * Removes all style elements from Templates for the given scopeName.\n */\nconst removeStylesFromLitTemplates = (scopeName) => {\n    TEMPLATE_TYPES.forEach((type) => {\n        const templates = _template_factory_js__WEBPACK_IMPORTED_MODULE_3__[\"templateCaches\"].get(getTemplateCacheKey(type, scopeName));\n        if (templates !== undefined) {\n            templates.keyString.forEach((template) => {\n                const { element: { content } } = template;\n                // IE 11 doesn't support the iterable param Set constructor\n                const styles = new Set();\n                Array.from(content.querySelectorAll('style')).forEach((s) => {\n                    styles.add(s);\n                });\n                Object(_modify_template_js__WEBPACK_IMPORTED_MODULE_1__[\"removeNodesFromTemplate\"])(template, styles);\n            });\n        }\n    });\n};\nconst shadyRenderSet = new Set();\n/**\n * For the given scope name, ensures that ShadyCSS style scoping is performed.\n * This is done just once per scope name so the fragment and template cannot\n * be modified.\n * (1) extracts styles from the rendered fragment and hands them to ShadyCSS\n * to be scoped and appended to the document\n * (2) removes style elements from all lit-html Templates for this scope name.\n *\n * Note, <style> elements can only be placed into templates for the\n * initial rendering of the scope. If <style> elements are included in templates\n * dynamically rendered to the scope (after the first scope render), they will\n * not be scoped and the <style> will be left in the template and rendered\n * output.\n */\nconst prepareTemplateStyles = (renderedDOM, template, scopeName) => {\n    shadyRenderSet.add(scopeName);\n    // Move styles out of rendered DOM and store.\n    const styles = renderedDOM.querySelectorAll('style');\n    // If there are no styles, skip unnecessary work\n    if (styles.length === 0) {\n        // Ensure prepareTemplateStyles is called to support adding\n        // styles via `prepareAdoptedCssText` since that requires that\n        // `prepareTemplateStyles` is called.\n        window.ShadyCSS.prepareTemplateStyles(template.element, scopeName);\n        return;\n    }\n    const condensedStyle = document.createElement('style');\n    // Collect styles into a single style. This helps us make sure ShadyCSS\n    // manipulations will not prevent us from being able to fix up template\n    // part indices.\n    // NOTE: collecting styles is inefficient for browsers but ShadyCSS\n    // currently does this anyway. When it does not, this should be changed.\n    for (let i = 0; i < styles.length; i++) {\n        const style = styles[i];\n        style.parentNode.removeChild(style);\n        condensedStyle.textContent += style.textContent;\n    }\n    // Remove styles from nested templates in this scope.\n    removeStylesFromLitTemplates(scopeName);\n    // And then put the condensed style into the \"root\" template passed in as\n    // `template`.\n    Object(_modify_template_js__WEBPACK_IMPORTED_MODULE_1__[\"insertNodeIntoTemplate\"])(template, condensedStyle, template.element.content.firstChild);\n    // Note, it's important that ShadyCSS gets the template that `lit-html`\n    // will actually render so that it can update the style inside when\n    // needed (e.g. @apply native Shadow DOM case).\n    window.ShadyCSS.prepareTemplateStyles(template.element, scopeName);\n    if (window.ShadyCSS.nativeShadow) {\n        // When in native Shadow DOM, re-add styling to rendered content using\n        // the style ShadyCSS produced.\n        const style = template.element.content.querySelector('style');\n        renderedDOM.insertBefore(style.cloneNode(true), renderedDOM.firstChild);\n    }\n    else {\n        // When not in native Shadow DOM, at this point ShadyCSS will have\n        // removed the style from the lit template and parts will be broken as a\n        // result. To fix this, we put back the style node ShadyCSS removed\n        // and then tell lit to remove that node from the template.\n        // NOTE, ShadyCSS creates its own style so we can safely add/remove\n        // `condensedStyle` here.\n        template.element.content.insertBefore(condensedStyle, template.element.content.firstChild);\n        const removes = new Set();\n        removes.add(condensedStyle);\n        Object(_modify_template_js__WEBPACK_IMPORTED_MODULE_1__[\"removeNodesFromTemplate\"])(template, removes);\n    }\n};\n/**\n * Extension to the standard `render` method which supports rendering\n * to ShadowRoots when the ShadyDOM (https://github.com/webcomponents/shadydom)\n * and ShadyCSS (https://github.com/webcomponents/shadycss) polyfills are used\n * or when the webcomponentsjs\n * (https://github.com/webcomponents/webcomponentsjs) polyfill is used.\n *\n * Adds a `scopeName` option which is used to scope element DOM and stylesheets\n * when native ShadowDOM is unavailable. The `scopeName` will be added to\n * the class attribute of all rendered DOM. In addition, any style elements will\n * be automatically re-written with this `scopeName` selector and moved out\n * of the rendered DOM and into the document `<head>`.\n *\n * It is common to use this render method in conjunction with a custom element\n * which renders a shadowRoot. When this is done, typically the element's\n * `localName` should be used as the `scopeName`.\n *\n * In addition to DOM scoping, ShadyCSS also supports a basic shim for css\n * custom properties (needed only on older browsers like IE11) and a shim for\n * a deprecated feature called `@apply` that supports applying a set of css\n * custom properties to a given location.\n *\n * Usage considerations:\n *\n * * Part values in `<style>` elements are only applied the first time a given\n * `scopeName` renders. Subsequent changes to parts in style elements will have\n * no effect. Because of this, parts in style elements should only be used for\n * values that will never change, for example parts that set scope-wide theme\n * values or parts which render shared style elements.\n *\n * * Note, due to a limitation of the ShadyDOM polyfill, rendering in a\n * custom element's `constructor` is not supported. Instead rendering should\n * either done asynchronously, for example at microtask timing (for example\n * `Promise.resolve()`), or be deferred until the first time the element's\n * `connectedCallback` runs.\n *\n * Usage considerations when using shimmed custom properties or `@apply`:\n *\n * * Whenever any dynamic changes are made which affect\n * css custom properties, `ShadyCSS.styleElement(element)` must be called\n * to update the element. There are two cases when this is needed:\n * (1) the element is connected to a new parent, (2) a class is added to the\n * element that causes it to match different custom properties.\n * To address the first case when rendering a custom element, `styleElement`\n * should be called in the element's `connectedCallback`.\n *\n * * Shimmed custom properties may only be defined either for an entire\n * shadowRoot (for example, in a `:host` rule) or via a rule that directly\n * matches an element with a shadowRoot. In other words, instead of flowing from\n * parent to child as do native css custom properties, shimmed custom properties\n * flow only from shadowRoots to nested shadowRoots.\n *\n * * When using `@apply` mixing css shorthand property names with\n * non-shorthand names (for example `border` and `border-width`) is not\n * supported.\n */\nconst render = (result, container, options) => {\n    const scopeName = options.scopeName;\n    const hasRendered = _render_js__WEBPACK_IMPORTED_MODULE_2__[\"parts\"].has(container);\n    const needsScoping = container instanceof ShadowRoot &&\n        compatibleShadyCSSVersion && result instanceof _template_result_js__WEBPACK_IMPORTED_MODULE_5__[\"TemplateResult\"];\n    // Handle first render to a scope specially...\n    const firstScopeRender = needsScoping && !shadyRenderSet.has(scopeName);\n    // On first scope render, render into a fragment; this cannot be a single\n    // fragment that is reused since nested renders can occur synchronously.\n    const renderContainer = firstScopeRender ? document.createDocumentFragment() : container;\n    Object(_render_js__WEBPACK_IMPORTED_MODULE_2__[\"render\"])(result, renderContainer, Object.assign({ templateFactory: shadyTemplateFactory(scopeName) }, options));\n    // When performing first scope render,\n    // (1) We've rendered into a fragment so that there's a chance to\n    // `prepareTemplateStyles` before sub-elements hit the DOM\n    // (which might cause them to render based on a common pattern of\n    // rendering in a custom element's `connectedCallback`);\n    // (2) Scope the template with ShadyCSS one time only for this scope.\n    // (3) Render the fragment into the container and make sure the\n    // container knows its `part` is the one we just rendered. This ensures\n    // DOM will be re-used on subsequent renders.\n    if (firstScopeRender) {\n        const part = _render_js__WEBPACK_IMPORTED_MODULE_2__[\"parts\"].get(renderContainer);\n        _render_js__WEBPACK_IMPORTED_MODULE_2__[\"parts\"].delete(renderContainer);\n        if (part.value instanceof _template_instance_js__WEBPACK_IMPORTED_MODULE_4__[\"TemplateInstance\"]) {\n            prepareTemplateStyles(renderContainer, part.value.template, scopeName);\n        }\n        Object(_dom_js__WEBPACK_IMPORTED_MODULE_0__[\"removeNodes\"])(container, container.firstChild);\n        container.appendChild(renderContainer);\n        _render_js__WEBPACK_IMPORTED_MODULE_2__[\"parts\"].set(container, part);\n    }\n    // After elements have hit the DOM, update styling if this is the\n    // initial render to this container.\n    // This is needed whenever dynamic changes are made so it would be\n    // safest to do every render; however, this would regress performance\n    // so we leave it up to the user to call `ShadyCSSS.styleElement`\n    // for dynamic changes.\n    if (!hasRendered && needsScoping) {\n        window.ShadyCSS.styleElement(container.host);\n    }\n};\n//# sourceMappingURL=shady-render.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/shady-render.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/template-factory.js":
  /*!*******************************************************!*\
    !*** ./node_modules/lit-html/lib/template-factory.js ***!
    \*******************************************************/
  /*! exports provided: templateFactory, templateCaches */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"templateFactory\", function() { return templateFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"templateCaches\", function() { return templateCaches; });\n/* harmony import */ var _template_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./template.js */ \"./node_modules/lit-html/lib/template.js\");\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nfunction templateFactory(result) {\n    let templateCache = templateCaches.get(result.type);\n    if (templateCache === undefined) {\n        templateCache = {\n            stringsArray: new WeakMap(),\n            keyString: new Map()\n        };\n        templateCaches.set(result.type, templateCache);\n    }\n    let template = templateCache.stringsArray.get(result.strings);\n    if (template !== undefined) {\n        return template;\n    }\n    // If the TemplateStringsArray is new, generate a key from the strings\n    // This key is shared between all templates with identical content\n    const key = result.strings.join(_template_js__WEBPACK_IMPORTED_MODULE_0__[\"marker\"]);\n    // Check if we already have a Template for this key\n    template = templateCache.keyString.get(key);\n    if (template === undefined) {\n        // If we have not seen this key before, create a new Template\n        template = new _template_js__WEBPACK_IMPORTED_MODULE_0__[\"Template\"](result, result.getTemplateElement());\n        // Cache the Template for this key\n        templateCache.keyString.set(key, template);\n    }\n    // Cache all future queries for this TemplateStringsArray\n    templateCache.stringsArray.set(result.strings, template);\n    return template;\n}\nconst templateCaches = new Map();\n//# sourceMappingURL=template-factory.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/template-factory.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/template-instance.js":
  /*!********************************************************!*\
    !*** ./node_modules/lit-html/lib/template-instance.js ***!
    \********************************************************/
  /*! exports provided: TemplateInstance */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TemplateInstance\", function() { return TemplateInstance; });\n/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom.js */ \"./node_modules/lit-html/lib/dom.js\");\n/* harmony import */ var _template_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./template.js */ \"./node_modules/lit-html/lib/template.js\");\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\n\n\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nclass TemplateInstance {\n    constructor(template, processor, options) {\n        this._parts = [];\n        this.template = template;\n        this.processor = processor;\n        this.options = options;\n    }\n    update(values) {\n        let i = 0;\n        for (const part of this._parts) {\n            if (part !== undefined) {\n                part.setValue(values[i]);\n            }\n            i++;\n        }\n        for (const part of this._parts) {\n            if (part !== undefined) {\n                part.commit();\n            }\n        }\n    }\n    _clone() {\n        // When using the Custom Elements polyfill, clone the node, rather than\n        // importing it, to keep the fragment in the template's document. This\n        // leaves the fragment inert so custom elements won't upgrade and\n        // potentially modify their contents by creating a polyfilled ShadowRoot\n        // while we traverse the tree.\n        const fragment = _dom_js__WEBPACK_IMPORTED_MODULE_0__[\"isCEPolyfill\"] ?\n            this.template.element.content.cloneNode(true) :\n            document.importNode(this.template.element.content, true);\n        const parts = this.template.parts;\n        let partIndex = 0;\n        let nodeIndex = 0;\n        const _prepareInstance = (fragment) => {\n            // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be\n            // null\n            const walker = document.createTreeWalker(fragment, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n            let node = walker.nextNode();\n            // Loop through all the nodes and parts of a template\n            while (partIndex < parts.length && node !== null) {\n                const part = parts[partIndex];\n                // Consecutive Parts may have the same node index, in the case of\n                // multiple bound attributes on an element. So each iteration we either\n                // increment the nodeIndex, if we aren't on a node with a part, or the\n                // partIndex if we are. By not incrementing the nodeIndex when we find a\n                // part, we allow for the next part to be associated with the current\n                // node if neccessasry.\n                if (!Object(_template_js__WEBPACK_IMPORTED_MODULE_1__[\"isTemplatePartActive\"])(part)) {\n                    this._parts.push(undefined);\n                    partIndex++;\n                }\n                else if (nodeIndex === part.index) {\n                    if (part.type === 'node') {\n                        const part = this.processor.handleTextExpression(this.options);\n                        part.insertAfterNode(node.previousSibling);\n                        this._parts.push(part);\n                    }\n                    else {\n                        this._parts.push(...this.processor.handleAttributeExpressions(node, part.name, part.strings, this.options));\n                    }\n                    partIndex++;\n                }\n                else {\n                    nodeIndex++;\n                    if (node.nodeName === 'TEMPLATE') {\n                        _prepareInstance(node.content);\n                    }\n                    node = walker.nextNode();\n                }\n            }\n        };\n        _prepareInstance(fragment);\n        if (_dom_js__WEBPACK_IMPORTED_MODULE_0__[\"isCEPolyfill\"]) {\n            document.adoptNode(fragment);\n            customElements.upgrade(fragment);\n        }\n        return fragment;\n    }\n}\n//# sourceMappingURL=template-instance.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/template-instance.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/template-result.js":
  /*!******************************************************!*\
    !*** ./node_modules/lit-html/lib/template-result.js ***!
    \******************************************************/
  /*! exports provided: TemplateResult, SVGTemplateResult */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TemplateResult\", function() { return TemplateResult; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SVGTemplateResult\", function() { return SVGTemplateResult; });\n/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom.js */ \"./node_modules/lit-html/lib/dom.js\");\n/* harmony import */ var _template_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./template.js */ \"./node_modules/lit-html/lib/template.js\");\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\n\n\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nclass TemplateResult {\n    constructor(strings, values, type, processor) {\n        this.strings = strings;\n        this.values = values;\n        this.type = type;\n        this.processor = processor;\n    }\n    /**\n     * Returns a string of HTML used to create a `<template>` element.\n     */\n    getHTML() {\n        const endIndex = this.strings.length - 1;\n        let html = '';\n        for (let i = 0; i < endIndex; i++) {\n            const s = this.strings[i];\n            // This exec() call does two things:\n            // 1) Appends a suffix to the bound attribute name to opt out of special\n            // attribute value parsing that IE11 and Edge do, like for style and\n            // many SVG attributes. The Template class also appends the same suffix\n            // when looking up attributes to create Parts.\n            // 2) Adds an unquoted-attribute-safe marker for the first expression in\n            // an attribute. Subsequent attribute expressions will use node markers,\n            // and this is safe since attributes with multiple expressions are\n            // guaranteed to be quoted.\n            const match = _template_js__WEBPACK_IMPORTED_MODULE_1__[\"lastAttributeNameRegex\"].exec(s);\n            if (match) {\n                // We're starting a new bound attribute.\n                // Add the safe attribute suffix, and use unquoted-attribute-safe\n                // marker.\n                html += s.substr(0, match.index) + match[1] + match[2] +\n                    _template_js__WEBPACK_IMPORTED_MODULE_1__[\"boundAttributeSuffix\"] + match[3] + _template_js__WEBPACK_IMPORTED_MODULE_1__[\"marker\"];\n            }\n            else {\n                // We're either in a bound node, or trailing bound attribute.\n                // Either way, nodeMarker is safe to use.\n                html += s + _template_js__WEBPACK_IMPORTED_MODULE_1__[\"nodeMarker\"];\n            }\n        }\n        return html + this.strings[endIndex];\n    }\n    getTemplateElement() {\n        const template = document.createElement('template');\n        template.innerHTML = this.getHTML();\n        return template;\n    }\n}\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTMl in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nclass SVGTemplateResult extends TemplateResult {\n    getHTML() {\n        return `<svg>${super.getHTML()}</svg>`;\n    }\n    getTemplateElement() {\n        const template = super.getTemplateElement();\n        const content = template.content;\n        const svgElement = content.firstChild;\n        content.removeChild(svgElement);\n        Object(_dom_js__WEBPACK_IMPORTED_MODULE_0__[\"reparentNodes\"])(content, svgElement.firstChild);\n        return template;\n    }\n}\n//# sourceMappingURL=template-result.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/template-result.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lib/template.js":
  /*!***********************************************!*\
    !*** ./node_modules/lit-html/lib/template.js ***!
    \***********************************************/
  /*! exports provided: marker, nodeMarker, markerRegex, boundAttributeSuffix, Template, isTemplatePartActive, createMarker, lastAttributeNameRegex */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"marker\", function() { return marker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"nodeMarker\", function() { return nodeMarker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"markerRegex\", function() { return markerRegex; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"boundAttributeSuffix\", function() { return boundAttributeSuffix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Template\", function() { return Template; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isTemplatePartActive\", function() { return isTemplatePartActive; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createMarker\", function() { return createMarker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lastAttributeNameRegex\", function() { return lastAttributeNameRegex; });\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nconst marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nconst nodeMarker = `<!--${marker}-->`;\nconst markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n/**\n * Suffix appended to all bound attribute names.\n */\nconst boundAttributeSuffix = '$lit$';\n/**\n * An updateable Template that tracks the location of dynamic parts.\n */\nclass Template {\n    constructor(result, element) {\n        this.parts = [];\n        this.element = element;\n        let index = -1;\n        let partIndex = 0;\n        const nodesToRemove = [];\n        const _prepareTemplate = (template) => {\n            const content = template.content;\n            // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be\n            // null\n            const walker = document.createTreeWalker(content, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n            // Keeps track of the last index associated with a part. We try to delete\n            // unnecessary nodes, but we never want to associate two different parts\n            // to the same index. They must have a constant node between.\n            let lastPartIndex = 0;\n            while (walker.nextNode()) {\n                index++;\n                const node = walker.currentNode;\n                if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n                    if (node.hasAttributes()) {\n                        const attributes = node.attributes;\n                        // Per\n                        // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n                        // attributes are not guaranteed to be returned in document order.\n                        // In particular, Edge/IE can return them out of order, so we cannot\n                        // assume a correspondance between part index and attribute index.\n                        let count = 0;\n                        for (let i = 0; i < attributes.length; i++) {\n                            if (attributes[i].value.indexOf(marker) >= 0) {\n                                count++;\n                            }\n                        }\n                        while (count-- > 0) {\n                            // Get the template literal section leading up to the first\n                            // expression in this attribute\n                            const stringForPart = result.strings[partIndex];\n                            // Find the attribute name\n                            const name = lastAttributeNameRegex.exec(stringForPart)[2];\n                            // Find the corresponding attribute\n                            // All bound attributes have had a suffix added in\n                            // TemplateResult#getHTML to opt out of special attribute\n                            // handling. To look up the attribute value we also need to add\n                            // the suffix.\n                            const attributeLookupName = name.toLowerCase() + boundAttributeSuffix;\n                            const attributeValue = node.getAttribute(attributeLookupName);\n                            const strings = attributeValue.split(markerRegex);\n                            this.parts.push({ type: 'attribute', index, name, strings });\n                            node.removeAttribute(attributeLookupName);\n                            partIndex += strings.length - 1;\n                        }\n                    }\n                    if (node.tagName === 'TEMPLATE') {\n                        _prepareTemplate(node);\n                    }\n                }\n                else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n                    const data = node.data;\n                    if (data.indexOf(marker) >= 0) {\n                        const parent = node.parentNode;\n                        const strings = data.split(markerRegex);\n                        const lastIndex = strings.length - 1;\n                        // Generate a new text node for each literal section\n                        // These nodes are also used as the markers for node parts\n                        for (let i = 0; i < lastIndex; i++) {\n                            parent.insertBefore((strings[i] === '') ? createMarker() :\n                                document.createTextNode(strings[i]), node);\n                            this.parts.push({ type: 'node', index: ++index });\n                        }\n                        // If there's no text, we must insert a comment to mark our place.\n                        // Else, we can trust it will stick around after cloning.\n                        if (strings[lastIndex] === '') {\n                            parent.insertBefore(createMarker(), node);\n                            nodesToRemove.push(node);\n                        }\n                        else {\n                            node.data = strings[lastIndex];\n                        }\n                        // We have a part for each match found\n                        partIndex += lastIndex;\n                    }\n                }\n                else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n                    if (node.data === marker) {\n                        const parent = node.parentNode;\n                        // Add a new marker node to be the startNode of the Part if any of\n                        // the following are true:\n                        //  * We don't have a previousSibling\n                        //  * The previousSibling is already the start of a previous part\n                        if (node.previousSibling === null || index === lastPartIndex) {\n                            index++;\n                            parent.insertBefore(createMarker(), node);\n                        }\n                        lastPartIndex = index;\n                        this.parts.push({ type: 'node', index });\n                        // If we don't have a nextSibling, keep this node so we have an end.\n                        // Else, we can remove it to save future costs.\n                        if (node.nextSibling === null) {\n                            node.data = '';\n                        }\n                        else {\n                            nodesToRemove.push(node);\n                            index--;\n                        }\n                        partIndex++;\n                    }\n                    else {\n                        let i = -1;\n                        while ((i = node.data.indexOf(marker, i + 1)) !==\n                            -1) {\n                            // Comment node has a binding marker inside, make an inactive part\n                            // The binding won't work, but subsequent bindings will\n                            // TODO (justinfagnani): consider whether it's even worth it to\n                            // make bindings in comments work\n                            this.parts.push({ type: 'node', index: -1 });\n                        }\n                    }\n                }\n            }\n        };\n        _prepareTemplate(element);\n        // Remove text binding nodes after the walk to not disturb the TreeWalker\n        for (const n of nodesToRemove) {\n            n.parentNode.removeChild(n);\n        }\n    }\n}\nconst isTemplatePartActive = (part) => part.index !== -1;\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nconst createMarker = () => document.createComment('');\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#attributes-0\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-character\n *\n * So an attribute is:\n *  * The name: any character except a control character, space character, ('),\n *    (\"), \">\", \"=\", or \"/\"\n *  * Followed by zero or more space characters\n *  * Followed by \"=\"\n *  * Followed by zero or more space characters\n *  * Followed by:\n *    * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n *    * (\") then any non-(\"), or\n *    * (') then any non-(')\n */\nconst lastAttributeNameRegex = /([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \\x09\\x0a\\x0c\\x0d\"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n//# sourceMappingURL=template.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lib/template.js?");
  
  /***/ }),
  
  /***/ "./node_modules/lit-html/lit-html.js":
  /*!*******************************************!*\
    !*** ./node_modules/lit-html/lit-html.js ***!
    \*******************************************/
  /*! exports provided: DefaultTemplateProcessor, defaultTemplateProcessor, directive, isDirective, removeNodes, reparentNodes, noChange, nothing, AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isPrimitive, NodePart, PropertyCommitter, PropertyPart, parts, render, templateCaches, templateFactory, TemplateInstance, SVGTemplateResult, TemplateResult, createMarker, isTemplatePartActive, Template, html, svg */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"svg\", function() { return svg; });\n/* harmony import */ var _lib_default_template_processor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/default-template-processor.js */ \"./node_modules/lit-html/lib/default-template-processor.js\");\n/* harmony import */ var _lib_template_result_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/template-result.js */ \"./node_modules/lit-html/lib/template-result.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTemplateProcessor\", function() { return _lib_default_template_processor_js__WEBPACK_IMPORTED_MODULE_0__[\"DefaultTemplateProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultTemplateProcessor\", function() { return _lib_default_template_processor_js__WEBPACK_IMPORTED_MODULE_0__[\"defaultTemplateProcessor\"]; });\n\n/* harmony import */ var _lib_directive_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/directive.js */ \"./node_modules/lit-html/lib/directive.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"directive\", function() { return _lib_directive_js__WEBPACK_IMPORTED_MODULE_2__[\"directive\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isDirective\", function() { return _lib_directive_js__WEBPACK_IMPORTED_MODULE_2__[\"isDirective\"]; });\n\n/* harmony import */ var _lib_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/dom.js */ \"./node_modules/lit-html/lib/dom.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"removeNodes\", function() { return _lib_dom_js__WEBPACK_IMPORTED_MODULE_3__[\"removeNodes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"reparentNodes\", function() { return _lib_dom_js__WEBPACK_IMPORTED_MODULE_3__[\"reparentNodes\"]; });\n\n/* harmony import */ var _lib_part_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/part.js */ \"./node_modules/lit-html/lib/part.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"noChange\", function() { return _lib_part_js__WEBPACK_IMPORTED_MODULE_4__[\"noChange\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"nothing\", function() { return _lib_part_js__WEBPACK_IMPORTED_MODULE_4__[\"nothing\"]; });\n\n/* harmony import */ var _lib_parts_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/parts.js */ \"./node_modules/lit-html/lib/parts.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AttributeCommitter\", function() { return _lib_parts_js__WEBPACK_IMPORTED_MODULE_5__[\"AttributeCommitter\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AttributePart\", function() { return _lib_parts_js__WEBPACK_IMPORTED_MODULE_5__[\"AttributePart\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanAttributePart\", function() { return _lib_parts_js__WEBPACK_IMPORTED_MODULE_5__[\"BooleanAttributePart\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EventPart\", function() { return _lib_parts_js__WEBPACK_IMPORTED_MODULE_5__[\"EventPart\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isPrimitive\", function() { return _lib_parts_js__WEBPACK_IMPORTED_MODULE_5__[\"isPrimitive\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NodePart\", function() { return _lib_parts_js__WEBPACK_IMPORTED_MODULE_5__[\"NodePart\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PropertyCommitter\", function() { return _lib_parts_js__WEBPACK_IMPORTED_MODULE_5__[\"PropertyCommitter\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PropertyPart\", function() { return _lib_parts_js__WEBPACK_IMPORTED_MODULE_5__[\"PropertyPart\"]; });\n\n/* harmony import */ var _lib_render_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/render.js */ \"./node_modules/lit-html/lib/render.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"parts\", function() { return _lib_render_js__WEBPACK_IMPORTED_MODULE_6__[\"parts\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _lib_render_js__WEBPACK_IMPORTED_MODULE_6__[\"render\"]; });\n\n/* harmony import */ var _lib_template_factory_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/template-factory.js */ \"./node_modules/lit-html/lib/template-factory.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"templateCaches\", function() { return _lib_template_factory_js__WEBPACK_IMPORTED_MODULE_7__[\"templateCaches\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"templateFactory\", function() { return _lib_template_factory_js__WEBPACK_IMPORTED_MODULE_7__[\"templateFactory\"]; });\n\n/* harmony import */ var _lib_template_instance_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lib/template-instance.js */ \"./node_modules/lit-html/lib/template-instance.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TemplateInstance\", function() { return _lib_template_instance_js__WEBPACK_IMPORTED_MODULE_8__[\"TemplateInstance\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SVGTemplateResult\", function() { return _lib_template_result_js__WEBPACK_IMPORTED_MODULE_1__[\"SVGTemplateResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TemplateResult\", function() { return _lib_template_result_js__WEBPACK_IMPORTED_MODULE_1__[\"TemplateResult\"]; });\n\n/* harmony import */ var _lib_template_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lib/template.js */ \"./node_modules/lit-html/lib/template.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createMarker\", function() { return _lib_template_js__WEBPACK_IMPORTED_MODULE_9__[\"createMarker\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isTemplatePartActive\", function() { return _lib_template_js__WEBPACK_IMPORTED_MODULE_9__[\"isTemplatePartActive\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Template\", function() { return _lib_template_js__WEBPACK_IMPORTED_MODULE_9__[\"Template\"]; });\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * -  [[html]]\n * -  [[svg]]\n * -  [[render]]\n *\n * @module lit-html\n * @preferred\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\n\n\n\n\n// TODO(justinfagnani): remove line when we get NodePart moving methods\n\n\n\n\n\n\n\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.0.0');\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nconst html = (strings, ...values) => new _lib_template_result_js__WEBPACK_IMPORTED_MODULE_1__[\"TemplateResult\"](strings, values, 'html', _lib_default_template_processor_js__WEBPACK_IMPORTED_MODULE_0__[\"defaultTemplateProcessor\"]);\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nconst svg = (strings, ...values) => new _lib_template_result_js__WEBPACK_IMPORTED_MODULE_1__[\"SVGTemplateResult\"](strings, values, 'svg', _lib_default_template_processor_js__WEBPACK_IMPORTED_MODULE_0__[\"defaultTemplateProcessor\"]);\n//# sourceMappingURL=lit-html.js.map\n\n//# sourceURL=webpack:///./node_modules/lit-html/lit-html.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/base/rocwct-lib.js":
  /*!************************************!*\
    !*** ./tsc_out/base/rocwct-lib.js ***!
    \************************************/
  /*! exports provided: RocWctLitElement, RocWctLocoDependentElement, RocWctButton, RocWctLocoDependentButton, EVMode, LoggingLevel, ServerEventSubscription, EServerEvent */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RocWctLitElement\", function() { return RocWctLitElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RocWctLocoDependentElement\", function() { return RocWctLocoDependentElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RocWctButton\", function() { return RocWctButton; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RocWctLocoDependentButton\", function() { return RocWctLocoDependentButton; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EVMode\", function() { return EVMode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LoggingLevel\", function() { return LoggingLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ServerEventSubscription\", function() { return ServerEventSubscription; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EServerEvent\", function() { return EServerEvent; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n/***********************************************************/\r\n/**************** RocWct Lit Elment ************************/\r\n/***********************************************************/\r\nclass RocWctLitElement extends lit_element__WEBPACK_IMPORTED_MODULE_0__[\"LitElement\"] {\r\n    constructor() {\r\n        super();\r\n        this.iconSetRoot = \"/images/iconset-default\";\r\n    }\r\n    static get stylesRocWctLitElement() {\r\n        return [\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `:host { display: block; width: 100%; height: 100%;font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif; font-size: 10px; color: #7E888A }`,\r\n        ];\r\n    }\r\n    registerServerEvent(event, serverEventHandler) {\r\n        let evnt = new ServerEventSubscription();\r\n        evnt.element = this;\r\n        evnt.event = event;\r\n        evnt.onServerEvent = serverEventHandler;\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_1__[\"subscribe\"](evnt);\r\n        return evnt;\r\n    }\r\n    unregisterServerEvent(event) {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_1__[\"unsubscribe\"](event);\r\n    }\r\n}\r\nclass RocWctLocoDependentElement extends RocWctLitElement {\r\n    static get stylesRocWctLocoDependentElement() {\r\n        return [\r\n            RocWctLitElement.stylesRocWctLitElement\r\n        ];\r\n    }\r\n    updated(changedProperties) {\r\n        if (changedProperties.has('locoId')) {\r\n            this.onLocoIdChange();\r\n        }\r\n    }\r\n    handleLocoEvent(event, callback) {\r\n        if (event.lc.id !== this.locoId) {\r\n            return;\r\n        }\r\n        callback(event);\r\n    }\r\n}\r\nclass RocWctButton extends RocWctLitElement {\r\n    constructor() {\r\n        super();\r\n        this.on = null;\r\n        this.hideLabel = false;\r\n        this.disabled = false;\r\n    }\r\n    static get stylesRocWctButton() {\r\n        return [\r\n            RocWctLitElement.stylesRocWctLitElement,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `input[type=\"button\"] { cursor:pointer;  width:100%; height: 70%; border: none; text-align: center; background-color: #7E888A;}`,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `input[type=\"button\"] + div { width:100%; min-height: 30%; text-align: center; cursor:pointer; }`,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `input[type=\"button\"].on { background-color: #FCAE01; }`,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `input[type=\"button\"]:active { -webkit-transform: scale(0.94); transform: scale(0.94); }`,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `input[type=\"button\"]:disabled { cursor: default; opacity: 0.4; -webkit-transform: none; transform: none;}`,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `input[type=\"button\"]:disabled + div { cursor: default; opacity: 0.4; }`\r\n        ];\r\n    }\r\n    render() {\r\n        return lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `${this.on != null\r\n            ? lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `<input id=\"btn\" @click=\"${this.handleClickInternal}\" title=\"${this.label}${this.disabled ? \" (inaktiv)\" : \"\"}\" type=\"button\" ?disabled=\"${this.disabled === true}\" class=\"${this.on === true ? \"on\" : \"\"}\" style=\"-webkit-mask: url(${this.iconSetRoot}/${this.icon}) no-repeat center; mask: url(${this.iconSetRoot}/${this.icon}) no-repeat center;\"   />\r\n                 <div @click=\"${this.handleClickInternal}\"><label for=\"btn\" style=\"display:${this.hideLabel === true ? 'none' : ''}\" >${this.label}</label></div>`\r\n            : lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] ``}`;\r\n    }\r\n    handleClickInternal() {\r\n        if (this.disabled === true) {\r\n            return;\r\n        }\r\n        this.handleClick();\r\n    }\r\n}\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Boolean })\r\n], RocWctButton.prototype, \"on\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Boolean, attribute: \"hide-label\" })\r\n], RocWctButton.prototype, \"hideLabel\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Boolean, attribute: \"disabled\" })\r\n], RocWctButton.prototype, \"disabled\", void 0);\r\nclass RocWctLocoDependentButton extends RocWctButton {\r\n    static get stylesRocWctLocoDependentButton() {\r\n        return [\r\n            RocWctButton.stylesRocWctButton,\r\n        ];\r\n    }\r\n    updated(changedProperties) {\r\n        if (changedProperties.has('locoId')) {\r\n            this.onLocoIdChange();\r\n        }\r\n    }\r\n    handleLocoEvent(event, callback) {\r\n        if (event.lc.id !== this.locoId) {\r\n            return;\r\n        }\r\n        callback(event);\r\n    }\r\n}\r\n/***********************************************************/\r\n/******************* common enums  *************************/\r\n/***********************************************************/\r\nvar EVMode;\r\n(function (EVMode) {\r\n    EVMode[EVMode[\"percent\"] = 0] = \"percent\";\r\n    EVMode[EVMode[\"kmh\"] = 1] = \"kmh\";\r\n})(EVMode || (EVMode = {}));\r\nvar LoggingLevel;\r\n(function (LoggingLevel) {\r\n    LoggingLevel[LoggingLevel[\"trace\"] = 0] = \"trace\";\r\n    LoggingLevel[LoggingLevel[\"debug\"] = 1] = \"debug\";\r\n    LoggingLevel[LoggingLevel[\"info\"] = 2] = \"info\";\r\n    LoggingLevel[LoggingLevel[\"warn\"] = 3] = \"warn\";\r\n    LoggingLevel[LoggingLevel[\"error\"] = 4] = \"error\";\r\n})(LoggingLevel || (LoggingLevel = {}));\r\n/***********************************************************/\r\n/******************* Server Events *************************/\r\n/***********************************************************/\r\nclass ServerEventSubscription {\r\n}\r\nvar EServerEvent;\r\n(function (EServerEvent) {\r\n    EServerEvent[EServerEvent[\"plan\"] = 0] = \"plan\";\r\n    EServerEvent[EServerEvent[\"lc\"] = 1] = \"lc\";\r\n    EServerEvent[EServerEvent[\"auto\"] = 2] = \"auto\";\r\n    EServerEvent[EServerEvent[\"clock\"] = 3] = \"clock\";\r\n    EServerEvent[EServerEvent[\"fn\"] = 4] = \"fn\";\r\n    EServerEvent[EServerEvent[\"state\"] = 5] = \"state\";\r\n    EServerEvent[EServerEvent[\"lclist\"] = 6] = \"lclist\";\r\n})(EServerEvent || (EServerEvent = {}));\r\n//# sourceMappingURL=rocwct-lib.js.map\n\n//# sourceURL=webpack:///./tsc_out/base/rocwct-lib.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/rocwct.js":
  /*!***************************!*\
    !*** ./tsc_out/rocwct.js ***!
    \***************************/
  /*! exports provided: unsubscribe, subscribe, send, log, error, warn, info, debug, trace */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unsubscribe\", function() { return unsubscribe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"subscribe\", function() { return subscribe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"send\", function() { return send; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"log\", function() { return log; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"error\", function() { return error; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"warn\", function() { return warn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"info\", function() { return info; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"debug\", function() { return debug; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"trace\", function() { return trace; });\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\n\r\nwindow.onload = function () {\r\n    init();\r\n};\r\nvar socket;\r\nvar subscribtions = [];\r\nvar loggingLevel = new URL(document.URL).searchParams.get(\"logging-level\") != null ? _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"][new URL(document.URL).searchParams.get(\"logging-level\")] : _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"][\"info\"];\r\nfunction init() {\r\n    initWebSocket();\r\n}\r\nfunction initWebSocket() {\r\n    let socketPort = new URL(document.URL).searchParams.get(\"port\");\r\n    if (!socketPort) {\r\n        socketPort = \"8053\";\r\n    }\r\n    let socketUrl = \"ws://\" + location.hostname + \":\" + socketPort;\r\n    socket = new WebSocket(socketUrl);\r\n    socket.onopen = function () {\r\n        info(\"WebSocket is open and connected to RocWCT Server @ \" + socketUrl);\r\n    };\r\n    socket.onmessage = function (evt) {\r\n        var data = JSON.parse(evt.data);\r\n        if (data.hasOwnProperty(\"type\") && data.type === \"RocWctClientNotification\") {\r\n            log(data.loggingLevel, data.msg);\r\n        }\r\n        else {\r\n            trace(\"<<<< IN: \");\r\n            trace(evt.data);\r\n            subscribtions.forEach(subscribtion => {\r\n                let eventName = _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"EServerEvent\"][subscribtion.event];\r\n                if (data.hasOwnProperty(eventName)) {\r\n                    if (!subscribtion.id || subscribtion.id === eval('data[eventName]').id) {\r\n                        subscribtion.onServerEvent(data, subscribtion.event);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n    };\r\n    socket.onclose = function () {\r\n        info(\"WebSocket to RocWCT Server is closed... try to reconnect\");\r\n        initWebSocket();\r\n    };\r\n}\r\nfunction unsubscribe(subscribtion) {\r\n    let unsubcr = subscribtion;\r\n    subscribtions = subscribtions.filter(function (elem) {\r\n        return elem.element !== unsubcr.element\r\n            || elem.event !== unsubcr.event\r\n            || elem.id !== unsubcr.id;\r\n    });\r\n}\r\nfunction subscribe(subscribtion) {\r\n    subscribtions.push(subscribtion);\r\n}\r\nfunction send(message) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        // wait till socket is ready\r\n        while (socket == null || socket.readyState !== socket.OPEN) {\r\n            yield new Promise(resolve => setTimeout(resolve, 100));\r\n        }\r\n        // send message\r\n        trace(\">>>> OUT: \");\r\n        trace(message);\r\n        socket.send(message);\r\n    });\r\n}\r\n// logging\r\nfunction log(loggingLevelStr, data) {\r\n    switch (loggingLevelStr) {\r\n        case _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"][_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].trace]:\r\n            trace(data);\r\n            break;\r\n        case _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"][_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].debug]:\r\n            debug(data);\r\n            break;\r\n        case _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"][_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].info]:\r\n            info(data);\r\n            break;\r\n        case _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"][_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].warn]:\r\n            warn(data);\r\n            break;\r\n        case _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"][_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].error]:\r\n            error(data);\r\n            break;\r\n    }\r\n}\r\nfunction error(data) {\r\n    if (loggingLevel <= _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].error) {\r\n        console.error(data);\r\n    }\r\n}\r\nfunction warn(data) {\r\n    if (loggingLevel <= _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].warn) {\r\n        console.warn(warn);\r\n    }\r\n}\r\nfunction info(data) {\r\n    if (loggingLevel <= _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].info) {\r\n        console.info(data);\r\n    }\r\n}\r\nfunction debug(data) {\r\n    if (loggingLevel <= _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].debug) {\r\n        console.log(data);\r\n    }\r\n}\r\nfunction trace(data) {\r\n    if (loggingLevel <= _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_0__[\"LoggingLevel\"].trace) {\r\n        console.log(data);\r\n    }\r\n}\r\n//# sourceMappingURL=rocwct.js.map\n\n//# sourceURL=webpack:///./tsc_out/rocwct.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/auto-switch.js":
  /*!**********************************************!*\
    !*** ./tsc_out/webcomponents/auto-switch.js ***!
    \**********************************************/
  /*! exports provided: AutoSwitch */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AutoSwitch\", function() { return AutoSwitch; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet AutoSwitch = class AutoSwitch extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctButton\"] {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.icon = \"auto-mode.svg\";\r\n        this.label = \"Auto-Mode\";\r\n    }\r\n    static get styles() {\r\n        return [\r\n            _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctButton\"].stylesRocWctButton,\r\n        ];\r\n    }\r\n    connectedCallback() {\r\n        super.connectedCallback();\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].auto, res => this.onServerEvent(res));\r\n        this.sendInitCommand();\r\n    }\r\n    sendInitCommand() {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"]('<sys cmd=\"getstate\"/>');\r\n    }\r\n    onServerEvent(event) {\r\n        this.on = event.auto.cmd === 'on';\r\n    }\r\n    handleClick() {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<auto cmd=\"${this.on === true ? \"off\" : \"on\"}\" controlcode=\"\" slavecode=\"\" />`);\r\n    }\r\n};\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"icon\" })\r\n], AutoSwitch.prototype, \"icon\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"label\" })\r\n], AutoSwitch.prototype, \"label\", void 0);\r\nAutoSwitch = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('auto-switch')\r\n], AutoSwitch);\r\n\r\n//# sourceMappingURL=auto-switch.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/auto-switch.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/loco-auto-switch.js":
  /*!***************************************************!*\
    !*** ./tsc_out/webcomponents/loco-auto-switch.js ***!
    \***************************************************/
  /*! exports provided: LocoAutoSwitch */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocoAutoSwitch\", function() { return LocoAutoSwitch; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet LocoAutoSwitch = class LocoAutoSwitch extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentButton\"] {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.locoId = null;\r\n        this.icon = \"play.svg\";\r\n        this.label = \"Lok-Auto\";\r\n        this.activateGlobalAuto = false;\r\n        this.startStopLoco = false;\r\n    }\r\n    static get styles() {\r\n        return [\r\n            _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentButton\"].stylesRocWctLocoDependentButton\r\n        ];\r\n    }\r\n    connectedCallback() {\r\n        super.connectedCallback();\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].lc, res => this.handleLocoEvent(res, e => this.onServerEventLoco(e)));\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].auto, res => this.onServerEventAuto(res));\r\n    }\r\n    handleClick() {\r\n        this.sendDirCmd();\r\n    }\r\n    onLocoIdChange() {\r\n        this.sendInitCommand();\r\n    }\r\n    sendInitCommand() {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"]('<sys cmd=\"getstate\"/>'); // get global state \r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\"  />`); // empty lc-command triggers server event with current state of loco\r\n    }\r\n    onServerEventLoco(event) {\r\n        this.on = !event.lc.manual;\r\n    }\r\n    onServerEventAuto(event) {\r\n        // if global auto mode goes to 'off' and attrStartStopLoco is true, the loco auto mode should go to manual and stop\r\n        if (event.auto.cmd !== \"on\" && this.startStopLoco === true) {\r\n            _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\" cmd=\"setmanualmode\" controlcode=\"\" slavecode=\"\" />`);\r\n            _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\" cmd=\"stop\" controlcode=\"\" slavecode=\"\" />`);\r\n        }\r\n    }\r\n    sendDirCmd() {\r\n        let doActivateAutoMode = false;\r\n        if (this.on === false) {\r\n            doActivateAutoMode = true;\r\n        }\r\n        else {\r\n            doActivateAutoMode = false;\r\n        }\r\n        // activate global auto mode when loco auto will be activated (if specified by attribute)\r\n        if (doActivateAutoMode === true && this.activateGlobalAuto === true) {\r\n            _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<auto cmd=\"on\" />`);\r\n        }\r\n        // activate loco auto mode\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\" cmd=\"${doActivateAutoMode === true ? 'resetmanualmode' : 'setmanualmode'}\" controlcode=\"\" slavecode=\"\" />`);\r\n        // trigger go-/stop-command\r\n        if (this.startStopLoco === true) {\r\n            _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\" cmd=\"${doActivateAutoMode === true ? 'go' : 'stop'}\" controlcode=\"\" slavecode=\"\" />`);\r\n        }\r\n    }\r\n};\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"loco-id\" })\r\n], LocoAutoSwitch.prototype, \"locoId\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String })\r\n], LocoAutoSwitch.prototype, \"icon\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String })\r\n], LocoAutoSwitch.prototype, \"label\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Boolean, attribute: \"activate-global-auto\" })\r\n], LocoAutoSwitch.prototype, \"activateGlobalAuto\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Boolean, attribute: \"start-stop-loco\" })\r\n], LocoAutoSwitch.prototype, \"startStopLoco\", void 0);\r\nLocoAutoSwitch = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('loco-auto-switch')\r\n], LocoAutoSwitch);\r\n\r\n//# sourceMappingURL=loco-auto-switch.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/loco-auto-switch.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/loco-chooser.js":
  /*!***********************************************!*\
    !*** ./tsc_out/webcomponents/loco-chooser.js ***!
    \***********************************************/
  /*! exports provided: LocoChooser */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocoChooser\", function() { return LocoChooser; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet LocoChooser = class LocoChooser extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLitElement\"] {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.locoList = new Array();\r\n        this.selectedLoco = null;\r\n    }\r\n    static get styles() {\r\n        return [\r\n            _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLitElement\"].stylesRocWctLitElement,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `.locobox { padding:4px; cursor:pointer; }`,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `.selected { border:solid 2px #FCAE01; padding:2px;  }`,\r\n        ];\r\n    }\r\n    connectedCallback() {\r\n        super.connectedCallback();\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].lclist, res => this.onServerEventLc(res));\r\n        this.sendInitCommand();\r\n    }\r\n    sendInitCommand() {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<model cmd=\"lclist\" />`);\r\n    }\r\n    render() {\r\n        return lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `${this.locoList.length > 0\r\n            ? lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `<div>\r\n            ${this.locoList.map(loco => lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `\r\n              <div class=\"locobox ${this.selectedLoco === loco.id ? 'selected' : ''}\">\r\n                <loco-display loco-id=\"${loco.id}\" @click=\"${this.handleLocoboxClick}\"></loco-display>\r\n              </div>\r\n            `)}\r\n            </div>`\r\n            : lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] ``}`;\r\n    }\r\n    onServerEventLc(event) {\r\n        this.locoList = new Array();\r\n        event.lclist.lc.forEach((loco, k) => {\r\n            if (loco.show === true) {\r\n                this.locoList.push(loco);\r\n            }\r\n        });\r\n        // select first loco if no loco is selected\r\n        if (this.selectedLoco === null && this.locoList.length > 0) {\r\n            this.selectLoco(this.locoList[0].id);\r\n        }\r\n    }\r\n    handleLocoboxClick(e) {\r\n        this.selectLoco(e.target.getAttribute('loco-id'));\r\n    }\r\n    selectLoco(id) {\r\n        this.selectedLoco = id;\r\n        let onLocoChange = new CustomEvent('onLocoChange', {\r\n            detail: { locoid: this.selectedLoco },\r\n            bubbles: true,\r\n            composed: true\r\n        });\r\n        this.dispatchEvent(onLocoChange);\r\n    }\r\n};\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Array })\r\n], LocoChooser.prototype, \"locoList\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String })\r\n], LocoChooser.prototype, \"selectedLoco\", void 0);\r\nLocoChooser = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('loco-chooser')\r\n], LocoChooser);\r\n\r\n//# sourceMappingURL=loco-chooser.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/loco-chooser.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/loco-direction.js":
  /*!*************************************************!*\
    !*** ./tsc_out/webcomponents/loco-direction.js ***!
    \*************************************************/
  /*! exports provided: LocoDirection */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocoDirection\", function() { return LocoDirection; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet LocoDirection = class LocoDirection extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentButton\"] {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.locoId = null;\r\n        this.direction = null;\r\n        this.iconForward = \"chevron-right.svg\";\r\n        this.iconBackward = \"chevron-left.svg\";\r\n        this.labelForward = \"Vorwärts\";\r\n        this.labelBackward = \"Rückwärts\";\r\n        this.forward = null;\r\n        this.icon = null;\r\n        this.label = null;\r\n    }\r\n    static get styles() {\r\n        return [\r\n            _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentButton\"].stylesRocWctLocoDependentButton,\r\n        ];\r\n    }\r\n    connectedCallback() {\r\n        super.connectedCallback();\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].lc, res => this.handleLocoEvent(res, e => this.onServerEvent(e)));\r\n    }\r\n    onLocoIdChange() {\r\n        this.sendInitCommand();\r\n    }\r\n    handleClick() {\r\n        this.sendDirCmd();\r\n    }\r\n    sendInitCommand() {\r\n        // trigger empty lc command results in statusinf for specific loco\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\"  />`);\r\n    }\r\n    onServerEvent(event) {\r\n        this.forward = event.lc.dir;\r\n        this.updateButtonState();\r\n    }\r\n    updateButtonState() {\r\n        if (this.direction === 'forward') {\r\n            this.on = this.forward === true;\r\n            this.icon = this.iconForward;\r\n            this.label = this.labelForward;\r\n        }\r\n        else if (this.direction === 'backward') {\r\n            this.on = this.forward === false;\r\n            this.icon = this.iconBackward;\r\n            this.label = this.labelBackward;\r\n        }\r\n        else {\r\n            this.on = true;\r\n            this.icon = (this.forward === true) ? this.iconForward : this.iconBackward;\r\n            this.label = (this.forward === true) ? this.labelForward : this.labelBackward;\r\n        }\r\n    }\r\n    sendDirCmd() {\r\n        let dirval = '';\r\n        if (this.direction === 'forward') {\r\n            dirval = 'true';\r\n        }\r\n        else if (this.direction === 'backward') {\r\n            dirval = 'false';\r\n        }\r\n        else {\r\n            dirval = this.forward === true ? \"false\" : \"true\";\r\n        }\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\" dir=\"${dirval}\" />`);\r\n    }\r\n};\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"loco-id\" })\r\n], LocoDirection.prototype, \"locoId\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"direction\" })\r\n], LocoDirection.prototype, \"direction\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"icon-forward\" })\r\n], LocoDirection.prototype, \"iconForward\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"icon-backward\" })\r\n], LocoDirection.prototype, \"iconBackward\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"label-forward\" })\r\n], LocoDirection.prototype, \"labelForward\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"label-backward\" })\r\n], LocoDirection.prototype, \"labelBackward\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Boolean })\r\n], LocoDirection.prototype, \"forward\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String })\r\n], LocoDirection.prototype, \"icon\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String })\r\n], LocoDirection.prototype, \"label\", void 0);\r\nLocoDirection = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('loco-direction')\r\n], LocoDirection);\r\n\r\n//# sourceMappingURL=loco-direction.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/loco-direction.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/loco-display.js":
  /*!***********************************************!*\
    !*** ./tsc_out/webcomponents/loco-display.js ***!
    \***********************************************/
  /*! exports provided: LocoDisplay */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocoDisplay\", function() { return LocoDisplay; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet LocoDisplay = class LocoDisplay extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentElement\"] {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.locoId = null;\r\n        this.hideDescr = false;\r\n        this.locoImage = null;\r\n        this.locoAddr = null;\r\n        this.locoDescription = null;\r\n        this.locoMode = null;\r\n    }\r\n    static get styles() {\r\n        return [\r\n            _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentElement\"].stylesRocWctLocoDependentElement,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `div { text-align:center; }`,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `img { width:100%; }`\r\n        ];\r\n    }\r\n    connectedCallback() {\r\n        super.connectedCallback();\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].lc, res => this.handleLocoEvent(res, e => this.onServerEvent(e)));\r\n    }\r\n    render() {\r\n        return lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `${this.locoImage != null\r\n            ? lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `\r\n        <div class=\"container\">\r\n          <div><img src=\"/images/rocrail/${this.locoImage}\" alt=\"${this.locoId}\" title=\"${this.locoId}\" /></div>\r\n          <div><span class=\"label\">${this.locoId} (${this.locoAddr}) [${this.locoMode}]</span> <span style=\"display:${(this.hideDescr === false && this.locoDescription !== null && this.locoDescription.length > 0) ? '' : 'none'};\" class=\"label\">, ${this.locoDescription}</span></div>\r\n        </div>`\r\n            : lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] ``}`;\r\n    }\r\n    onLocoIdChange() {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<model cmd=\"lcprops\" />`);\r\n    }\r\n    onServerEvent(e) {\r\n        this.executeIfNotUndefined(e.lc.image, (val) => { this.locoImage = val; });\r\n        this.executeIfNotUndefined(e.lc.addr, (val) => { this.locoAddr = val; });\r\n        this.executeIfNotUndefined(e.lc.desc, (val) => { this.locoDescription = val; });\r\n        this.executeIfNotUndefined(e.lc.mode, (val) => { this.locoMode = val; });\r\n    }\r\n    executeIfNotUndefined(val, func) {\r\n        if (val !== undefined) {\r\n            func(val);\r\n        }\r\n    }\r\n};\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"loco-id\" })\r\n], LocoDisplay.prototype, \"locoId\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Boolean, attribute: \"hide-description\" })\r\n], LocoDisplay.prototype, \"hideDescr\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String })\r\n], LocoDisplay.prototype, \"locoImage\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String })\r\n], LocoDisplay.prototype, \"locoAddr\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String })\r\n], LocoDisplay.prototype, \"locoDescription\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String })\r\n], LocoDisplay.prototype, \"locoMode\", void 0);\r\nLocoDisplay = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('loco-display')\r\n], LocoDisplay);\r\n\r\n//# sourceMappingURL=loco-display.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/loco-display.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/loco-function.js":
  /*!************************************************!*\
    !*** ./tsc_out/webcomponents/loco-function.js ***!
    \************************************************/
  /*! exports provided: LocoFunction */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocoFunction\", function() { return LocoFunction; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet LocoFunction = class LocoFunction extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentButton\"] {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.on = null;\r\n        this.locoId = null;\r\n        this.label = null;\r\n        this.icon = null;\r\n        this.attrIconExtension = null;\r\n        this.fn = \"\";\r\n        this.defaultIcon = \"lens.svg\";\r\n        this.hasFixedIcon = false;\r\n        this.hasfixedLabel = false;\r\n        this.subscribtion = null;\r\n    }\r\n    static get styles() {\r\n        return [\r\n            _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentButton\"].stylesRocWctLocoDependentButton,\r\n        ];\r\n    }\r\n    connectedCallback() {\r\n        super.connectedCallback();\r\n        this.hasfixedLabel = this.label !== null && this.label.length > 0;\r\n        this.hasFixedIcon = this.icon !== null && this.icon.length > 0;\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].fn, res => this.onServerEvent(res));\r\n    }\r\n    onLocoIdChange() {\r\n        this.subscribtion = this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].lc, res => this.handleLocoEvent(res, e => this.onInitialServerEvent(e)));\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<model cmd=\"lcprops\" />`);\r\n    }\r\n    handleClick() {\r\n        this.sendCmd();\r\n    }\r\n    onInitialServerEvent(event) {\r\n        // the value of the property 'fx' represents one bit for each function.\r\n        // https://forum.rocrail.net/viewtopic.php?f=11&t=16987&hilit=rcp\r\n        let loco = event.lc;\r\n        if (loco.id !== this.locoId) {\r\n            return;\r\n        }\r\n        // on/off state\r\n        let funcOn = false;\r\n        let myPos = this.extractFunctionNumber();\r\n        if (myPos === 0) {\r\n            funcOn = loco.fn;\r\n        }\r\n        else {\r\n            let binRep = (loco.fx >>> 0).toString(2);\r\n            if (myPos <= binRep.length) {\r\n                funcOn = binRep.substr(binRep.length - myPos, 1) === \"1\";\r\n            }\r\n        }\r\n        this.on = funcOn;\r\n        // search for fundef-element if icon or text not specified in attributes\r\n        let fundefElem = null;\r\n        if (loco.fundef) {\r\n            // select the fundef-element for current function the fundef node may be an \r\n            // instance of Fundef or an array (if multiple definitions are available)\r\n            if (Array.isArray(loco.fundef)) {\r\n                loco.fundef.forEach(fndf => {\r\n                    if (fndf.fn === this.extractFunctionNumber()) {\r\n                        fundefElem = fndf;\r\n                    }\r\n                });\r\n            }\r\n            else if (this.extractFunctionNumber() === loco.fundef.fn) {\r\n                fundefElem = (loco.fundef);\r\n            }\r\n            // set icon\r\n            if (this.hasFixedIcon === false) {\r\n                if (fundefElem !== null && fundefElem.icon && fundefElem.icon.length > 0) {\r\n                    this.icon = fundefElem.icon;\r\n                    if (this.attrIconExtension !== null) {\r\n                        this.icon = this.icon + \".\" + this.attrIconExtension;\r\n                    }\r\n                }\r\n                else {\r\n                    this.icon = this.defaultIcon;\r\n                }\r\n            }\r\n            // set text\r\n            if (this.hasfixedLabel === false) {\r\n                if (fundefElem !== null && fundefElem.text && fundefElem.text.trim().length > 0) {\r\n                    this.label = fundefElem.text;\r\n                }\r\n                else {\r\n                    this.label = this.fn.toUpperCase();\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            this.label = this.fn;\r\n            this.icon = this.defaultIcon;\r\n        }\r\n        this.unregisterServerEvent(this.subscribtion);\r\n    }\r\n    onServerEvent(event) {\r\n        if (event.fn.id !== this.locoId) {\r\n            return;\r\n        }\r\n        if (!event.fn.hasOwnProperty(this.fn)) {\r\n            return;\r\n        }\r\n        this.on = eval('event.fn.' + this.fn) === true;\r\n    }\r\n    sendCmd() {\r\n        let group = 1; //(this.extractFunctionNumber()-1)/4+1; TODO\r\n        let cmd = `<fn controlcode=\"\" slavecode=\"\" id=\"${this.locoId}\" throttleid=\"\" fnchanged=\"${this.extractFunctionNumber()}\" group=\"${group}\" f${this.extractFunctionNumber()}=\"${this.on === true ? \"false\" : \"true\"}\" />`;\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](cmd);\r\n    }\r\n    extractFunctionNumber() {\r\n        return parseInt(this.fn.substr(1));\r\n    }\r\n};\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Boolean })\r\n], LocoFunction.prototype, \"on\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"loco-id\" })\r\n], LocoFunction.prototype, \"locoId\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"label\" })\r\n], LocoFunction.prototype, \"label\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"icon\" })\r\n], LocoFunction.prototype, \"icon\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"icon-extension\" })\r\n], LocoFunction.prototype, \"attrIconExtension\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"fn\" })\r\n], LocoFunction.prototype, \"fn\", void 0);\r\nLocoFunction = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('loco-function')\r\n], LocoFunction);\r\n\r\n//# sourceMappingURL=loco-function.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/loco-function.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/loco-stop.js":
  /*!********************************************!*\
    !*** ./tsc_out/webcomponents/loco-stop.js ***!
    \********************************************/
  /*! exports provided: LocoStop */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocoStop\", function() { return LocoStop; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet LocoStop = class LocoStop extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentButton\"] {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.icon = \"stop.svg\";\r\n        this.label = \"Stop\";\r\n        this.locoId = null;\r\n    }\r\n    static get styles() {\r\n        return [\r\n            _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentButton\"].stylesRocWctLocoDependentButton\r\n        ];\r\n    }\r\n    connectedCallback() {\r\n        super.connectedCallback();\r\n        this.on = true;\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].lc, res => this.handleLocoEvent(res, e => this.onServerEvent(e)));\r\n    }\r\n    onServerEvent(e) {\r\n        super.disabled = e.lc.V === 0;\r\n    }\r\n    handleClick() {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\" V=\"0\" controlcode=\"\" slavecode=\"\" />`);\r\n    }\r\n    render() {\r\n        return super.render();\r\n    }\r\n    onLocoIdChange() {\r\n        // trigger empty lc command results in statusinf for specific loco\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\"  />`);\r\n    }\r\n};\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"icon\" })\r\n], LocoStop.prototype, \"icon\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"label\" })\r\n], LocoStop.prototype, \"label\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"loco-id\" })\r\n], LocoStop.prototype, \"locoId\", void 0);\r\nLocoStop = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('loco-stop')\r\n], LocoStop);\r\n\r\n//# sourceMappingURL=loco-stop.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/loco-stop.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/loco-throttle.js":
  /*!************************************************!*\
    !*** ./tsc_out/webcomponents/loco-throttle.js ***!
    \************************************************/
  /*! exports provided: LocoThrottle */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocoThrottle\", function() { return LocoThrottle; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet LocoThrottle = class LocoThrottle extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentElement\"] {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.locoId = null;\r\n        this.sliderMax = null;\r\n        this.vCurrent = null;\r\n        this.vMode = null;\r\n        this.vMin = null;\r\n        this.vMid = null;\r\n        this.vCru = null;\r\n        this.vMax = null;\r\n        this.cfgVMin = null;\r\n        this.cfgVMid = null;\r\n        this.cfgVCru = null;\r\n        this.cfgVMax = null;\r\n        this.cfgVRMin = null;\r\n        this.cfgVRMid = null;\r\n        this.cfgVRCru = null;\r\n        this.cfgVRMax = null;\r\n    }\r\n    static get styles() {\r\n        return [\r\n            _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLocoDependentElement\"].stylesRocWctLocoDependentElement,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `input[type=\"button\"] { cursor:pointer; width:100%; height: 100%; border: none; text-align: center; background-color: #7E888A; }`,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `input[type=\"button\"].on { background-color: #FCAE01;}`,\r\n            lit_element__WEBPACK_IMPORTED_MODULE_0__[\"css\"] `\t\r\n      .slider {\r\n        -webkit-appearance: none;  /* Override default CSS styles */\r\n        appearance: none;\r\n        width: 97%; \r\n\t\t    height: 6px;\r\n        background: linear-gradient(to right, #FCAE01,  #ce2029); \r\n        outline: none;   \r\n        margin-bottom:20px;\r\n        margin-top: 20px;\r\n      }\r\n      \r\n      .slider::-webkit-slider-thumb {\r\n        -webkit-appearance: none; \r\n        appearance: none;\r\n        width: 20px; \r\n        height: 35px; \r\n        background: #FCAE01; \r\n        cursor: pointer; \r\n        border-radius: 15%;\r\n      }\r\n      \r\n      .slider::-moz-range-thumb {\r\n        width: 20px; \r\n        height: 35px; \r\n        background: #FCAE01; \r\n        cursor: pointer;  \r\n        border-radius: 15%; \r\n      }      \r\n\r\n      .control-box {\r\n        width: 20%;\r\n        float:left;\r\n        height:35px;\r\n      }`\r\n        ];\r\n    }\r\n    connectedCallback() {\r\n        super.connectedCallback();\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].lc, res => this.handleLocoEvent(res, e => this.onServerEventLc(e)));\r\n    }\r\n    sendInitCommand() {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<model cmd=\"lcprops\" />`);\r\n    }\r\n    render() {\r\n        return lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `${this.vCurrent != null\r\n            ? lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `\t\t\r\n        <input type=\"range\" min=\"0\" step=\"1\" max=\"${this.sliderMax}\" .value=\"${this.vCurrent}\" @change=\"${(e) => this.sendCommnd(e.target.value)}\" class=\"slider\" > \t\t\t  \r\n        <div class=\"control-container\">\r\n          <div class=\"control-box\">\r\n            <input type=\"button\" @click=\"${() => this.sendCommnd(0)}\" class=\"${this.vCurrent <= 0 ? 'on' : ''}\" title=\"Stop\" type=\"button\" style=\"-webkit-mask: url(/images/iconset-default/stop.svg) no-repeat center; mask: url(/images/iconset-default/stop.svg) no-repeat center;\" />            \r\n          </div>\t\r\n          <div class=\"control-box\">\r\n            <input type=\"button\" @click=\"${() => this.sendCommnd(this.vMin)}\" class=\"${this.vCurrent > 0 && this.vCurrent <= this.vMin ? 'on' : ''}\" title=\"Vmin\" type=\"button\" style=\"-webkit-mask: url(/images/iconset-default/gauge_0.svg) no-repeat center; mask: url(/images/iconset-default/gauge_0.svg) no-repeat center;\" />\r\n          </div>\t\t\t\t\t\t\t  \r\n          <div class=\"control-box\">\r\n            <input type=\"button\" @click=\"${() => this.sendCommnd(this.vMid)}\" class=\"${this.vCurrent > this.vMin && this.vCurrent < this.vCru ? 'on' : ''}\" title=\"Vmid\" type=\"button\" style=\"-webkit-mask: url(/images/iconset-default/gauge_1.svg) no-repeat center; mask: url(/images/iconset-default/gauge_1.svg) no-repeat center;\" />\r\n          </div>\t\t\t\t\t  \r\n          <div class=\"control-box\">\r\n            <input type=\"button\" @click=\"${() => this.sendCommnd(this.vCru)}\" class=\"${this.vCurrent >= this.vCru && this.vCurrent < this.vMax ? 'on' : ''}\" title=\"Vcruise\" type=\"button\" style=\"-webkit-mask: url(/images/iconset-default/gauge_2.svg) no-repeat center; mask: url(/images/iconset-default/gauge_2.svg) no-repeat center;\" />\r\n          </div>\t\t\t\t\t  \r\n          <div class=\"control-box\">\r\n            <input type=\"button\" @click=\"${() => this.sendCommnd(this.vMax)}\" class=\"${this.vCurrent >= this.vMax ? 'on' : ''}\" title=\"Vmax\" type=\"button\" style=\"-webkit-mask: url(/images/iconset-default/gauge_3.svg) no-repeat center; mask: url(/images/iconset-default/gauge_3.svg) no-repeat center;\" />\r\n          </div>\r\n        </div>`\r\n            : lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] ``}`;\r\n    }\r\n    sendCommnd(speed) {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<lc id=\"${this.locoId}\" V=\"${speed}\" controlcode=\"\" slavecode=\"\" />`);\r\n    }\r\n    onLocoIdChange() {\r\n        this.sendInitCommand();\r\n    }\r\n    onServerEventLc(event) {\r\n        if (event.lc.id !== this.locoId) {\r\n            return;\r\n        }\r\n        if (!isNaN(event.lc.V_min)) {\r\n            // if event.lc.V_min is a number... use it as new cfgVMin\r\n            this.cfgVMin = event.lc.V_min;\r\n            this.cfgVMid = event.lc.V_mid;\r\n            this.cfgVCru = event.lc.V_cru;\r\n            this.cfgVMax = event.lc.V_max;\r\n            this.cfgVRMin = (!isNaN(event.lc.V_Rmin) && event.lc.V_Rmin > 0) ? event.lc.V_Rmin : event.lc.V_min;\r\n            this.cfgVRMid = (!isNaN(event.lc.V_Rmid) && event.lc.V_Rmid > 0) ? event.lc.V_Rmid : event.lc.V_mid;\r\n            this.cfgVRCru = (!isNaN(event.lc.V_Rcru) && event.lc.V_Rcru > 0) ? event.lc.V_Rcru : event.lc.V_cru;\r\n            this.cfgVRMax = (!isNaN(event.lc.V_Rmax) && event.lc.V_Rmax > 0) ? event.lc.V_Rmax : event.lc.V_max;\r\n        }\r\n        this.sliderMax = this.cfgVMax;\r\n        this.vMin = event.lc.dir ? this.cfgVMin : this.cfgVRMin;\r\n        this.vMid = event.lc.dir ? this.cfgVMid : this.cfgVRMid;\r\n        this.vCru = event.lc.dir ? this.cfgVCru : this.cfgVRCru;\r\n        this.vMax = event.lc.dir ? this.cfgVMax : this.cfgVRMax;\r\n        this.vCurrent = event.lc.V;\r\n    }\r\n};\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"loco-id\" })\r\n], LocoThrottle.prototype, \"locoId\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Number })\r\n], LocoThrottle.prototype, \"sliderMax\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Number })\r\n], LocoThrottle.prototype, \"vCurrent\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EVMode\"] })\r\n], LocoThrottle.prototype, \"vMode\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Number })\r\n], LocoThrottle.prototype, \"vMin\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Number })\r\n], LocoThrottle.prototype, \"vMid\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Number })\r\n], LocoThrottle.prototype, \"vCru\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: Number })\r\n], LocoThrottle.prototype, \"vMax\", void 0);\r\nLocoThrottle = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('loco-throttle')\r\n], LocoThrottle);\r\n\r\n//# sourceMappingURL=loco-throttle.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/loco-throttle.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/power-switch.js":
  /*!***********************************************!*\
    !*** ./tsc_out/webcomponents/power-switch.js ***!
    \***********************************************/
  /*! exports provided: PowerSwitch */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PowerSwitch\", function() { return PowerSwitch; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet PowerSwitch = class PowerSwitch extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctButton\"] {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.icon = \"power.svg\";\r\n        this.label = \"Power\";\r\n    }\r\n    static get styles() {\r\n        return [\r\n            _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctButton\"].stylesRocWctButton\r\n        ];\r\n    }\r\n    connectedCallback() {\r\n        super.connectedCallback();\r\n        this.registerServerEvent(_base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"EServerEvent\"].state, res => this.onServerEvent(res));\r\n        this.sendInitCommand();\r\n    }\r\n    sendInitCommand() {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"]('<sys cmd=\"getstate\"/>');\r\n    }\r\n    onServerEvent(event) {\r\n        this.on = event.state.power;\r\n    }\r\n    handleClick() {\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](`<sys cmd=\"${this.on === true ? \"stop\" : \"go\"}\" />`);\r\n    }\r\n};\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"icon\" })\r\n], PowerSwitch.prototype, \"icon\", void 0);\r\n__decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ type: String, attribute: \"label\" })\r\n], PowerSwitch.prototype, \"label\", void 0);\r\nPowerSwitch = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('power-switch')\r\n], PowerSwitch);\r\n\r\n//# sourceMappingURL=power-switch.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/power-switch.js?");
  
  /***/ }),
  
  /***/ "./tsc_out/webcomponents/rcp-tester.js":
  /*!*********************************************!*\
    !*** ./tsc_out/webcomponents/rcp-tester.js ***!
    \*********************************************/
  /*! exports provided: RcpTester */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RcpTester\", function() { return RcpTester; });\n/* harmony import */ var lit_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit-element */ \"./node_modules/lit-element/lit-element.js\");\n/* harmony import */ var _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/rocwct-lib */ \"./tsc_out/base/rocwct-lib.js\");\n/* harmony import */ var _rocwct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rocwct */ \"./tsc_out/rocwct.js\");\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n\r\nlet RcpTester = class RcpTester extends _base_rocwct_lib__WEBPACK_IMPORTED_MODULE_1__[\"RocWctLitElement\"] {\r\n    render() {\r\n        return lit_element__WEBPACK_IMPORTED_MODULE_0__[\"html\"] `\r\n      <textarea id=\"cmd\" placeholder=\"z.B.: <sys cmd=&quot;go&quot; />\" style=\"width:100%\"></textarea><br/>\r\n      <button @click=\"${this.handleClick}\" >Send command</button><br/>\r\n      <span><a href=\"https://wiki.rocrail.net/doku.php?id=cs-protocol-en\" target=\"_blank\">Rocrail Client Protocol (RCP)</a></span>\r\n    `;\r\n    }\r\n    handleClick() {\r\n        let cmd = this.shadowRoot.querySelector('#cmd').value;\r\n        _rocwct__WEBPACK_IMPORTED_MODULE_2__[\"send\"](cmd);\r\n    }\r\n};\r\nRcpTester = __decorate([\r\n    Object(lit_element__WEBPACK_IMPORTED_MODULE_0__[\"customElement\"])('rcp-tester')\r\n], RcpTester);\r\n\r\n//# sourceMappingURL=rcp-tester.js.map\n\n//# sourceURL=webpack:///./tsc_out/webcomponents/rcp-tester.js?");
  
  /***/ })
  
  /******/ });