{"version":3,"file":"ng2-tag-input.bundle.js","sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap efab512e6b5301134387","webpack:///external \"@angular/core\"","webpack:///external \"@angular/forms\"","webpack:///external \"@angular/common\"","webpack:///./~/css-loader/lib/css-base.js","webpack:///external \"rxjs/add/operator/debounceTime\"","webpack:///external \"rxjs/add/operator/filter\"","webpack:///external \"rxjs/add/operator/map\"","webpack:///modules/components/dropdown/tag-input-dropdown.component.ts","webpack:///modules/components/tag/tag-ripple.component.ts","webpack:///modules/components/tag/tag.component.ts","webpack:///./~/ng2-material-dropdown/dist/ng2-dropdown.bundle.js","webpack:///modules/components/tag-input-form/tag-input-form.component.ts","webpack:///modules/components/tag-input.ts","webpack:///(webpack)/buildin/global.js","webpack:///modules/components/icon/index.ts","webpack:///modules/components/index.ts","webpack:///modules/components/pipes/highlight.pipe.ts","webpack:///modules/components/tag-input-form/index.ts","webpack:///modules/components/animations.ts","webpack:///modules/components/helpers/accessor.ts","webpack:///modules/components/helpers/constants.ts","webpack:///modules/components/helpers/listen.ts","webpack:///modules/components/icon/icon.ts","webpack:///modules/ng2-tag-input.module.ts","webpack:///./~/base64-js/index.js","webpack:///./~/buffer/index.js","webpack:///./modules/components/icon/icon.scss","webpack:///./modules/components/tag-input-form/tag-input-form.style.scss","webpack:///./modules/components/tag-input.style.scss","webpack:///./modules/components/tag/tag-component.style.scss","webpack:///./modules/components/dropdown/tag-input-dropdown.template.html","webpack:///./modules/components/icon/icon.html","webpack:///./modules/components/tag-input-form/tag-input-form.template.html","webpack:///./modules/components/tag-input.template.html","webpack:///./modules/components/tag/tag.template.html","webpack:///./~/ieee754/index.js","webpack:///./~/isarray/index.js","webpack:///./modules/components/icon/icon.scss?874b","webpack:///./modules/components/tag-input-form/tag-input-form.style.scss?b6f2","webpack:///./modules/components/tag-input.style.scss?b1ec","webpack:///./modules/components/tag/tag-component.style.scss?84c7"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@angular/core\"), require(\"@angular/forms\"), require(\"@angular/common\"), require(\"rxjs/add/operator/debounceTime\"), require(\"rxjs/add/operator/filter\"), require(\"rxjs/add/operator/map\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@angular/core\", \"@angular/forms\", \"@angular/common\", \"rxjs/add/operator/debounceTime\", \"rxjs/add/operator/filter\", \"rxjs/add/operator/map\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ng2-tag-input\"] = factory(require(\"@angular/core\"), require(\"@angular/forms\"), require(\"@angular/common\"), require(\"rxjs/add/operator/debounceTime\"), require(\"rxjs/add/operator/filter\"), require(\"rxjs/add/operator/map\"));\n\telse\n\t\troot[\"ng2-tag-input\"] = factory(root[\"@angular/core\"], root[\"@angular/forms\"], root[\"@angular/common\"], root[\"rxjs/add/operator/debounceTime\"], root[\"rxjs/add/operator/filter\"], root[\"rxjs/add/operator/map\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_6__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 23);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap efab512e6b5301134387","module.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"@angular/core\"\n// module id = 0\n// module chunks = 0 1","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"@angular/forms\"\n// module id = 1\n// module chunks = 0 1","module.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"@angular/common\"\n// module id = 2\n// module chunks = 0 1","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap) {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n  var base64 = new Buffer(JSON.stringify(sourceMap)).toString('base64');\n  var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n  return '/*# ' + data + ' */';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader/lib/css-base.js\n// module id = 3\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"rxjs/add/operator/debounceTime\"\n// module id = 4\n// module chunks = 0 1","module.exports = __WEBPACK_EXTERNAL_MODULE_5__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"rxjs/add/operator/filter\"\n// module id = 5\n// module chunks = 0 1","module.exports = __WEBPACK_EXTERNAL_MODULE_6__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"rxjs/add/operator/map\"\n// module id = 6\n// module chunks = 0 1","import {\n    Component,\n    ViewChild,\n    forwardRef,\n    Inject,\n    TemplateRef,\n    ContentChildren,\n    Input,\n    QueryList,\n    HostListener\n} from '@angular/core';\n\nimport { TagInputComponent } from '../tag-input';\nimport { Ng2Dropdown, Ng2MenuItem } from 'ng2-material-dropdown';\nimport { EventEmitter } from '@angular/core';\nimport { TagModel } from '../helpers/accessor';\nimport { Observable } from 'rxjs/Observable';\n\nimport 'rxjs/add/operator/map';\nimport 'rxjs/add/operator/filter';\n\n@Component({\n    selector: 'tag-input-dropdown',\n    templateUrl: './tag-input-dropdown.template.html'\n})\nexport class TagInputDropdown {\n    /**\n     * @name dropdown\n     */\n    @ViewChild(Ng2Dropdown) public dropdown: Ng2Dropdown;\n\n    /**\n     * @name menuTemplate\n     * @desc reference to the template if provided by the user\n     * @type {TemplateRef}\n     */\n    @ContentChildren(TemplateRef) public templates: QueryList<TemplateRef<any>>;\n\n    /**\n     * @name offset\n     * @type {string}\n     */\n    @Input() public offset = '50 0';\n\n    /**\n     * @name focusFirstElement\n     * @type {boolean}\n     */\n    @Input() public focusFirstElement = false;\n\n    /**\n     * - show autocomplete dropdown if the value of input is empty\n     * @name showDropdownIfEmpty\n     * @type {boolean}\n     */\n    @Input() public showDropdownIfEmpty = false;\n\n    /**\n     * @description observable passed as input which populates the autocomplete items\n     * @name autocompleteObservable\n     */\n    @Input() public autocompleteObservable: (text: string) => Observable<any>;\n\n    /**\n     * - desc minimum text length in order to display the autocomplete dropdown\n     * @name minimumTextLength\n     */\n    @Input() public minimumTextLength = 1;\n\n    /**\n     * - number of items to display in the autocomplete dropdown\n     * @name limitItemsTo\n     */\n    @Input() public limitItemsTo: number;\n\n    /**\n     * @name displayBy\n     */\n    @Input() public displayBy = 'display';\n\n    /**\n     * @name identifyBy\n     */\n    @Input() public identifyBy = 'value';\n\n    /**\n     * @description a function a developer can use to implement custom matching for the autocomplete\n     * @name matchingFn\n     */\n    @Input() public matchingFn: (value: string, target: TagModel) => boolean =\n         (value: string, target: TagModel): boolean => {\n            const targetValue = target[this.displayBy].toString();\n\n            return targetValue && targetValue\n                .toLowerCase()\n                .indexOf(value.toLowerCase()) >= 0;\n    }\n\n    /**\n     * @name appendToBody\n     * @type {boolean}\n     */\n    @Input() public appendToBody = true;\n\n    /**\n     * list of items that match the current value of the input (for autocomplete)\n     * @name items\n     * @type {TagModel[]}\n     */\n    public items: TagModel[] = [];\n\n    /**\n     * @name _autocompleteItems\n     * @type {Array}\n     * @private\n     */\n    private _autocompleteItems: TagModel[] = [];\n\n    /**\n     * @name autocompleteItems\n     * @param items\n     */\n    public set autocompleteItems(items: TagModel[]) {\n        this._autocompleteItems = items;\n    }\n\n    /**\n     * @name autocompleteItems\n     * @desc array of items that will populate the autocomplete\n     * @type {Array<string>}\n     */\n    @Input() public get autocompleteItems(): TagModel[] {\n        const items = this._autocompleteItems;\n\n        if (!items) {\n            return [];\n        }\n\n        return items.map((item: TagModel) => {\n            return typeof item === 'string' ? {\n                [this.displayBy]: item,\n                [this.identifyBy]: item\n            } : item;\n        });\n    }\n\n    constructor(@Inject(forwardRef(() => TagInputComponent)) private tagInput: TagInputComponent) {}\n\n    public ngOnInit() {\n        this.onItemClicked()\n            .subscribe(this.addNewItem.bind(this));\n\n        // reset itemsMatching array when the dropdown is hidden\n        this.onHide()\n            .subscribe(this.resetItems.bind(this));\n\n        this.tagInput.inputForm.onKeyup\n            .subscribe(this.show.bind(this));\n\n        if (this.autocompleteObservable) {\n            this.tagInput\n                .onTextChange\n                .filter((text: string) => text.trim().length >= this.minimumTextLength)\n                .subscribe(this.getItemsFromObservable.bind(this));\n        }\n    }\n\n    /**\n     * @name updatePosition\n     */\n    public updatePosition(): void {\n        this.dropdown.menu.updatePosition(this.tagInput.inputForm.getElementPosition());\n    }\n\n    /**\n     * @name isVisible\n     * @returns {boolean}\n     */\n    public get isVisible(): boolean {\n        return this.dropdown.menu.state.menuState.isVisible;\n    }\n\n    /**\n     * @name onHide\n     * @returns {EventEmitter<Ng2Dropdown>}\n     */\n    public onHide(): EventEmitter<Ng2Dropdown> {\n        return this.dropdown.onHide;\n    }\n\n    /**\n     * @name onItemClicked\n     * @returns {EventEmitter<string>}\n     */\n    public onItemClicked(): EventEmitter<string> {\n        return this.dropdown.onItemClicked;\n    }\n\n    /**\n     * @name selectedItem\n     * @returns {Ng2MenuItem}\n     */\n    public get selectedItem(): Ng2MenuItem {\n        return this.dropdown.menu.state.dropdownState.selectedItem;\n    }\n\n    /**\n     * @name state\n     * @returns {DropdownStateService}\n     */\n    public get state(): any {\n        return this.dropdown.menu.state;\n    }\n\n    /**\n     * @name addNewItem\n     * @param item {Ng2MenuItem}\n     */\n    private addNewItem(item: Ng2MenuItem): void {\n        if (!item) {\n            return;\n        }\n\n        const display = typeof item.value === 'string' ? item.value : item.value[this.displayBy];\n        const value = typeof item.value === 'string' ? item.value : item.value[this.identifyBy];\n        const model = {...item.value, display, value};\n\n        // add item\n        this.tagInput.addItem(true, model);\n\n        // hide dropdown\n        this.dropdown.hide();\n    }\n\n    /**\n     *\n     * @name show\n     */\n    public show(): void {\n        const value: string = this.tagInput.inputForm.value.value.trim();\n        const position: ClientRect = this.tagInput.inputForm.getElementPosition();\n        const items: TagModel[] = this.getMatchingItems(value);\n        const hasItems: boolean = items.length > 0;\n        const showDropdownIfEmpty: boolean = this.showDropdownIfEmpty && hasItems && !value;\n        const hasMinimumText: boolean = value.length >= this.minimumTextLength;\n\n        const assertions: boolean[] = [\n            hasItems,\n            this.isVisible === false,\n            hasMinimumText\n        ];\n\n        const showDropdown: boolean = (assertions.filter(item => item).length === assertions.length) ||\n            showDropdownIfEmpty;\n        const hideDropdown: boolean = this.isVisible && (!hasItems || !hasMinimumText);\n\n        // set items\n        this.setItems(items);\n\n        if (showDropdown && !this.isVisible) {\n            this.dropdown.show(position);\n        } else if (hideDropdown) {\n            this.dropdown.hide();\n        }\n    }\n\n    /**\n     * @name scrollListener\n     */\n    @HostListener('window:scroll')\n    public scrollListener(): void {\n        if (!this.isVisible) {\n            return;\n        }\n\n        this.updatePosition();\n    }\n\n    /**\n     *\n     * @param value\n     * @returns {any}\n     */\n    private getMatchingItems(value: string): TagModel[] {\n        if (!value && !this.showDropdownIfEmpty) {\n            return [];\n        }\n\n        return this.autocompleteItems.filter((item: TagModel) => {\n            const hasValue: boolean = this.tagInput.tags.some(tag => {\n                const identifyBy = this.tagInput.identifyBy;\n                const model = typeof tag.model === 'string' ? tag.model : tag.model[identifyBy];\n\n                return model === item[this.identifyBy];\n            });\n\n            return this.matchingFn(value, item) && hasValue === false;\n        });\n    }\n\n    /**\n     * @name setItems\n     */\n    private setItems(items: TagModel[]): void {\n        this.items = items.slice(0, this.limitItemsTo || items.length);\n    }\n\n    /**\n     * @name resetItems\n     */\n    private resetItems(): void {\n        this.items = [];\n    }\n\n    /**\n     * @name populateItems\n     * @param data\n     */\n    private populateItems(data: any): TagInputDropdown {\n        this.autocompleteItems = data.map(item => {\n            return typeof item === 'string' ? {\n                [this.displayBy]: item,\n                [this.identifyBy]: item\n            } : item;\n        });\n\n        return this;\n    }\n\n    /**\n     * @name getItemsFromObservable\n     * @param text\n     */\n    private getItemsFromObservable(text: string): void {\n        this.setLoadingState(true);\n\n        this.autocompleteObservable(text)\n            .subscribe(data => {\n                // hide loading animation\n                this.setLoadingState(false)\n                    // add items\n                    .populateItems(data)\n                    // show the dropdown\n                    .show();\n\n        }, () => this.setLoadingState(false));\n    }\n\n    /**\n     * @name setLoadingState\n     * @param state\n     * @return {TagInputDropdown}\n     */\n    private setLoadingState(state: boolean): TagInputDropdown {\n        this.tagInput.isLoading = state;\n\n        return this;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// modules/components/dropdown/tag-input-dropdown.component.ts","import {\n    Component,\n    animate,\n    trigger,\n    style,\n    transition,\n    keyframes,\n    state,\n    Input\n} from '@angular/core';\n\n@Component({\n    selector: 'tag-ripple',\n    styles: [`\n        :host {\n            width: 100%;\n            height: 100%;\n            left: 0;\n            overflow: hidden;\n            position: absolute;\n        }\n        \n        .tag-ripple {\n            background: rgba(0, 0, 0, 0.1);\n            top: 50%;\n            left: 50%;\n            height: 100%;\n            transform: translate(-50%, -50%);\n            position: absolute;\n        }\n    `],\n    template: `\n        <div class=\"tag-ripple\" [@ink]=\"state\"></div>\n    `,\n    animations: [\n        trigger('ink', [\n            state('none', style({width: 0, opacity: 0})),\n            transition('none => clicked', [\n                animate(300, keyframes([\n                    style({opacity: 1, offset: 0, width: '30%', borderRadius: '100%'}),\n                    style({opacity: 1, offset: 0.5, width: '50%'}),\n                    style({opacity: 0.5, offset: 1, width: '100%', borderRadius: '16px'})\n                ]))\n            ])\n        ])\n    ]\n})\nexport class TagRipple {\n    @Input() public state: string = 'none';\n}\n\n\n\n// WEBPACK FOOTER //\n// modules/components/tag/tag-ripple.component.ts","import {\n    Component,\n    Input,\n    Output,\n    EventEmitter,\n    TemplateRef,\n    ElementRef,\n    Renderer,\n    HostListener,\n    ViewChild\n} from '@angular/core';\n\nimport { TagModel } from '../helpers/accessor';\nimport { TagRipple } from './tag-ripple.component';\n\n// angular universal hacks\n/* tslint:disable-next-line */\nconst KeyboardEvent = (global as any).KeyboardEvent;\n\n// mocking navigator\nconst navigator = typeof window !== 'undefined' ? window.navigator : {\n    userAgent: 'Chrome',\n    vendor: 'Google Inc'\n};\n\nconst isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n@Component({\n    selector: 'tag',\n    templateUrl: './tag.template.html',\n    styleUrls: [ './tag-component.style.scss' ]\n})\nexport class TagComponent {\n    /**\n     * @name model {TagModel}\n     */\n    @Input() public model: TagModel;\n\n    /**\n     * @name readonly {boolean}\n     */\n    @Input() public readonly: boolean;\n\n    /**\n     * @name removable {boolean}\n     */\n    @Input() public removable: boolean;\n\n    /**\n     * @name editable {boolean}\n     */\n    @Input() public editable: boolean;\n\n    /**\n     * @name template {TemplateRef<any>}\n     */\n    @Input() public template: TemplateRef<any>;\n\n    /**\n     * @name displayBy {string}\n     */\n    @Input() public displayBy: string;\n\n    /**\n     * @name identifyBy {string}\n     */\n    @Input() public identifyBy: string;\n\n    /**\n     * @name index {number}\n     */\n    @Input() public index: number;\n\n    /**\n     * @name hasRipple\n     */\n    @Input() public hasRipple: boolean;\n\n    /**\n     * @name disabled\n     */\n    @Input() public disabled = false;\n\n    /**\n     * @name onSelect\n     * @type {EventEmitter<TagModel>}\n     */\n    @Output() public onSelect: EventEmitter<TagModel> = new EventEmitter<TagModel>();\n\n    /**\n     * @name onRemove\n     * @type {EventEmitter<TagModel>}\n     */\n    @Output() public onRemove: EventEmitter<TagModel> = new EventEmitter<TagModel>();\n\n    /**\n     * @name onBlur\n     * @type {EventEmitter<TagModel>}\n     */\n    @Output() public onBlur: EventEmitter<TagModel> = new EventEmitter<TagModel>();\n\n    /**\n     * @name onKeyDown\n     * @type {EventEmitter<any>}\n     */\n    @Output() public onKeyDown: EventEmitter<any> = new EventEmitter<any>();\n\n    /**\n     * @name onTagEdited\n     * @type {EventEmitter<any>}\n     */\n    @Output() public onTagEdited: EventEmitter<TagModel> = new EventEmitter<TagModel>();\n\n    /**\n     * @name editModeActivated\n     * @type {boolean}\n     */\n    public editModeActivated = false;\n\n    /**\n     * @name rippleState\n     * @type {string}\n     */\n    public rippleState = 'none';\n\n    /**\n     * @name ripple {TagRipple}\n     */\n    @ViewChild(TagRipple) public ripple: TagRipple;\n\n    constructor(public element: ElementRef, public renderer: Renderer) {}\n\n    /**\n     * @name select\n     */\n    public select($event?: MouseEvent): void {\n        if (this.readonly || this.disabled) {\n            return;\n        }\n\n        if ($event) {\n            $event.stopPropagation();\n        }\n\n        this.focus();\n\n        this.onSelect.emit(this.model);\n    }\n\n    /**\n     * @name remove\n     */\n    public remove(): void {\n        this.onRemove.emit(this);\n    }\n\n    /**\n     * @name focus\n     */\n    public focus(): void {\n        this.renderer.invokeElementMethod(this.element.nativeElement, 'focus');\n    }\n\n    /**\n     * @name keydown\n     * @param event\n     */\n    @HostListener('keydown', ['$event'])\n    public keydown(event: KeyboardEvent): void {\n        if (this.editModeActivated) {\n            event.keyCode === 13 ? this.disableEditMode(event) : this.storeNewValue();\n            return;\n        }\n\n        this.onKeyDown.emit({event, model: this.model});\n    }\n\n    /**\n     * @name blink\n     */\n    public blink(): void {\n        const classList = this.element.nativeElement.classList;\n        classList.add('blink');\n\n        setTimeout(() => classList.remove('blink'), 50);\n    }\n\n    /**\n     * @name toggleEditMode\n     */\n    public toggleEditMode(event?: MouseEvent): void {\n        if (this.editModeActivated) {\n            this.storeNewValue();\n        } else {\n            this.element.nativeElement.querySelector('[contenteditable]').focus();\n        }\n\n        this.editModeActivated = !this.editModeActivated;\n        this.renderer.setElementClass(this.element.nativeElement, 'tag--editing', this.editModeActivated);\n    }\n\n    /**\n     * @name getDisplayValue\n     * @param item\n     * @returns {string}\n     */\n    public getDisplayValue(item: TagModel): string {\n        return typeof item === 'string' ? item : item[this.displayBy];\n    }\n\n    /**\n     * @name getContentEditableText\n     * @returns {string}\n     */\n    private getContentEditableText(): string {\n        return this.element.nativeElement.querySelector('[contenteditable]').innerText.trim();\n    }\n\n    /**\n     * @name disableEditMode\n     * @param $event\n     */\n    private disableEditMode($event: KeyboardEvent): void {\n        this.editModeActivated = false;\n        $event.preventDefault();\n    }\n\n    /**\n     * @name storeNewValue\n     */\n    private storeNewValue(): void {\n        const input = this.getContentEditableText();\n\n        const exists = (model: TagModel) => {\n            return typeof model === 'string' ?\n                model === input :\n                model[this.identifyBy] === input;\n        };\n\n        // if the value changed, replace the value in the model\n        if (exists(this.model)) {\n            const itemValue = this.model[this.identifyBy];\n\n            this.model = typeof this.model === 'string' ? input :\n                {[this.identifyBy]: itemValue, [this.displayBy]: itemValue};\n\n            // emit output\n            this.onTagEdited.emit(this.model);\n        }\n    }\n\n    /**\n     * @name isDeleteIconVisible\n     * @returns {boolean}\n     */\n    private isDeleteIconVisible(): boolean {\n        return !this.readonly &&\n                !this.disabled &&\n                this.removable &&\n                !this.editModeActivated;\n    }\n\n    /**\n     * @desc returns whether the ripple is visible or not\n     * only works in Chrome\n     * @name isRippleVisible\n     * @returns {boolean}\n     */\n    public isRippleVisible(): boolean {\n        return !this.readonly &&\n            !this.editModeActivated &&\n            isChrome &&\n            this.hasRipple;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// modules/components/tag/tag.component.ts","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@angular/core\"), require(\"@angular/common\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@angular/core\", \"@angular/common\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ng2-dropdown\"] = factory(require(\"@angular/core\"), require(\"@angular/common\"));\n\telse\n\t\troot[\"ng2-dropdown\"] = factory(root[\"@angular/core\"], root[\"@angular/common\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    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\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\tvar ng2_dropdown_1 = __webpack_require__(1);\r\n\texports.Ng2Dropdown = ng2_dropdown_1.Ng2Dropdown;\r\n\tvar ng2_dropdown_menu_1 = __webpack_require__(6);\r\n\texports.Ng2DropdownMenu = ng2_dropdown_menu_1.Ng2DropdownMenu;\r\n\tvar ng2_dropdown_button_1 = __webpack_require__(3);\r\n\texports.Ng2DropdownButton = ng2_dropdown_button_1.Ng2DropdownButton;\r\n\tvar ng2_menu_item_1 = __webpack_require__(8);\r\n\texports.Ng2MenuItem = ng2_menu_item_1.Ng2MenuItem;\r\n\tvar core_1 = __webpack_require__(2);\r\n\tvar common_1 = __webpack_require__(16);\r\n\tvar dropdown_state_service_1 = __webpack_require__(9);\r\n\texports.DropdownStateService = dropdown_state_service_1.DropdownStateService;\r\n\tvar Ng2DropdownModule = (function () {\r\n\t    function Ng2DropdownModule() {\r\n\t    }\r\n\t    return Ng2DropdownModule;\r\n\t}());\r\n\tNg2DropdownModule = __decorate([\r\n\t    core_1.NgModule({\r\n\t        exports: [\r\n\t            ng2_menu_item_1.Ng2MenuItem,\r\n\t            ng2_dropdown_button_1.Ng2DropdownButton,\r\n\t            ng2_dropdown_menu_1.Ng2DropdownMenu,\r\n\t            ng2_dropdown_1.Ng2Dropdown\r\n\t        ],\r\n\t        declarations: [\r\n\t            ng2_dropdown_1.Ng2Dropdown,\r\n\t            ng2_menu_item_1.Ng2MenuItem,\r\n\t            ng2_dropdown_button_1.Ng2DropdownButton,\r\n\t            ng2_dropdown_menu_1.Ng2DropdownMenu,\r\n\t        ],\r\n\t        imports: [common_1.CommonModule]\r\n\t    })\r\n\t], Ng2DropdownModule);\r\n\texports.Ng2DropdownModule = Ng2DropdownModule;\r\n\t\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    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\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\tvar core_1 = __webpack_require__(2);\r\n\tvar ng2_dropdown_button_1 = __webpack_require__(3);\r\n\tvar ng2_dropdown_menu_1 = __webpack_require__(6);\r\n\tvar dropdown_state_service_1 = __webpack_require__(9);\r\n\tvar Ng2Dropdown = (function () {\r\n\t    function Ng2Dropdown(state) {\r\n\t        this.state = state;\r\n\t        this.dynamicUpdate = true;\r\n\t        this.onItemClicked = new core_1.EventEmitter();\r\n\t        this.onItemSelected = new core_1.EventEmitter();\r\n\t        this.onShow = new core_1.EventEmitter();\r\n\t        this.onHide = new core_1.EventEmitter();\r\n\t    }\r\n\t    Ng2Dropdown.prototype.toggleMenu = function (position) {\r\n\t        if (position === void 0) { position = this.button.getPosition(); }\r\n\t        this.state.menuState.isVisible ? this.hide() : this.show(position);\r\n\t    };\r\n\t    Ng2Dropdown.prototype.hide = function () {\r\n\t        this.menu.hide();\r\n\t        this.onHide.emit(this);\r\n\t    };\r\n\t    Ng2Dropdown.prototype.show = function (position) {\r\n\t        if (position === void 0) { position = this.button.getPosition(); }\r\n\t        this.menu.show();\r\n\t        this.menu.updatePosition(position);\r\n\t        this.onShow.emit(this);\r\n\t    };\r\n\t    Ng2Dropdown.prototype.scrollListener = function () {\r\n\t        if (this.state.menuState.isVisible && this.button && this.dynamicUpdate) {\r\n\t            this.menu.updatePosition(this.button.getPosition());\r\n\t        }\r\n\t    };\r\n\t    Ng2Dropdown.prototype.ngOnInit = function () {\r\n\t        var _this = this;\r\n\t        this.state.dropdownState.onItemClicked.subscribe(function (item) {\r\n\t            _this.onItemClicked.emit(item);\r\n\t            if (item.preventClose) {\r\n\t                return;\r\n\t            }\r\n\t            _this.hide.call(_this);\r\n\t        });\r\n\t        if (this.button) {\r\n\t            this.button.onMenuToggled.subscribe(function () {\r\n\t                _this.toggleMenu();\r\n\t            });\r\n\t        }\r\n\t        this.state.dropdownState.onItemSelected.subscribe(function (item) { return _this.onItemSelected.emit(item); });\r\n\t    };\r\n\t    return Ng2Dropdown;\r\n\t}());\r\n\t__decorate([\r\n\t    core_1.ContentChild(ng2_dropdown_button_1.Ng2DropdownButton),\r\n\t    __metadata(\"design:type\", ng2_dropdown_button_1.Ng2DropdownButton)\r\n\t], Ng2Dropdown.prototype, \"button\", void 0);\r\n\t__decorate([\r\n\t    core_1.ContentChild(ng2_dropdown_menu_1.Ng2DropdownMenu),\r\n\t    __metadata(\"design:type\", ng2_dropdown_menu_1.Ng2DropdownMenu)\r\n\t], Ng2Dropdown.prototype, \"menu\", void 0);\r\n\t__decorate([\r\n\t    core_1.Input(),\r\n\t    __metadata(\"design:type\", Boolean)\r\n\t], Ng2Dropdown.prototype, \"dynamicUpdate\", void 0);\r\n\t__decorate([\r\n\t    core_1.Output(),\r\n\t    __metadata(\"design:type\", core_1.EventEmitter)\r\n\t], Ng2Dropdown.prototype, \"onItemClicked\", void 0);\r\n\t__decorate([\r\n\t    core_1.Output(),\r\n\t    __metadata(\"design:type\", core_1.EventEmitter)\r\n\t], Ng2Dropdown.prototype, \"onItemSelected\", void 0);\r\n\t__decorate([\r\n\t    core_1.Output(),\r\n\t    __metadata(\"design:type\", core_1.EventEmitter)\r\n\t], Ng2Dropdown.prototype, \"onShow\", void 0);\r\n\t__decorate([\r\n\t    core_1.Output(),\r\n\t    __metadata(\"design:type\", core_1.EventEmitter)\r\n\t], Ng2Dropdown.prototype, \"onHide\", void 0);\r\n\t__decorate([\r\n\t    core_1.HostListener('window:scroll'),\r\n\t    __metadata(\"design:type\", Function),\r\n\t    __metadata(\"design:paramtypes\", []),\r\n\t    __metadata(\"design:returntype\", void 0)\r\n\t], Ng2Dropdown.prototype, \"scrollListener\", null);\r\n\tNg2Dropdown = __decorate([\r\n\t    core_1.Component({\r\n\t        selector: 'ng2-dropdown',\r\n\t        template: __webpack_require__(15),\r\n\t        providers: [dropdown_state_service_1.DropdownStateService]\r\n\t    }),\r\n\t    __metadata(\"design:paramtypes\", [dropdown_state_service_1.DropdownStateService])\r\n\t], Ng2Dropdown);\r\n\texports.Ng2Dropdown = Ng2Dropdown;\r\n\t\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    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\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\tvar core_1 = __webpack_require__(2);\r\n\tvar Ng2DropdownButton = (function () {\r\n\t    function Ng2DropdownButton(element) {\r\n\t        this.element = element;\r\n\t        this.onMenuToggled = new core_1.EventEmitter();\r\n\t        this.showCaret = true;\r\n\t    }\r\n\t    Ng2DropdownButton.prototype.toggleMenu = function () {\r\n\t        this.onMenuToggled.emit(true);\r\n\t    };\r\n\t    Ng2DropdownButton.prototype.getPosition = function () {\r\n\t        return this.element.nativeElement.getBoundingClientRect();\r\n\t    };\r\n\t    return Ng2DropdownButton;\r\n\t}());\r\n\t__decorate([\r\n\t    core_1.Output(),\r\n\t    __metadata(\"design:type\", core_1.EventEmitter)\r\n\t], Ng2DropdownButton.prototype, \"onMenuToggled\", void 0);\r\n\t__decorate([\r\n\t    core_1.Input(),\r\n\t    __metadata(\"design:type\", Boolean)\r\n\t], Ng2DropdownButton.prototype, \"showCaret\", void 0);\r\n\tNg2DropdownButton = __decorate([\r\n\t    core_1.Component({\r\n\t        selector: 'ng2-dropdown-button',\r\n\t        styles: [__webpack_require__(4)],\r\n\t        template: __webpack_require__(5)\r\n\t    }),\r\n\t    __metadata(\"design:paramtypes\", [core_1.ElementRef])\r\n\t], Ng2DropdownButton);\r\n\texports.Ng2DropdownButton = Ng2DropdownButton;\r\n\t\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \".ng2-dropdown-button {\\n  font-family: \\\"Roboto\\\", \\\"Helvetica Neue\\\", Helvetica, Arial;\\n  background: #fff;\\n  padding: 0.45rem 0.25rem;\\n  font-size: 14px;\\n  letter-spacing: 0.08rem;\\n  color: #444;\\n  outline: 0;\\n  cursor: pointer;\\n  font-weight: 400;\\n  border: none;\\n  border-bottom: 1px solid #efefef;\\n  text-align: left;\\n  min-width: 100px;\\n  width: 100%;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  max-width: 150px; }\\n\\n.ng2-dropdown-button:hover {\\n  color: #222; }\\n\\n.ng2-dropdown-button:active, .ng2-dropdown-button:focus {\\n  color: #222;\\n  border-bottom: 2px solid #2196F3; }\\n\\n.ng2-dropdown-button__label {\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 1 95%;\\n          flex: 1 1 95%; }\\n\\n.ng2-dropdown-button__caret {\\n  width: 12px;\\n  height: 12px;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 1 6%;\\n          flex: 1 1 6%; }\\n\\n:host-context(.ng2-dropdown-button--icon) .ng2-dropdown-button {\\n  border: none;\\n  min-width: 40px;\\n  width: 40px;\\n  border-radius: 100%;\\n  -webkit-transition: all 0.2s;\\n  transition: all 0.2s;\\n  text-align: center;\\n  height: 40px;\\n  padding: 0.5em; }\\n\\n:host-context(.ng2-dropdown-button--icon) .ng2-dropdown-button:active {\\n  background: rgba(0, 0, 0, 0.2); }\\n\"\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<button class='ng2-dropdown-button' type=\\\"button\\\" (click)=\\\"toggleMenu()\\\" tabindex=\\\"0s\\\">\\n    <span class=\\\"ng2-dropdown-button__label\\\">\\n        <ng-content></ng-content>\\n    </span>\\n\\n    <span class=\\\"ng2-dropdown-button__caret\\\" *ngIf=\\\"showCaret\\\">\\n        <svg enable-background=\\\"new 0 0 32 32\\\" height=\\\"16px\\\" id=\\\"Слой_1\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 32 32\\\" width=\\\"16px\\\" xml:space=\\\"preserve\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"><path d=\\\"M24.285,11.284L16,19.571l-8.285-8.288c-0.395-0.395-1.034-0.395-1.429,0  c-0.394,0.395-0.394,1.035,0,1.43l8.999,9.002l0,0l0,0c0.394,0.395,1.034,0.395,1.428,0l8.999-9.002  c0.394-0.395,0.394-1.036,0-1.431C25.319,10.889,24.679,10.889,24.285,11.284z\\\" fill=\\\"#121313\\\" id=\\\"Expand_More\\\"/><g/><g/><g/><g/><g/><g/></svg>\\n    </span>\\n</button>\\n\";\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    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\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\tvar core_1 = __webpack_require__(2);\r\n\tvar actions_1 = __webpack_require__(7);\r\n\tvar ng2_menu_item_1 = __webpack_require__(8);\r\n\tvar dropdown_state_service_1 = __webpack_require__(9);\r\n\tvar Ng2DropdownMenu = (function () {\r\n\t    function Ng2DropdownMenu(state, element, renderer) {\r\n\t        this.state = state;\r\n\t        this.element = element;\r\n\t        this.renderer = renderer;\r\n\t        this.width = 4;\r\n\t        this.focusFirstElement = true;\r\n\t        this.appendToBody = true;\r\n\t        this.listeners = {\r\n\t            arrowHandler: undefined,\r\n\t            handleKeypress: undefined\r\n\t        };\r\n\t    }\r\n\t    Ng2DropdownMenu.prototype.show = function () {\r\n\t        this.state.menuState.isVisible = true;\r\n\t        this.listeners.handleKeypress = this.renderer.listen(document.body, 'keydown', this.handleKeypress.bind(this));\r\n\t        this.listeners.arrowHandler = this.renderer.listen(window, 'keydown', actions_1.arrowKeysHandler);\r\n\t    };\r\n\t    Ng2DropdownMenu.prototype.hide = function () {\r\n\t        this.state.menuState.isVisible = false;\r\n\t        this.state.dropdownState.unselect();\r\n\t        this.listeners.arrowHandler();\r\n\t        this.listeners.handleKeypress();\r\n\t    };\r\n\t    Ng2DropdownMenu.prototype.updatePosition = function (position) {\r\n\t        this.position = position;\r\n\t        this.ngDoCheck();\r\n\t    };\r\n\t    Ng2DropdownMenu.prototype.handleKeypress = function ($event) {\r\n\t        var key = $event.keyCode;\r\n\t        var items = this.items.toArray();\r\n\t        var index = items.indexOf(this.state.dropdownState.selectedItem);\r\n\t        if (!actions_1.ACTIONS.hasOwnProperty(key)) {\r\n\t            return;\r\n\t        }\r\n\t        actions_1.ACTIONS[key].call(this, index, items, this.state.dropdownState);\r\n\t    };\r\n\t    Ng2DropdownMenu.prototype.getMenuElement = function () {\r\n\t        return this.element.nativeElement.children[0];\r\n\t    };\r\n\t    Ng2DropdownMenu.prototype.calcPositionOffset = function (position) {\r\n\t        if (!position) {\r\n\t            return;\r\n\t        }\r\n\t        var element = this.getMenuElement();\r\n\t        var supportPageOffset = window.pageXOffset !== undefined;\r\n\t        var isCSS1Compat = ((document.compatMode || '') === 'CSS1Compat');\r\n\t        var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ?\r\n\t            document.documentElement.scrollLeft : document.body.scrollLeft;\r\n\t        var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ?\r\n\t            document.documentElement.scrollTop : document.body.scrollTop;\r\n\t        var _a = this.applyOffset(position.top + (this.appendToBody ? y - 15 : 0) + \"px\", position.left + x - 5 + \"px\"), top = _a.top, left = _a.left;\r\n\t        var clientWidth = element.clientWidth;\r\n\t        var clientHeight = element.clientHeight;\r\n\t        var marginFromBottom = parseInt(top) + clientHeight + (this.appendToBody ? 0 : y - 15);\r\n\t        var marginFromRight = parseInt(left) + clientWidth;\r\n\t        var windowScrollHeight = window.innerHeight + window.scrollY;\r\n\t        var windowScrollWidth = window.innerWidth + window.scrollX;\r\n\t        if (marginFromBottom >= windowScrollHeight) {\r\n\t            top = parseInt(top.replace('px', '')) - clientHeight + \"px\";\r\n\t        }\r\n\t        if (marginFromRight >= windowScrollWidth) {\r\n\t            var marginRight = marginFromRight - windowScrollWidth + 30;\r\n\t            left = parseInt(left.replace('px', '')) - marginRight + \"px\";\r\n\t        }\r\n\t        return { top: top, left: left };\r\n\t    };\r\n\t    Ng2DropdownMenu.prototype.applyOffset = function (top, left) {\r\n\t        if (!this.offset) {\r\n\t            return { top: top, left: left };\r\n\t        }\r\n\t        var offset = this.offset.split(' ');\r\n\t        if (!offset[1]) {\r\n\t            offset[1] = '0';\r\n\t        }\r\n\t        top = parseInt(top.replace('px', '')) + parseInt(offset[0]) + \"px\";\r\n\t        left = parseInt(left.replace('px', '')) + parseInt(offset[1]) + \"px\";\r\n\t        return { top: top, left: left };\r\n\t    };\r\n\t    Ng2DropdownMenu.prototype.ngOnInit = function () {\r\n\t        if (this.appendToBody) {\r\n\t            document.body.appendChild(this.element.nativeElement);\r\n\t        }\r\n\t    };\r\n\t    Ng2DropdownMenu.prototype.ngDoCheck = function () {\r\n\t        if (this.state.menuState.isVisible && this.position) {\r\n\t            var element = this.getMenuElement();\r\n\t            var position = this.calcPositionOffset(this.position);\r\n\t            if (position) {\r\n\t                this.renderer.setElementStyle(element, 'top', position.top);\r\n\t                this.renderer.setElementStyle(element, 'left', position.left);\r\n\t            }\r\n\t            if (this.focusFirstElement &&\r\n\t                this.items.first &&\r\n\t                !this.state.dropdownState.selectedItem) {\r\n\t                this.state.dropdownState.select(this.items.first, false);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    Ng2DropdownMenu.prototype.ngOnDestroy = function () {\r\n\t        var elem = this.element.nativeElement;\r\n\t        elem.parentNode.removeChild(elem);\r\n\t        if (this.listeners.handleKeypress) {\r\n\t            this.listeners.handleKeypress();\r\n\t        }\r\n\t    };\r\n\t    return Ng2DropdownMenu;\r\n\t}());\r\n\t__decorate([\r\n\t    core_1.Input(),\r\n\t    __metadata(\"design:type\", Number)\r\n\t], Ng2DropdownMenu.prototype, \"width\", void 0);\r\n\t__decorate([\r\n\t    core_1.Input(),\r\n\t    __metadata(\"design:type\", Boolean)\r\n\t], Ng2DropdownMenu.prototype, \"focusFirstElement\", void 0);\r\n\t__decorate([\r\n\t    core_1.Input(),\r\n\t    __metadata(\"design:type\", String)\r\n\t], Ng2DropdownMenu.prototype, \"offset\", void 0);\r\n\t__decorate([\r\n\t    core_1.Input(),\r\n\t    __metadata(\"design:type\", Boolean)\r\n\t], Ng2DropdownMenu.prototype, \"appendToBody\", void 0);\r\n\t__decorate([\r\n\t    core_1.ContentChildren(ng2_menu_item_1.Ng2MenuItem),\r\n\t    __metadata(\"design:type\", core_1.QueryList)\r\n\t], Ng2DropdownMenu.prototype, \"items\", void 0);\r\n\tNg2DropdownMenu = __decorate([\r\n\t    core_1.Component({\r\n\t        selector: 'ng2-dropdown-menu',\r\n\t        styles: [__webpack_require__(13)],\r\n\t        template: __webpack_require__(14),\r\n\t        animations: [\r\n\t            core_1.trigger('fade', [\r\n\t                core_1.state('visible', core_1.style({ display: 'block', overflow: '*' })),\r\n\t                core_1.state('hidden', core_1.style({ display: 'none', overflow: 'hidden', width: '0' })),\r\n\t                core_1.transition('hidden => visible', [\r\n\t                    core_1.animate(150, core_1.keyframes([\r\n\t                        core_1.style({ opacity: 0, offset: 0, height: '0', width: '0' }),\r\n\t                        core_1.style({ opacity: 1, offset: 1, height: '*', width: '*' }),\r\n\t                    ]))\r\n\t                ]),\r\n\t                core_1.transition('visible => hidden', [\r\n\t                    core_1.animate(250, core_1.keyframes([\r\n\t                        core_1.style({ opacity: 1, offset: 0, height: '*', width: '*' }),\r\n\t                        core_1.style({ opacity: 0, offset: 1, height: '0', width: '0' }),\r\n\t                    ]))\r\n\t                ])\r\n\t            ]),\r\n\t            core_1.trigger('opacity', [\r\n\t                core_1.transition('hidden => visible', [\r\n\t                    core_1.animate(450, core_1.keyframes([\r\n\t                        core_1.style({ opacity: 0, offset: 0 }),\r\n\t                        core_1.style({ opacity: 1, offset: 1 }),\r\n\t                    ]))\r\n\t                ]),\r\n\t                core_1.transition('visible => hidden', [\r\n\t                    core_1.animate(200, core_1.keyframes([\r\n\t                        core_1.style({ opacity: 1, offset: 0 }),\r\n\t                        core_1.style({ opacity: 0.5, offset: 0.3 }),\r\n\t                        core_1.style({ opacity: 0, offset: 1 }),\r\n\t                    ]))\r\n\t                ])\r\n\t            ])\r\n\t        ]\r\n\t    }),\r\n\t    __metadata(\"design:paramtypes\", [dropdown_state_service_1.DropdownStateService,\r\n\t        core_1.ElementRef,\r\n\t        core_1.Renderer])\r\n\t], Ng2DropdownMenu);\r\n\texports.Ng2DropdownMenu = Ng2DropdownMenu;\r\n\t\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\tvar KEYS = {\r\n\t    BACKSPACE: 9,\r\n\t    PREV: 38,\r\n\t    NEXT: 40,\r\n\t    ENTER: 13\r\n\t};\r\n\tvar onSwitchNext = function (index, items, state) {\r\n\t    if (index < items.length - 1) {\r\n\t        state.select(items[index + 1], true);\r\n\t    }\r\n\t};\r\n\tvar onSwitchPrev = function (index, items, state) {\r\n\t    if (index > 0) {\r\n\t        state.select(items[index - 1], true);\r\n\t    }\r\n\t};\r\n\tvar onBackspace = function (index, items, state) {\r\n\t    if (index < items.length - 1) {\r\n\t        state.select(items[index + 1], true);\r\n\t    }\r\n\t    else {\r\n\t        state.select(items[0], true);\r\n\t    }\r\n\t};\r\n\tvar onItemClicked = function (index, items, state) {\r\n\t    return state.selectedItem ? state.selectedItem.click() : undefined;\r\n\t};\r\n\texports.ACTIONS = (_a = {},\r\n\t    _a[KEYS.BACKSPACE] = onBackspace,\r\n\t    _a[KEYS.PREV] = onSwitchPrev,\r\n\t    _a[KEYS.NEXT] = onSwitchNext,\r\n\t    _a[KEYS.ENTER] = onItemClicked,\r\n\t    _a);\r\n\tfunction arrowKeysHandler(event) {\r\n\t    if ([38, 40].indexOf(event.keyCode) > -1) {\r\n\t        event.preventDefault();\r\n\t    }\r\n\t}\r\n\texports.arrowKeysHandler = arrowKeysHandler;\r\n\tvar _a;\r\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    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\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\tvar core_1 = __webpack_require__(2);\r\n\tvar dropdown_state_service_1 = __webpack_require__(9);\r\n\tvar Ng2MenuItem = (function () {\r\n\t    function Ng2MenuItem(state, element, renderer) {\r\n\t        this.state = state;\r\n\t        this.element = element;\r\n\t        this.renderer = renderer;\r\n\t        this.preventClose = false;\r\n\t    }\r\n\t    Object.defineProperty(Ng2MenuItem.prototype, \"isSelected\", {\r\n\t        get: function () {\r\n\t            return this === this.state.dropdownState.selectedItem;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Ng2MenuItem.prototype.select = function ($event) {\r\n\t        this.state.dropdownState.select(this, true);\r\n\t        if ($event) {\r\n\t            $event.stopPropagation();\r\n\t            $event.preventDefault();\r\n\t        }\r\n\t    };\r\n\t    Ng2MenuItem.prototype.click = function () {\r\n\t        this.state.dropdownState.onItemClicked.emit(this);\r\n\t    };\r\n\t    Ng2MenuItem.prototype.focus = function () {\r\n\t        this.renderer.invokeElementMethod(this.element.nativeElement.children[0], 'focus');\r\n\t    };\r\n\t    return Ng2MenuItem;\r\n\t}());\r\n\t__decorate([\r\n\t    core_1.Input(),\r\n\t    __metadata(\"design:type\", Boolean)\r\n\t], Ng2MenuItem.prototype, \"preventClose\", void 0);\r\n\t__decorate([\r\n\t    core_1.Input(),\r\n\t    __metadata(\"design:type\", Object)\r\n\t], Ng2MenuItem.prototype, \"value\", void 0);\r\n\tNg2MenuItem = __decorate([\r\n\t    core_1.Component({\r\n\t        selector: 'ng2-menu-item',\r\n\t        styles: [__webpack_require__(11)],\r\n\t        template: __webpack_require__(12)\r\n\t    }),\r\n\t    __metadata(\"design:paramtypes\", [dropdown_state_service_1.DropdownStateService,\r\n\t        core_1.ElementRef,\r\n\t        core_1.Renderer])\r\n\t], Ng2MenuItem);\r\n\texports.Ng2MenuItem = Ng2MenuItem;\r\n\t\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    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\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\tvar core_1 = __webpack_require__(2);\r\n\tvar ng2_dropdown_state_1 = __webpack_require__(10);\r\n\tvar DropdownStateService = (function () {\r\n\t    function DropdownStateService() {\r\n\t        this.menuState = {\r\n\t            isVisible: false,\r\n\t            toString: function () {\r\n\t                return this.isVisible === true ? 'visible' : 'hidden';\r\n\t            }\r\n\t        };\r\n\t        this.dropdownState = new ng2_dropdown_state_1.Ng2DropdownState();\r\n\t    }\r\n\t    return DropdownStateService;\r\n\t}());\r\n\tDropdownStateService = __decorate([\r\n\t    core_1.Injectable()\r\n\t], DropdownStateService);\r\n\texports.DropdownStateService = DropdownStateService;\r\n\t\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\tvar core_1 = __webpack_require__(2);\r\n\tvar Ng2DropdownState = (function () {\r\n\t    function Ng2DropdownState() {\r\n\t        this.onItemSelected = new core_1.EventEmitter();\r\n\t        this.onItemClicked = new core_1.EventEmitter();\r\n\t    }\r\n\t    Object.defineProperty(Ng2DropdownState.prototype, \"selectedItem\", {\r\n\t        get: function () {\r\n\t            return this._selectedItem;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Ng2DropdownState.prototype.select = function (item, dispatchEvent) {\r\n\t        if (dispatchEvent === void 0) { dispatchEvent = true; }\r\n\t        this._selectedItem = item;\r\n\t        if (!dispatchEvent) {\r\n\t            return;\r\n\t        }\r\n\t        item.focus();\r\n\t        this.onItemSelected.emit(item);\r\n\t    };\r\n\t    Ng2DropdownState.prototype.unselect = function () {\r\n\t        this._selectedItem = undefined;\r\n\t    };\r\n\t    return Ng2DropdownState;\r\n\t}());\r\n\texports.Ng2DropdownState = Ng2DropdownState;\r\n\t\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \".ng2-menu-item {\\n  font-family: \\\"Roboto\\\", \\\"Helvetica Neue\\\", Helvetica, Arial;\\n  background: #fff;\\n  color: rgba(0, 0, 0, 0.87);\\n  cursor: pointer;\\n  font-size: 0.9em;\\n  text-transform: none;\\n  font-weight: 400;\\n  letter-spacing: 0.03em;\\n  height: 48px;\\n  line-height: 48px;\\n  padding: 0.3em 1.25rem;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n  overflow: hidden;\\n  -webkit-transition: background 0.25s;\\n  transition: background 0.25s; }\\n\\n.ng2-menu-item--selected {\\n  background: rgba(158, 158, 158, 0.2);\\n  outline: 0; }\\n\\n.ng2-menu-item:focus {\\n  outline: 0; }\\n\\n.ng2-menu-item:active {\\n  background: rgba(158, 158, 158, 0.4); }\\n\\n:host(ng2-menu-item) /deep/ [ng2-menu-item-icon] {\\n  vertical-align: middle;\\n  font-size: 28px;\\n  width: 1.5em;\\n  height: 30px;\\n  color: rgba(0, 0, 0, 0.44); }\\n\"\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<div class='ng2-menu-item'\\n     role=\\\"button\\\"\\n     tabindex=\\\"0\\\"\\n     [class.ng2-menu-item--selected]=\\\"isSelected\\\"\\n     (keydown.enter)=\\\"click()\\\"\\n     (click)=\\\"click()\\\"\\n     (mouseover)=\\\"select()\\\">\\n        <ng-content></ng-content>\\n</div>\\n\";\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \".ng2-dropdown-menu {\\n  z-index: 100;\\n  overflow-y: auto;\\n  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.3);\\n  position: absolute;\\n  padding: 0.5em 0;\\n  background: #fff;\\n  border-radius: 1px;\\n  max-height: 400px;\\n  width: 260px;\\n  display: block; }\\n\\n.ng2-dropdown-menu.ng2-dropdown-menu--inside-element {\\n  position: fixed; }\\n\\n.ng2-dropdown-menu.ng2-dropdown-menu--width--2 {\\n  width: 200px; }\\n\\n.ng2-dropdown-menu.ng2-dropdown-menu--width--4 {\\n  width: 260px; }\\n\\n.ng2-dropdown-menu.ng2-dropdown-menu--width--6 {\\n  width: 320px; }\\n\\n.ng2-dropdown-backdrop {\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n  z-index: 1;\\n  overflow: hidden; }\\n\\n:host /deep/ .ng2-menu-divider {\\n  height: 1px;\\n  min-height: 1px;\\n  max-height: 1px;\\n  width: 100%;\\n  display: block;\\n  background: #f9f9f9; }\\n\"\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<!-- MENU -->\\n<div class='ng2-dropdown-menu ng2-dropdown-menu---width--{{ width }}'\\n     [class.ng2-dropdown-menu--inside-element]=\\\"!appendToBody\\\"\\n     [class.ng2-dropdown-menu--open]=\\\"state.menuState.isVisible\\\"\\n     [@fade]=\\\"state.menuState.toString()\\\">\\n        <div class=\\\"ng2-dropdown-menu__options-container\\\"\\n             [@opacity]=\\\"state.menuState.toString()\\\">\\n            <ng-content></ng-content>\\n        </div>\\n</div>\\n\\n<!-- BACKDROP -->\\n<div class=\\\"ng2-dropdown-backdrop\\\" *ngIf=\\\"state.menuState.isVisible\\\" (click)=\\\"hide()\\\"></div>\\n\";\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<div class=\\\"ng2-dropdown-container\\\">\\n    <ng-content select=\\\"ng2-dropdown-button\\\"></ng-content>\\n    <ng-content select=\\\"ng2-dropdown-menu\\\"></ng-content>\\n</div>\\n\";\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=ng2-dropdown.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ng2-material-dropdown/dist/ng2-dropdown.bundle.js\n// module id = 10\n// module chunks = 0","import {\n    Component,\n    Input,\n    Output,\n    EventEmitter,\n    Renderer,\n    ViewChild\n} from '@angular/core';\n\nimport {\n    FormGroup,\n    FormControl,\n    Validators,\n    ValidatorFn,\n    AbstractControl\n} from '@angular/forms';\n\n@Component({\n    selector: 'tag-input-form',\n    styleUrls: [ './tag-input-form.style.scss' ],\n    templateUrl: './tag-input-form.template.html'\n})\nexport class TagInputForm {\n    /**\n     * @name onSubmit\n     * @type {EventEmitter}\n     */\n    @Output() public onSubmit: EventEmitter<any> = new EventEmitter();\n\n    /**\n     * @name onBlur\n     * @type {EventEmitter}\n     */\n    @Output() public onBlur: EventEmitter<any> = new EventEmitter();\n\n    /**\n     * @name onFocus\n     * @type {EventEmitter}\n     */\n    @Output() public onFocus: EventEmitter<any> = new EventEmitter();\n\n    /**\n     * @name onKeyup\n     * @type {EventEmitter}\n     */\n    @Output() public onKeyup: EventEmitter<any> = new EventEmitter();\n\n    /**\n     * @name onKeydown\n     * @type {EventEmitter}\n     */\n    @Output() public onKeydown: EventEmitter<any> = new EventEmitter();\n\n    // inputs\n\n    /**\n     * @name placeholder\n     * @type {string}\n     */\n    @Input() public placeholder: string;\n\n    /**\n     * @name validators\n     * @type {ValidatorFn[]}\n     */\n    @Input() public validators: ValidatorFn[] = [];\n\n    /**\n     * @name inputId\n     * @type {string}\n     */\n    @Input() public inputId: string;\n\n    /**\n     * @name inputClass\n     * @type {string}\n     */\n    @Input() public inputClass: string;\n\n    /**\n     * @name inputText\n     */\n    @Input() public get inputText(): string {\n        return this.inputTextValue;\n    }\n\n    /**\n     * @name tabindex\n     * @desc pass through the specified tabindex to the input\n     * @type {string}\n     */\n    @Input() public tabindex: string = undefined;\n  \n    /**\n     * @name disabled\n     */\n    @Input() public disabled = false;\n\n    /**\n     * @name inputText\n     * @param text {string}\n     */\n    public set inputText(text: string) {\n        this.inputTextValue = text;\n        this.inputTextChange.emit(text);\n    }\n\n    /**\n     * @name input\n     */\n    @ViewChild('input') public input;\n\n    /**\n     * @name form\n     */\n    public form: FormGroup;\n\n    /**\n     * @name inputTextChange\n     * @type {EventEmitter}\n     */\n    @Output() public inputTextChange: EventEmitter<string> = new EventEmitter();\n\n    /**\n     * @name inputTextValue\n     */\n    public inputTextValue = '';\n\n    constructor(private renderer: Renderer) {}\n\n    public ngOnInit() {\n        // creating form\n        this.form = new FormGroup({\n            item: new FormControl('', Validators.compose(this.validators))\n        });\n    }\n\n\t/**\n     * @name value\n     * @returns {AbstractControl}\n     */\n    public get value(): AbstractControl {\n        return this.form.get('item');\n    }\n\n\t/**\n     * @name isInputFocused\n     * @returns {boolean}\n     */\n    public isInputFocused(): boolean {\n        return document.activeElement === this.input.nativeElement;\n    }\n\n\t/**\n     * @name getErrorMessages\n     * @param messages\n     * @returns {string[]}\n     */\n    public getErrorMessages(messages): string[] {\n        return Object.keys(messages)\n            .filter(err => this.value.hasError(err))\n            .map(err => messages[err]);\n    }\n\n    /**\n     * @name hasErrors\n     * @returns {boolean}\n     */\n    public hasErrors(): boolean {\n        return this.form.dirty &&\n            this.form.value.item &&\n            this.form.invalid;\n    }\n\n\t/**\n     * @name focus\n     */\n    public focus(): void {\n        this.renderer.invokeElementMethod(this.input.nativeElement, 'focus');\n    }\n\n    /**\n     * @name blur\n     */\n    public blur(): void {\n        this.renderer.invokeElementMethod(this.input.nativeElement, 'blur');\n    }\n\n\t/**\n     * @name getElementPosition\n     * @returns {ClientRect}\n     */\n    public getElementPosition(): ClientRect {\n        return this.input.nativeElement.getBoundingClientRect();\n    }\n\n    /**\n     * - removes input from the component\n     * @name destroy\n     */\n    public destroy(): void {\n        const input = this.input.nativeElement;\n        this.renderer.invokeElementMethod(input.parentElement, 'removeChild', [input]);\n    }\n\n    /**\n     * @name onKeyDown\n     * @param $event\n     */\n    public onKeyDown($event) {\n        return this.onKeydown.emit($event);\n    }\n\n    /**\n     * @name submit\n     */\n    public submit($event: any): void {\n        this.onSubmit.emit($event);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// modules/components/tag-input-form/tag-input-form.component.ts","import {\n    Component,\n    forwardRef,\n    HostBinding,\n    Input,\n    Output,\n    EventEmitter,\n    Renderer,\n    ViewChild,\n    ViewChildren,\n    ContentChildren,\n    ContentChild,\n    OnInit,\n    TemplateRef,\n    QueryList\n} from '@angular/core';\n\nimport { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TagInputAccessor, TagModel } from './helpers/accessor';\nimport { TagInputForm } from './tag-input-form/tag-input-form.component';\nimport { TagInputDropdown } from './dropdown/tag-input-dropdown.component';\nimport { TagComponent } from './tag/tag.component';\n\nimport 'rxjs/add/operator/debounceTime';\n\nimport { animations } from './animations';\nimport * as constants from './helpers/constants';\nimport listen from './helpers/listen';\n\nconst CUSTOM_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => TagInputComponent),\n    multi: true\n};\n\n/**\n * A component for entering a list of terms to be used with ngModel.\n */\n@Component({\n    selector: 'tag-input',\n    providers: [ CUSTOM_ACCESSOR ],\n    styleUrls: [ './tag-input.style.scss' ],\n    templateUrl: './tag-input.template.html',\n    animations: animations\n})\nexport class TagInputComponent extends TagInputAccessor implements OnInit {\n    /**\n     * @name separatorKeys\n     * @desc keyboard keys with which a user can separate items\n     * @type {Array}\n     */\n    @Input() public separatorKeys: string[] = [];\n\n    /**\n     * @name separatorKeyCodes\n     * @desc keyboard key codes with which a user can separate items\n     * @type {Array}\n     */\n    @Input() public separatorKeyCodes: number[] = [];\n\n    /**\n     * @name placeholder\n     * @desc the placeholder of the input text\n     * @type {string}\n     */\n    @Input() public placeholder: string = constants.PLACEHOLDER;\n\n    /**\n     * @name secondaryPlaceholder\n     * @desc placeholder to appear when the input is empty\n     * @type {string}\n     */\n    @Input() public secondaryPlaceholder: string = constants.SECONDARY_PLACEHOLDER;\n\n    /**\n     * @name maxItems\n     * @desc maximum number of items that can be added\n     * @type {number}\n     */\n    @Input() public maxItems: number;\n\n    /**\n     * @name readonly\n     * @desc if set to true, the user cannot remove/addItem new items\n     * @type {boolean}\n     */\n    @Input() public readonly: boolean;\n\n    /**\n     * @name transform\n     * @desc function passed to the component to transform the value of the items, or reject them instead\n     */\n    @Input() public transform: (item: string) => string = (item) => item;\n\n    /**\n     * @name validators\n     * @desc array of Validators that are used to validate the tag before it gets appended to the list\n     * @type {Validators[]}\n     */\n    @Input() public validators = [];\n\n    /**\n    * - if set to true, it will only possible to add items from the autocomplete\n    * @name onlyFromAutocomplete\n    * @type {Boolean}\n    */\n    @Input() public onlyFromAutocomplete = false;\n\n\t/**\n     * @name errorMessages\n     * @type {Map<string, string>}\n     */\n    @Input() public errorMessages: {[key: string]: string} = {};\n\n    /**\n     * @name theme\n     * @type {string}\n     */\n    @Input() public theme: string;\n\n    /**\n     * @name onTextChangeDebounce\n     * @type {number}\n     */\n    @Input() public onTextChangeDebounce = 250;\n\n    /**\n     * - custom id assigned to the input\n     * @name id\n     */\n    @Input() public inputId: string;\n\n    /**\n     * - custom class assigned to the input\n     */\n    @Input() public inputClass: string;\n\n    /**\n     * - option to clear text input when the form is blurred\n     * @name clearOnBlur\n     */\n    @Input() public clearOnBlur: string;\n\n    /**\n     * - hideForm\n     * @name clearOnBlur\n     */\n    @Input() public hideForm: string;\n\n    /**\n     * @name addOnBlur\n     */\n    @Input() public addOnBlur: boolean;\n\n    /**\n     * @name addOnPaste\n     */\n    @Input() public addOnPaste: boolean;\n\n    /**\n     * - pattern used with the native method split() to separate patterns in the string pasted\n     * @name pasteSplitPattern\n     */\n    @Input() public pasteSplitPattern = ',';\n\n    /**\n     * @name blinkIfDupe\n     * @type {boolean}\n     */\n    @Input() public blinkIfDupe = true;\n\n    /**\n     * @name removable\n     * @type {boolean}\n     */\n    @Input() public removable = true;\n\n    /**\n     * @name editable\n     * @type {boolean}\n     */\n    @Input() public editable: boolean = undefined;\n\n    /**\n     * @name allowDupes\n     * @type {boolean}\n     */\n    @Input() public allowDupes = false;\n\n    /**\n     * @description if set to true, the newly added tags will be added as strings, and not objects\n     * @name modelAsStrings\n     * @type {boolean}\n     */\n    @Input() public modelAsStrings = false;\n\n    /**\n     * @name trimTags\n     * @type {boolean}\n     */\n    @Input() public trimTags = true;\n\n    /**\n     * @name inputText\n     */\n    @Input() public get inputText(): string {\n        return this.inputTextValue;\n    }\n\n    /**\n     * @name ripple\n     * @type {boolean}\n     */\n    @Input() public ripple = true;\n\n    /**\n     * @name tabindex\n     * @desc pass through the specified tabindex to the input\n     * @type {string}\n     */\n    @Input() public tabindex: string = undefined;\n\n    /**\n     * @name disabled\n     * @type {boolean}\n     */\n    @Input() public disabled = undefined;\n\n    /**\n     * @name onAdd\n     * @desc event emitted when adding a new item\n     * @type {EventEmitter<string>}\n     */\n    @Output() public onAdd = new EventEmitter<TagModel>();\n\n    /**\n     * @name onRemove\n     * @desc event emitted when removing an existing item\n     * @type {EventEmitter<string>}\n     */\n    @Output() public onRemove = new EventEmitter<TagModel>();\n\n    /**\n     * @name onSelect\n     * @desc event emitted when selecting an item\n     * @type {EventEmitter<string>}\n     */\n    @Output() public onSelect = new EventEmitter<TagModel>();\n\n    /**\n     * @name onFocus\n     * @desc event emitted when the input is focused\n     * @type {EventEmitter<string>}\n     */\n    @Output() public onFocus = new EventEmitter<string>();\n\n    /**\n     * @name onFocus\n     * @desc event emitted when the input is blurred\n     * @type {EventEmitter<string>}\n     */\n    @Output() public onBlur = new EventEmitter<string>();\n\n    /**\n     * @name onTextChange\n     * @desc event emitted when the input value changes\n     * @type {EventEmitter<string>}\n     */\n    @Output() public onTextChange = new EventEmitter<TagModel>();\n\n    /**\n     * - output triggered when text is pasted in the form\n     * @name onPaste\n     * @type {EventEmitter<TagModel>}\n     */\n    @Output() public onPaste = new EventEmitter<string>();\n\n    /**\n     * - output triggered when tag entered is not valid\n     * @name onValidationError\n     * @type {EventEmitter<string>}\n     */\n    @Output() public onValidationError = new EventEmitter<TagModel>();\n\n    /**\n     * - output triggered when tag is edited\n     * @name onTagEdited\n     * @type {EventEmitter<TagModel>}\n     */\n    @Output() public onTagEdited = new EventEmitter<TagModel>();\n\n    /**\n     * @name dropdown\n     */\n    @ContentChild(TagInputDropdown) public dropdown: TagInputDropdown;\n\n    /**\n     * @name template\n     * @desc reference to the template if provided by the user\n     * @type {TemplateRef}\n     */\n    @ContentChildren(TemplateRef, {descendants: false}) public templates: QueryList<TemplateRef<any>>;\n\n\t/**\n     * @name inputForm\n     * @type {TagInputForm}\n     */\n    @ViewChild(TagInputForm) public inputForm: TagInputForm;\n\n    /**\n     * @name selectedTag\n     * @desc reference to the current selected tag\n     * @type {String}\n     */\n    public selectedTag: TagModel;\n\n    /**\n     * @name isLoading\n     * @type {boolean}\n     */\n    public isLoading = false;\n\n    /**\n     * @name inputText\n     * @param text\n     */\n    public set inputText(text: string) {\n        this.inputTextValue = text;\n        this.inputTextChange.emit(text);\n    }\n\n    /**\n     * @name tags\n     * @desc list of Element items\n     */\n    @ViewChildren(TagComponent) public tags: QueryList<TagComponent>;\n\n    /**\n     * @name listeners\n     * @desc array of events that get fired using @fireEvents\n     * @type []\n     */\n    private listeners = {\n        [constants.KEYDOWN]: <{(fun): any}[]>[],\n        [constants.KEYUP]: <{(fun): any}[]>[],\n        change: <{(fun): any}[]>[]\n    };\n\n    /**\n     * @description emitter for the 2-way data binding inputText value\n     * @name inputTextChange\n     * @type {EventEmitter}\n     */\n    @Output() public inputTextChange: EventEmitter<string> = new EventEmitter();\n\n    /**\n     * @description private variable to bind get/set\n     * @name inputTextValue\n     * @type {string}\n     */\n    public inputTextValue = '';\n\n\n    /**\n     * @desc removes the tab index if it is set - it will be passed through to the input\n     * @name tabindexAttr\n     * @type {string}\n     */\n    @HostBinding('attr.tabindex')\n    public get tabindexAttr(): string {\n        return this.tabindex !== undefined ? '-1' : undefined;\n    }\n\n    constructor(private renderer: Renderer) {\n        super();\n    }\n\n    /**\n     * @name removeItem\n     * @desc removes an item from the array of the model\n     * @param tag {TagModel}\n     * @param index {number}\n     */\n    public removeItem(tag: TagModel, index: number): void {\n        this.items = this.getItemsWithout(index);\n\n        // if the removed tag was selected, set it as undefined\n        if (this.selectedTag === tag) {\n            this.selectedTag = undefined;\n        }\n\n        // focus input\n        this.focus(true, false);\n\n        // emit remove event\n        this.onRemove.emit(tag);\n    }\n\n    /**\n     * @name addItem\n     * @desc adds the current text model to the items array\n     */\n    public addItem(isFromAutocomplete = false, item: TagModel = this.formValue): void {\n        const display = this.getItemDisplay(item);\n        const inputValue = this.setInputValue(display);\n        const isFormInvalid = !this.inputForm.form.valid || !inputValue;\n\n        // return early if the form is invalid\n        if (isFormInvalid) {\n            return;\n        }\n\n        const tag = this.createTag(isFromAutocomplete ? item : inputValue);\n        const isValid = this.isTagValid(tag, isFromAutocomplete);\n\n        // append new tag if everything is valid\n        if (isValid) {\n            this.appendNewTag(tag);\n\n            // emit event\n            this.onAdd.emit(tag);\n        } else {\n            // otherwise, emit validation error event\n            this.onValidationError.emit(tag);\n        }\n\n        // reset control and focus input\n        this.setInputValue('');\n\n        // focus input\n        this.focus(true, false);\n    }\n\n    /**\n     *\n     * @param tag\n     * @param isFromAutocomplete\n     */\n    public isTagValid(tag: TagModel, isFromAutocomplete = false): boolean {\n        const selectedItem = this.dropdown ? this.dropdown.selectedItem : undefined;\n\n        if (selectedItem && !isFromAutocomplete) {\n            return;\n        }\n\n        const dupe = this.findDupe(tag, isFromAutocomplete);\n        const hasDupe = !!dupe && dupe !== undefined;\n\n        // if so, give a visual cue and return false\n        if (!this.allowDupes && hasDupe && this.blinkIfDupe) {\n            const item = this.tags.find(_tag => {\n                return this.getItemValue(_tag.model) === this.getItemValue(dupe);\n            });\n\n            if (!!item) {\n                item.blink();\n            }\n        }\n\n        const fromAutocomplete = isFromAutocomplete && this.onlyFromAutocomplete;\n        const assertions = [\n            // 1. there must be no dupe OR dupes are allowed\n            !hasDupe || this.allowDupes === true,\n\n            // 2. check max items has not been reached\n            this.maxItemsReached === false,\n\n            // 3. check item comes from autocomplete or onlyFromAutocomplete is false\n            ((fromAutocomplete) || this.onlyFromAutocomplete === false)\n        ];\n\n        return assertions.filter(item => item).length === assertions.length;\n    }\n\n    /**\n     * @name appendNewTag\n     * @param tag\n     */\n    public appendNewTag(tag: TagModel): void {\n        const newTag = this.modelAsStrings ? tag[this.identifyBy] : tag;\n\n        // push item to array of items\n        this.items = [...this.items, newTag];\n    }\n\n    /**\n     * @name createTag\n     * @param model\n     * @returns {{}}\n     */\n    public createTag(model: TagModel): TagModel {\n        const trim = (val: TagModel, key: string): TagModel => {\n            return typeof val === 'string' ? val.trim() : val[key];\n        };\n\n        return {\n            ...typeof model !== 'string' ? model : {},\n            [this.displayBy]: this.trimTags ? trim(model, this.displayBy) : model,\n            [this.identifyBy]: this.trimTags ? trim(model, this.identifyBy) : model\n        };\n    }\n\n    /**\n     * @name selectonRemoveItem\n     * @desc selects item passed as parameter as the selected tag\n     * @param item\n     */\n    public selectItem(item: TagModel): void {\n        if (this.readonly || !item) {\n            return;\n        }\n\n        this.selectedTag = item;\n\n        // emit event\n        this.onSelect.emit(item);\n    }\n\n    /**\n     * @name fireEvents\n     * @desc goes through the list of the events for a given eventName, and fires each of them\n     * @param eventName\n     * @param $event\n     */\n    public fireEvents(eventName: string, $event?): void {\n        this.listeners[eventName].forEach(listener => listener.call(this, $event));\n    }\n\n    /**\n     * @name handleKeydown\n     * @desc handles action when the user hits a keyboard key\n     * @param data\n     */\n    public handleKeydown(data: any): void {\n        const event = data.event;\n        const key = event.keyCode || event.which;\n\n        switch (constants.KEY_PRESS_ACTIONS[key]) {\n            case constants.ACTIONS_KEYS.DELETE:\n                if (this.selectedTag && this.removable) {\n                    this.removeItem(this.selectedTag, this.items.indexOf(this.selectedTag));\n                }\n                break;\n            case constants.ACTIONS_KEYS.SWITCH_PREV:\n                this.switchPrev(data.model);\n                break;\n            case constants.ACTIONS_KEYS.SWITCH_NEXT:\n                this.switchNext(data.model);\n                break;\n            case constants.ACTIONS_KEYS.TAB:\n                this.switchNext(data.model);\n                break;\n            default:\n                return;\n        }\n\n        // prevent default behaviour\n        event.preventDefault();\n    }\n\n    /**\n     * @name seyInputValue\n     * @param value\n     * @returns {string}\n     */\n    public setInputValue(value: string): string {\n        const item = value ? this.transform(value) : '';\n        const control = this.getControl();\n\n        // update form value with the transformed item\n        control.setValue(item);\n\n        return item;\n    }\n\n    /**\n     * @name getControl\n     * @returns {FormControl}\n     */\n    private getControl(): FormControl {\n        return <FormControl>this.inputForm.value;\n    }\n\n\t/**\n     * @name focus\n     * @param applyFocus\n     * @param displayAutocomplete\n     */\n    public focus(applyFocus = false, displayAutocomplete = false): void {\n        if (this.readonly) {\n            return;\n        }\n\n        this.selectedTag = undefined;\n\n        if (applyFocus) {\n            this.inputForm.focus();\n            this.onFocus.emit(this.formValue);\n        }\n\n        if (displayAutocomplete && this.dropdown) {\n            this.dropdown.show();\n        }\n    }\n\n\t/**\n     * @name blur\n     */\n    public blur(): void {\n        this.onTouched();\n        this.onBlur.emit(this.formValue);\n    }\n\n    /**\n     * @name hasErrors\n     * @returns {boolean}\n     */\n    public hasErrors(): boolean {\n        return this.inputForm && this.inputForm.hasErrors();\n    }\n\n    /**\n     * @name isInputFocused\n     * @returns {boolean}\n     */\n    public isInputFocused(): boolean {\n        return this.inputForm && this.inputForm.isInputFocused();\n    }\n\n    /**\n     * - this is the one way I found to tell if the template has been passed and it is not\n     * the template for the menu item\n     * @name hasCustomTemplate\n     */\n    public hasCustomTemplate(): boolean {\n        const template = this.templates ? this.templates.first : undefined;\n        const menuTemplate = this.dropdown && this.dropdown.templates ? this.dropdown.templates.first : undefined;\n\n        return template && template !== menuTemplate;\n    }\n\n    /**\n     * @name switchNext\n     * @param item { TagModel }\n     */\n    public switchNext(item: TagModel): void {\n        if (this.tags.last.model === item) {\n            this.focus(true);\n            return;\n        }\n\n        const tags = this.tags.toArray();\n        const tagIndex = tags.findIndex(tag => tag.model === item);\n        const tag = tags[tagIndex + 1];\n\n        tag.select.call(tag);\n    }\n\n    /**\n     * @name switchPrev\n     * @param item { TagModel }\n     */\n    public switchPrev(item: TagModel): void {\n        if (this.tags.first.model !== item) {\n            const tags = this.tags.toArray();\n            const tagIndex = tags.findIndex(tag => tag.model === item);\n            const tag = tags[tagIndex - 1];\n\n            tag.select.call(tag);\n        }\n    }\n\n\t/**\n     * @name maxItemsReached\n     * @returns {boolean}\n     */\n    public get maxItemsReached(): boolean {\n        return this.maxItems !== undefined && this.items.length >= this.maxItems;\n    }\n\n    /**\n     * @name formValue\n     * @return {any}\n     */\n    public get formValue(): string {\n        return this.inputForm.value.value;\n    }\n\n    /**\n     * @name ngOnInit\n     */\n    public ngOnInit(): void {\n        // if the number of items specified in the model is > of the value of maxItems\n        // degrade gracefully and let the max number of items to be the number of items in the model\n        // though, warn the user.\n        const maxItemsReached = this.maxItems !== undefined && this.items && this.items.length > this.maxItems;\n\n        if (maxItemsReached) {\n            this.maxItems = this.items.length;\n            console.warn(constants.MAX_ITEMS_WARNING);\n        }\n    }\n\n    /**\n     * @name ngAfterViewInit\n     */\n    public ngAfterViewInit(): void {\n        // set up listeners\n\n        this.setUpKeypressListeners();\n        this.setupSeparatorKeysListener();\n        this.setUpInputKeydownListeners();\n\n        if (this.onTextChange.observers.length) {\n            this.setUpTextChangeSubscriber();\n        }\n\n        // if clear on blur is set to true, subscribe to the event and clear the text's form\n        if (this.clearOnBlur || this.addOnBlur) {\n            this.setUpOnBlurSubscriber();\n        }\n\n        // if addOnPaste is set to true, register the handler and add items\n        if (this.addOnPaste) {\n            this.setUpOnPasteListener();\n        }\n\n        // if hideForm is set to true, remove the input\n        if (this.hideForm) {\n            this.inputForm.destroy();\n        }\n    }\n\n    /**\n     * @name setupSeparatorKeysListener\n     */\n    private setupSeparatorKeysListener(): void {\n        const useSeparatorKeys = this.separatorKeyCodes.length > 0 || this.separatorKeys.length > 0;\n\n        listen.call(this, constants.KEYDOWN, ($event) => {\n            const hasKeyCode = this.separatorKeyCodes.indexOf($event.keyCode) >= 0;\n            const hasKey = this.separatorKeys.indexOf($event.key) >= 0;\n\n            if (hasKeyCode || hasKey) {\n                $event.preventDefault();\n                this.addItem();\n            }\n\n        }, useSeparatorKeys);\n    }\n\n    /**\n     * @name setUpKeypressListeners\n     */\n    private setUpKeypressListeners(): void {\n        // setting up the keypress listeners\n        listen.call(this, constants.KEYDOWN, ($event) => {\n            const isCorrectKey = $event.keyCode === 37 || $event.keyCode === 8;\n\n            if (isCorrectKey &&\n                !this.formValue &&\n                this.items.length) {\n                    this.tags.last.select.call(this.tags.last);\n            }\n        });\n    }\n\n    /**\n     * @name setUpKeydownListeners\n     */\n    private setUpInputKeydownListeners(): void {\n        this.inputForm.onKeydown.subscribe(event => {\n            this.fireEvents('keydown', event);\n\n            if (event.key === 'Backspace' && this.formValue === '') {\n                event.preventDefault();\n            }\n        });\n    }\n\n    /**\n     * @name setUpOnPasteListener\n     */\n    private setUpOnPasteListener(): void {\n        const input = this.inputForm.input.nativeElement;\n\n        // attach listener to input\n        this.renderer.listen(input, 'paste', this.onPasteCallback.bind(this));\n    }\n\n    /**\n     * @name setUpTextChangeSubscriber\n     */\n    private setUpTextChangeSubscriber(): void {\n        this.inputForm.form.valueChanges\n            .debounceTime(this.onTextChangeDebounce)\n            .subscribe(() => this.onTextChange.emit(this.formValue));\n    }\n\n    /**\n     * @name setUpOnBlurSubscriber\n     */\n    private setUpOnBlurSubscriber(): void {\n        this.inputForm\n            .onBlur\n            .filter(() => !(this.dropdown && this.dropdown.isVisible))\n            .subscribe(() => {\n                if (this.addOnBlur) {\n                    this.addItem();\n                }\n\n                this.setInputValue('');\n            });\n    }\n\n    /**\n     * @name findDupe\n     * @param tag\n     * @param isFromAutocomplete\n     * @return {undefined|TagModel}\n     */\n    private findDupe(tag: TagModel, isFromAutocomplete: boolean): TagModel {\n        const identifyBy = isFromAutocomplete ? this.dropdown.identifyBy : this.identifyBy;\n        return this.items.find((item: TagModel) => this.getItemValue(item) === tag[identifyBy]);\n    }\n\n    /**\n     * @name trackBy\n     * @param item\n     * @returns {string}\n     */\n    private trackBy(item: TagModel): string {\n        return item[this.identifyBy];\n    }\n\n    /**\n     * @name onPasteCallback\n     * @param data\n     */\n    private onPasteCallback(data: ClipboardEvent): void {\n        const text = data.clipboardData.getData('text/plain');\n\n        text.split(this.pasteSplitPattern)\n            .map(item => this.createTag(item))\n            .forEach(item => this.addItem(false, item));\n\n        this.onPaste.emit(text);\n\n        setTimeout(() => this.setInputValue(''), 0);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// modules/components/tag-input.ts","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 13\n// module chunks = 0","export * from './icon';\n\n\n\n// WEBPACK FOOTER //\n// modules/components/icon/index.ts","export * from './tag-input';\n\n\n\n// WEBPACK FOOTER //\n// modules/components/index.ts","import {Pipe, PipeTransform} from '@angular/core';\n\nconst escape = s => s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n@Pipe({\n    name: 'highlight'\n})\nexport class HighlightPipe implements PipeTransform {\n    /**\n     * @name transform\n     * @param value {string}\n     * @param arg {string}\n     * @return {string}\n     */\n    public transform(value: string, arg: string): string {\n        if (!arg.trim()) {\n            return value;\n        }\n\n        try {\n            const regex = new RegExp(`(${escape(arg)})`, 'i');\n            return value.replace(regex, '<b>$1</b>');\n        } catch (e) {\n            return value;\n        }\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// modules/components/pipes/highlight.pipe.ts","export * from './tag-input-form.component';\n\n\n\n// WEBPACK FOOTER //\n// modules/components/tag-input-form/index.ts","import {\n    animate,\n    trigger,\n    style,\n    transition,\n    keyframes,\n    state,\n    AnimationEntryMetadata\n} from '@angular/core';\n\n/**\n * @name getAnimations\n * @return {[AnimationEntryMetadata]}\n */\nexport const animations: AnimationEntryMetadata[] = [\n    trigger('flyInOut', [\n        state('in', style({transform: 'translateX(0)'})),\n        transition(':enter', [\n            // animate(250, keyframes([\n            //     style({opacity: 0, offset: 0, transform: 'translate(0px, 20px)'}),\n            //     style({opacity: 0.3, offset: 0.3, transform: 'translate(0px, -10px)'}),\n            //     style({opacity: 0.5, offset: 0.5, transform: 'translate(0px, 0px)'}),\n            //     style({opacity: 0.75, offset: 0.75, transform: 'translate(0px, 5px)'}),\n            //     style({opacity: 1, offset: 1, transform: 'translate(0px, 0px)'})\n            // ]))\n        ]),\n        transition(':leave', [\n            animate(150, keyframes([\n                style({opacity: 1, transform: 'translateX(0)', offset: 0}),\n                style({opacity: 1, transform: 'translateX(-15px)', offset: 0.7}),\n                style({opacity: 0, transform: 'translateX(100%)', offset: 1.0})\n            ]))\n        ])\n    ])\n];\n\n\n\n// WEBPACK FOOTER //\n// modules/components/animations.ts","import {\n  ControlValueAccessor\n} from '@angular/forms';\n\nimport { Input } from '@angular/core';\n\nexport type TagModel = string | {[key: string]: any};\n\nexport function isObject(obj: any): boolean {\n    return obj === Object(obj);\n}\n\nexport class TagInputAccessor implements ControlValueAccessor {\n    private _items: TagModel[] = [];\n    private _onTouchedCallback: () => void;\n    private _onChangeCallback: (items: TagModel[]) => void;\n\n    /**\n     * @name displayBy\n     * @type {string}\n     */\n    @Input() public displayBy: string = 'display';\n\n    /**\n     * @name identifyBy\n     * @type {string}\n     */\n    @Input() public identifyBy: string = 'value';\n\n    public get items(): TagModel[] {\n        return this._items;\n    };\n\n    public set items(items: TagModel[]) {\n        this._items = items;\n        this._onChangeCallback(this._items);\n    }\n\n    public onTouched() {\n        this._onTouchedCallback();\n    }\n\n    public writeValue(items: any[]) {\n        this._items = items || [];\n    }\n\n    public registerOnChange(fn: any) {\n        this._onChangeCallback = fn;\n    }\n\n    public registerOnTouched(fn: any) {\n        this._onTouchedCallback = fn;\n    }\n\n    /**\n     * @name getItemValue\n     * @param item\n     * @return {TagModel}\n     */\n    public getItemValue(item: TagModel): string {\n        return isObject(item) ? item[this.identifyBy] : item;\n    }\n\n    /**\n     * @name getItemDisplay\n     * @param item\n     * @return {TagModel}\n     */\n    public getItemDisplay(item: TagModel): string {\n        return isObject(item) ? item[this.displayBy] : item;\n    }\n\n    /**\n     * @name getItemsWithout\n     * @param index\n     * @return {TagModel[]}\n     */\n    protected getItemsWithout(index: number): TagModel[] {\n        return this.items.filter((item, position) => position !== index);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// modules/components/helpers/accessor.ts","/*\n** constants and default values for <tag-input>\n */\n\nexport const PLACEHOLDER = '+ Tag';\nexport const SECONDARY_PLACEHOLDER = 'Enter a new tag';\nexport const KEYDOWN = 'keydown';\nexport const KEYUP = 'keyup';\nexport const FOCUS = 'focus';\nexport const MAX_ITEMS_WARNING = 'The number of items specified was greater than the property max-items.';\n\nexport const ACTIONS_KEYS = {\n    DELETE: 'DELETE',\n    SWITCH_PREV: 'SWITCH_PREV',\n    SWITCH_NEXT: 'SWITCH_NEXT',\n    TAB: 'TAB'\n};\n\nexport const KEY_PRESS_ACTIONS = {\n    8: ACTIONS_KEYS.DELETE,\n    37: ACTIONS_KEYS.SWITCH_PREV,\n    39: ACTIONS_KEYS.SWITCH_NEXT,\n    9: ACTIONS_KEYS.TAB\n};\n\n\n\n// WEBPACK FOOTER //\n// modules/components/helpers/constants.ts","\n/**\n * @name listen\n * @param listenerType\n * @param action\n * @param condition\n */\nexport default function listen(listenerType: string, action: () => any, condition = true): void {\n    // if the event provided does not exist, throw an error\n    if (!this.listeners.hasOwnProperty(listenerType)) {\n        throw new Error('The event entered may be wrong');\n    }\n\n    // if a condition is present and is false, exit early\n    if (!condition) {\n        return;\n    }\n\n    // fire listener\n    this.listeners[listenerType].push(action);\n}\n\n\n\n// WEBPACK FOOTER //\n// modules/components/helpers/listen.ts","import { Component } from '@angular/core';\n\n@Component({\n    selector: 'delete-icon',\n    templateUrl: './icon.html',\n    styleUrls: ['./icon.scss']\n})\nexport class DeleteIconComponent {}\n\n\n\n// WEBPACK FOOTER //\n// modules/components/icon/icon.ts","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { Ng2DropdownModule } from 'ng2-material-dropdown';\nimport { DeleteIconComponent } from './components/icon';\nimport { TagInputForm } from './components/tag-input-form';\nimport { TagInputComponent } from './components';\nimport { TagInputDropdown } from './components/dropdown/tag-input-dropdown.component';\nimport { HighlightPipe } from './components/pipes/highlight.pipe';\nimport { TagComponent } from './components/tag/tag.component';\nimport { TagRipple } from './components/tag/tag-ripple.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ReactiveFormsModule,\n        FormsModule,\n        Ng2DropdownModule\n    ],\n    declarations: [\n        TagInputComponent,\n        DeleteIconComponent,\n        TagInputForm,\n        TagComponent,\n        HighlightPipe,\n        TagInputDropdown,\n        TagRipple\n    ],\n    exports: [\n        TagInputComponent,\n        DeleteIconComponent,\n        TagInputForm,\n        TagComponent,\n        HighlightPipe,\n        TagInputDropdown,\n        TagRipple\n    ]\n})\nexport class TagInputModule {}\n\nexport {\n    TagInputComponent,\n    TagInputForm,\n    TagInputDropdown,\n    DeleteIconComponent,\n    TagComponent,\n    TagRipple\n}\n\n\n\n// WEBPACK FOOTER //\n// modules/ng2-tag-input.module.ts","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n  var len = b64.length\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n  // base64 is 4/3 + up to two characters of the original data\n  return b64.length * 3 / 4 - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n  var i, j, l, tmp, placeHolders, arr\n  var len = b64.length\n  placeHolders = placeHoldersCount(b64)\n\n  arr = new Arr(len * 3 / 4 - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-js/index.js\n// module id = 24\n// module chunks = 0","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/buffer/index.js\n// module id = 25\n// module chunks = 0","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(undefined);\n// imports\n\n\n// module\nexports.push([module.id, \".dark tag:focus {\\n  box-shadow: 0 0 0 1px #323232; }\\n\\n.ng2-tag-input.bootstrap3-info {\\n  background-color: #fff;\\n  display: inline-block;\\n  color: #555;\\n  vertical-align: middle;\\n  max-width: 100%;\\n  height: 42px;\\n  line-height: 44px; }\\n\\n.ng2-tag-input.bootstrap3-info input {\\n  border: none;\\n  box-shadow: none;\\n  outline: none;\\n  background-color: transparent;\\n  padding: 0 6px;\\n  margin: 0;\\n  width: auto;\\n  max-width: inherit; }\\n\\n.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder {\\n  color: #777;\\n  opacity: 1; }\\n\\n.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder {\\n  color: #777; }\\n\\n.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder {\\n  color: #777; }\\n\\n.ng2-tag-input.bootstrap3-info input:focus {\\n  border: none;\\n  box-shadow: none; }\\n\\n.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused {\\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.4);\\n  border: 1px solid #ccc; }\\n\\n.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid {\\n  box-shadow: inset 0 1px 1px #d9534f; }\\n\\n.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  transition: all 0.15s;\\n  padding: 0.25rem 0;\\n  min-height: 32px;\\n  cursor: text;\\n  border-bottom: 2px solid #efefef; }\\n  .ng2-tag-input:focus {\\n    outline: 0; }\\n  .ng2-tag-input.ng2-tag-input--focused {\\n    border-bottom: 2px solid #2196F3; }\\n  .ng2-tag-input.ng2-tag-input--invalid {\\n    border-bottom: 2px solid #f44336; }\\n  .ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .ng2-tag-input form {\\n    margin: 0.1em 0; }\\n  .ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.minimal.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  cursor: text;\\n  border-bottom: 1px solid transparent; }\\n  .minimal.ng2-tag-input:focus {\\n    outline: 0; }\\n  .minimal.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .minimal.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .minimal.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.dark.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  cursor: text;\\n  border-bottom: 2px solid #444; }\\n  .dark.ng2-tag-input:focus {\\n    outline: 0; }\\n  .dark.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .dark.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .dark.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.bootstrap.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  cursor: text;\\n  border-bottom: 2px solid #efefef; }\\n  .bootstrap.ng2-tag-input:focus {\\n    outline: 0; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--focused {\\n    border-bottom: 2px solid #0275d8; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--invalid {\\n    border-bottom: 2px solid #d9534f; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .bootstrap.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.bootstrap3-info.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  padding: 4px;\\n  cursor: text;\\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\\n  border-radius: 4px; }\\n  .bootstrap3-info.ng2-tag-input:focus {\\n    outline: 0; }\\n  .bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid {\\n    border-bottom: 1px solid #d9534f; }\\n  .bootstrap3-info.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .bootstrap3-info.ng2-tag-input form {\\n    margin: 0.1em 0; }\\n  .bootstrap3-info.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.error-message {\\n  font-size: 0.8em;\\n  color: #f44336;\\n  margin: 0.5em 0 0 0; }\\n\\n.bootstrap .error-message {\\n  color: #d9534f; }\\n\\n:host(delete-icon) {\\n  width: 16px;\\n  height: 16px;\\n  transition: all 0.15s;\\n  display: inline-block; }\\n  :host(delete-icon) path {\\n    fill: #444; }\\n  :host(delete-icon) svg {\\n    vertical-align: bottom;\\n    height: 34px; }\\n\\n:host(delete-icon):hover {\\n  transform: scale(1.5) translateY(-3px); }\\n\\n:host-context(.dark) path {\\n  fill: #fff; }\\n\\n:host-context(.dark) svg {\\n  vertical-align: bottom;\\n  height: 34px; }\\n\\n:host-context(.minimal) path {\\n  fill: #444; }\\n\\n:host-context(.minimal) svg {\\n  vertical-align: bottom;\\n  height: 34px; }\\n\\n:host-context(.bootstrap) path {\\n  fill: #fff; }\\n\\n:host-context(.bootstrap) svg {\\n  vertical-align: bottom;\\n  height: 34px; }\\n\\n:host-context(tag:focus) path,\\n:host-context(tag:active) path {\\n  fill: #fff; }\\n\\n:host-context(.dark tag:focus) path,\\n:host-context(.dark tag:active) path {\\n  fill: #000; }\\n\\n:host-context(.minimal tag:focus) path,\\n:host-context(.minimal tag:active) path {\\n  fill: #000; }\\n\\n:host-context(.bootstrap tag:focus) path,\\n:host-context(.bootstrap tag:active) path {\\n  fill: #fff; }\\n\\n:host-context(.bootstrap3-info) {\\n  height: inherit; }\\n  :host-context(.bootstrap3-info) path {\\n    fill: #fff; }\\n\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader!./~/sass-loader/lib/loader.js!./modules/components/icon/icon.scss\n// module id = 26\n// module chunks = 0","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(undefined);\n// imports\n\n\n// module\nexports.push([module.id, \".dark tag:focus {\\n  box-shadow: 0 0 0 1px #323232; }\\n\\n.ng2-tag-input.bootstrap3-info {\\n  background-color: #fff;\\n  display: inline-block;\\n  color: #555;\\n  vertical-align: middle;\\n  max-width: 100%;\\n  height: 42px;\\n  line-height: 44px; }\\n\\n.ng2-tag-input.bootstrap3-info input {\\n  border: none;\\n  box-shadow: none;\\n  outline: none;\\n  background-color: transparent;\\n  padding: 0 6px;\\n  margin: 0;\\n  width: auto;\\n  max-width: inherit; }\\n\\n.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder {\\n  color: #777;\\n  opacity: 1; }\\n\\n.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder {\\n  color: #777; }\\n\\n.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder {\\n  color: #777; }\\n\\n.ng2-tag-input.bootstrap3-info input:focus {\\n  border: none;\\n  box-shadow: none; }\\n\\n.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused {\\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.4);\\n  border: 1px solid #ccc; }\\n\\n.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid {\\n  box-shadow: inset 0 1px 1px #d9534f; }\\n\\n.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  transition: all 0.15s;\\n  padding: 0.25rem 0;\\n  min-height: 32px;\\n  cursor: text;\\n  border-bottom: 2px solid #efefef; }\\n  .ng2-tag-input:focus {\\n    outline: 0; }\\n  .ng2-tag-input.ng2-tag-input--focused {\\n    border-bottom: 2px solid #2196F3; }\\n  .ng2-tag-input.ng2-tag-input--invalid {\\n    border-bottom: 2px solid #f44336; }\\n  .ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .ng2-tag-input form {\\n    margin: 0.1em 0; }\\n  .ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.minimal.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  cursor: text;\\n  border-bottom: 1px solid transparent; }\\n  .minimal.ng2-tag-input:focus {\\n    outline: 0; }\\n  .minimal.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .minimal.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .minimal.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.dark.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  cursor: text;\\n  border-bottom: 2px solid #444; }\\n  .dark.ng2-tag-input:focus {\\n    outline: 0; }\\n  .dark.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .dark.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .dark.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.bootstrap.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  cursor: text;\\n  border-bottom: 2px solid #efefef; }\\n  .bootstrap.ng2-tag-input:focus {\\n    outline: 0; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--focused {\\n    border-bottom: 2px solid #0275d8; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--invalid {\\n    border-bottom: 2px solid #d9534f; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .bootstrap.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.bootstrap3-info.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  padding: 4px;\\n  cursor: text;\\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\\n  border-radius: 4px; }\\n  .bootstrap3-info.ng2-tag-input:focus {\\n    outline: 0; }\\n  .bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid {\\n    border-bottom: 1px solid #d9534f; }\\n  .bootstrap3-info.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .bootstrap3-info.ng2-tag-input form {\\n    margin: 0.1em 0; }\\n  .bootstrap3-info.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.error-message {\\n  font-size: 0.8em;\\n  color: #f44336;\\n  margin: 0.5em 0 0 0; }\\n\\n.bootstrap .error-message {\\n  color: #d9534f; }\\n\\n.ng2-tag-input__text-input {\\n  display: inline;\\n  vertical-align: middle;\\n  border: none;\\n  padding: 0 0.5rem;\\n  height: 38px;\\n  font-size: 1em;\\n  font-family: \\\"Roboto\\\", \\\"Helvetica Neue\\\", sans-serif; }\\n  .ng2-tag-input__text-input:focus {\\n    outline: 0; }\\n\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader!./~/sass-loader/lib/loader.js!./modules/components/tag-input-form/tag-input-form.style.scss\n// module id = 27\n// module chunks = 0","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(undefined);\n// imports\n\n\n// module\nexports.push([module.id, \".dark tag:focus {\\n  box-shadow: 0 0 0 1px #323232; }\\n\\n.ng2-tag-input.bootstrap3-info {\\n  background-color: #fff;\\n  display: inline-block;\\n  color: #555;\\n  vertical-align: middle;\\n  max-width: 100%;\\n  height: 42px;\\n  line-height: 44px; }\\n\\n.ng2-tag-input.bootstrap3-info input {\\n  border: none;\\n  box-shadow: none;\\n  outline: none;\\n  background-color: transparent;\\n  padding: 0 6px;\\n  margin: 0;\\n  width: auto;\\n  max-width: inherit; }\\n\\n.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder {\\n  color: #777;\\n  opacity: 1; }\\n\\n.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder {\\n  color: #777; }\\n\\n.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder {\\n  color: #777; }\\n\\n.ng2-tag-input.bootstrap3-info input:focus {\\n  border: none;\\n  box-shadow: none; }\\n\\n.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused {\\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.4);\\n  border: 1px solid #ccc; }\\n\\n.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid {\\n  box-shadow: inset 0 1px 1px #d9534f; }\\n\\n.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  transition: all 0.15s;\\n  padding: 0.25rem 0;\\n  min-height: 32px;\\n  cursor: text;\\n  border-bottom: 2px solid #efefef; }\\n  .ng2-tag-input:focus {\\n    outline: 0; }\\n  .ng2-tag-input.ng2-tag-input--focused {\\n    border-bottom: 2px solid #2196F3; }\\n  .ng2-tag-input.ng2-tag-input--invalid {\\n    border-bottom: 2px solid #f44336; }\\n  .ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .ng2-tag-input form {\\n    margin: 0.1em 0; }\\n  .ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.minimal.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  cursor: text;\\n  border-bottom: 1px solid transparent; }\\n  .minimal.ng2-tag-input:focus {\\n    outline: 0; }\\n  .minimal.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .minimal.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .minimal.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.dark.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  cursor: text;\\n  border-bottom: 2px solid #444; }\\n  .dark.ng2-tag-input:focus {\\n    outline: 0; }\\n  .dark.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .dark.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .dark.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.bootstrap.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  cursor: text;\\n  border-bottom: 2px solid #efefef; }\\n  .bootstrap.ng2-tag-input:focus {\\n    outline: 0; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--focused {\\n    border-bottom: 2px solid #0275d8; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--invalid {\\n    border-bottom: 2px solid #d9534f; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .bootstrap.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .bootstrap.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.bootstrap3-info.ng2-tag-input {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  position: relative;\\n  padding: 4px;\\n  cursor: text;\\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\\n  border-radius: 4px; }\\n  .bootstrap3-info.ng2-tag-input:focus {\\n    outline: 0; }\\n  .bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid {\\n    border-bottom: 1px solid #d9534f; }\\n  .bootstrap3-info.ng2-tag-input.ng2-tag-input--loading {\\n    border: none; }\\n  .bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled {\\n    opacity: 0.5;\\n    cursor: not-allowed; }\\n  .bootstrap3-info.ng2-tag-input form {\\n    margin: 0.1em 0; }\\n  .bootstrap3-info.ng2-tag-input .ng2-tags-container {\\n    flex-wrap: wrap;\\n    display: flex; }\\n\\n.error-message {\\n  font-size: 0.8em;\\n  color: #f44336;\\n  margin: 0.5em 0 0 0; }\\n\\n.bootstrap .error-message {\\n  color: #d9534f; }\\n\\n.progress-bar, .progress-bar:before {\\n  height: 2px;\\n  width: 100%;\\n  margin: 0; }\\n\\n.progress-bar {\\n  background-color: #2196F3;\\n  display: flex;\\n  position: absolute;\\n  bottom: 0; }\\n\\n.progress-bar:before {\\n  background-color: #82c4f8;\\n  content: '';\\n  -webkit-animation: running-progress 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;\\n  animation: running-progress 2s cubic-bezier(0.4, 0, 0.2, 1) infinite; }\\n\\n@-webkit-keyframes running-progress {\\n  0% {\\n    margin-left: 0;\\n    margin-right: 100%; }\\n  50% {\\n    margin-left: 25%;\\n    margin-right: 0; }\\n  100% {\\n    margin-left: 100%;\\n    margin-right: 0; } }\\n\\n@keyframes running-progress {\\n  0% {\\n    margin-left: 0;\\n    margin-right: 100%; }\\n  50% {\\n    margin-left: 25%;\\n    margin-right: 0; }\\n  100% {\\n    margin-left: 100%;\\n    margin-right: 0; } }\\n\\ntag {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  font-family: \\\"Roboto\\\", \\\"Helvetica Neue\\\", sans-serif;\\n  font-weight: 400;\\n  font-size: 1em;\\n  letter-spacing: 0.05rem;\\n  color: #444;\\n  border-radius: 16px;\\n  transition: all 0.3s;\\n  margin: 0.1rem 0.3rem 0.1rem 0;\\n  padding: 0.08rem 0.45rem;\\n  height: 32px;\\n  line-height: 34px;\\n  background: #efefef;\\n  user-select: none;\\n  overflow: hidden;\\n  outline: 0;\\n  cursor: pointer;\\n  position: relative; }\\n  tag:not(.readonly):not(.tag--editing):focus {\\n    background: #2196F3;\\n    color: #fff; }\\n  tag:not(.readonly):not(.tag--editing):active {\\n    background: #0d8aee;\\n    color: #fff; }\\n  tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover {\\n    background: #e2e2e2;\\n    color: initial; }\\n  tag.readonly {\\n    cursor: default; }\\n  tag.readonly:focus, tag:focus {\\n    outline: 0; }\\n  tag.tag--editing {\\n    background-color: #fff;\\n    cursor: text; }\\n\\n.minimal tag {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  border-radius: 0;\\n  background: #f9f9f9;\\n  user-select: none;\\n  overflow: hidden;\\n  outline: 0;\\n  cursor: pointer;\\n  position: relative; }\\n  .minimal tag:not(.readonly):not(.tag--editing):focus {\\n    background: #d0d0d0;\\n    color: initial; }\\n  .minimal tag:not(.readonly):not(.tag--editing):active {\\n    background: #d0d0d0;\\n    color: initial; }\\n  .minimal tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover {\\n    background: #ececec; }\\n  .minimal tag.readonly {\\n    cursor: default; }\\n  .minimal tag.readonly:focus, .minimal tag:focus {\\n    outline: 0; }\\n  .minimal tag.tag--editing {\\n    cursor: text; }\\n\\n.dark tag {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  color: #f9f9f9;\\n  border-radius: 3px;\\n  background: #444;\\n  user-select: none;\\n  overflow: hidden;\\n  outline: 0;\\n  cursor: pointer;\\n  position: relative; }\\n  .dark tag:not(.readonly):not(.tag--editing):focus {\\n    background: #efefef;\\n    color: #444; }\\n  .dark tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover {\\n    background: #2b2b2b;\\n    color: #f9f9f9; }\\n  .dark tag.readonly {\\n    cursor: default; }\\n  .dark tag.readonly:focus, .dark tag:focus {\\n    outline: 0; }\\n  .dark tag.tag--editing {\\n    cursor: text; }\\n\\n.bootstrap tag {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  color: #f9f9f9;\\n  border-radius: 0.25rem;\\n  background: #0275d8;\\n  user-select: none;\\n  overflow: hidden;\\n  outline: 0;\\n  cursor: pointer;\\n  position: relative; }\\n  .bootstrap tag:not(.readonly):not(.tag--editing):focus {\\n    background: #025aa5; }\\n  .bootstrap tag:not(.readonly):not(.tag--editing):active {\\n    background: #025aa5; }\\n  .bootstrap tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover {\\n    background: #0267bf;\\n    color: #f9f9f9; }\\n  .bootstrap tag.readonly {\\n    cursor: default; }\\n  .bootstrap tag.readonly:focus, .bootstrap tag:focus {\\n    outline: 0; }\\n  .bootstrap tag.tag--editing {\\n    cursor: text; }\\n\\n.bootstrap3-info tag {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n  font-family: inherit;\\n  font-weight: 400;\\n  font-size: 95%;\\n  color: #fff;\\n  border-radius: 0.25em;\\n  background: #5bc0de;\\n  user-select: none;\\n  overflow: hidden;\\n  outline: 0;\\n  cursor: pointer;\\n  position: relative;\\n  padding: .25em .6em;\\n  text-align: center;\\n  white-space: nowrap; }\\n  .bootstrap3-info tag:not(.readonly):not(.tag--editing):focus {\\n    background: #28a1c5; }\\n  .bootstrap3-info tag:not(.readonly):not(.tag--editing):active {\\n    background: #28a1c5; }\\n  .bootstrap3-info tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover {\\n    background: #46b8da;\\n    color: #fff; }\\n  .bootstrap3-info tag.readonly {\\n    cursor: default; }\\n  .bootstrap3-info tag.readonly:focus, .bootstrap3-info tag:focus {\\n    outline: 0; }\\n  .bootstrap3-info tag.tag--editing {\\n    cursor: text; }\\n\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader!./~/sass-loader/lib/loader.js!./modules/components/tag-input.style.scss\n// module id = 28\n// module chunks = 0","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(undefined);\n// imports\n\n\n// module\nexports.push([module.id, \":host,\\n:host > div,\\n:host > div:focus {\\n  outline: 0;\\n  overflow: hidden;\\n  transition: opacity 1s;\\n  z-index: 1; }\\n\\n:host.blink {\\n  -webkit-animation: blink 0.3s normal forwards ease-in-out;\\n  animation: blink 0.3s normal forwards ease-in-out; }\\n\\n@keyframes blink {\\n  0% {\\n    opacity: 0.3; } }\\n\\n:host .disabled {\\n  cursor: not-allowed; }\\n\\n:host [contenteditable='true'] {\\n  outline: 0;\\n  user-select: none; }\\n\\n.inline {\\n  display: inline; }\\n\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader!./~/sass-loader/lib/loader.js!./modules/components/tag/tag-component.style.scss\n// module id = 29\n// module chunks = 0","module.exports = \"<ng2-dropdown>\\n    <ng2-dropdown-menu [focusFirstElement]=\\\"focusFirstElement\\\"\\n                       [appendToBody]=\\\"appendToBody\\\"\\n                       [offset]=\\\"offset\\\">\\n        <ng2-menu-item *ngFor=\\\"let item of items; let index = index; let last = last\\\"\\n                       [value]=\\\"item\\\"\\n                       [ngSwitch]=\\\"!!templates.length\\\">\\n\\n            <span *ngSwitchCase=\\\"false\\\"\\n                  [innerHTML]=\\\"item[displayBy] | highlight : tagInput.inputForm.value.value\\\">\\n            </span>\\n\\n            <ng-template *ngSwitchDefault\\n                      [ngTemplateOutlet]=\\\"templates.first\\\"\\n                      [ngOutletContext]=\\\"{ item: item, index: index, last: last }\\\">\\n            </ng-template>\\n        </ng2-menu-item>\\n    </ng2-dropdown-menu>\\n</ng2-dropdown>\\n\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/components/dropdown/tag-input-dropdown.template.html\n// module id = 30\n// module chunks = 0","module.exports = \"<span>\\n    <svg height=\\\"16px\\\" viewBox=\\\"0 0 32 32\\\" width=\\\"16px\\\">\\n        <path d=\\\"M17.459,16.014l8.239-8.194c0.395-0.391,0.395-1.024,0-1.414c-0.394-0.391-1.034-0.391-1.428,0  l-8.232,8.187L7.73,6.284c-0.394-0.395-1.034-0.395-1.428,0c-0.394,0.396-0.394,1.037,0,1.432l8.302,8.303l-8.332,8.286  c-0.394,0.391-0.394,1.024,0,1.414c0.394,0.391,1.034,0.391,1.428,0l8.325-8.279l8.275,8.276c0.394,0.395,1.034,0.395,1.428,0  c0.394-0.396,0.394-1.037,0-1.432L17.459,16.014z\\\"\\n              fill=\\\"#121313\\\" />\\n    </svg>\\n</span>\\n\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/components/icon/icon.html\n// module id = 31\n// module chunks = 0","module.exports = \"<!-- form -->\\n<form (submit)=\\\"submit($event)\\\" [formGroup]=\\\"form\\\">\\n    <input #input\\n\\n           type=\\\"text\\\"\\n           class=\\\"ng2-tag-input__text-input\\\"\\n           autocomplete=\\\"off\\\"\\n           tabindex=\\\"0\\\"\\n\\n           [(ngModel)]=\\\"inputText\\\"\\n           [formControlName]=\\\"'item'\\\"\\n           [ngClass]=\\\"inputClass\\\"\\n           [attr.id]=\\\"inputId\\\"\\n           [attr.placeholder]=\\\"placeholder\\\"\\n           [attr.aria-label]=\\\"placeholder\\\"\\n           [attr.tabindex]=\\\"tabindex\\\"\\n           [attr.disabled]=\\\"disabled\\\"\\n\\n           (focus)=\\\"onFocus.emit($event)\\\"\\n           (blur)=\\\"onBlur.emit($event)\\\"\\n           (keydown)=\\\"onKeyDown($event)\\\"\\n           (keyup)=\\\"onKeyup.emit($event)\\\"\\n    />\\n</form>\\n\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/components/tag-input-form/tag-input-form.template.html\n// module id = 32\n// module chunks = 0","module.exports = \"<!-- CONTAINER -->\\n\\n<div ngClass=\\\"ng2-tag-input {{ theme || '' }}\\\"\\n     (click)=\\\"focus(true, false)\\\"\\n     [attr.tabindex]=\\\"-1\\\"\\n     [class.ng2-tag-input--disabled]=\\\"disabled\\\"\\n     [class.ng2-tag-input--loading]=\\\"isLoading\\\"\\n     [class.ng2-tag-input--invalid]=\\\"hasErrors()\\\"\\n     [class.ng2-tag-input--focused]=\\\"isInputFocused()\\\">\\n\\n    <!-- TAGS -->\\n    <div class=\\\"ng2-tags-container\\\">\\n        <tag *ngFor=\\\"let item of items; let i = index\\\"\\n\\n             (onSelect)=\\\"selectItem(item)\\\"\\n             (onRemove)=\\\"removeItem(item, i)\\\"\\n             (onKeyDown)=\\\"handleKeydown($event, item)\\\"\\n             (onTagEdited)=\\\"onTagEdited.emit(item)\\\"\\n\\n             [disabled]=\\\"disabled\\\"\\n             [@flyInOut]=\\\"'in'\\\"\\n             [hasRipple]=\\\"ripple\\\"\\n             [index]=\\\"i\\\"\\n             [attr.tabindex]=\\\"readonly ? -1 : 0\\\"\\n             [class.readonly]=\\\"readonly\\\"\\n             [readonly]=\\\"readonly\\\"\\n             [removable]=\\\"removable\\\"\\n             [editable]=\\\"editable\\\"\\n             [displayBy]=\\\"displayBy\\\"\\n             [identifyBy]=\\\"identifyBy\\\"\\n             [template]=\\\"!!hasCustomTemplate() ? templates.first : undefined\\\"\\n             [model]=\\\"item\\\">\\n        </tag>\\n\\n        <tag-input-form\\n            (onSubmit)=\\\"addItem()\\\"\\n            (onBlur)=\\\"blur()\\\"\\n            (onFocus)=\\\"focus(false, dropdown ? dropdown.showDropdownIfEmpty : false)\\\"\\n            (onKeydown)=\\\"fireEvents('keydown', $event)\\\"\\n            (onKeyup)=\\\"fireEvents('keyup', $event)\\\"\\n\\n            [(inputText)]=\\\"inputText\\\"\\n            [disabled]=\\\"disabled\\\"\\n            [validators]=\\\"validators\\\"\\n            [hidden]=\\\"readonly || maxItemsReached\\\"\\n            [placeholder]=\\\"items.length ? placeholder : secondaryPlaceholder\\\"\\n            [inputClass]=\\\"inputClass\\\"\\n            [inputId]=\\\"inputId\\\"\\n            [tabindex]=\\\"tabindex\\\">\\n        </tag-input-form>\\n    </div>\\n\\n    <div class=\\\"progress-bar\\\" *ngIf=\\\"isLoading\\\"></div>\\n</div>\\n\\n<!-- ERRORS -->\\n<div *ngIf=\\\"hasErrors()\\\" class=\\\"error-messages {{ theme || '' }}\\\">\\n    <p *ngFor=\\\"let error of inputForm.getErrorMessages(errorMessages)\\\" class=\\\"error-message\\\">\\n        <span>{{ error }}</span>\\n    </p>\\n</div>\\n\\n<ng-content></ng-content>\\n\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/components/tag-input.template.html\n// module id = 33\n// module chunks = 0","module.exports = \"<div (click)=\\\"select($event)\\\"\\n     (dblclick)=\\\"editable ? toggleEditMode($event) : undefined\\\"\\n     (mousedown)=\\\"rippleState='clicked'\\\"\\n     (mouseup)=\\\"rippleState='none'\\\"\\n     [ngSwitch]=\\\"!!template\\\"\\n     [class.disabled]=\\\"disabled\\\"\\n     [attr.tabindex]=\\\"-1\\\"\\n     [attr.aria-label]=\\\"getDisplayValue(model)\\\">\\n\\n    <div *ngSwitchCase=\\\"true\\\" [attr.contenteditable]=\\\"editModeActivated\\\">\\n        <!-- CUSTOM TEMPLATE -->\\n        <ng-template\\n            [ngOutletContext]=\\\"{ item: model, index: index }\\\"\\n            [ngTemplateOutlet]=\\\"template\\\">\\n        </ng-template>\\n    </div>\\n\\n    <div *ngSwitchCase=\\\"false\\\">\\n        <!-- TAG NAME -->\\n        <div [attr.contenteditable]=\\\"editModeActivated\\\"\\n             class=\\\"inline\\\"\\n             spellcheck=\\\"false\\\"\\n             (keydown.enter)=\\\"disableEditMode($event)\\\"\\n             (keydown.escape)=\\\"disableEditMode($event)\\\"\\n             (click)=\\\"editModeActivated ? $event.stopPropagation() : undefined\\\"\\n             (blur)=\\\"toggleEditMode()\\\">\\n            {{ getDisplayValue(model) }}\\n        </div>\\n\\n        <!-- 'X' BUTTON -->\\n        <delete-icon\\n            aria-label=\\\"Remove tag\\\"\\n            role=\\\"button\\\"\\n            (click)=\\\"remove()\\\"\\n            *ngIf=\\\"isDeleteIconVisible()\\\">\\n        </delete-icon>\\n    </div>\\n</div>\\n\\n<tag-ripple [state]=\\\"rippleState\\\"\\n            [attr.tabindex]=\\\"-1\\\"\\n            *ngIf=\\\"isRippleVisible()\\\">\\n</tag-ripple>\\n\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/components/tag/tag.template.html\n// module id = 34\n// module chunks = 0","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ieee754/index.js\n// module id = 35\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 36\n// module chunks = 0","\n        var result = require(\"!!./../../../node_modules/css-loader/index.js!./../../../node_modules/sass-loader/lib/loader.js!./icon.scss\");\n\n        if (typeof result === \"string\") {\n            module.exports = result;\n        } else {\n            module.exports = result.toString();\n        }\n    \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/components/icon/icon.scss\n// module id = 37\n// module chunks = 0","\n        var result = require(\"!!./../../../node_modules/css-loader/index.js!./../../../node_modules/sass-loader/lib/loader.js!./tag-input-form.style.scss\");\n\n        if (typeof result === \"string\") {\n            module.exports = result;\n        } else {\n            module.exports = result.toString();\n        }\n    \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/components/tag-input-form/tag-input-form.style.scss\n// module id = 38\n// module chunks = 0","\n        var result = require(\"!!./../../node_modules/css-loader/index.js!./../../node_modules/sass-loader/lib/loader.js!./tag-input.style.scss\");\n\n        if (typeof result === \"string\") {\n            module.exports = result;\n        } else {\n            module.exports = result.toString();\n        }\n    \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/components/tag-input.style.scss\n// module id = 39\n// module chunks = 0","\n        var result = require(\"!!./../../../node_modules/css-loader/index.js!./../../../node_modules/sass-loader/lib/loader.js!./tag-component.style.scss\");\n\n        if (typeof result === \"string\") {\n            module.exports = result;\n        } else {\n            module.exports = result.toString();\n        }\n    \n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/components/tag/tag-component.style.scss\n// module id = 40\n// module chunks = 0"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;;;AChEA;;;;;;ACCA;;;;;;ACCA;;;;;;ACCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1EA;;;;;;ACCA;;;;;;ACCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCA;AAYA;AACA;AAKA;AACA;AAMA;AAyHA;AAAA;AAAA;AAxGA;AAMA;AAOA;AAYA;AAWA;AAKA;AAMA;AAEA;AAEA;AACA;AACA;AACA;AAMA;AAOA;AAOA;AA8BA;AAxBA;AASA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AACA;AACA;AAtBA;AACA;AACA;;;AAAA;AAwBA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAMA;AAAA;AACA;AACA;;;AAAA;AAMA;AACA;AACA;AAMA;AACA;AACA;AAMA;AAAA;AACA;AACA;;;AAAA;AAMA;AAAA;AACA;AACA;;;AAAA;AAMA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAGA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAEA;AACA;AAOA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AACA;;AACA;AAEA;AACA;AAMA;AAAA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAOA;AACA;AAEA;AACA;AACA;AAAA;AAzUA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAMA;AAAA;;AAOA;AAMA;AAAA;;AAAA;AA6BA;AAAA;;;AAaA;AA8HA;AADA;;;;AAOA;AA3PA;AAJA;AACA;AACA;AACA;AA0HA;AAAA;AAzHA;AAAA;;;;;;;;;;;;;;;;;;;ACzBA;AA+CA;AApCA;AAqCA;AACA;AAAA;AAAA;AADA;AAAA;;AAAA;AADA;AApCA;AACA;AACA;AAkBA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;AC/CA;AAaA;AAIA;AAGA;AACA;AACA;AACA;AAEA;AAOA;AAkGA;AAAA;AAAA;AAjDA;AAMA;AAMA;AAMA;AAMA;AAMA;AAMA;AAMA;AAOA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAOA;AACA;AACA;AAMA;AACA;AACA;AAMA;AACA;AACA;AACA;AAKA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAIA;AACA;;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA9OA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAKA;AAAA;AAAA;AAAA;AAKA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAMA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAiBA;AAAA;AAAA;AAAA;AAwCA;AADA;;;;AAQA;AA/IA;AALA;AACA;AACA;AACA;AACA;AAmGA;AAlGA;AAAA;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtrBA;AASA;AAaA;AA0GA;AAAA;AArGA;AAMA;AAMA;AAMA;AAMA;AAcA;AA0BA;AAKA;AAyBA;AAKA;AAEA;AA9CA;AAAA;AACA;AACA;AAkBA;AACA;AACA;AACA;;;AArBA;AA8CA;AAEA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;;;AAAA;AAMA;AACA;AACA;AAOA;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AACA;AAMA;AACA;AACA;AACA;AAMA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAhMA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAQA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAKA;AAAA;;;AAEA;AAOA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAcA;AAAA;;AAAA;AAWA;AAAA;AAAA;AAAA;AAnGA;AALA;AACA;AACA;AACA;AACA;AA2GA;AA1GA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AAiBA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAYA;AAAA;AAwUA;AAAA;AAAA;AAlUA;AAOA;AAOA;AAOA;AAoBA;AAOA;AAOA;AAMA;AAYA;AAuCA;AAMA;AAMA;AAMA;AAMA;AAOA;AAMA;AAaA;AAOA;AAMA;AAOA;AAOA;AAOA;AAOA;AAOA;AAOA;AAOA;AAOA;AAOA;AA+BA;AAsBA;AACA;AACA;AACA;AACA;AAOA;AAOA;;;AAeA;AA1KA;AAAA;AACA;AACA;AAuHA;AACA;AACA;AACA;;;AA1HA;AAkKA;AAAA;AACA;AACA;;;AAAA;AAYA;AACA;AAGA;AACA;AACA;AAGA;AAGA;AACA;AAMA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AAGA;AAGA;AACA;AAOA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AAGA;AACA;AAEA;AACA;AAMA;AACA;AAGA;AACA;AAOA;AACA;AACA;AACA;AAEA;;AAKA;AAOA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAQA;AAAA;AACA;AACA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAOA;AACA;AACA;AAGA;AAEA;AACA;AAMA;AACA;AACA;AAOA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAMA;AACA;AACA;AAMA;AACA;AACA;AAOA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AAAA;AACA;AACA;;;AAAA;AAMA;AAAA;AACA;AACA;;;AAAA;AAKA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAKA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAKA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AAGA;AACA;AAKA;AAAA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAQA;AAAA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AA/xBA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAKA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAKA;AAAA;;;AAEA;AAMA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAOA;AAAA;;AAAA;AAKA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAkBA;AAAA;AAAA;AAAA;AAgBA;AADA;;;AAGA;AAtUA;AAPA;AACA;AACA;AACA;AACA;AACA;AACA;AAyUA;AAxUA;AAAA;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpBA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;ACAA;AAEA;AAKA;AAAA;AAmBA;AAZA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAnBA;AAHA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;ACPA;;;;;;;;;;ACAA;AAcA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9BA;AAIA;AACA;AACA;AAFA;AAIA;AAAA;AACA;AAQA;AAMA;AAqDA;AAnDA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;;;AALA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAOA;AACA;AACA;AAOA;AACA;AACA;AAOA;AACA;AACA;AACA;AAAA;AA3DA;AAAA;;AAAA;AAMA;AAAA;;AAAA;AAfA;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AChBA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAbA;;;;;;;;;;;;;;;;ACPA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AALA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AAwCA;AAvCA;AAqCA;AApCA;AAmCA;AAlCA;AAoCA;AAnCA;AACA;AAoCA;AAnCA;AAoCA;AARA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5vDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnFA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}