├── .babelrc ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── LICENSE ├── README.md ├── config ├── webpack.config.base.js ├── webpack.config.browser.js ├── webpack.config.common.js └── webpack.config.dev.js ├── dist ├── postcss.config.js ├── vue-typed-js.browser.js ├── vue-typed-js.common.js └── vue-typed-js.css ├── index.js ├── package-lock.json ├── package.json └── src ├── components └── VueTypedJs.vue ├── config └── typed-component.config.js └── index.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["es2015", { "modules": false }], 4 | "stage-0" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: 'babel-eslint', 4 | parserOptions: { 5 | sourceType: 'module' 6 | }, 7 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 8 | extends: 'standard', 9 | // required to lint *.vue files 10 | plugins: [ 11 | 'html' 12 | ], 13 | env: { 14 | browser: true, 15 | }, 16 | // add your custom rules here 17 | 'rules': { 18 | // allow paren-less arrow functions 19 | 'arrow-parens': 0, 20 | // allow async-await 21 | 'generator-star-spacing': 0, 22 | // allow debugger during development 23 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, 24 | // trailing comma 25 | 'comma-dangle': ['error', 'always-multiline'], 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Orlando Wenzinger 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-typed-js 2 | 3 | [![npm](https://img.shields.io/npm/v/vue-typed-js.svg) ![npm](https://img.shields.io/npm/dm/vue-typed-js.svg)](https://www.npmjs.com/package/vue-typed-js) 4 | [![vue2](https://img.shields.io/badge/vue-2.x-brightgreen.svg)](https://vuejs.org/) 5 | [![Codacy Badge](https://api.codacy.com/project/badge/Grade/8789841c45264d19ad2595061437a8a9)](https://www.codacy.com/app/orlando.wenzinger/vue-typed-js?utm_source=github.com&utm_medium=referral&utm_content=Orlandster1998/vue-typed-js&utm_campaign=Badge_Grade) 6 | 7 | A Vue.js integration for Typed.js. 8 | 9 | Typed.js is a library that types. Enter in any string, and watch it type at the speed you've set, backspace what it's typed, and begin a new sentence for however many strings you've set. 10 | 11 | Checkout the offical project [here](https://github.com/mattboldt/typed.js/). 12 | 13 | ## Table of contents 14 | 15 | - [Installation](#installation) 16 | - [Usage](#usage) 17 | - [Example](#examples) 18 | 19 | # Installation 20 | 21 | ``` 22 | npm install --save vue-typed-js 23 | ``` 24 | 25 | ## Default import 26 | 27 | Install the component: 28 | 29 | ```javascript 30 | import Vue from 'vue' 31 | import VueTypedJs from 'vue-typed-js' 32 | 33 | Vue.use(VueTypedJs) 34 | ``` 35 | 36 | **⚠️ A css file is included when importing the package. You may have to setup your bundler to embed the css in your page.** 37 | 38 | ## Browser import 39 | 40 | ```html 41 | 42 | 43 | 44 | 45 | ``` 46 | 47 | The plugin should be auto-installed. If not, you can install it manually with the instructions below. 48 | 49 | Install all the components: 50 | 51 | ```javascript 52 | Vue.use(VueTypedJs) 53 | ``` 54 | 55 | # Usage 56 | To get started simply add the `vue-typed-js` custom element to your `template` and pass the text, which should be typed to the `strings` property. In addition you need to pass an element with the class `typing` to the slot, which will be used as a `wrapper`. 57 | 58 | Minimal setup: 59 | 60 | ```html 61 | 62 |

63 |
64 | ``` 65 | 66 | The `typing` class also allows you to just animate certain parts of a string: 67 | ```html 68 | 69 |

Hey

70 |
71 | ``` 72 | 73 | ## Properties 74 | You can make use of the following properties in order to customize your typing expirience: 75 | 76 | | Property | Type | Description | Usage | 77 | |----------------------|---------|----------------------------------------------------------------------|-----------------------------------------------------------------| 78 | | strings | Array | strings to be typed | `:strings="['Text 1', 'Text 2']"` | 79 | | stringsElement | String | ID of element containing string children | `:stringsElement="'myId'"` | 80 | | typeSpeed | Number | type speed in milliseconds | `:typeSpeed="50"` | 81 | | startDelay | Number | time before typing starts in milliseconds | `:startDelay="1000"` | 82 | | backSpeed | Number | backspacing speed in milliseconds | `:backSpeed="10"` | 83 | | smartBackspace | Boolean | only backspace what doesn't match the previous string | `:smartBackspace="true"` | 84 | | shuffle | Boolean | shuffle the strings | `:shuffle="true"` | 85 | | backDelay | Number | time before backspacing in milliseconds | `:backDelay="100"` | 86 | | fadeOut | Boolean | Fade out instead of backspace | `:fadeOut="true"` | 87 | | fadeOutClass | String | css class for fade animation | `:fadeOutClass="'fadeOutClass'"` | 88 | | fadeOutDelay | Number | fade out delay in milliseconds | `:fadeOutDelay="500"` | 89 | | loop | Boolean | loop strings | `:loop="true"` | 90 | | loopCount | Number | amount of loops | `:loopCount="3"` | 91 | | showCursor | Boolean | show cursor | `:showCursor="true"` | 92 | | cursorChar | String | character for cursor | `:cursorChar="'_'"` | 93 | | autoInsertCss | Boolean | insert CSS for cursor and fadeOut into HTML | `:autoInsertCss="true"` | 94 | | attr | String | attribute for typing Ex: input placeholder, value, or just HTML text | `:attr="'placeholder'"` | 95 | | bindInputFocusEvents | Boolean | bind to focus and blur if el is text input | `:bindInputFocusEvents="true"` | 96 | | contentType | String | 'html' or 'null' for plaintext | `:contentType="'html'"` | 97 | 98 | ## Events 99 | You can listen to the following events: 100 | 101 | | Event | Description | Usage | 102 | |------------------------|----------------------------------------------------------------------|-----------------------------------------------------------------| 103 | | onComplete | All typing is complete | `@onComplete="doSmth()"` | 104 | | preStringTyped | Before each string is typed | `@preStringTyped="doSmth()"` | 105 | | onStringTyped | After each string is typed | `@onStringTyped="doSmth()"` | 106 | | onLastStringBackspaced | During looping, after last string is typed | `@onLastStringBackspaced="doSmth()"` | 107 | | onTypingPaused | Typing has been stopped | `@onTypingPaused="doSmth()"` | 108 | | onTypingResumed | Typing has been started after being stopped | `@onTypingResumed="doSmth()"` | 109 | | onReset | After reset | `@onReset="doSmth()"` | 110 | | onStop | After stop | `@onStop="doSmth()"` | 111 | | onStart | After start | `@onStart="doSmth()"` | 112 | | onDestroy | After destroy | `@onDestroy="doSmth()"` | 113 | ## Features 114 | Checkout features like `type pausing`, `smart backspacing` etc. on the libraries [page](https://github.com/mattboldt/typed.js/). 115 | 116 | # Examples 117 | Here are several examples: 118 | 119 | ```html 120 | 121 | 122 |

We are a company!

123 |
124 | 125 | 126 | 127 |

128 |
129 | 130 | 131 | 132 |

133 |
134 | ``` 135 | 136 | --- 137 | 138 | # License 139 | 140 | [MIT](http://opensource.org/licenses/MIT) 141 | -------------------------------------------------------------------------------- /config/webpack.config.base.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack') 2 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 3 | 4 | var outputFile = 'vue-typed-js' 5 | var globalName = 'VueTypedJs' 6 | 7 | var config = require('../package.json') 8 | 9 | module.exports = { 10 | entry: './src/index.js', 11 | module: { 12 | rules: [ 13 | { 14 | enforce: 'pre', 15 | test: /\.(js|vue)$/, 16 | loader: 'eslint-loader', 17 | exclude: /node_modules/, 18 | }, 19 | { 20 | test: /.js$/, 21 | use: 'babel-loader', 22 | }, 23 | { 24 | test: /\.vue$/, 25 | loader: 'vue-loader', 26 | options: { 27 | loaders: { 28 | css: ExtractTextPlugin.extract('css-loader'), 29 | sass: ExtractTextPlugin.extract('css-loader!sass-loader'), 30 | scss: ExtractTextPlugin.extract('css-loader!sass-loader'), 31 | }, 32 | }, 33 | }, 34 | ], 35 | }, 36 | plugins: [ 37 | new webpack.DefinePlugin({ 38 | 'VERSION': JSON.stringify(config.version), 39 | }), 40 | new ExtractTextPlugin(outputFile + '.css'), 41 | ], 42 | } 43 | -------------------------------------------------------------------------------- /config/webpack.config.browser.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack') 2 | var merge = require('webpack-merge') 3 | var base = require('./webpack.config.base') 4 | var path = require('path') 5 | 6 | var outputFile = 'vue-typed-js' 7 | var globalName = 'VueTypedJs' 8 | 9 | module.exports = merge(base, { 10 | output: { 11 | path: path.resolve(__dirname, '../dist'), 12 | filename: outputFile + '.browser.js', 13 | library: globalName, 14 | libraryTarget: 'umd', 15 | }, 16 | externals: { 17 | // Put external libraries like lodash here 18 | // With their global name 19 | // Example: 'lodash': '_' 20 | }, 21 | plugins: [ 22 | new webpack.optimize.UglifyJsPlugin({ 23 | compress: { 24 | warnings: true, 25 | }, 26 | mangle: false, 27 | }), 28 | ], 29 | }) 30 | -------------------------------------------------------------------------------- /config/webpack.config.common.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack') 2 | var merge = require('webpack-merge') 3 | var base = require('./webpack.config.base') 4 | var path = require('path') 5 | 6 | var outputFile = 'vue-typed-js' 7 | var globalName = 'VueTypedJs' 8 | 9 | module.exports = merge(base, { 10 | output: { 11 | path: path.resolve(__dirname, '../dist'), 12 | filename: outputFile + '.common.js', 13 | libraryTarget: 'commonjs2', 14 | }, 15 | target: 'node', 16 | externals: { 17 | // Put external libraries like lodash here 18 | // With their package name 19 | // Example: 'lodash': 'lodash' 20 | }, 21 | plugins: [ 22 | new webpack.optimize.UglifyJsPlugin({ 23 | compress: { 24 | warnings: true, 25 | }, 26 | mangle: false, 27 | }), 28 | ], 29 | }) 30 | -------------------------------------------------------------------------------- /config/webpack.config.dev.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var base = require('./webpack.config.base') 3 | var path = require('path') 4 | 5 | var outputFile = 'vue-typed-js' 6 | var globalName = 'VueTypedJs' 7 | 8 | module.exports = merge(base, { 9 | output: { 10 | path: path.resolve(__dirname, '../dist'), 11 | filename: outputFile + '.common.js', 12 | library: globalName, 13 | libraryTarget: 'umd', 14 | }, 15 | devtool: 'eval-source-map', 16 | }) 17 | -------------------------------------------------------------------------------- /dist/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; -------------------------------------------------------------------------------- /dist/vue-typed-js.browser.js: -------------------------------------------------------------------------------- 1 | !function(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define([],factory):"object"==typeof exports?exports.VueTypedJs=factory():root.VueTypedJs=factory()}(this,function(){return function(modules){function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}var installedModules={};return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.i=function(value){return value},__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{configurable:!1,enumerable:!0,get:getter})},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=3)}([function(module,exports){var g,_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};g=function(){return this}();try{g=g||Function("return this")()||(0,eval)("this")}catch(e){"object"===("undefined"==typeof window?"undefined":_typeof(window))&&(g=window)}module.exports=g},function(module,exports,__webpack_require__){__webpack_require__(7);var Component=__webpack_require__(8)(__webpack_require__(5),__webpack_require__(9),null,null);module.exports=Component.exports},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",function(){return props}),__webpack_require__.d(__webpack_exports__,"b",function(){return getEventHandlers});var props={strings:{type:Array,required:!1,default:function(){return["Hello World!"]}},stringsElement:{type:String,required:!1,default:null},typeSpeed:{type:Number,required:!1,default:50},startDelay:{type:Number,required:!1,default:0},backSpeed:{type:Number,required:!1,default:0},smartBackspace:{type:Boolean,required:!1,default:!0},shuffle:{type:Boolean,required:!1,default:!1},backDelay:{type:Number,required:!1,default:700},fadeOut:{type:Boolean,required:!1,default:!1},fadeOutClass:{type:String,required:!1,default:"typed-fade-out"},fadeOutDelay:{type:Number,required:!1,default:500},loop:{type:Boolean,required:!1,default:!1},loopCount:{type:Number,required:!1,default:1/0},showCursor:{type:Boolean,required:!1,default:!0},cursorChar:{type:String,required:!1,default:"|"},autoInsertCss:{type:Boolean,required:!1,default:!0},attr:{type:String,required:!1,default:null},bindInputFocusEvents:{type:Boolean,required:!1,default:!1},contentType:{type:String,required:!1,default:"html"}},getEventHandlers=function(context,typedConfig){return typedConfig.onComplete=function(){context.$emit("onComplete")},typedConfig.preStringTyped=function(){context.$emit("preStringTyped")},typedConfig.onStringTyped=function(){context.$emit("onStringTyped")},typedConfig.onLastStringBackspaced=function(){context.$emit("onLastStringBackspaced")},typedConfig.onTypingPaused=function(){context.$emit("onTypingPaused")},typedConfig.onTypingResumed=function(){context.$emit("onTypingResumed")},typedConfig.onReset=function(){context.$emit("onReset")},typedConfig.onStop=function(){context.$emit("onStop")},typedConfig.onStart=function(){context.$emit("onStart")},typedConfig.onDestroy=function(){context.$emit("onDestroy")},typedConfig}},function(module,__webpack_exports__,__webpack_require__){"use strict";Object.defineProperty(__webpack_exports__,"__esModule",{value:!0}),function(global){function install(Vue){Vue.component("vue-typed-js",__WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue___default.a)}__webpack_exports__.install=install;var __WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue__=__webpack_require__(1),__WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue__);__webpack_require__.d(__webpack_exports__,"VueTypedJs",function(){return __WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue___default.a});var plugin={version:"0.1.2",install:install};__webpack_exports__.default=plugin;var GlobalVue=null;"undefined"!=typeof window?GlobalVue=window.Vue:void 0!==global&&(GlobalVue=global.Vue),GlobalVue&&GlobalVue.use(plugin)}.call(__webpack_exports__,__webpack_require__(0))},function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__,_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};/*! 2 | * 3 | * typed.js - A JavaScript Typing Animation Library 4 | * Author: Matt Boldt 5 | * Version: v2.0.9 6 | * Url: https://github.com/mattboldt/typed.js 7 | * License(s): MIT 8 | * 9 | */ 10 | !function(root,factory){"object"===_typeof(exports)&&"object"===_typeof(module)?module.exports=factory():(__WEBPACK_AMD_DEFINE_ARRAY__=[],__WEBPACK_AMD_DEFINE_FACTORY__=factory,void 0!==(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof __WEBPACK_AMD_DEFINE_FACTORY__?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)&&(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(0,function(){return function(modules){function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:!1};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}var installedModules={};return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.p="",__webpack_require__(0)}([function(module,exports,__webpack_require__){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function defineProperties(target,props){for(var i=0;icurString.length)););var stringBeforeSkip=curString.substring(0,curStrPos),stringSkipped=curString.substring(stringBeforeSkip.length+1,curStrPos+numChars),stringAfterSkip=curString.substring(curStrPos+numChars+1);curString=stringBeforeSkip+stringSkipped+stringAfterSkip,numChars--}_this2.timeout=setTimeout(function(){_this2.toggleBlinking(!1),curStrPos>=curString.length?_this2.doneTyping(curString,curStrPos):_this2.keepTyping(curString,curStrPos,numChars),_this2.temporaryPause&&(_this2.temporaryPause=!1,_this2.options.onTypingResumed(_this2.arrayPos,_this2))},pauseTime)},humanize)}},{key:"keepTyping",value:function(curString,curStrPos,numChars){0===curStrPos&&(this.toggleBlinking(!1),this.options.preStringTyped(this.arrayPos,this)),curStrPos+=numChars;var nextString=curString.substr(0,curStrPos);this.replaceText(nextString),this.typewrite(curString,curStrPos)}},{key:"doneTyping",value:function(curString,curStrPos){var _this3=this;this.options.onStringTyped(this.arrayPos,this),this.toggleBlinking(!0),this.arrayPos===this.strings.length-1&&(this.complete(),!1===this.loop||this.curLoop===this.loopCount)||(this.timeout=setTimeout(function(){_this3.backspace(curString,curStrPos)},this.backDelay))}},{key:"backspace",value:function(curString,curStrPos){var _this4=this;if(!0===this.pause.status)return void this.setPauseStatus(curString,curStrPos,!0);if(this.fadeOut)return this.initFadeOut();this.toggleBlinking(!1);var humanize=this.humanizer(this.backSpeed);this.timeout=setTimeout(function(){curStrPos=_htmlParserJs.htmlParser.backSpaceHtmlChars(curString,curStrPos,_this4);var curStringAtPosition=curString.substr(0,curStrPos);if(_this4.replaceText(curStringAtPosition),_this4.smartBackspace){var nextString=_this4.strings[_this4.arrayPos+1];nextString&&curStringAtPosition===nextString.substr(0,curStrPos)?_this4.stopNum=curStrPos:_this4.stopNum=0}curStrPos>_this4.stopNum?(curStrPos--,_this4.backspace(curString,curStrPos)):curStrPos<=_this4.stopNum&&(_this4.arrayPos++,_this4.arrayPos===_this4.strings.length?(_this4.arrayPos=0,_this4.options.onLastStringBackspaced(),_this4.shuffleStringsIfNeeded(),_this4.begin()):_this4.typewrite(_this4.strings[_this4.sequence[_this4.arrayPos]],curStrPos))},humanize)}},{key:"complete",value:function(){this.options.onComplete(this),this.loop?this.curLoop++:this.typingComplete=!0}},{key:"setPauseStatus",value:function(curString,curStrPos,isTyping){this.pause.typewrite=isTyping,this.pause.curString=curString,this.pause.curStrPos=curStrPos}},{key:"toggleBlinking",value:function(isBlinking){this.cursor&&(this.pause.status||this.cursorBlinking!==isBlinking&&(this.cursorBlinking=isBlinking,isBlinking?this.cursor.classList.add("typed-cursor--blink"):this.cursor.classList.remove("typed-cursor--blink")))}},{key:"humanizer",value:function(speed){return Math.round(Math.random()*speed/2)+speed}},{key:"shuffleStringsIfNeeded",value:function(){this.shuffle&&(this.sequence=this.sequence.sort(function(){return Math.random()-.5}))}},{key:"initFadeOut",value:function(){var _this5=this;return this.el.className+=" "+this.fadeOutClass,this.cursor&&(this.cursor.className+=" "+this.fadeOutClass),setTimeout(function(){_this5.arrayPos++,_this5.replaceText(""),_this5.strings.length>_this5.arrayPos?_this5.typewrite(_this5.strings[_this5.sequence[_this5.arrayPos]],0):(_this5.typewrite(_this5.strings[0],0),_this5.arrayPos=0)},this.fadeOutDelay)}},{key:"replaceText",value:function(str){this.attr?this.el.setAttribute(this.attr,str):this.isInput?this.el.value=str:"html"===this.contentType?this.el.innerHTML=str:this.el.textContent=str}},{key:"bindFocusEvents",value:function(){var _this6=this;this.isInput&&(this.el.addEventListener("focus",function(e){_this6.stop()}),this.el.addEventListener("blur",function(e){_this6.el.value&&0!==_this6.el.value.length||_this6.start()}))}},{key:"insertCursor",value:function(){this.showCursor&&(this.cursor||(this.cursor=document.createElement("span"),this.cursor.className="typed-cursor",this.cursor.innerHTML=this.cursorChar,this.el.parentNode&&this.el.parentNode.insertBefore(this.cursor,this.el.nextSibling)))}}]),Typed}();exports.default=Typed,module.exports=exports.default},function(module,exports,__webpack_require__){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _extends=Object.assign||function(target){for(var i=1;i":";";curString.substr(curStrPos+1).charAt(0)!==endTag&&!(++curStrPos+1>curString.length););curStrPos++}return curStrPos}},{key:"backSpaceHtmlChars",value:function(curString,curStrPos,self){if("html"!==self.contentType)return curStrPos;var curChar=curString.substr(curStrPos).charAt(0);if(">"===curChar||";"===curChar){var endTag="";for(endTag=">"===curChar?"<":"&";curString.substr(curStrPos-1).charAt(0)!==endTag&&!(--curStrPos<0););curStrPos--}return curStrPos}}]),HTMLParser}();exports.default=HTMLParser;var htmlParser=new HTMLParser;exports.htmlParser=htmlParser}])})}).call(exports,__webpack_require__(6)(module))},function(module,__webpack_exports__,__webpack_require__){"use strict";Object.defineProperty(__webpack_exports__,"__esModule",{value:!0});var __WEBPACK_IMPORTED_MODULE_0_typed_js__=__webpack_require__(4),__WEBPACK_IMPORTED_MODULE_0_typed_js___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_typed_js__),__WEBPACK_IMPORTED_MODULE_1__config_typed_component_config__=__webpack_require__(2);__webpack_exports__.default={name:"vue-typed-js",props:__WEBPACK_IMPORTED_MODULE_1__config_typed_component_config__.a,data:function(){return{typedObj:null}},methods:{throwError:function(message){throw new TypeError(message)},initTypedJS:function(){var $typed=this.$refs.typedElement.querySelector(".typing");if(this.$slots.default.length>1)this.throwError("Just one child element allowed inside <"+this.$options.name+"> component.");else if(1===this.$slots.default.length){var typedConfig=this.$props;typedConfig=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__config_typed_component_config__.b)(this,typedConfig),this.typedObj=new __WEBPACK_IMPORTED_MODULE_0_typed_js___default.a($typed,typedConfig)}}},mounted:function(){this.initTypedJS()},destroyed:function(){this.typedObj.destroy()}}},function(module,exports){module.exports=function(module){return module.webpackPolyfill||(module.deprecate=function(){},module.paths=[],module.children||(module.children=[]),Object.defineProperty(module,"loaded",{enumerable:!0,get:function(){return module.l}}),Object.defineProperty(module,"id",{enumerable:!0,get:function(){return module.i}}),module.webpackPolyfill=1),module}},function(module,exports){},function(module,exports){module.exports=function(rawScriptExports,compiledTemplate,scopeId,cssModules){var esModule,scriptExports=rawScriptExports=rawScriptExports||{},type=typeof rawScriptExports.default;"object"!==type&&"function"!==type||(esModule=rawScriptExports,scriptExports=rawScriptExports.default);var options="function"==typeof scriptExports?scriptExports.options:scriptExports;if(compiledTemplate&&(options.render=compiledTemplate.render,options.staticRenderFns=compiledTemplate.staticRenderFns),scopeId&&(options._scopeId=scopeId),cssModules){var computed=options.computed||(options.computed={});Object.keys(cssModules).forEach(function(key){var module=cssModules[key];computed[key]=function(){return module}})}return{esModule:esModule,exports:scriptExports,options:options}}},function(module,exports){module.exports={render:function(){var _vm=this,_h=_vm.$createElement;return(_vm._self._c||_h)("div",{ref:"typedElement",staticClass:"typed-element"},[_vm._t("default")],2)},staticRenderFns:[]}}])}); -------------------------------------------------------------------------------- /dist/vue-typed-js.common.js: -------------------------------------------------------------------------------- 1 | (function webpackUniversalModuleDefinition(root, factory) { 2 | if(typeof exports === 'object' && typeof module === 'object') 3 | module.exports = factory(); 4 | else if(typeof define === 'function' && define.amd) 5 | define([], factory); 6 | else if(typeof exports === 'object') 7 | exports["VueTypedJs"] = factory(); 8 | else 9 | root["VueTypedJs"] = factory(); 10 | })(this, function() { 11 | return /******/ (function(modules) { // webpackBootstrap 12 | /******/ // The module cache 13 | /******/ var installedModules = {}; 14 | /******/ 15 | /******/ // The require function 16 | /******/ function __webpack_require__(moduleId) { 17 | /******/ 18 | /******/ // Check if module is in cache 19 | /******/ if(installedModules[moduleId]) { 20 | /******/ return installedModules[moduleId].exports; 21 | /******/ } 22 | /******/ // Create a new module (and put it into the cache) 23 | /******/ var module = installedModules[moduleId] = { 24 | /******/ i: moduleId, 25 | /******/ l: false, 26 | /******/ exports: {} 27 | /******/ }; 28 | /******/ 29 | /******/ // Execute the module function 30 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 31 | /******/ 32 | /******/ // Flag the module as loaded 33 | /******/ module.l = true; 34 | /******/ 35 | /******/ // Return the exports of the module 36 | /******/ return module.exports; 37 | /******/ } 38 | /******/ 39 | /******/ 40 | /******/ // expose the modules object (__webpack_modules__) 41 | /******/ __webpack_require__.m = modules; 42 | /******/ 43 | /******/ // expose the module cache 44 | /******/ __webpack_require__.c = installedModules; 45 | /******/ 46 | /******/ // identity function for calling harmony imports with the correct context 47 | /******/ __webpack_require__.i = function(value) { return value; }; 48 | /******/ 49 | /******/ // define getter function for harmony exports 50 | /******/ __webpack_require__.d = function(exports, name, getter) { 51 | /******/ if(!__webpack_require__.o(exports, name)) { 52 | /******/ Object.defineProperty(exports, name, { 53 | /******/ configurable: false, 54 | /******/ enumerable: true, 55 | /******/ get: getter 56 | /******/ }); 57 | /******/ } 58 | /******/ }; 59 | /******/ 60 | /******/ // getDefaultExport function for compatibility with non-harmony modules 61 | /******/ __webpack_require__.n = function(module) { 62 | /******/ var getter = module && module.__esModule ? 63 | /******/ function getDefault() { return module['default']; } : 64 | /******/ function getModuleExports() { return module; }; 65 | /******/ __webpack_require__.d(getter, 'a', getter); 66 | /******/ return getter; 67 | /******/ }; 68 | /******/ 69 | /******/ // Object.prototype.hasOwnProperty.call 70 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 71 | /******/ 72 | /******/ // __webpack_public_path__ 73 | /******/ __webpack_require__.p = ""; 74 | /******/ 75 | /******/ // Load entry module and return exports 76 | /******/ return __webpack_require__(__webpack_require__.s = 3); 77 | /******/ }) 78 | /************************************************************************/ 79 | /******/ ([ 80 | /* 0 */ 81 | /***/ (function(module, exports) { 82 | 83 | eval("var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar g;\n\n// This works in non-strict mode\ng = function () {\n\treturn this;\n}();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzPzM2OTgiXSwibmFtZXMiOlsiZyIsIkZ1bmN0aW9uIiwiZXZhbCIsImUiLCJ3aW5kb3ciLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUlBLENBQUo7O0FBRUE7QUFDQUEsSUFBSyxZQUFXO0FBQ2YsUUFBTyxJQUFQO0FBQ0EsQ0FGRyxFQUFKOztBQUlBLElBQUk7QUFDSDtBQUNBQSxLQUFJQSxLQUFLQyxTQUFTLGFBQVQsR0FBTCxJQUFrQyxDQUFDLEdBQUVDLElBQUgsRUFBUyxNQUFULENBQXRDO0FBQ0EsQ0FIRCxDQUdFLE9BQU1DLENBQU4sRUFBUztBQUNWO0FBQ0EsS0FBRyxRQUFPQyxNQUFQLHlDQUFPQSxNQUFQLE9BQWtCLFFBQXJCLEVBQ0NKLElBQUlJLE1BQUo7QUFDRDs7QUFFRDtBQUNBO0FBQ0E7O0FBRUFDLE9BQU9DLE9BQVAsR0FBaUJOLENBQWpCIiwiZmlsZSI6IjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///0\n"); 84 | 85 | /***/ }), 86 | /* 1 */ 87 | /***/ (function(module, exports, __webpack_require__) { 88 | 89 | eval("\n/* styles */\n__webpack_require__(7)\n\nvar Component = __webpack_require__(8)(\n /* script */\n __webpack_require__(5),\n /* template */\n __webpack_require__(9),\n /* scopeId */\n null,\n /* cssModules */\n null\n)\nComponent.options.__file = \"/Users/orlando/Desktop/contributions/play/vue-typed-js/src/components/VueTypedJs.vue\"\nif (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== \"default\" && key !== \"__esModule\"})) {console.error(\"named exports are not supported in *.vue files.\")}\nif (Component.options.functional) {console.error(\"[vue-loader] VueTypedJs.vue: functional components are not supported with templates, they should use render functions.\")}\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-1de4642d\", Component.options)\n } else {\n hotAPI.reload(\"data-v-1de4642d\", Component.options)\n }\n})()}\n\nmodule.exports = Component.exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9WdWVUeXBlZEpzLnZ1ZT9iZWQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQTtBQUNBLHFCQUFnRzs7QUFFaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxpREFBaUQsSUFBSTtBQUNwSSxtQ0FBbUM7O0FBRW5DO0FBQ0EsWUFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6IjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qIHN0eWxlcyAqL1xucmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2V4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpbi9sb2FkZXIuanM/e1xcXCJvbWl0XFxcIjowLFxcXCJyZW1vdmVcXFwiOnRydWV9IWNzcy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3N0eWxlLXJld3JpdGVyP2lkPWRhdGEtdi0xZGU0NjQyZCFzYXNzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zdHlsZXMmaW5kZXg9MCEuL1Z1ZVR5cGVkSnMudnVlXCIpXG5cbnZhciBDb21wb25lbnQgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9jb21wb25lbnQtbm9ybWFsaXplclwiKShcbiAgLyogc2NyaXB0ICovXG4gIHJlcXVpcmUoXCIhIWJhYmVsLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL1Z1ZVR5cGVkSnMudnVlXCIpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/aWQ9ZGF0YS12LTFkZTQ2NDJkIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9WdWVUeXBlZEpzLnZ1ZVwiKSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiL1VzZXJzL29ybGFuZG8vRGVza3RvcC9jb250cmlidXRpb25zL3BsYXkvdnVlLXR5cGVkLWpzL3NyYy9jb21wb25lbnRzL1Z1ZVR5cGVkSnMudnVlXCJcbmlmIChDb21wb25lbnQuZXNNb2R1bGUgJiYgT2JqZWN0LmtleXMoQ29tcG9uZW50LmVzTW9kdWxlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtyZXR1cm4ga2V5ICE9PSBcImRlZmF1bHRcIiAmJiBrZXkgIT09IFwiX19lc01vZHVsZVwifSkpIHtjb25zb2xlLmVycm9yKFwibmFtZWQgZXhwb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiAqLnZ1ZSBmaWxlcy5cIil9XG5pZiAoQ29tcG9uZW50Lm9wdGlvbnMuZnVuY3Rpb25hbCkge2NvbnNvbGUuZXJyb3IoXCJbdnVlLWxvYWRlcl0gVnVlVHlwZWRKcy52dWU6IGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRlbXBsYXRlcywgdGhleSBzaG91bGQgdXNlIHJlbmRlciBmdW5jdGlvbnMuXCIpfVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMWRlNDY0MmRcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0xZGU0NjQyZFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxufSkoKX1cblxubW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvY29tcG9uZW50cy9WdWVUeXBlZEpzLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1\n"); 90 | 91 | /***/ }), 92 | /* 2 */ 93 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 94 | 95 | "use strict"; 96 | eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return props; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return getEventHandlers; });\nvar props = {\n strings: {\n type: Array,\n required: false,\n default: function _default() {\n return ['Hello World!'];\n }\n },\n stringsElement: {\n type: String,\n required: false,\n default: null\n },\n typeSpeed: {\n type: Number,\n required: false,\n default: 50\n },\n startDelay: {\n type: Number,\n required: false,\n default: 0\n },\n backSpeed: {\n type: Number,\n required: false,\n default: 0\n },\n smartBackspace: {\n type: Boolean,\n required: false,\n default: true\n },\n shuffle: {\n type: Boolean,\n required: false,\n default: false\n },\n backDelay: {\n type: Number,\n required: false,\n default: 700\n },\n fadeOut: {\n type: Boolean,\n required: false,\n default: false\n },\n fadeOutClass: {\n type: String,\n required: false,\n default: 'typed-fade-out'\n },\n fadeOutDelay: {\n type: Number,\n required: false,\n default: 500\n },\n loop: {\n type: Boolean,\n required: false,\n default: false\n },\n loopCount: {\n type: Number,\n required: false,\n default: Infinity\n },\n showCursor: {\n type: Boolean,\n required: false,\n default: true\n },\n cursorChar: {\n type: String,\n required: false,\n default: '|'\n },\n autoInsertCss: {\n type: Boolean,\n required: false,\n default: true\n },\n attr: {\n type: String,\n required: false,\n default: null\n },\n bindInputFocusEvents: {\n type: Boolean,\n required: false,\n default: false\n },\n contentType: {\n type: String,\n required: false,\n default: 'html'\n }\n};\n\nvar getEventHandlers = function getEventHandlers(context, typedConfig) {\n typedConfig.onComplete = function () {\n context.$emit('onComplete');\n };\n\n typedConfig.preStringTyped = function () {\n context.$emit('preStringTyped');\n };\n\n typedConfig.onStringTyped = function () {\n context.$emit('onStringTyped');\n };\n\n typedConfig.onLastStringBackspaced = function () {\n context.$emit('onLastStringBackspaced');\n };\n\n typedConfig.onTypingPaused = function () {\n context.$emit('onTypingPaused');\n };\n\n typedConfig.onTypingResumed = function () {\n context.$emit('onTypingResumed');\n };\n\n typedConfig.onReset = function () {\n context.$emit('onReset');\n };\n\n typedConfig.onStop = function () {\n context.$emit('onStop');\n };\n\n typedConfig.onStart = function () {\n context.$emit('onStart');\n };\n\n typedConfig.onDestroy = function () {\n context.$emit('onDestroy');\n };\n\n return typedConfig;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL3R5cGVkLWNvbXBvbmVudC5jb25maWcuanM/ZTQyNiJdLCJuYW1lcyI6WyJwcm9wcyIsInN0cmluZ3MiLCJ0eXBlIiwiQXJyYXkiLCJyZXF1aXJlZCIsImRlZmF1bHQiLCJzdHJpbmdzRWxlbWVudCIsIlN0cmluZyIsInR5cGVTcGVlZCIsIk51bWJlciIsInN0YXJ0RGVsYXkiLCJiYWNrU3BlZWQiLCJzbWFydEJhY2tzcGFjZSIsIkJvb2xlYW4iLCJzaHVmZmxlIiwiYmFja0RlbGF5IiwiZmFkZU91dCIsImZhZGVPdXRDbGFzcyIsImZhZGVPdXREZWxheSIsImxvb3AiLCJsb29wQ291bnQiLCJJbmZpbml0eSIsInNob3dDdXJzb3IiLCJjdXJzb3JDaGFyIiwiYXV0b0luc2VydENzcyIsImF0dHIiLCJiaW5kSW5wdXRGb2N1c0V2ZW50cyIsImNvbnRlbnRUeXBlIiwiZ2V0RXZlbnRIYW5kbGVycyIsImNvbnRleHQiLCJ0eXBlZENvbmZpZyIsIm9uQ29tcGxldGUiLCIkZW1pdCIsInByZVN0cmluZ1R5cGVkIiwib25TdHJpbmdUeXBlZCIsIm9uTGFzdFN0cmluZ0JhY2tzcGFjZWQiLCJvblR5cGluZ1BhdXNlZCIsIm9uVHlwaW5nUmVzdW1lZCIsIm9uUmVzZXQiLCJvblN0b3AiLCJvblN0YXJ0Iiwib25EZXN0cm95Il0sIm1hcHBpbmdzIjoiOztBQUFPLElBQU1BLFFBQVE7QUFDbkJDLFdBQVM7QUFDUEMsVUFBTUMsS0FEQztBQUVQQyxjQUFVLEtBRkg7QUFHUEMsYUFBUyxvQkFBWTtBQUNuQixhQUFPLENBQUUsY0FBRixDQUFQO0FBQ0Q7QUFMTSxHQURVO0FBUW5CQyxrQkFBZ0I7QUFDZEosVUFBTUssTUFEUTtBQUVkSCxjQUFVLEtBRkk7QUFHZEMsYUFBUztBQUhLLEdBUkc7QUFhbkJHLGFBQVc7QUFDVE4sVUFBTU8sTUFERztBQUVUTCxjQUFVLEtBRkQ7QUFHVEMsYUFBUztBQUhBLEdBYlE7QUFrQm5CSyxjQUFZ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QixZQUFNO0FBQzVCWixZQUFRRyxLQUFSLENBQWMsV0FBZDtBQUNELEdBRkQ7O0FBSUEsU0FBT0YsV0FBUDtBQUNELENBMUNNIiwiZmlsZSI6IjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcHJvcHMgPSB7XG4gIHN0cmluZ3M6IHtcbiAgICB0eXBlOiBBcnJheSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsgJ0hlbGxvIFdvcmxkIScgXVxuICAgIH0sXG4gIH0sXG4gIHN0cmluZ3NFbGVtZW50OiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiBudWxsLFxuICB9LFxuICB0eXBlU3BlZWQ6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IDUwLFxuICB9LFxuICBzdGFydERlbGF5OiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiAwLFxuICB9LFxuICBiYWNrU3BlZWQ6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IDAsXG4gIH0sXG4gIHNtYXJ0QmFja3NwYWNlOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgc2h1ZmZsZToge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBiYWNrRGVsYXk6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IDcwMCxcbiAgfSxcbiAgZmFkZU91dDoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBmYWRlT3V0Q2xhc3M6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6ICd0eXBlZC1mYWRlLW91dCcsXG4gIH0sXG4gIGZhZGVPdXREZWxheToge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogNTAwLFxuICB9LFxuICBsb29wOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGxvb3BDb3VudDoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogSW5maW5pdHksXG4gIH0sXG4gIHNob3dDdXJzb3I6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBjdXJzb3JDaGFyOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiAnfCcsXG4gIH0sXG4gIGF1dG9JbnNlcnRDc3M6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBhdHRyOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiBudWxsLFxuICB9LFxuICBiaW5kSW5wdXRGb2N1c0V2ZW50czoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBjb250ZW50VHlwZToge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdDogJ2h0bWwnLFxuICB9LFxufVxuXG5leHBvcnQgY29uc3QgZ2V0RXZlbnRIYW5kbGVycyA9IChjb250ZXh0LCB0eXBlZENvbmZpZykgPT4ge1xuICB0eXBlZENvbmZpZy5vbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgIGNvbnRleHQuJGVtaXQoJ29uQ29tcGxldGUnKVxuICB9XG5cbiAgdHlwZWRDb25maWcucHJlU3RyaW5nVHlwZWQgPSAoKSA9PiB7XG4gICAgY29udGV4dC4kZW1pdCgncHJlU3RyaW5nVHlwZWQnKVxuICB9XG5cbiAgdHlwZWRDb25maWcub25TdHJpbmdUeXBlZCA9ICgpID0+IHtcbiAgICBjb250ZXh0LiRlbWl0KCdvblN0cmluZ1R5cGVkJylcbiAgfVxuXG4gIHR5cGVkQ29uZmlnLm9uTGFzdFN0cmluZ0JhY2tzcGFjZWQgPSAoKSA9PiB7XG4gICAgY29udGV4dC4kZW1pdCgnb25MYXN0U3RyaW5nQmFja3NwYWNlZCcpXG4gIH1cblxuICB0eXBlZENvbmZpZy5vblR5cGluZ1BhdXNlZCA9ICgpID0+IHtcbiAgICBjb250ZXh0LiRlbWl0KCdvblR5cGluZ1BhdXNlZCcpXG4gIH1cblxuICB0eXBlZENvbmZpZy5vblR5cGluZ1Jlc3VtZWQgPSAoKSA9PiB7XG4gICAgY29udGV4dC4kZW1pdCgnb25UeXBpbmdSZXN1bWVkJylcbiAgfVxuXG4gIHR5cGVkQ29uZmlnLm9uUmVzZXQgPSAoKSA9PiB7XG4gICAgY29udGV4dC4kZW1pdCgnb25SZXNldCcpXG4gIH1cblxuICB0eXBlZENvbmZpZy5vblN0b3AgPSAoKSA9PiB7XG4gICAgY29udGV4dC4kZW1pdCgnb25TdG9wJylcbiAgfVxuXG4gIHR5cGVkQ29uZmlnLm9uU3RhcnQgPSAoKSA9PiB7XG4gICAgY29udGV4dC4kZW1pdCgnb25TdGFydCcpXG4gIH1cblxuICB0eXBlZENvbmZpZy5vbkRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgY29udGV4dC4kZW1pdCgnb25EZXN0cm95JylcbiAgfVxuXG4gIHJldHVybiB0eXBlZENvbmZpZ1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbmZpZy90eXBlZC1jb21wb25lbnQuY29uZmlnLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n"); 97 | 98 | /***/ }), 99 | /* 3 */ 100 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 101 | 102 | "use strict"; 103 | eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (immutable) */ __webpack_exports__[\"install\"] = install;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue__);\n/* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, \"VueTypedJs\", function() { return __WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue___default.a; });\n\n\n// Install the components\nfunction install(Vue) {\n Vue.component('vue-typed-js', __WEBPACK_IMPORTED_MODULE_0__components_VueTypedJs_vue___default.a);\n}\n\n// Expose the components\n\n\n// Plugin\nvar plugin = {\n /* eslint-disable no-undef */\n version: \"0.1.2\",\n install: install\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (plugin);\n\n// Auto-install\nvar GlobalVue = null;\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(0)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanM/OTU1MiJdLCJuYW1lcyI6WyJpbnN0YWxsIiwiVnVlIiwiY29tcG9uZW50IiwicGx1Z2luIiwidmVyc2lvbiIsIkdsb2JhbFZ1ZSIsIndpbmRvdyIsImdsb2JhbCIsInVzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFQTtBQUNPLFNBQVNBLE9BQVQsQ0FBa0JDLEdBQWxCLEVBQXVCO0FBQzVCQSxNQUFJQyxTQUFKLENBQWMsY0FBZCxFQUE4QixrRUFBOUI7QUFDRDs7QUFFRDtBQUNBOztBQUlBO0FBQ0EsSUFBTUMsU0FBUztBQUNiO0FBQ0FDLFdBQVMsT0FGSTtBQUdiSjtBQUhhLENBQWY7O0FBTUEsK0RBQWVHLE1BQWY7O0FBRUE7QUFDQSxJQUFJRSxZQUFZLElBQWhCO0FBQ0EsSUFBSSxPQUFPQyxNQUFQLEtBQWtCLFdBQXRCLEVBQW1DO0FBQ2pDRCxjQUFZQyxPQUFPTCxHQUFuQjtBQUNELENBRkQsTUFFTyxJQUFJLE9BQU9NLE1BQVAsS0FBa0IsV0FBdEIsRUFBbUM7QUFDeENGLGNBQVlFLE9BQU9OLEdBQW5CO0FBQ0Q7QUFDRCxJQUFJSSxTQUFKLEVBQWU7QUFDYkEsWUFBVUcsR0FBVixDQUFjTCxNQUFkO0FBQ0QsQyIsImZpbGUiOiIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZVR5cGVkSnMgZnJvbSAnLi9jb21wb25lbnRzL1Z1ZVR5cGVkSnMudnVlJ1xuXG4vLyBJbnN0YWxsIHRoZSBjb21wb25lbnRzXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbCAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoJ3Z1ZS10eXBlZC1qcycsIFZ1ZVR5cGVkSnMpXG59XG5cbi8vIEV4cG9zZSB0aGUgY29tcG9uZW50c1xuZXhwb3J0IHtcbiAgVnVlVHlwZWRKcyxcbn1cblxuLy8gUGx1Z2luXG5jb25zdCBwbHVnaW4gPSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gIHZlcnNpb246IFZFUlNJT04sXG4gIGluc3RhbGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IHBsdWdpblxuXG4vLyBBdXRvLWluc3RhbGxcbmxldCBHbG9iYWxWdWUgPSBudWxsXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgR2xvYmFsVnVlID0gd2luZG93LlZ1ZVxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICBHbG9iYWxWdWUgPSBnbG9iYWwuVnVlXG59XG5pZiAoR2xvYmFsVnVlKSB7XG4gIEdsb2JhbFZ1ZS51c2UocGx1Z2luKVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2luZGV4LmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3\n"); 104 | 105 | /***/ }), 106 | /* 4 */ 107 | /***/ (function(module, exports, __webpack_require__) { 108 | 109 | eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * \n * typed.js - A JavaScript Typing Animation Library\n * Author: Matt Boldt \n * Version: v2.0.9\n * Url: https://github.com/mattboldt/typed.js\n * License(s): MIT\n * \n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif (( false ? 'undefined' : _typeof(exports)) === 'object' && ( false ? 'undefined' : _typeof(module)) === 'object') module.exports = factory();else if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') exports[\"Typed\"] = factory();else root[\"Typed\"] = factory();\n})(this, function () {\n\treturn (/******/function (modules) {\n\t\t\t// webpackBootstrap\n\t\t\t/******/ // The module cache\n\t\t\t/******/var installedModules = {};\n\t\t\t/******/\n\t\t\t/******/ // The require function\n\t\t\t/******/function __webpack_require__(moduleId) {\n\t\t\t\t/******/\n\t\t\t\t/******/ // Check if module is in cache\n\t\t\t\t/******/if (installedModules[moduleId])\n\t\t\t\t\t/******/return installedModules[moduleId].exports;\n\t\t\t\t/******/\n\t\t\t\t/******/ // Create a new module (and put it into the cache)\n\t\t\t\t/******/var module = installedModules[moduleId] = {\n\t\t\t\t\t/******/exports: {},\n\t\t\t\t\t/******/id: moduleId,\n\t\t\t\t\t/******/loaded: false\n\t\t\t\t\t/******/ };\n\t\t\t\t/******/\n\t\t\t\t/******/ // Execute the module function\n\t\t\t\t/******/modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t\t\t\t/******/\n\t\t\t\t/******/ // Flag the module as loaded\n\t\t\t\t/******/module.loaded = true;\n\t\t\t\t/******/\n\t\t\t\t/******/ // Return the exports of the module\n\t\t\t\t/******/return module.exports;\n\t\t\t\t/******/\n\t\t\t}\n\t\t\t/******/\n\t\t\t/******/\n\t\t\t/******/ // expose the modules object (__webpack_modules__)\n\t\t\t/******/__webpack_require__.m = modules;\n\t\t\t/******/\n\t\t\t/******/ // expose the module cache\n\t\t\t/******/__webpack_require__.c = installedModules;\n\t\t\t/******/\n\t\t\t/******/ // __webpack_public_path__\n\t\t\t/******/__webpack_require__.p = \"\";\n\t\t\t/******/\n\t\t\t/******/ // Load entry module and return exports\n\t\t\t/******/return __webpack_require__(0);\n\t\t\t/******/\n\t\t}(\n\t\t/************************************************************************/\n\t\t/******/[\n\t\t/* 0 */\n\t\t/***/function (module, exports, __webpack_require__) {\n\n\t\t\t'use strict';\n\n\t\t\tObject.defineProperty(exports, '__esModule', {\n\t\t\t\tvalue: true\n\t\t\t});\n\n\t\t\tvar _createClass = function () {\n\t\t\t\tfunction defineProperties(target, props) {\n\t\t\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\t\t\tvar descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ('value' in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);\n\t\t\t\t\t}\n\t\t\t\t}return function (Constructor, protoProps, staticProps) {\n\t\t\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;\n\t\t\t\t};\n\t\t\t}();\n\n\t\t\tfunction _classCallCheck(instance, Constructor) {\n\t\t\t\tif (!(instance instanceof Constructor)) {\n\t\t\t\t\tthrow new TypeError('Cannot call a class as a function');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar _initializerJs = __webpack_require__(1);\n\n\t\t\tvar _htmlParserJs = __webpack_require__(3);\n\n\t\t\t/**\n * Welcome to Typed.js!\n * @param {string} elementId HTML element ID _OR_ HTML element\n * @param {object} options options object\n * @returns {object} a new Typed object\n */\n\n\t\t\tvar Typed = function () {\n\t\t\t\tfunction Typed(elementId, options) {\n\t\t\t\t\t_classCallCheck(this, Typed);\n\n\t\t\t\t\t// Initialize it up\n\t\t\t\t\t_initializerJs.initializer.load(this, options, elementId);\n\t\t\t\t\t// All systems go!\n\t\t\t\t\tthis.begin();\n\t\t\t\t}\n\n\t\t\t\t/**\n * Toggle start() and stop() of the Typed instance\n * @public\n */\n\n\t\t\t\t_createClass(Typed, [{\n\t\t\t\t\tkey: 'toggle',\n\t\t\t\t\tvalue: function toggle() {\n\t\t\t\t\t\tthis.pause.status ? this.start() : this.stop();\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Stop typing / backspacing and enable cursor blinking\n * @public\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'stop',\n\t\t\t\t\tvalue: function stop() {\n\t\t\t\t\t\tif (this.typingComplete) return;\n\t\t\t\t\t\tif (this.pause.status) return;\n\t\t\t\t\t\tthis.toggleBlinking(true);\n\t\t\t\t\t\tthis.pause.status = true;\n\t\t\t\t\t\tthis.options.onStop(this.arrayPos, this);\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Start typing / backspacing after being stopped\n * @public\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'start',\n\t\t\t\t\tvalue: function start() {\n\t\t\t\t\t\tif (this.typingComplete) return;\n\t\t\t\t\t\tif (!this.pause.status) return;\n\t\t\t\t\t\tthis.pause.status = false;\n\t\t\t\t\t\tif (this.pause.typewrite) {\n\t\t\t\t\t\t\tthis.typewrite(this.pause.curString, this.pause.curStrPos);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.backspace(this.pause.curString, this.pause.curStrPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.options.onStart(this.arrayPos, this);\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Destroy this instance of Typed\n * @public\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'destroy',\n\t\t\t\t\tvalue: function destroy() {\n\t\t\t\t\t\tthis.reset(false);\n\t\t\t\t\t\tthis.options.onDestroy(this);\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Reset Typed and optionally restarts\n * @param {boolean} restart\n * @public\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'reset',\n\t\t\t\t\tvalue: function reset() {\n\t\t\t\t\t\tvar restart = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];\n\n\t\t\t\t\t\tclearInterval(this.timeout);\n\t\t\t\t\t\tthis.replaceText('');\n\t\t\t\t\t\tif (this.cursor && this.cursor.parentNode) {\n\t\t\t\t\t\t\tthis.cursor.parentNode.removeChild(this.cursor);\n\t\t\t\t\t\t\tthis.cursor = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.strPos = 0;\n\t\t\t\t\t\tthis.arrayPos = 0;\n\t\t\t\t\t\tthis.curLoop = 0;\n\t\t\t\t\t\tif (restart) {\n\t\t\t\t\t\t\tthis.insertCursor();\n\t\t\t\t\t\t\tthis.options.onReset(this);\n\t\t\t\t\t\t\tthis.begin();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Begins the typing animation\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'begin',\n\t\t\t\t\tvalue: function begin() {\n\t\t\t\t\t\tvar _this = this;\n\n\t\t\t\t\t\tthis.typingComplete = false;\n\t\t\t\t\t\tthis.shuffleStringsIfNeeded(this);\n\t\t\t\t\t\tthis.insertCursor();\n\t\t\t\t\t\tif (this.bindInputFocusEvents) this.bindFocusEvents();\n\t\t\t\t\t\tthis.timeout = setTimeout(function () {\n\t\t\t\t\t\t\t// Check if there is some text in the element, if yes start by backspacing the default message\n\t\t\t\t\t\t\tif (!_this.currentElContent || _this.currentElContent.length === 0) {\n\t\t\t\t\t\t\t\t_this.typewrite(_this.strings[_this.sequence[_this.arrayPos]], _this.strPos);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Start typing\n\t\t\t\t\t\t\t\t_this.backspace(_this.currentElContent, _this.currentElContent.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this.startDelay);\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Called for each character typed\n * @param {string} curString the current string in the strings array\n * @param {number} curStrPos the current position in the curString\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'typewrite',\n\t\t\t\t\tvalue: function typewrite(curString, curStrPos) {\n\t\t\t\t\t\tvar _this2 = this;\n\n\t\t\t\t\t\tif (this.fadeOut && this.el.classList.contains(this.fadeOutClass)) {\n\t\t\t\t\t\t\tthis.el.classList.remove(this.fadeOutClass);\n\t\t\t\t\t\t\tif (this.cursor) this.cursor.classList.remove(this.fadeOutClass);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar humanize = this.humanizer(this.typeSpeed);\n\t\t\t\t\t\tvar numChars = 1;\n\n\t\t\t\t\t\tif (this.pause.status === true) {\n\t\t\t\t\t\t\tthis.setPauseStatus(curString, curStrPos, true);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// contain typing function in a timeout humanize'd delay\n\t\t\t\t\t\tthis.timeout = setTimeout(function () {\n\t\t\t\t\t\t\t// skip over any HTML chars\n\t\t\t\t\t\t\tcurStrPos = _htmlParserJs.htmlParser.typeHtmlChars(curString, curStrPos, _this2);\n\n\t\t\t\t\t\t\tvar pauseTime = 0;\n\t\t\t\t\t\t\tvar substr = curString.substr(curStrPos);\n\t\t\t\t\t\t\t// check for an escape character before a pause value\n\t\t\t\t\t\t\t// format: \\^\\d+ .. eg: ^1000 .. should be able to print the ^ too using ^^\n\t\t\t\t\t\t\t// single ^ are removed from string\n\t\t\t\t\t\t\tif (substr.charAt(0) === '^') {\n\t\t\t\t\t\t\t\tif (/^\\^\\d+/.test(substr)) {\n\t\t\t\t\t\t\t\t\tvar skip = 1; // skip at least 1\n\t\t\t\t\t\t\t\t\tsubstr = /\\d+/.exec(substr)[0];\n\t\t\t\t\t\t\t\t\tskip += substr.length;\n\t\t\t\t\t\t\t\t\tpauseTime = parseInt(substr);\n\t\t\t\t\t\t\t\t\t_this2.temporaryPause = true;\n\t\t\t\t\t\t\t\t\t_this2.options.onTypingPaused(_this2.arrayPos, _this2);\n\t\t\t\t\t\t\t\t\t// strip out the escape character and pause value so they're not printed\n\t\t\t\t\t\t\t\t\tcurString = curString.substring(0, curStrPos) + curString.substring(curStrPos + skip);\n\t\t\t\t\t\t\t\t\t_this2.toggleBlinking(true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// check for skip characters formatted as\n\t\t\t\t\t\t\t// \"this is a `string to print NOW` ...\"\n\t\t\t\t\t\t\tif (substr.charAt(0) === '`') {\n\t\t\t\t\t\t\t\twhile (curString.substr(curStrPos + numChars).charAt(0) !== '`') {\n\t\t\t\t\t\t\t\t\tnumChars++;\n\t\t\t\t\t\t\t\t\tif (curStrPos + numChars > curString.length) break;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// strip out the escape characters and append all the string in between\n\t\t\t\t\t\t\t\tvar stringBeforeSkip = curString.substring(0, curStrPos);\n\t\t\t\t\t\t\t\tvar stringSkipped = curString.substring(stringBeforeSkip.length + 1, curStrPos + numChars);\n\t\t\t\t\t\t\t\tvar stringAfterSkip = curString.substring(curStrPos + numChars + 1);\n\t\t\t\t\t\t\t\tcurString = stringBeforeSkip + stringSkipped + stringAfterSkip;\n\t\t\t\t\t\t\t\tnumChars--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// timeout for any pause after a character\n\t\t\t\t\t\t\t_this2.timeout = setTimeout(function () {\n\t\t\t\t\t\t\t\t// Accounts for blinking while paused\n\t\t\t\t\t\t\t\t_this2.toggleBlinking(false);\n\n\t\t\t\t\t\t\t\t// We're done with this sentence!\n\t\t\t\t\t\t\t\tif (curStrPos >= curString.length) {\n\t\t\t\t\t\t\t\t\t_this2.doneTyping(curString, curStrPos);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t_this2.keepTyping(curString, curStrPos, numChars);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// end of character pause\n\t\t\t\t\t\t\t\tif (_this2.temporaryPause) {\n\t\t\t\t\t\t\t\t\t_this2.temporaryPause = false;\n\t\t\t\t\t\t\t\t\t_this2.options.onTypingResumed(_this2.arrayPos, _this2);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, pauseTime);\n\n\t\t\t\t\t\t\t// humanized value for typing\n\t\t\t\t\t\t}, humanize);\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Continue to the next string & begin typing\n * @param {string} curString the current string in the strings array\n * @param {number} curStrPos the current position in the curString\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'keepTyping',\n\t\t\t\t\tvalue: function keepTyping(curString, curStrPos, numChars) {\n\t\t\t\t\t\t// call before functions if applicable\n\t\t\t\t\t\tif (curStrPos === 0) {\n\t\t\t\t\t\t\tthis.toggleBlinking(false);\n\t\t\t\t\t\t\tthis.options.preStringTyped(this.arrayPos, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// start typing each new char into existing string\n\t\t\t\t\t\t// curString: arg, this.el.html: original text inside element\n\t\t\t\t\t\tcurStrPos += numChars;\n\t\t\t\t\t\tvar nextString = curString.substr(0, curStrPos);\n\t\t\t\t\t\tthis.replaceText(nextString);\n\t\t\t\t\t\t// loop the function\n\t\t\t\t\t\tthis.typewrite(curString, curStrPos);\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * We're done typing all strings\n * @param {string} curString the current string in the strings array\n * @param {number} curStrPos the current position in the curString\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'doneTyping',\n\t\t\t\t\tvalue: function doneTyping(curString, curStrPos) {\n\t\t\t\t\t\tvar _this3 = this;\n\n\t\t\t\t\t\t// fires callback function\n\t\t\t\t\t\tthis.options.onStringTyped(this.arrayPos, this);\n\t\t\t\t\t\tthis.toggleBlinking(true);\n\t\t\t\t\t\t// is this the final string\n\t\t\t\t\t\tif (this.arrayPos === this.strings.length - 1) {\n\t\t\t\t\t\t\t// callback that occurs on the last typed string\n\t\t\t\t\t\t\tthis.complete();\n\t\t\t\t\t\t\t// quit if we wont loop back\n\t\t\t\t\t\t\tif (this.loop === false || this.curLoop === this.loopCount) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.timeout = setTimeout(function () {\n\t\t\t\t\t\t\t_this3.backspace(curString, curStrPos);\n\t\t\t\t\t\t}, this.backDelay);\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Backspaces 1 character at a time\n * @param {string} curString the current string in the strings array\n * @param {number} curStrPos the current position in the curString\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'backspace',\n\t\t\t\t\tvalue: function backspace(curString, curStrPos) {\n\t\t\t\t\t\tvar _this4 = this;\n\n\t\t\t\t\t\tif (this.pause.status === true) {\n\t\t\t\t\t\t\tthis.setPauseStatus(curString, curStrPos, true);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.fadeOut) return this.initFadeOut();\n\n\t\t\t\t\t\tthis.toggleBlinking(false);\n\t\t\t\t\t\tvar humanize = this.humanizer(this.backSpeed);\n\n\t\t\t\t\t\tthis.timeout = setTimeout(function () {\n\t\t\t\t\t\t\tcurStrPos = _htmlParserJs.htmlParser.backSpaceHtmlChars(curString, curStrPos, _this4);\n\t\t\t\t\t\t\t// replace text with base text + typed characters\n\t\t\t\t\t\t\tvar curStringAtPosition = curString.substr(0, curStrPos);\n\t\t\t\t\t\t\t_this4.replaceText(curStringAtPosition);\n\n\t\t\t\t\t\t\t// if smartBack is enabled\n\t\t\t\t\t\t\tif (_this4.smartBackspace) {\n\t\t\t\t\t\t\t\t// the remaining part of the current string is equal of the same part of the new string\n\t\t\t\t\t\t\t\tvar nextString = _this4.strings[_this4.arrayPos + 1];\n\t\t\t\t\t\t\t\tif (nextString && curStringAtPosition === nextString.substr(0, curStrPos)) {\n\t\t\t\t\t\t\t\t\t_this4.stopNum = curStrPos;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t_this4.stopNum = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// if the number (id of character in current string) is\n\t\t\t\t\t\t\t// less than the stop number, keep going\n\t\t\t\t\t\t\tif (curStrPos > _this4.stopNum) {\n\t\t\t\t\t\t\t\t// subtract characters one by one\n\t\t\t\t\t\t\t\tcurStrPos--;\n\t\t\t\t\t\t\t\t// loop the function\n\t\t\t\t\t\t\t\t_this4.backspace(curString, curStrPos);\n\t\t\t\t\t\t\t} else if (curStrPos <= _this4.stopNum) {\n\t\t\t\t\t\t\t\t// if the stop number has been reached, increase\n\t\t\t\t\t\t\t\t// array position to next string\n\t\t\t\t\t\t\t\t_this4.arrayPos++;\n\t\t\t\t\t\t\t\t// When looping, begin at the beginning after backspace complete\n\t\t\t\t\t\t\t\tif (_this4.arrayPos === _this4.strings.length) {\n\t\t\t\t\t\t\t\t\t_this4.arrayPos = 0;\n\t\t\t\t\t\t\t\t\t_this4.options.onLastStringBackspaced();\n\t\t\t\t\t\t\t\t\t_this4.shuffleStringsIfNeeded();\n\t\t\t\t\t\t\t\t\t_this4.begin();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t_this4.typewrite(_this4.strings[_this4.sequence[_this4.arrayPos]], curStrPos);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// humanized value for typing\n\t\t\t\t\t\t}, humanize);\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Full animation is complete\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'complete',\n\t\t\t\t\tvalue: function complete() {\n\t\t\t\t\t\tthis.options.onComplete(this);\n\t\t\t\t\t\tif (this.loop) {\n\t\t\t\t\t\t\tthis.curLoop++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.typingComplete = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Has the typing been stopped\n * @param {string} curString the current string in the strings array\n * @param {number} curStrPos the current position in the curString\n * @param {boolean} isTyping\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'setPauseStatus',\n\t\t\t\t\tvalue: function setPauseStatus(curString, curStrPos, isTyping) {\n\t\t\t\t\t\tthis.pause.typewrite = isTyping;\n\t\t\t\t\t\tthis.pause.curString = curString;\n\t\t\t\t\t\tthis.pause.curStrPos = curStrPos;\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Toggle the blinking cursor\n * @param {boolean} isBlinking\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'toggleBlinking',\n\t\t\t\t\tvalue: function toggleBlinking(isBlinking) {\n\t\t\t\t\t\tif (!this.cursor) return;\n\t\t\t\t\t\t// if in paused state, don't toggle blinking a 2nd time\n\t\t\t\t\t\tif (this.pause.status) return;\n\t\t\t\t\t\tif (this.cursorBlinking === isBlinking) return;\n\t\t\t\t\t\tthis.cursorBlinking = isBlinking;\n\t\t\t\t\t\tif (isBlinking) {\n\t\t\t\t\t\t\tthis.cursor.classList.add('typed-cursor--blink');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.cursor.classList.remove('typed-cursor--blink');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Speed in MS to type\n * @param {number} speed\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'humanizer',\n\t\t\t\t\tvalue: function humanizer(speed) {\n\t\t\t\t\t\treturn Math.round(Math.random() * speed / 2) + speed;\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Shuffle the sequence of the strings array\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'shuffleStringsIfNeeded',\n\t\t\t\t\tvalue: function shuffleStringsIfNeeded() {\n\t\t\t\t\t\tif (!this.shuffle) return;\n\t\t\t\t\t\tthis.sequence = this.sequence.sort(function () {\n\t\t\t\t\t\t\treturn Math.random() - 0.5;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Adds a CSS class to fade out current string\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'initFadeOut',\n\t\t\t\t\tvalue: function initFadeOut() {\n\t\t\t\t\t\tvar _this5 = this;\n\n\t\t\t\t\t\tthis.el.className += ' ' + this.fadeOutClass;\n\t\t\t\t\t\tif (this.cursor) this.cursor.className += ' ' + this.fadeOutClass;\n\t\t\t\t\t\treturn setTimeout(function () {\n\t\t\t\t\t\t\t_this5.arrayPos++;\n\t\t\t\t\t\t\t_this5.replaceText('');\n\n\t\t\t\t\t\t\t// Resets current string if end of loop reached\n\t\t\t\t\t\t\tif (_this5.strings.length > _this5.arrayPos) {\n\t\t\t\t\t\t\t\t_this5.typewrite(_this5.strings[_this5.sequence[_this5.arrayPos]], 0);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_this5.typewrite(_this5.strings[0], 0);\n\t\t\t\t\t\t\t\t_this5.arrayPos = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this.fadeOutDelay);\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Replaces current text in the HTML element\n * depending on element type\n * @param {string} str\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'replaceText',\n\t\t\t\t\tvalue: function replaceText(str) {\n\t\t\t\t\t\tif (this.attr) {\n\t\t\t\t\t\t\tthis.el.setAttribute(this.attr, str);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (this.isInput) {\n\t\t\t\t\t\t\t\tthis.el.value = str;\n\t\t\t\t\t\t\t} else if (this.contentType === 'html') {\n\t\t\t\t\t\t\t\tthis.el.innerHTML = str;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.el.textContent = str;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * If using input elements, bind focus in order to\n * start and stop the animation\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'bindFocusEvents',\n\t\t\t\t\tvalue: function bindFocusEvents() {\n\t\t\t\t\t\tvar _this6 = this;\n\n\t\t\t\t\t\tif (!this.isInput) return;\n\t\t\t\t\t\tthis.el.addEventListener('focus', function (e) {\n\t\t\t\t\t\t\t_this6.stop();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.el.addEventListener('blur', function (e) {\n\t\t\t\t\t\t\tif (_this6.el.value && _this6.el.value.length !== 0) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_this6.start();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * On init, insert the cursor element\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'insertCursor',\n\t\t\t\t\tvalue: function insertCursor() {\n\t\t\t\t\t\tif (!this.showCursor) return;\n\t\t\t\t\t\tif (this.cursor) return;\n\t\t\t\t\t\tthis.cursor = document.createElement('span');\n\t\t\t\t\t\tthis.cursor.className = 'typed-cursor';\n\t\t\t\t\t\tthis.cursor.innerHTML = this.cursorChar;\n\t\t\t\t\t\tthis.el.parentNode && this.el.parentNode.insertBefore(this.cursor, this.el.nextSibling);\n\t\t\t\t\t}\n\t\t\t\t}]);\n\n\t\t\t\treturn Typed;\n\t\t\t}();\n\n\t\t\texports['default'] = Typed;\n\t\t\tmodule.exports = exports['default'];\n\n\t\t\t/***/\n\t\t},\n\t\t/* 1 */\n\t\t/***/function (module, exports, __webpack_require__) {\n\n\t\t\t'use strict';\n\n\t\t\tObject.defineProperty(exports, '__esModule', {\n\t\t\t\tvalue: true\n\t\t\t});\n\n\t\t\tvar _extends = Object.assign || function (target) {\n\t\t\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\t\t\tvar source = arguments[i];for (var key in source) {\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\t\t\t\t\ttarget[key] = source[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}return target;\n\t\t\t};\n\n\t\t\tvar _createClass = function () {\n\t\t\t\tfunction defineProperties(target, props) {\n\t\t\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\t\t\tvar descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ('value' in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);\n\t\t\t\t\t}\n\t\t\t\t}return function (Constructor, protoProps, staticProps) {\n\t\t\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;\n\t\t\t\t};\n\t\t\t}();\n\n\t\t\tfunction _interopRequireDefault(obj) {\n\t\t\t\treturn obj && obj.__esModule ? obj : { 'default': obj };\n\t\t\t}\n\n\t\t\tfunction _classCallCheck(instance, Constructor) {\n\t\t\t\tif (!(instance instanceof Constructor)) {\n\t\t\t\t\tthrow new TypeError('Cannot call a class as a function');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar _defaultsJs = __webpack_require__(2);\n\n\t\t\tvar _defaultsJs2 = _interopRequireDefault(_defaultsJs);\n\n\t\t\t/**\n * Initialize the Typed object\n */\n\n\t\t\tvar Initializer = function () {\n\t\t\t\tfunction Initializer() {\n\t\t\t\t\t_classCallCheck(this, Initializer);\n\t\t\t\t}\n\n\t\t\t\t_createClass(Initializer, [{\n\t\t\t\t\tkey: 'load',\n\n\t\t\t\t\t/**\n * Load up defaults & options on the Typed instance\n * @param {Typed} self instance of Typed\n * @param {object} options options object\n * @param {string} elementId HTML element ID _OR_ instance of HTML element\n * @private\n */\n\n\t\t\t\t\tvalue: function load(self, options, elementId) {\n\t\t\t\t\t\t// chosen element to manipulate text\n\t\t\t\t\t\tif (typeof elementId === 'string') {\n\t\t\t\t\t\t\tself.el = document.querySelector(elementId);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.el = elementId;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tself.options = _extends({}, _defaultsJs2['default'], options);\n\n\t\t\t\t\t\t// attribute to type into\n\t\t\t\t\t\tself.isInput = self.el.tagName.toLowerCase() === 'input';\n\t\t\t\t\t\tself.attr = self.options.attr;\n\t\t\t\t\t\tself.bindInputFocusEvents = self.options.bindInputFocusEvents;\n\n\t\t\t\t\t\t// show cursor\n\t\t\t\t\t\tself.showCursor = self.isInput ? false : self.options.showCursor;\n\n\t\t\t\t\t\t// custom cursor\n\t\t\t\t\t\tself.cursorChar = self.options.cursorChar;\n\n\t\t\t\t\t\t// Is the cursor blinking\n\t\t\t\t\t\tself.cursorBlinking = true;\n\n\t\t\t\t\t\t// text content of element\n\t\t\t\t\t\tself.elContent = self.attr ? self.el.getAttribute(self.attr) : self.el.textContent;\n\n\t\t\t\t\t\t// html or plain text\n\t\t\t\t\t\tself.contentType = self.options.contentType;\n\n\t\t\t\t\t\t// typing speed\n\t\t\t\t\t\tself.typeSpeed = self.options.typeSpeed;\n\n\t\t\t\t\t\t// add a delay before typing starts\n\t\t\t\t\t\tself.startDelay = self.options.startDelay;\n\n\t\t\t\t\t\t// backspacing speed\n\t\t\t\t\t\tself.backSpeed = self.options.backSpeed;\n\n\t\t\t\t\t\t// only backspace what doesn't match the previous string\n\t\t\t\t\t\tself.smartBackspace = self.options.smartBackspace;\n\n\t\t\t\t\t\t// amount of time to wait before backspacing\n\t\t\t\t\t\tself.backDelay = self.options.backDelay;\n\n\t\t\t\t\t\t// Fade out instead of backspace\n\t\t\t\t\t\tself.fadeOut = self.options.fadeOut;\n\t\t\t\t\t\tself.fadeOutClass = self.options.fadeOutClass;\n\t\t\t\t\t\tself.fadeOutDelay = self.options.fadeOutDelay;\n\n\t\t\t\t\t\t// variable to check whether typing is currently paused\n\t\t\t\t\t\tself.isPaused = false;\n\n\t\t\t\t\t\t// input strings of text\n\t\t\t\t\t\tself.strings = self.options.strings.map(function (s) {\n\t\t\t\t\t\t\treturn s.trim();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// div containing strings\n\t\t\t\t\t\tif (typeof self.options.stringsElement === 'string') {\n\t\t\t\t\t\t\tself.stringsElement = document.querySelector(self.options.stringsElement);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.stringsElement = self.options.stringsElement;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (self.stringsElement) {\n\t\t\t\t\t\t\tself.strings = [];\n\t\t\t\t\t\t\tself.stringsElement.style.display = 'none';\n\t\t\t\t\t\t\tvar strings = Array.prototype.slice.apply(self.stringsElement.children);\n\t\t\t\t\t\t\tvar stringsLength = strings.length;\n\n\t\t\t\t\t\t\tif (stringsLength) {\n\t\t\t\t\t\t\t\tfor (var i = 0; i < stringsLength; i += 1) {\n\t\t\t\t\t\t\t\t\tvar stringEl = strings[i];\n\t\t\t\t\t\t\t\t\tself.strings.push(stringEl.innerHTML.trim());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// character number position of current string\n\t\t\t\t\t\tself.strPos = 0;\n\n\t\t\t\t\t\t// current array position\n\t\t\t\t\t\tself.arrayPos = 0;\n\n\t\t\t\t\t\t// index of string to stop backspacing on\n\t\t\t\t\t\tself.stopNum = 0;\n\n\t\t\t\t\t\t// Looping logic\n\t\t\t\t\t\tself.loop = self.options.loop;\n\t\t\t\t\t\tself.loopCount = self.options.loopCount;\n\t\t\t\t\t\tself.curLoop = 0;\n\n\t\t\t\t\t\t// shuffle the strings\n\t\t\t\t\t\tself.shuffle = self.options.shuffle;\n\t\t\t\t\t\t// the order of strings\n\t\t\t\t\t\tself.sequence = [];\n\n\t\t\t\t\t\tself.pause = {\n\t\t\t\t\t\t\tstatus: false,\n\t\t\t\t\t\t\ttypewrite: true,\n\t\t\t\t\t\t\tcurString: '',\n\t\t\t\t\t\t\tcurStrPos: 0\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// When the typing is complete (when not looped)\n\t\t\t\t\t\tself.typingComplete = false;\n\n\t\t\t\t\t\t// Set the order in which the strings are typed\n\t\t\t\t\t\tfor (var i in self.strings) {\n\t\t\t\t\t\t\tself.sequence[i] = i;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If there is some text in the element\n\t\t\t\t\t\tself.currentElContent = this.getCurrentElContent(self);\n\n\t\t\t\t\t\tself.autoInsertCss = self.options.autoInsertCss;\n\n\t\t\t\t\t\tthis.appendAnimationCss(self);\n\t\t\t\t\t}\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'getCurrentElContent',\n\t\t\t\t\tvalue: function getCurrentElContent(self) {\n\t\t\t\t\t\tvar elContent = '';\n\t\t\t\t\t\tif (self.attr) {\n\t\t\t\t\t\t\telContent = self.el.getAttribute(self.attr);\n\t\t\t\t\t\t} else if (self.isInput) {\n\t\t\t\t\t\t\telContent = self.el.value;\n\t\t\t\t\t\t} else if (self.contentType === 'html') {\n\t\t\t\t\t\t\telContent = self.el.innerHTML;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telContent = self.el.textContent;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn elContent;\n\t\t\t\t\t}\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'appendAnimationCss',\n\t\t\t\t\tvalue: function appendAnimationCss(self) {\n\t\t\t\t\t\tvar cssDataName = 'data-typed-js-css';\n\t\t\t\t\t\tif (!self.autoInsertCss) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!self.showCursor && !self.fadeOut) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (document.querySelector('[' + cssDataName + ']')) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar css = document.createElement('style');\n\t\t\t\t\t\tcss.type = 'text/css';\n\t\t\t\t\t\tcss.setAttribute(cssDataName, true);\n\n\t\t\t\t\t\tvar innerCss = '';\n\t\t\t\t\t\tif (self.showCursor) {\n\t\t\t\t\t\t\tinnerCss += '\\n .typed-cursor{\\n opacity: 1;\\n }\\n .typed-cursor.typed-cursor--blink{\\n animation: typedjsBlink 0.7s infinite;\\n -webkit-animation: typedjsBlink 0.7s infinite;\\n animation: typedjsBlink 0.7s infinite;\\n }\\n @keyframes typedjsBlink{\\n 50% { opacity: 0.0; }\\n }\\n @-webkit-keyframes typedjsBlink{\\n 0% { opacity: 1; }\\n 50% { opacity: 0.0; }\\n 100% { opacity: 1; }\\n }\\n ';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (self.fadeOut) {\n\t\t\t\t\t\t\tinnerCss += '\\n .typed-fade-out{\\n opacity: 0;\\n transition: opacity .25s;\\n }\\n .typed-cursor.typed-cursor--blink.typed-fade-out{\\n -webkit-animation: 0;\\n animation: 0;\\n }\\n ';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (css.length === 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcss.innerHTML = innerCss;\n\t\t\t\t\t\tdocument.body.appendChild(css);\n\t\t\t\t\t}\n\t\t\t\t}]);\n\n\t\t\t\treturn Initializer;\n\t\t\t}();\n\n\t\t\texports['default'] = Initializer;\n\t\t\tvar initializer = new Initializer();\n\t\t\texports.initializer = initializer;\n\n\t\t\t/***/\n\t\t},\n\t\t/* 2 */\n\t\t/***/function (module, exports) {\n\n\t\t\t/**\n * Defaults & options\n * @returns {object} Typed defaults & options\n * @public\n */\n\n\t\t\t'use strict';\n\n\t\t\tObject.defineProperty(exports, '__esModule', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tvar defaults = {\n\t\t\t\t/**\n * @property {array} strings strings to be typed\n * @property {string} stringsElement ID of element containing string children\n */\n\t\t\t\tstrings: ['These are the default values...', 'You know what you should do?', 'Use your own!', 'Have a great day!'],\n\t\t\t\tstringsElement: null,\n\n\t\t\t\t/**\n * @property {number} typeSpeed type speed in milliseconds\n */\n\t\t\t\ttypeSpeed: 0,\n\n\t\t\t\t/**\n * @property {number} startDelay time before typing starts in milliseconds\n */\n\t\t\t\tstartDelay: 0,\n\n\t\t\t\t/**\n * @property {number} backSpeed backspacing speed in milliseconds\n */\n\t\t\t\tbackSpeed: 0,\n\n\t\t\t\t/**\n * @property {boolean} smartBackspace only backspace what doesn't match the previous string\n */\n\t\t\t\tsmartBackspace: true,\n\n\t\t\t\t/**\n * @property {boolean} shuffle shuffle the strings\n */\n\t\t\t\tshuffle: false,\n\n\t\t\t\t/**\n * @property {number} backDelay time before backspacing in milliseconds\n */\n\t\t\t\tbackDelay: 700,\n\n\t\t\t\t/**\n * @property {boolean} fadeOut Fade out instead of backspace\n * @property {string} fadeOutClass css class for fade animation\n * @property {boolean} fadeOutDelay Fade out delay in milliseconds\n */\n\t\t\t\tfadeOut: false,\n\t\t\t\tfadeOutClass: 'typed-fade-out',\n\t\t\t\tfadeOutDelay: 500,\n\n\t\t\t\t/**\n * @property {boolean} loop loop strings\n * @property {number} loopCount amount of loops\n */\n\t\t\t\tloop: false,\n\t\t\t\tloopCount: Infinity,\n\n\t\t\t\t/**\n * @property {boolean} showCursor show cursor\n * @property {string} cursorChar character for cursor\n * @property {boolean} autoInsertCss insert CSS for cursor and fadeOut into HTML \n */\n\t\t\t\tshowCursor: true,\n\t\t\t\tcursorChar: '|',\n\t\t\t\tautoInsertCss: true,\n\n\t\t\t\t/**\n * @property {string} attr attribute for typing\n * Ex: input placeholder, value, or just HTML text\n */\n\t\t\t\tattr: null,\n\n\t\t\t\t/**\n * @property {boolean} bindInputFocusEvents bind to focus and blur if el is text input\n */\n\t\t\t\tbindInputFocusEvents: false,\n\n\t\t\t\t/**\n * @property {string} contentType 'html' or 'null' for plaintext\n */\n\t\t\t\tcontentType: 'html',\n\n\t\t\t\t/**\n * All typing is complete\n * @param {Typed} self\n */\n\t\t\t\tonComplete: function onComplete(self) {},\n\n\t\t\t\t/**\n * Before each string is typed\n * @param {number} arrayPos\n * @param {Typed} self\n */\n\t\t\t\tpreStringTyped: function preStringTyped(arrayPos, self) {},\n\n\t\t\t\t/**\n * After each string is typed\n * @param {number} arrayPos\n * @param {Typed} self\n */\n\t\t\t\tonStringTyped: function onStringTyped(arrayPos, self) {},\n\n\t\t\t\t/**\n * During looping, after last string is typed\n * @param {Typed} self\n */\n\t\t\t\tonLastStringBackspaced: function onLastStringBackspaced(self) {},\n\n\t\t\t\t/**\n * Typing has been stopped\n * @param {number} arrayPos\n * @param {Typed} self\n */\n\t\t\t\tonTypingPaused: function onTypingPaused(arrayPos, self) {},\n\n\t\t\t\t/**\n * Typing has been started after being stopped\n * @param {number} arrayPos\n * @param {Typed} self\n */\n\t\t\t\tonTypingResumed: function onTypingResumed(arrayPos, self) {},\n\n\t\t\t\t/**\n * After reset\n * @param {Typed} self\n */\n\t\t\t\tonReset: function onReset(self) {},\n\n\t\t\t\t/**\n * After stop\n * @param {number} arrayPos\n * @param {Typed} self\n */\n\t\t\t\tonStop: function onStop(arrayPos, self) {},\n\n\t\t\t\t/**\n * After start\n * @param {number} arrayPos\n * @param {Typed} self\n */\n\t\t\t\tonStart: function onStart(arrayPos, self) {},\n\n\t\t\t\t/**\n * After destroy\n * @param {Typed} self\n */\n\t\t\t\tonDestroy: function onDestroy(self) {}\n\t\t\t};\n\n\t\t\texports['default'] = defaults;\n\t\t\tmodule.exports = exports['default'];\n\n\t\t\t/***/\n\t\t},\n\t\t/* 3 */\n\t\t/***/function (module, exports) {\n\n\t\t\t/**\n * TODO: These methods can probably be combined somehow\n * Parse HTML tags & HTML Characters\n */\n\n\t\t\t'use strict';\n\n\t\t\tObject.defineProperty(exports, '__esModule', {\n\t\t\t\tvalue: true\n\t\t\t});\n\n\t\t\tvar _createClass = function () {\n\t\t\t\tfunction defineProperties(target, props) {\n\t\t\t\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\t\t\t\tvar descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ('value' in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);\n\t\t\t\t\t}\n\t\t\t\t}return function (Constructor, protoProps, staticProps) {\n\t\t\t\t\tif (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;\n\t\t\t\t};\n\t\t\t}();\n\n\t\t\tfunction _classCallCheck(instance, Constructor) {\n\t\t\t\tif (!(instance instanceof Constructor)) {\n\t\t\t\t\tthrow new TypeError('Cannot call a class as a function');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar HTMLParser = function () {\n\t\t\t\tfunction HTMLParser() {\n\t\t\t\t\t_classCallCheck(this, HTMLParser);\n\t\t\t\t}\n\n\t\t\t\t_createClass(HTMLParser, [{\n\t\t\t\t\tkey: 'typeHtmlChars',\n\n\t\t\t\t\t/**\n * Type HTML tags & HTML Characters\n * @param {string} curString Current string\n * @param {number} curStrPos Position in current string\n * @param {Typed} self instance of Typed\n * @returns {number} a new string position\n * @private\n */\n\n\t\t\t\t\tvalue: function typeHtmlChars(curString, curStrPos, self) {\n\t\t\t\t\t\tif (self.contentType !== 'html') return curStrPos;\n\t\t\t\t\t\tvar curChar = curString.substr(curStrPos).charAt(0);\n\t\t\t\t\t\tif (curChar === '<' || curChar === '&') {\n\t\t\t\t\t\t\tvar endTag = '';\n\t\t\t\t\t\t\tif (curChar === '<') {\n\t\t\t\t\t\t\t\tendTag = '>';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tendTag = ';';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile (curString.substr(curStrPos + 1).charAt(0) !== endTag) {\n\t\t\t\t\t\t\t\tcurStrPos++;\n\t\t\t\t\t\t\t\tif (curStrPos + 1 > curString.length) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurStrPos++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn curStrPos;\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n * Backspace HTML tags and HTML Characters\n * @param {string} curString Current string\n * @param {number} curStrPos Position in current string\n * @param {Typed} self instance of Typed\n * @returns {number} a new string position\n * @private\n */\n\t\t\t\t}, {\n\t\t\t\t\tkey: 'backSpaceHtmlChars',\n\t\t\t\t\tvalue: function backSpaceHtmlChars(curString, curStrPos, self) {\n\t\t\t\t\t\tif (self.contentType !== 'html') return curStrPos;\n\t\t\t\t\t\tvar curChar = curString.substr(curStrPos).charAt(0);\n\t\t\t\t\t\tif (curChar === '>' || curChar === ';') {\n\t\t\t\t\t\t\tvar endTag = '';\n\t\t\t\t\t\t\tif (curChar === '>') {\n\t\t\t\t\t\t\t\tendTag = '<';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tendTag = '&';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile (curString.substr(curStrPos - 1).charAt(0) !== endTag) {\n\t\t\t\t\t\t\t\tcurStrPos--;\n\t\t\t\t\t\t\t\tif (curStrPos < 0) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurStrPos--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn curStrPos;\n\t\t\t\t\t}\n\t\t\t\t}]);\n\n\t\t\t\treturn HTMLParser;\n\t\t\t}();\n\n\t\t\texports['default'] = HTMLParser;\n\t\t\tvar htmlParser = new HTMLParser();\n\t\t\texports.htmlParser = htmlParser;\n\n\t\t\t/***/\n\t\t}]\n\t\t/******/)\n\t);\n});\n;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3R5cGVkLmpzL2xpYi90eXBlZC5qcz9kOTdkIl0sIm5hbWVzIjpbIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwibW9kdWxlcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpZCIsImxvYWRlZCIsImNhbGwiLCJtIiwiYyIsInAiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiX2NyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsInByb3BzIiwiaSIsImxlbmd0aCIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJrZXkiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInByb3RvdHlwZSIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiVHlwZUVycm9yIiwiX2luaXRpYWxpemVySnMiLCJfaHRtbFBhcnNlckpzIiwiVHlwZWQiLCJlbGVtZW50SWQiLCJvcHRpb25zIiwiaW5pdGlhbGl6ZXIiLCJsb2FkIiwiYmVnaW4iLCJ0b2dnbGUiLCJwYXVzZSIsInN0YXR1cyIsInN0YXJ0Iiwic3RvcCIsInR5cGluZ0NvbXBsZXRlIiwidG9nZ2xlQmxpbmtpbmciLCJvblN0b3AiLCJhcnJheVBvcyIsInR5cGV3cml0ZSIsImN1clN0cmluZyIsImN1clN0clBvcyIsImJhY2tzcGFjZSIsIm9uU3RhcnQiLCJkZXN0cm95IiwicmVzZXQiLCJvbkRlc3Ryb3kiLCJyZXN0YXJ0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiY2xlYXJJbnRlcnZhbCIsInRpbWVvdXQiLCJyZXBsYWNlVGV4dCIsImN1cnNvciIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInN0clBvcyIsImN1ckxvb3AiLCJpbnNlcnRDdXJzb3IiLCJvblJlc2V0IiwiX3RoaXMiLCJzaHVmZmxlU3RyaW5nc0lmTmVlZGVkIiwiYmluZElucHV0Rm9jdXNFdmVudHMiLCJiaW5kRm9jdXNFdmVudHMiLCJzZXRUaW1lb3V0IiwiY3VycmVudEVsQ29udGVudCIsInN0cmluZ3MiLCJzZXF1ZW5jZSIsInN0YXJ0RGVsYXkiLCJfdGhpczIiLCJmYWRlT3V0IiwiZWwiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImZhZGVPdXRDbGFzcyIsInJlbW92ZSIsImh1bWFuaXplIiwiaHVtYW5pemVyIiwidHlwZVNwZWVkIiwibnVtQ2hhcnMiLCJzZXRQYXVzZVN0YXR1cyIsImh0bWxQYXJzZXIiLCJ0eXBlSHRtbENoYXJzIiwicGF1c2VUaW1lIiwic3Vic3RyIiwiY2hhckF0IiwidGVzdCIsInNraXAiLCJleGVjIiwicGFyc2VJbnQiLCJ0ZW1wb3JhcnlQYXVzZSIsIm9uVHlwaW5nUGF1c2VkIiwic3Vic3RyaW5nIiwic3RyaW5nQmVmb3JlU2tpcCIsInN0cmluZ1NraXBwZWQiLCJzdHJpbmdBZnRlclNraXAiLCJkb25lVHlwaW5nIiwia2VlcFR5cGluZyIsIm9uVHlwaW5nUmVzdW1lZCIsInByZVN0cmluZ1R5cGVkIiwibmV4dFN0cmluZyIsIl90aGlzMyIsIm9uU3RyaW5nVHlwZWQiLCJjb21wbGV0ZSIsImxvb3AiLCJsb29wQ291bnQiLCJiYWNrRGVsYXkiLCJfdGhpczQiLCJpbml0RmFkZU91dCIsImJhY2tTcGVlZCIsImJhY2tTcGFjZUh0bWxDaGFycyIsImN1clN0cmluZ0F0UG9zaXRpb24iLCJzbWFydEJhY2tzcGFjZSIsInN0b3BOdW0iLCJvbkxhc3RTdHJpbmdCYWNrc3BhY2VkIiwib25Db21wbGV0ZSIsImlzVHlwaW5nIiwiaXNCbGlua2luZyIsImN1cnNvckJsaW5raW5nIiwiYWRkIiwic3BlZWQiLCJNYXRoIiwicm91bmQiLCJyYW5kb20iLCJzaHVmZmxlIiwic29ydCIsIl90aGlzNSIsImNsYXNzTmFtZSIsImZhZGVPdXREZWxheSIsInN0ciIsImF0dHIiLCJzZXRBdHRyaWJ1dGUiLCJpc0lucHV0IiwiY29udGVudFR5cGUiLCJpbm5lckhUTUwiLCJ0ZXh0Q29udGVudCIsIl90aGlzNiIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwic2hvd0N1cnNvciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImN1cnNvckNoYXIiLCJpbnNlcnRCZWZvcmUiLCJuZXh0U2libGluZyIsIl9leHRlbmRzIiwiYXNzaWduIiwic291cmNlIiwiaGFzT3duUHJvcGVydHkiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwib2JqIiwiX19lc01vZHVsZSIsIl9kZWZhdWx0c0pzIiwiX2RlZmF1bHRzSnMyIiwiSW5pdGlhbGl6ZXIiLCJzZWxmIiwicXVlcnlTZWxlY3RvciIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsImVsQ29udGVudCIsImdldEF0dHJpYnV0ZSIsImlzUGF1c2VkIiwibWFwIiwicyIsInRyaW0iLCJzdHJpbmdzRWxlbWVudCIsInN0eWxlIiwiZGlzcGxheSIsIkFycmF5Iiwic2xpY2UiLCJhcHBseSIsImNoaWxkcmVuIiwic3RyaW5nc0xlbmd0aCIsInN0cmluZ0VsIiwicHVzaCIsImdldEN1cnJlbnRFbENvbnRlbnQiLCJhdXRvSW5zZXJ0Q3NzIiwiYXBwZW5kQW5pbWF0aW9uQ3NzIiwiY3NzRGF0YU5hbWUiLCJjc3MiLCJ0eXBlIiwiaW5uZXJDc3MiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJkZWZhdWx0cyIsIkluZmluaXR5IiwiSFRNTFBhcnNlciIsImN1ckNoYXIiLCJlbmRUYWciXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7OztBQVNBLENBQUMsU0FBU0EsZ0NBQVQsQ0FBMENDLElBQTFDLEVBQWdEQyxPQUFoRCxFQUF5RDtBQUN6RCxLQUFHLGdDQUFPQyxPQUFQLE9BQW1CLFFBQW5CLElBQStCLGdDQUFPQyxNQUFQLE9BQWtCLFFBQXBELEVBQ0NBLE9BQU9ELE9BQVAsR0FBaUJELFNBQWpCLENBREQsS0FFSyxJQUFHLElB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VixDQUFpQjNDLFlBQVksQ0FBN0IsRUFBZ0M0QyxNQUFoQyxDQUF1QyxDQUF2QyxNQUE4Q3VHLE1BQXJELEVBQTZEO0FBQzNEbko7QUFDQSxZQUFJQSxZQUFZLENBQWhCLEVBQW1CO0FBQ2pCO0FBQ0Q7QUFDRjtBQUNEQTtBQUNEO0FBQ0QsYUFBT0EsU0FBUDtBQUNEO0FBckJBLEtBekNzQixDQUF6Qjs7QUFpRUEsV0FBT2lKLFVBQVA7QUFDRCxJQXZFZ0IsRUFBakI7O0FBeUVBck0sV0FBUSxTQUFSLElBQXFCcU0sVUFBckI7QUFDQSxPQUFJekcsYUFBYSxJQUFJeUcsVUFBSixFQUFqQjtBQUNBck0sV0FBUTRGLFVBQVIsR0FBcUJBLFVBQXJCOztBQUVEO0FBQU8sR0FwOUJHO0FBcTlCVixVQS8vQmdCO0FBQWhCO0FBZ2dDQyxDQTFnQ0Q7QUEyZ0NBLEMiLCJmaWxlIjoiNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogXG4gKiAgIHR5cGVkLmpzIC0gQSBKYXZhU2NyaXB0IFR5cGluZyBBbmltYXRpb24gTGlicmFyeVxuICogICBBdXRob3I6IE1hdHQgQm9sZHQgPG1lQG1hdHRib2xkdC5jb20+XG4gKiAgIFZlcnNpb246IHYyLjAuOVxuICogICBVcmw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0Ym9sZHQvdHlwZWQuanNcbiAqICAgTGljZW5zZShzKTogTUlUXG4gKiBcbiAqL1xuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiVHlwZWRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiVHlwZWRcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXHRcblx0ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cdFxuXHR2YXIgX2luaXRpYWxpemVySnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuXHRcblx0dmFyIF9odG1sUGFyc2VySnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXHRcblx0LyoqXG5cdCAqIFdlbGNvbWUgdG8gVHlwZWQuanMhXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbGVtZW50SWQgSFRNTCBlbGVtZW50IElEIF9PUl8gSFRNTCBlbGVtZW50XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIG9wdGlvbnMgb2JqZWN0XG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGEgbmV3IFR5cGVkIG9iamVjdFxuXHQgKi9cblx0XG5cdHZhciBUeXBlZCA9IChmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gVHlwZWQoZWxlbWVudElkLCBvcHRpb25zKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHlwZWQpO1xuXHRcblx0ICAgIC8vIEluaXRpYWxpemUgaXQgdXBcblx0ICAgIF9pbml0aWFsaXplckpzLmluaXRpYWxpemVyLmxvYWQodGhpcywgb3B0aW9ucywgZWxlbWVudElkKTtcblx0ICAgIC8vIEFsbCBzeXN0ZW1zIGdvIVxuXHQgICAgdGhpcy5iZWdpbigpO1xuXHQgIH1cblx0XG5cdCAgLyoqXG5cdCAgICogVG9nZ2xlIHN0YXJ0KCkgYW5kIHN0b3AoKSBvZiB0aGUgVHlwZWQgaW5zdGFuY2Vcblx0ICAgKiBAcHVibGljXG5cdCAgICovXG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhUeXBlZCwgW3tcblx0ICAgIGtleTogJ3RvZ2dsZScsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdG9nZ2xlKCkge1xuXHQgICAgICB0aGlzLnBhdXNlLnN0YXR1cyA/IHRoaXMuc3RhcnQoKSA6IHRoaXMuc3RvcCgpO1xuXHQgICAgfVxuXHRcblx0ICAgIC8qKlxuXHQgICAgICogU3RvcCB0eXBpbmcgLyBiYWNrc3BhY2luZyBhbmQgZW5hYmxlIGN1cnNvciBibGlua2luZ1xuXHQgICAgICogQHB1YmxpY1xuXHQgICAgICovXG5cdCAgfSwge1xuXHQgICAga2V5OiAnc3RvcCcsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcCgpIHtcblx0ICAgICAgaWYgKHRoaXMudHlwaW5nQ29tcGxldGUpIHJldHVybjtcblx0ICAgICAgaWYgKHRoaXMucGF1c2Uuc3RhdHVzKSByZXR1cm47XG5cdCAgICAgIHRoaXMudG9nZ2xlQmxpbmtpbmcodHJ1ZSk7XG5cdCAgICAgIHRoaXMucGF1c2Uuc3RhdHVzID0gdHJ1ZTtcblx0ICAgICAgdGhpcy5vcHRpb25zLm9uU3RvcCh0aGlzLmFycmF5UG9zLCB0aGlzKTtcblx0ICAgIH1cblx0XG5cdCAgICAvKipcblx0ICAgICAqIFN0YXJ0IHR5cGluZyAvIGJhY2tzcGFjaW5nIGFmdGVyIGJlaW5nIHN0b3BwZWRcblx0ICAgICAqIEBwdWJsaWNcblx0ICAgICAqL1xuXHQgIH0sIHtcblx0ICAgIGtleTogJ3N0YXJ0Jyxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydCgpIHtcblx0ICAgICAgaWYgKHRoaXMudHlwaW5nQ29tcGxldGUpIHJldHVybjtcblx0ICAgICAgaWYgKCF0aGlzLnBhdXNlLnN0YXR1cykgcmV0dXJuO1xuXHQgICAgICB0aGlzLnBhdXNlLnN0YXR1cyA9IGZhbHNlO1xuXHQgICAgICBpZiAodGhpcy5wYXVzZS50eXBld3JpdGUpIHtcblx0ICAgICAgICB0aGlzLnR5cGV3cml0ZSh0aGlzLnBhdXNlLmN1clN0cmluZywgdGhpcy5wYXVzZS5jdXJTdHJQb3MpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuYmFja3NwYWNlKHRoaXMucGF1c2UuY3VyU3RyaW5nLCB0aGlzLnBhdXNlLmN1clN0clBvcyk7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5vcHRpb25zLm9uU3RhcnQodGhpcy5hcnJheVBvcywgdGhpcyk7XG5cdCAgICB9XG5cdFxuXHQgICAgLyoqXG5cdCAgICAgKiBEZXN0cm95IHRoaXMgaW5zdGFuY2Ugb2YgVHlwZWRcblx0ICAgICAqIEBwdWJsaWNcblx0ICAgICAqL1xuXHQgIH0sIHtcblx0ICAgIGtleTogJ2Rlc3Ryb3knLFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdCAgICAgIHRoaXMucmVzZXQoZmFsc2UpO1xuXHQgICAgICB0aGlzLm9wdGlvbnMub25EZXN0cm95KHRoaXMpO1xuXHQgICAgfVxuXHRcblx0ICAgIC8qKlxuXHQgICAgICogUmVzZXQgVHlwZWQgYW5kIG9wdGlvbmFsbHkgcmVzdGFydHNcblx0ICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVzdGFydFxuXHQgICAgICogQHB1YmxpY1xuXHQgICAgICovXG5cdCAgfSwge1xuXHQgICAga2V5OiAncmVzZXQnLFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KCkge1xuXHQgICAgICB2YXIgcmVzdGFydCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHRydWUgOiBhcmd1bWVudHNbMF07XG5cdFxuXHQgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZW91dCk7XG5cdCAgICAgIHRoaXMucmVwbGFjZVRleHQoJycpO1xuXHQgICAgICBpZiAodGhpcy5jdXJzb3IgJiYgdGhpcy5jdXJzb3IucGFyZW50Tm9kZSkge1xuXHQgICAgICAgIHRoaXMuY3Vyc29yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jdXJzb3IpO1xuXHQgICAgICAgIHRoaXMuY3Vyc29yID0gbnVsbDtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLnN0clBvcyA9IDA7XG5cdCAgICAgIHRoaXMuYXJyYXlQb3MgPSAwO1xuXHQgICAgICB0aGlzLmN1ckxvb3AgPSAwO1xuXHQgICAgICBpZiAocmVzdGFydCkge1xuXHQgICAgICAgIHRoaXMuaW5zZXJ0Q3Vyc29yKCk7XG5cdCAgICAgICAgdGhpcy5vcHRpb25zLm9uUmVzZXQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5iZWdpbigpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdFxuXHQgICAgLyoqXG5cdCAgICAgKiBCZWdpbnMgdGhlIHR5cGluZyBhbmltYXRpb25cblx0ICAgICAqIEBwcml2YXRlXG5cdCAgICAgKi9cblx0ICB9LCB7XG5cdCAgICBrZXk6ICdiZWdpbicsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gYmVnaW4oKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICB0aGlzLnR5cGluZ0NvbXBsZXRlID0gZmFsc2U7XG5cdCAgICAgIHRoaXMuc2h1ZmZsZVN0cmluZ3NJZk5lZWRlZCh0aGlzKTtcblx0ICAgICAgdGhpcy5pbnNlcnRDdXJzb3IoKTtcblx0ICAgICAgaWYgKHRoaXMuYmluZElucHV0Rm9jdXNFdmVudHMpIHRoaXMuYmluZEZvY3VzRXZlbnRzKCk7XG5cdCAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIHNvbWUgdGV4dCBpbiB0aGUgZWxlbWVudCwgaWYgeWVzIHN0YXJ0IGJ5IGJhY2tzcGFjaW5nIHRoZSBkZWZhdWx0IG1lc3NhZ2Vcblx0ICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRFbENvbnRlbnQgfHwgX3RoaXMuY3VycmVudEVsQ29udGVudC5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgIF90aGlzLnR5cGV3cml0ZShfdGhpcy5zdHJpbmdzW190aGlzLnNlcXVlbmNlW190aGlzLmFycmF5UG9zXV0sIF90aGlzLnN0clBvcyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIC8vIFN0YXJ0IHR5cGluZ1xuXHQgICAgICAgICAgX3RoaXMuYmFja3NwYWNlKF90aGlzLmN1cnJlbnRFbENvbnRlbnQsIF90aGlzLmN1cnJlbnRFbENvbnRlbnQubGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHRoaXMuc3RhcnREZWxheSk7XG5cdCAgICB9XG5cdFxuXHQgICAgLyoqXG5cdCAgICAgKiBDYWxsZWQgZm9yIGVhY2ggY2hhcmFjdGVyIHR5cGVkXG5cdCAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3VyU3RyaW5nIHRoZSBjdXJyZW50IHN0cmluZyBpbiB0aGUgc3RyaW5ncyBhcnJheVxuXHQgICAgICogQHBhcmFtIHtudW1iZXJ9IGN1clN0clBvcyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgY3VyU3RyaW5nXG5cdCAgICAgKiBAcHJpdmF0ZVxuXHQgICAgICovXG5cdCAgfSwge1xuXHQgICAga2V5OiAndHlwZXdyaXRlJyxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiB0eXBld3JpdGUoY3VyU3RyaW5nLCBjdXJTdHJQb3MpIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cdFxuXHQgICAgICBpZiAodGhpcy5mYWRlT3V0ICYmIHRoaXMuZWwuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMuZmFkZU91dENsYXNzKSkge1xuXHQgICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmZhZGVPdXRDbGFzcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuY3Vyc29yKSB0aGlzLmN1cnNvci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuZmFkZU91dENsYXNzKTtcblx0ICAgICAgfVxuXHRcblx0ICAgICAgdmFyIGh1bWFuaXplID0gdGhpcy5odW1hbml6ZXIodGhpcy50eXBlU3BlZWQpO1xuXHQgICAgICB2YXIgbnVtQ2hhcnMgPSAxO1xuXHRcblx0ICAgICAgaWYgKHRoaXMucGF1c2Uuc3RhdHVzID09PSB0cnVlKSB7XG5cdCAgICAgICAgdGhpcy5zZXRQYXVzZVN0YXR1cyhjdXJTdHJpbmcsIGN1clN0clBvcywgdHJ1ZSk7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdFxuXHQgICAgICAvLyBjb250YWluIHR5cGluZyBmdW5jdGlvbiBpbiBhIHRpbWVvdXQgaHVtYW5pemUnZCBkZWxheVxuXHQgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvLyBza2lwIG92ZXIgYW55IEhUTUwgY2hhcnNcblx0ICAgICAgICBjdXJTdHJQb3MgPSBfaHRtbFBhcnNlckpzLmh0bWxQYXJzZXIudHlwZUh0bWxDaGFycyhjdXJTdHJpbmcsIGN1clN0clBvcywgX3RoaXMyKTtcblx0XG5cdCAgICAgICAgdmFyIHBhdXNlVGltZSA9IDA7XG5cdCAgICAgICAgdmFyIHN1YnN0ciA9IGN1clN0cmluZy5zdWJzdHIoY3VyU3RyUG9zKTtcblx0ICAgICAgICAvLyBjaGVjayBmb3IgYW4gZXNjYXBlIGNoYXJhY3RlciBiZWZvcmUgYSBwYXVzZSB2YWx1ZVxuXHQgICAgICAgIC8vIGZvcm1hdDogXFxeXFxkKyAuLiBlZzogXjEwMDAgLi4gc2hvdWxkIGJlIGFibGUgdG8gcHJpbnQgdGhlIF4gdG9vIHVzaW5nIF5eXG5cdCAgICAgICAgLy8gc2luZ2xlIF4gYXJlIHJlbW92ZWQgZnJvbSBzdHJpbmdcblx0ICAgICAgICBpZiAoc3Vic3RyLmNoYXJBdCgwKSA9PT0gJ14nKSB7XG5cdCAgICAgICAgICBpZiAoL15cXF5cXGQrLy50ZXN0KHN1YnN0cikpIHtcblx0ICAgICAgICAgICAgdmFyIHNraXAgPSAxOyAvLyBza2lwIGF0IGxlYXN0IDFcblx0ICAgICAgICAgICAgc3Vic3RyID0gL1xcZCsvLmV4ZWMoc3Vic3RyKVswXTtcblx0ICAgICAgICAgICAgc2tpcCArPSBzdWJzdHIubGVuZ3RoO1xuXHQgICAgICAgICAgICBwYXVzZVRpbWUgPSBwYXJzZUludChzdWJzdHIpO1xuXHQgICAgICAgICAgICBfdGhpczIudGVtcG9yYXJ5UGF1c2UgPSB0cnVlO1xuXHQgICAgICAgICAgICBfdGhpczIub3B0aW9ucy5vblR5cGluZ1BhdXNlZChfdGhpczIuYXJyYXlQb3MsIF90aGlzMik7XG5cdCAgICAgICAgICAgIC8vIHN0cmlwIG91dCB0aGUgZXNjYXBlIGNoYXJhY3RlciBhbmQgcGF1c2UgdmFsdWUgc28gdGhleSdyZSBub3QgcHJpbnRlZFxuXHQgICAgICAgICAgICBjdXJTdHJpbmcgPSBjdXJTdHJpbmcuc3Vic3RyaW5nKDAsIGN1clN0clBvcykgKyBjdXJTdHJpbmcuc3Vic3RyaW5nKGN1clN0clBvcyArIHNraXApO1xuXHQgICAgICAgICAgICBfdGhpczIudG9nZ2xlQmxpbmtpbmcodHJ1ZSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICAvLyBjaGVjayBmb3Igc2tpcCBjaGFyYWN0ZXJzIGZvcm1hdHRlZCBhc1xuXHQgICAgICAgIC8vIFwidGhpcyBpcyBhIGBzdHJpbmcgdG8gcHJpbnQgTk9XYCAuLi5cIlxuXHQgICAgICAgIGlmIChzdWJzdHIuY2hhckF0KDApID09PSAnYCcpIHtcblx0ICAgICAgICAgIHdoaWxlIChjdXJTdHJpbmcuc3Vic3RyKGN1clN0clBvcyArIG51bUNoYXJzKS5jaGFyQXQoMCkgIT09ICdgJykge1xuXHQgICAgICAgICAgICBudW1DaGFycysrO1xuXHQgICAgICAgICAgICBpZiAoY3VyU3RyUG9zICsgbnVtQ2hhcnMgPiBjdXJTdHJpbmcubGVuZ3RoKSBicmVhaztcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIC8vIHN0cmlwIG91dCB0aGUgZXNjYXBlIGNoYXJhY3RlcnMgYW5kIGFwcGVuZCBhbGwgdGhlIHN0cmluZyBpbiBiZXR3ZWVuXG5cdCAgICAgICAgICB2YXIgc3RyaW5nQmVmb3JlU2tpcCA9IGN1clN0cmluZy5zdWJzdHJpbmcoMCwgY3VyU3RyUG9zKTtcblx0ICAgICAgICAgIHZhciBzdHJpbmdTa2lwcGVkID0gY3VyU3RyaW5nLnN1YnN0cmluZyhzdHJpbmdCZWZvcmVTa2lwLmxlbmd0aCArIDEsIGN1clN0clBvcyArIG51bUNoYXJzKTtcblx0ICAgICAgICAgIHZhciBzdHJpbmdBZnRlclNraXAgPSBjdXJTdHJpbmcuc3Vic3RyaW5nKGN1clN0clBvcyArIG51bUNoYXJzICsgMSk7XG5cdCAgICAgICAgICBjdXJTdHJpbmcgPSBzdHJpbmdCZWZvcmVTa2lwICsgc3RyaW5nU2tpcHBlZCArIHN0cmluZ0FmdGVyU2tpcDtcblx0ICAgICAgICAgIG51bUNoYXJzLS07XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICAvLyB0aW1lb3V0IGZvciBhbnkgcGF1c2UgYWZ0ZXIgYSBjaGFyYWN0ZXJcblx0ICAgICAgICBfdGhpczIudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgLy8gQWNjb3VudHMgZm9yIGJsaW5raW5nIHdoaWxlIHBhdXNlZFxuXHQgICAgICAgICAgX3RoaXMyLnRvZ2dsZUJsaW5raW5nKGZhbHNlKTtcblx0XG5cdCAgICAgICAgICAvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBzZW50ZW5jZSFcblx0ICAgICAgICAgIGlmIChjdXJTdHJQb3MgPj0gY3VyU3RyaW5nLmxlbmd0aCkge1xuXHQgICAgICAgICAgICBfdGhpczIuZG9uZVR5cGluZyhjdXJTdHJpbmcsIGN1clN0clBvcyk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBfdGhpczIua2VlcFR5cGluZyhjdXJTdHJpbmcsIGN1clN0clBvcywgbnVtQ2hhcnMpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgLy8gZW5kIG9mIGNoYXJhY3RlciBwYXVzZVxuXHQgICAgICAgICAgaWYgKF90aGlzMi50ZW1wb3JhcnlQYXVzZSkge1xuXHQgICAgICAgICAgICBfdGhpczIudGVtcG9yYXJ5UGF1c2UgPSBmYWxzZTtcblx0ICAgICAgICAgICAgX3RoaXMyLm9wdGlvbnMub25UeXBpbmdSZXN1bWVkKF90aGlzMi5hcnJheVBvcywgX3RoaXMyKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LCBwYXVzZVRpbWUpO1xuXHRcblx0ICAgICAgICAvLyBodW1hbml6ZWQgdmFsdWUgZm9yIHR5cGluZ1xuXHQgICAgICB9LCBodW1hbml6ZSk7XG5cdCAgICB9XG5cdFxuXHQgICAgLyoqXG5cdCAgICAgKiBDb250aW51ZSB0byB0aGUgbmV4dCBzdHJpbmcgJiBiZWdpbiB0eXBpbmdcblx0ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJTdHJpbmcgdGhlIGN1cnJlbnQgc3RyaW5nIGluIHRoZSBzdHJpbmdzIGFycmF5XG5cdCAgICAgKiBAcGFyYW0ge251bWJlcn0gY3VyU3RyUG9zIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBjdXJTdHJpbmdcblx0ICAgICAqIEBwcml2YXRlXG5cdCAgICAgKi9cblx0ICB9LCB7XG5cdCAgICBrZXk6ICdrZWVwVHlwaW5nJyxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiBrZWVwVHlwaW5nKGN1clN0cmluZywgY3VyU3RyUG9zLCBudW1DaGFycykge1xuXHQgICAgICAvLyBjYWxsIGJlZm9yZSBmdW5jdGlvbnMgaWYgYXBwbGljYWJsZVxuXHQgICAgICBpZiAoY3VyU3RyUG9zID09PSAwKSB7XG5cdCAgICAgICAgdGhpcy50b2dnbGVCbGlua2luZyhmYWxzZSk7XG5cdCAgICAgICAgdGhpcy5vcHRpb25zLnByZVN0cmluZ1R5cGVkKHRoaXMuYXJyYXlQb3MsIHRoaXMpO1xuXHQgICAgICB9XG5cdCAgICAgIC8vIHN0YXJ0IHR5cGluZyBlYWNoIG5ldyBjaGFyIGludG8gZXhpc3Rpbmcgc3RyaW5nXG5cdCAgICAgIC8vIGN1clN0cmluZzogYXJnLCB0aGlzLmVsLmh0bWw6IG9yaWdpbmFsIHRleHQgaW5zaWRlIGVsZW1lbnRcblx0ICAgICAgY3VyU3RyUG9zICs9IG51bUNoYXJzO1xuXHQgICAgICB2YXIgbmV4dFN0cmluZyA9IGN1clN0cmluZy5zdWJzdHIoMCwgY3VyU3RyUG9zKTtcblx0ICAgICAgdGhpcy5yZXBsYWNlVGV4dChuZXh0U3RyaW5nKTtcblx0ICAgICAgLy8gbG9vcCB0aGUgZnVuY3Rpb25cblx0ICAgICAgdGhpcy50eXBld3JpdGUoY3VyU3RyaW5nLCBjdXJTdHJQb3MpO1xuXHQgICAgfVxuXHRcblx0ICAgIC8qKlxuXHQgICAgICogV2UncmUgZG9uZSB0eXBpbmcgYWxsIHN0cmluZ3Ncblx0ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJTdHJpbmcgdGhlIGN1cnJlbnQgc3RyaW5nIGluIHRoZSBzdHJpbmdzIGFycmF5XG5cdCAgICAgKiBAcGFyYW0ge251bWJlcn0gY3VyU3RyUG9zIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBjdXJTdHJpbmdcblx0ICAgICAqIEBwcml2YXRlXG5cdCAgICAgKi9cblx0ICB9LCB7XG5cdCAgICBrZXk6ICdkb25lVHlwaW5nJyxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiBkb25lVHlwaW5nKGN1clN0cmluZywgY3VyU3RyUG9zKSB7XG5cdCAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXHRcblx0ICAgICAgLy8gZmlyZXMgY2FsbGJhY2sgZnVuY3Rpb25cblx0ICAgICAgdGhpcy5vcHRpb25zLm9uU3RyaW5nVHlwZWQodGhpcy5hcnJheVBvcywgdGhpcyk7XG5cdCAgICAgIHRoaXMudG9nZ2xlQmxpbmtpbmcodHJ1ZSk7XG5cdCAgICAgIC8vIGlzIHRoaXMgdGhlIGZpbmFsIHN0cmluZ1xuXHQgICAgICBpZiAodGhpcy5hcnJheVBvcyA9PT0gdGhpcy5zdHJpbmdzLmxlbmd0aCAtIDEpIHtcblx0ICAgICAgICAvLyBjYWxsYmFjayB0aGF0IG9jY3VycyBvbiB0aGUgbGFzdCB0eXBlZCBzdHJpbmdcblx0ICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG5cdCAgICAgICAgLy8gcXVpdCBpZiB3ZSB3b250IGxvb3AgYmFja1xuXHQgICAgICAgIGlmICh0aGlzLmxvb3AgPT09IGZhbHNlIHx8IHRoaXMuY3VyTG9vcCA9PT0gdGhpcy5sb29wQ291bnQpIHtcblx0ICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXMzLmJhY2tzcGFjZShjdXJTdHJpbmcsIGN1clN0clBvcyk7XG5cdCAgICAgIH0sIHRoaXMuYmFja0RlbGF5KTtcblx0ICAgIH1cblx0XG5cdCAgICAvKipcblx0ICAgICAqIEJhY2tzcGFjZXMgMSBjaGFyYWN0ZXIgYXQgYSB0aW1lXG5cdCAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3VyU3RyaW5nIHRoZSBjdXJyZW50IHN0cmluZyBpbiB0aGUgc3RyaW5ncyBhcnJheVxuXHQgICAgICogQHBhcmFtIHtudW1iZXJ9IGN1clN0clBvcyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgY3VyU3RyaW5nXG5cdCAgICAgKiBAcHJpdmF0ZVxuXHQgICAgICovXG5cdCAgfSwge1xuXHQgICAga2V5OiAnYmFja3NwYWNlJyxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiBiYWNrc3BhY2UoY3VyU3RyaW5nLCBjdXJTdHJQb3MpIHtcblx0ICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cdFxuXHQgICAgICBpZiAodGhpcy5wYXVzZS5zdGF0dXMgPT09IHRydWUpIHtcblx0ICAgICAgICB0aGlzLnNldFBhdXNlU3RhdHVzKGN1clN0cmluZywgY3VyU3RyUG9zLCB0cnVlKTtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHRoaXMuZmFkZU91dCkgcmV0dXJuIHRoaXMuaW5pdEZhZGVPdXQoKTtcblx0XG5cdCAgICAgIHRoaXMudG9nZ2xlQmxpbmtpbmcoZmFsc2UpO1xuXHQgICAgICB2YXIgaHVtYW5pemUgPSB0aGlzLmh1bWFuaXplcih0aGlzLmJhY2tTcGVlZCk7XG5cdFxuXHQgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBjdXJTdHJQb3MgPSBfaHRtbFBhcnNlckpzLmh0bWxQYXJzZXIuYmFja1NwYWNlSHRtbENoYXJzKGN1clN0cmluZywgY3VyU3RyUG9zLCBfdGhpczQpO1xuXHQgICAgICAgIC8vIHJlcGxhY2UgdGV4dCB3aXRoIGJhc2UgdGV4dCArIHR5cGVkIGNoYXJhY3RlcnNcblx0ICAgICAgICB2YXIgY3VyU3RyaW5nQXRQb3NpdGlvbiA9IGN1clN0cmluZy5zdWJzdHIoMCwgY3VyU3RyUG9zKTtcblx0ICAgICAgICBfdGhpczQucmVwbGFjZVRleHQoY3VyU3RyaW5nQXRQb3NpdGlvbik7XG5cdFxuXHQgICAgICAgIC8vIGlmIHNtYXJ0QmFjayBpcyBlbmFibGVkXG5cdCAgICAgICAgaWYgKF90aGlzNC5zbWFydEJhY2tzcGFjZSkge1xuXHQgICAgICAgICAgLy8gdGhlIHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBjdXJyZW50IHN0cmluZyBpcyBlcXVhbCBvZiB0aGUgc2FtZSBwYXJ0IG9mIHRoZSBuZXcgc3RyaW5nXG5cdCAgICAgICAgICB2YXIgbmV4dFN0cmluZyA9IF90aGlzNC5zdHJpbmdzW190aGlzNC5hcnJheVBvcyArIDFdO1xuXHQgICAgICAgICAgaWYgKG5leHRTdHJpbmcgJiYgY3VyU3RyaW5nQXRQb3NpdGlvbiA9PT0gbmV4dFN0cmluZy5zdWJzdHIoMCwgY3VyU3RyUG9zKSkge1xuXHQgICAgICAgICAgICBfdGhpczQuc3RvcE51bSA9IGN1clN0clBvcztcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIF90aGlzNC5zdG9wTnVtID0gMDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIC8vIGlmIHRoZSBudW1iZXIgKGlkIG9mIGNoYXJhY3RlciBpbiBjdXJyZW50IHN0cmluZykgaXNcblx0ICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIHN0b3AgbnVtYmVyLCBrZWVwIGdvaW5nXG5cdCAgICAgICAgaWYgKGN1clN0clBvcyA+IF90aGlzNC5zdG9wTnVtKSB7XG5cdCAgICAgICAgICAvLyBzdWJ0cmFjdCBjaGFyYWN0ZXJzIG9uZSBieSBvbmVcblx0ICAgICAgICAgIGN1clN0clBvcy0tO1xuXHQgICAgICAgICAgLy8gbG9vcCB0aGUgZnVuY3Rpb25cblx0ICAgICAgICAgIF90aGlzNC5iYWNrc3BhY2UoY3VyU3RyaW5nLCBjdXJTdHJQb3MpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoY3VyU3RyUG9zIDw9IF90aGlzNC5zdG9wTnVtKSB7XG5cdCAgICAgICAgICAvLyBpZiB0aGUgc3RvcCBudW1iZXIgaGFzIGJlZW4gcmVhY2hlZCwgaW5jcmVhc2Vcblx0ICAgICAgICAgIC8vIGFycmF5IHBvc2l0aW9uIHRvIG5leHQgc3RyaW5nXG5cdCAgICAgICAgICBfdGhpczQuYXJyYXlQb3MrKztcblx0ICAgICAgICAgIC8vIFdoZW4gbG9vcGluZywgYmVnaW4gYXQgdGhlIGJlZ2lubmluZyBhZnRlciBiYWNrc3BhY2UgY29tcGxldGVcblx0ICAgICAgICAgIGlmIChfdGhpczQuYXJyYXlQb3MgPT09IF90aGlzNC5zdHJpbmdzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICBfdGhpczQuYXJyYXlQb3MgPSAwO1xuXHQgICAgICAgICAgICBfdGhpczQub3B0aW9ucy5vbkxhc3RTdHJpbmdCYWNrc3BhY2VkKCk7XG5cdCAgICAgICAgICAgIF90aGlzNC5zaHVmZmxlU3RyaW5nc0lmTmVlZGVkKCk7XG5cdCAgICAgICAgICAgIF90aGlzNC5iZWdpbigpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgX3RoaXM0LnR5cGV3cml0ZShfdGhpczQuc3RyaW5nc1tfdGhpczQuc2VxdWVuY2VbX3RoaXM0LmFycmF5UG9zXV0sIGN1clN0clBvcyk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIGh1bWFuaXplZCB2YWx1ZSBmb3IgdHlwaW5nXG5cdCAgICAgIH0sIGh1bWFuaXplKTtcblx0ICAgIH1cblx0XG5cdCAgICAvKipcblx0ICAgICAqIEZ1bGwgYW5pbWF0aW9uIGlzIGNvbXBsZXRlXG5cdCAgICAgKiBAcHJpdmF0ZVxuXHQgICAgICovXG5cdCAgfSwge1xuXHQgICAga2V5OiAnY29tcGxldGUnLFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuXHQgICAgICB0aGlzLm9wdGlvbnMub25Db21wbGV0ZSh0aGlzKTtcblx0ICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgIHRoaXMuY3VyTG9vcCsrO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMudHlwaW5nQ29tcGxldGUgPSB0cnVlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdFxuXHQgICAgLyoqXG5cdCAgICAgKiBIYXMgdGhlIHR5cGluZyBiZWVuIHN0b3BwZWRcblx0ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJTdHJpbmcgdGhlIGN1cnJlbnQgc3RyaW5nIGluIHRoZSBzdHJpbmdzIGFycmF5XG5cdCAgICAgKiBAcGFyYW0ge251bWJlcn0gY3VyU3RyUG9zIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBjdXJTdHJpbmdcblx0ICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNUeXBpbmdcblx0ICAgICAqIEBwcml2YXRlXG5cdCAgICAgKi9cblx0ICB9LCB7XG5cdCAgICBrZXk6ICdzZXRQYXVzZVN0YXR1cycsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UGF1c2VTdGF0dXMoY3VyU3RyaW5nLCBjdXJTdHJQb3MsIGlzVHlwaW5nKSB7XG5cdCAgICAgIHRoaXMucGF1c2UudHlwZXdyaXRlID0gaXNUeXBpbmc7XG5cdCAgICAgIHRoaXMucGF1c2UuY3VyU3RyaW5nID0gY3VyU3RyaW5nO1xuXHQgICAgICB0aGlzLnBhdXNlLmN1clN0clBvcyA9IGN1clN0clBvcztcblx0ICAgIH1cblx0XG5cdCAgICAvKipcblx0ICAgICAqIFRvZ2dsZSB0aGUgYmxpbmtpbmcgY3Vyc29yXG5cdCAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzQmxpbmtpbmdcblx0ICAgICAqIEBwcml2YXRlXG5cdCAgICAgKi9cblx0ICB9LCB7XG5cdCAgICBrZXk6ICd0b2dnbGVCbGlua2luZycsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdG9nZ2xlQmxpbmtpbmcoaXNCbGlua2luZykge1xuXHQgICAgICBpZiAoIXRoaXMuY3Vyc29yKSByZXR1cm47XG5cdCAgICAgIC8vIGlmIGluIHBhdXNlZCBzdGF0ZSwgZG9uJ3QgdG9nZ2xlIGJsaW5raW5nIGEgMm5kIHRpbWVcblx0ICAgICAgaWYgKHRoaXMucGF1c2Uuc3RhdHVzKSByZXR1cm47XG5cdCAgICAgIGlmICh0aGlzLmN1cnNvckJsaW5raW5nID09PSBpc0JsaW5raW5nKSByZXR1cm47XG5cdCAgICAgIHRoaXMuY3Vyc29yQmxpbmtpbmcgPSBpc0JsaW5raW5nO1xuXHQgICAgICBpZiAoaXNCbGlua2luZykge1xuXHQgICAgICAgIHRoaXMuY3Vyc29yLmNsYXNzTGlzdC5hZGQoJ3R5cGVkLWN1cnNvci0tYmxpbmsnKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLmN1cnNvci5jbGFzc0xpc3QucmVtb3ZlKCd0eXBlZC1jdXJzb3ItLWJsaW5rJyk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0XG5cdCAgICAvKipcblx0ICAgICAqIFNwZWVkIGluIE1TIHRvIHR5cGVcblx0ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcGVlZFxuXHQgICAgICogQHByaXZhdGVcblx0ICAgICAqL1xuXHQgIH0sIHtcblx0ICAgIGtleTogJ2h1bWFuaXplcicsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gaHVtYW5pemVyKHNwZWVkKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiBzcGVlZCAvIDIpICsgc3BlZWQ7XG5cdCAgICB9XG5cdFxuXHQgICAgLyoqXG5cdCAgICAgKiBTaHVmZmxlIHRoZSBzZXF1ZW5jZSBvZiB0aGUgc3RyaW5ncyBhcnJheVxuXHQgICAgICogQHByaXZhdGVcblx0ICAgICAqL1xuXHQgIH0sIHtcblx0ICAgIGtleTogJ3NodWZmbGVTdHJpbmdzSWZOZWVkZWQnLFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHNodWZmbGVTdHJpbmdzSWZOZWVkZWQoKSB7XG5cdCAgICAgIGlmICghdGhpcy5zaHVmZmxlKSByZXR1cm47XG5cdCAgICAgIHRoaXMuc2VxdWVuY2UgPSB0aGlzLnNlcXVlbmNlLnNvcnQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpIC0gMC41O1xuXHQgICAgICB9KTtcblx0ICAgIH1cblx0XG5cdCAgICAvKipcblx0ICAgICAqIEFkZHMgYSBDU1MgY2xhc3MgdG8gZmFkZSBvdXQgY3VycmVudCBzdHJpbmdcblx0ICAgICAqIEBwcml2YXRlXG5cdCAgICAgKi9cblx0ICB9LCB7XG5cdCAgICBrZXk6ICdpbml0RmFkZU91dCcsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdEZhZGVPdXQoKSB7XG5cdCAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXHRcblx0ICAgICAgdGhpcy5lbC5jbGFzc05hbWUgKz0gJyAnICsgdGhpcy5mYWRlT3V0Q2xhc3M7XG5cdCAgICAgIGlmICh0aGlzLmN1cnNvcikgdGhpcy5jdXJzb3IuY2xhc3NOYW1lICs9ICcgJyArIHRoaXMuZmFkZU91dENsYXNzO1xuXHQgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXM1LmFycmF5UG9zKys7XG5cdCAgICAgICAgX3RoaXM1LnJlcGxhY2VUZXh0KCcnKTtcblx0XG5cdCAgICAgICAgLy8gUmVzZXRzIGN1cnJlbnQgc3RyaW5nIGlmIGVuZCBvZiBsb29wIHJlYWNoZWRcblx0ICAgICAgICBpZiAoX3RoaXM1LnN0cmluZ3MubGVuZ3RoID4gX3RoaXM1LmFycmF5UG9zKSB7XG5cdCAgICAgICAgICBfdGhpczUudHlwZXdyaXRlKF90aGlzNS5zdHJpbmdzW190aGlzNS5zZXF1ZW5jZVtfdGhpczUuYXJyYXlQb3NdXSwgMCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIF90aGlzNS50eXBld3JpdGUoX3RoaXM1LnN0cmluZ3NbMF0sIDApO1xuXHQgICAgICAgICAgX3RoaXM1LmFycmF5UG9zID0gMDtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHRoaXMuZmFkZU91dERlbGF5KTtcblx0ICAgIH1cblx0XG5cdCAgICAvKipcblx0ICAgICAqIFJlcGxhY2VzIGN1cnJlbnQgdGV4dCBpbiB0aGUgSFRNTCBlbGVtZW50XG5cdCAgICAgKiBkZXBlbmRpbmcgb24gZWxlbWVudCB0eXBlXG5cdCAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG5cdCAgICAgKiBAcHJpdmF0ZVxuXHQgICAgICovXG5cdCAgfSwge1xuXHQgICAga2V5OiAncmVwbGFjZVRleHQnLFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHJlcGxhY2VUZXh0KHN0cikge1xuXHQgICAgICBpZiAodGhpcy5hdHRyKSB7XG5cdCAgICAgICAgdGhpcy5lbC5zZXRBdHRyaWJ1dGUodGhpcy5hdHRyLCBzdHIpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGlmICh0aGlzLmlzSW5wdXQpIHtcblx0ICAgICAgICAgIHRoaXMuZWwudmFsdWUgPSBzdHI7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRlbnRUeXBlID09PSAnaHRtbCcpIHtcblx0ICAgICAgICAgIHRoaXMuZWwuaW5uZXJIVE1MID0gc3RyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmVsLnRleHRDb250ZW50ID0gc3RyO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHRcblx0ICAgIC8qKlxuXHQgICAgICogSWYgdXNpbmcgaW5wdXQgZWxlbWVudHMsIGJpbmQgZm9jdXMgaW4gb3JkZXIgdG9cblx0ICAgICAqIHN0YXJ0IGFuZCBzdG9wIHRoZSBhbmltYXRpb25cblx0ICAgICAqIEBwcml2YXRlXG5cdCAgICAgKi9cblx0ICB9LCB7XG5cdCAgICBrZXk6ICdiaW5kRm9jdXNFdmVudHMnLFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIGJpbmRGb2N1c0V2ZW50cygpIHtcblx0ICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cdFxuXHQgICAgICBpZiAoIXRoaXMuaXNJbnB1dCkgcmV0dXJuO1xuXHQgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICBfdGhpczYuc3RvcCgpO1xuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICBpZiAoX3RoaXM2LmVsLnZhbHVlICYmIF90aGlzNi5lbC52YWx1ZS5sZW5ndGggIT09IDApIHtcblx0ICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgX3RoaXM2LnN0YXJ0KCk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHRcblx0ICAgIC8qKlxuXHQgICAgICogT24gaW5pdCwgaW5zZXJ0IHRoZSBjdXJzb3IgZWxlbWVudFxuXHQgICAgICogQHByaXZhdGVcblx0ICAgICAqL1xuXHQgIH0sIHtcblx0ICAgIGtleTogJ2luc2VydEN1cnNvcicsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0Q3Vyc29yKCkge1xuXHQgICAgICBpZiAoIXRoaXMuc2hvd0N1cnNvcikgcmV0dXJuO1xuXHQgICAgICBpZiAodGhpcy5jdXJzb3IpIHJldHVybjtcblx0ICAgICAgdGhpcy5jdXJzb3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdCAgICAgIHRoaXMuY3Vyc29yLmNsYXNzTmFtZSA9ICd0eXBlZC1jdXJzb3InO1xuXHQgICAgICB0aGlzLmN1cnNvci5pbm5lckhUTUwgPSB0aGlzLmN1cnNvckNoYXI7XG5cdCAgICAgIHRoaXMuZWwucGFyZW50Tm9kZSAmJiB0aGlzLmVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY3Vyc29yLCB0aGlzLmVsLm5leHRTaWJsaW5nKTtcblx0ICAgIH1cblx0ICB9XSk7XG5cdFxuXHQgIHJldHVybiBUeXBlZDtcblx0fSkoKTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IFR5cGVkO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcblx0dmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cdFxuXHRmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblx0XG5cdHZhciBfZGVmYXVsdHNKcyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cdFxuXHR2YXIgX2RlZmF1bHRzSnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmYXVsdHNKcyk7XG5cdFxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgVHlwZWQgb2JqZWN0XG5cdCAqL1xuXHRcblx0dmFyIEluaXRpYWxpemVyID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBJbml0aWFsaXplcigpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbml0aWFsaXplcik7XG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoSW5pdGlhbGl6ZXIsIFt7XG5cdCAgICBrZXk6ICdsb2FkJyxcblx0XG5cdCAgICAvKipcblx0ICAgICAqIExvYWQgdXAgZGVmYXVsdHMgJiBvcHRpb25zIG9uIHRoZSBUeXBlZCBpbnN0YW5jZVxuXHQgICAgICogQHBhcmFtIHtUeXBlZH0gc2VsZiBpbnN0YW5jZSBvZiBUeXBlZFxuXHQgICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgb3B0aW9ucyBvYmplY3Rcblx0ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBlbGVtZW50SWQgSFRNTCBlbGVtZW50IElEIF9PUl8gaW5zdGFuY2Ugb2YgSFRNTCBlbGVtZW50XG5cdCAgICAgKiBAcHJpdmF0ZVxuXHQgICAgICovXG5cdFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWQoc2VsZiwgb3B0aW9ucywgZWxlbWVudElkKSB7XG5cdCAgICAgIC8vIGNob3NlbiBlbGVtZW50IHRvIG1hbmlwdWxhdGUgdGV4dFxuXHQgICAgICBpZiAodHlwZW9mIGVsZW1lbnRJZCA9PT0gJ3N0cmluZycpIHtcblx0ICAgICAgICBzZWxmLmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50SWQpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHNlbGYuZWwgPSBlbGVtZW50SWQ7XG5cdCAgICAgIH1cblx0XG5cdCAgICAgIHNlbGYub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBfZGVmYXVsdHNKczJbJ2RlZmF1bHQnXSwgb3B0aW9ucyk7XG5cdFxuXHQgICAgICAvLyBhdHRyaWJ1dGUgdG8gdHlwZSBpbnRvXG5cdCAgICAgIHNlbGYuaXNJbnB1dCA9IHNlbGYuZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnO1xuXHQgICAgICBzZWxmLmF0dHIgPSBzZWxmLm9wdGlvbnMuYXR0cjtcblx0ICAgICAgc2VsZi5iaW5kSW5wdXRGb2N1c0V2ZW50cyA9IHNlbGYub3B0aW9ucy5iaW5kSW5wdXRGb2N1c0V2ZW50cztcblx0XG5cdCAgICAgIC8vIHNob3cgY3Vyc29yXG5cdCAgICAgIHNlbGYuc2hvd0N1cnNvciA9IHNlbGYuaXNJbnB1dCA/IGZhbHNlIDogc2VsZi5vcHRpb25zLnNob3dDdXJzb3I7XG5cdFxuXHQgICAgICAvLyBjdXN0b20gY3Vyc29yXG5cdCAgICAgIHNlbGYuY3Vyc29yQ2hhciA9IHNlbGYub3B0aW9ucy5jdXJzb3JDaGFyO1xuXHRcblx0ICAgICAgLy8gSXMgdGhlIGN1cnNvciBibGlua2luZ1xuXHQgICAgICBzZWxmLmN1cnNvckJsaW5raW5nID0gdHJ1ZTtcblx0XG5cdCAgICAgIC8vIHRleHQgY29udGVudCBvZiBlbGVtZW50XG5cdCAgICAgIHNlbGYuZWxDb250ZW50ID0gc2VsZi5hdHRyID8gc2VsZi5lbC5nZXRBdHRyaWJ1dGUoc2VsZi5hdHRyKSA6IHNlbGYuZWwudGV4dENvbnRlbnQ7XG5cdFxuXHQgICAgICAvLyBodG1sIG9yIHBsYWluIHRleHRcblx0ICAgICAgc2VsZi5jb250ZW50VHlwZSA9IHNlbGYub3B0aW9ucy5jb250ZW50VHlwZTtcblx0XG5cdCAgICAgIC8vIHR5cGluZyBzcGVlZFxuXHQgICAgICBzZWxmLnR5cGVTcGVlZCA9IHNlbGYub3B0aW9ucy50eXBlU3BlZWQ7XG5cdFxuXHQgICAgICAvLyBhZGQgYSBkZWxheSBiZWZvcmUgdHlwaW5nIHN0YXJ0c1xuXHQgICAgICBzZWxmLnN0YXJ0RGVsYXkgPSBzZWxmLm9wdGlvbnMuc3RhcnREZWxheTtcblx0XG5cdCAgICAgIC8vIGJhY2tzcGFjaW5nIHNwZWVkXG5cdCAgICAgIHNlbGYuYmFja1NwZWVkID0gc2VsZi5vcHRpb25zLmJhY2tTcGVlZDtcblx0XG5cdCAgICAgIC8vIG9ubHkgYmFja3NwYWNlIHdoYXQgZG9lc24ndCBtYXRjaCB0aGUgcHJldmlvdXMgc3RyaW5nXG5cdCAgICAgIHNlbGYuc21hcnRCYWNrc3BhY2UgPSBzZWxmLm9wdGlvbnMuc21hcnRCYWNrc3BhY2U7XG5cdFxuXHQgICAgICAvLyBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBiYWNrc3BhY2luZ1xuXHQgICAgICBzZWxmLmJhY2tEZWxheSA9IHNlbGYub3B0aW9ucy5iYWNrRGVsYXk7XG5cdFxuXHQgICAgICAvLyBGYWRlIG91dCBpbnN0ZWFkIG9mIGJhY2tzcGFjZVxuXHQgICAgICBzZWxmLmZhZGVPdXQgPSBzZWxmLm9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgc2VsZi5mYWRlT3V0Q2xhc3MgPSBzZWxmLm9wdGlvbnMuZmFkZU91dENsYXNzO1xuXHQgICAgICBzZWxmLmZhZGVPdXREZWxheSA9IHNlbGYub3B0aW9ucy5mYWRlT3V0RGVsYXk7XG5cdFxuXHQgICAgICAvLyB2YXJpYWJsZSB0byBjaGVjayB3aGV0aGVyIHR5cGluZyBpcyBjdXJyZW50bHkgcGF1c2VkXG5cdCAgICAgIHNlbGYuaXNQYXVzZWQgPSBmYWxzZTtcblx0XG5cdCAgICAgIC8vIGlucHV0IHN0cmluZ3Mgb2YgdGV4dFxuXHQgICAgICBzZWxmLnN0cmluZ3MgPSBzZWxmLm9wdGlvbnMuc3RyaW5ncy5tYXAoZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICByZXR1cm4gcy50cmltKCk7XG5cdCAgICAgIH0pO1xuXHRcblx0ICAgICAgLy8gZGl2IGNvbnRhaW5pbmcgc3RyaW5nc1xuXHQgICAgICBpZiAodHlwZW9mIHNlbGYub3B0aW9ucy5zdHJpbmdzRWxlbWVudCA9PT0gJ3N0cmluZycpIHtcblx0ICAgICAgICBzZWxmLnN0cmluZ3NFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxmLm9wdGlvbnMuc3RyaW5nc0VsZW1lbnQpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHNlbGYuc3RyaW5nc0VsZW1lbnQgPSBzZWxmLm9wdGlvbnMuc3RyaW5nc0VsZW1lbnQ7XG5cdCAgICAgIH1cblx0XG5cdCAgICAgIGlmIChzZWxmLnN0cmluZ3NFbGVtZW50KSB7XG5cdCAgICAgICAgc2VsZi5zdHJpbmdzID0gW107XG5cdCAgICAgICAgc2VsZi5zdHJpbmdzRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXHQgICAgICAgIHZhciBzdHJpbmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KHNlbGYuc3RyaW5nc0VsZW1lbnQuY2hpbGRyZW4pO1xuXHQgICAgICAgIHZhciBzdHJpbmdzTGVuZ3RoID0gc3RyaW5ncy5sZW5ndGg7XG5cdFxuXHQgICAgICAgIGlmIChzdHJpbmdzTGVuZ3RoKSB7XG5cdCAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ3NMZW5ndGg7IGkgKz0gMSkge1xuXHQgICAgICAgICAgICB2YXIgc3RyaW5nRWwgPSBzdHJpbmdzW2ldO1xuXHQgICAgICAgICAgICBzZWxmLnN0cmluZ3MucHVzaChzdHJpbmdFbC5pbm5lckhUTUwudHJpbSgpKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0XG5cdCAgICAgIC8vIGNoYXJhY3RlciBudW1iZXIgcG9zaXRpb24gb2YgY3VycmVudCBzdHJpbmdcblx0ICAgICAgc2VsZi5zdHJQb3MgPSAwO1xuXHRcblx0ICAgICAgLy8gY3VycmVudCBhcnJheSBwb3NpdGlvblxuXHQgICAgICBzZWxmLmFycmF5UG9zID0gMDtcblx0XG5cdCAgICAgIC8vIGluZGV4IG9mIHN0cmluZyB0byBzdG9wIGJhY2tzcGFjaW5nIG9uXG5cdCAgICAgIHNlbGYuc3RvcE51bSA9IDA7XG5cdFxuXHQgICAgICAvLyBMb29waW5nIGxvZ2ljXG5cdCAgICAgIHNlbGYubG9vcCA9IHNlbGYub3B0aW9ucy5sb29wO1xuXHQgICAgICBzZWxmLmxvb3BDb3VudCA9IHNlbGYub3B0aW9ucy5sb29wQ291bnQ7XG5cdCAgICAgIHNlbGYuY3VyTG9vcCA9IDA7XG5cdFxuXHQgICAgICAvLyBzaHVmZmxlIHRoZSBzdHJpbmdzXG5cdCAgICAgIHNlbGYuc2h1ZmZsZSA9IHNlbGYub3B0aW9ucy5zaHVmZmxlO1xuXHQgICAgICAvLyB0aGUgb3JkZXIgb2Ygc3RyaW5nc1xuXHQgICAgICBzZWxmLnNlcXVlbmNlID0gW107XG5cdFxuXHQgICAgICBzZWxmLnBhdXNlID0ge1xuXHQgICAgICAgIHN0YXR1czogZmFsc2UsXG5cdCAgICAgICAgdHlwZXdyaXRlOiB0cnVlLFxuXHQgICAgICAgIGN1clN0cmluZzogJycsXG5cdCAgICAgICAgY3VyU3RyUG9zOiAwXG5cdCAgICAgIH07XG5cdFxuXHQgICAgICAvLyBXaGVuIHRoZSB0eXBpbmcgaXMgY29tcGxldGUgKHdoZW4gbm90IGxvb3BlZClcblx0ICAgICAgc2VsZi50eXBpbmdDb21wbGV0ZSA9IGZhbHNlO1xuXHRcblx0ICAgICAgLy8gU2V0IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgc3RyaW5ncyBhcmUgdHlwZWRcblx0ICAgICAgZm9yICh2YXIgaSBpbiBzZWxmLnN0cmluZ3MpIHtcblx0ICAgICAgICBzZWxmLnNlcXVlbmNlW2ldID0gaTtcblx0ICAgICAgfVxuXHRcblx0ICAgICAgLy8gSWYgdGhlcmUgaXMgc29tZSB0ZXh0IGluIHRoZSBlbGVtZW50XG5cdCAgICAgIHNlbGYuY3VycmVudEVsQ29udGVudCA9IHRoaXMuZ2V0Q3VycmVudEVsQ29udGVudChzZWxmKTtcblx0XG5cdCAgICAgIHNlbGYuYXV0b0luc2VydENzcyA9IHNlbGYub3B0aW9ucy5hdXRvSW5zZXJ0Q3NzO1xuXHRcblx0ICAgICAgdGhpcy5hcHBlbmRBbmltYXRpb25Dc3Moc2VsZik7XG5cdCAgICB9XG5cdCAgfSwge1xuXHQgICAga2V5OiAnZ2V0Q3VycmVudEVsQ29udGVudCcsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q3VycmVudEVsQ29udGVudChzZWxmKSB7XG5cdCAgICAgIHZhciBlbENvbnRlbnQgPSAnJztcblx0ICAgICAgaWYgKHNlbGYuYXR0cikge1xuXHQgICAgICAgIGVsQ29udGVudCA9IHNlbGYuZWwuZ2V0QXR0cmlidXRlKHNlbGYuYXR0cik7XG5cdCAgICAgIH0gZWxzZSBpZiAoc2VsZi5pc0lucHV0KSB7XG5cdCAgICAgICAgZWxDb250ZW50ID0gc2VsZi5lbC52YWx1ZTtcblx0ICAgICAgfSBlbHNlIGlmIChzZWxmLmNvbnRlbnRUeXBlID09PSAnaHRtbCcpIHtcblx0ICAgICAgICBlbENvbnRlbnQgPSBzZWxmLmVsLmlubmVySFRNTDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBlbENvbnRlbnQgPSBzZWxmLmVsLnRleHRDb250ZW50O1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBlbENvbnRlbnQ7XG5cdCAgICB9XG5cdCAgfSwge1xuXHQgICAga2V5OiAnYXBwZW5kQW5pbWF0aW9uQ3NzJyxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBlbmRBbmltYXRpb25Dc3Moc2VsZikge1xuXHQgICAgICB2YXIgY3NzRGF0YU5hbWUgPSAnZGF0YS10eXBlZC1qcy1jc3MnO1xuXHQgICAgICBpZiAoIXNlbGYuYXV0b0luc2VydENzcykge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoIXNlbGYuc2hvd0N1cnNvciAmJiAhc2VsZi5mYWRlT3V0KSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbJyArIGNzc0RhdGFOYW1lICsgJ10nKSkge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHRcblx0ICAgICAgdmFyIGNzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cdCAgICAgIGNzcy50eXBlID0gJ3RleHQvY3NzJztcblx0ICAgICAgY3NzLnNldEF0dHJpYnV0ZShjc3NEYXRhTmFtZSwgdHJ1ZSk7XG5cdFxuXHQgICAgICB2YXIgaW5uZXJDc3MgPSAnJztcblx0ICAgICAgaWYgKHNlbGYuc2hvd0N1cnNvcikge1xuXHQgICAgICAgIGlubmVyQ3NzICs9ICdcXG4gICAgICAgIC50eXBlZC1jdXJzb3J7XFxuICAgICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICB9XFxuICAgICAgICAudHlwZWQtY3Vyc29yLnR5cGVkLWN1cnNvci0tYmxpbmt7XFxuICAgICAgICAgIGFuaW1hdGlvbjogdHlwZWRqc0JsaW5rIDAuN3MgaW5maW5pdGU7XFxuICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiB0eXBlZGpzQmxpbmsgMC43cyBpbmZpbml0ZTtcXG4gICAgICAgICAgICAgICAgICBhbmltYXRpb246IHR5cGVkanNCbGluayAwLjdzIGluZmluaXRlO1xcbiAgICAgICAgfVxcbiAgICAgICAgQGtleWZyYW1lcyB0eXBlZGpzQmxpbmt7XFxuICAgICAgICAgIDUwJSB7IG9wYWNpdHk6IDAuMDsgfVxcbiAgICAgICAgfVxcbiAgICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIHR5cGVkanNCbGlua3tcXG4gICAgICAgICAgMCUgeyBvcGFjaXR5OiAxOyB9XFxuICAgICAgICAgIDUwJSB7IG9wYWNpdHk6IDAuMDsgfVxcbiAgICAgICAgICAxMDAlIHsgb3BhY2l0eTogMTsgfVxcbiAgICAgICAgfVxcbiAgICAgICc7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHNlbGYuZmFkZU91dCkge1xuXHQgICAgICAgIGlubmVyQ3NzICs9ICdcXG4gICAgICAgIC50eXBlZC1mYWRlLW91dHtcXG4gICAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMjVzO1xcbiAgICAgICAgfVxcbiAgICAgICAgLnR5cGVkLWN1cnNvci50eXBlZC1jdXJzb3ItLWJsaW5rLnR5cGVkLWZhZGUtb3V0e1xcbiAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogMDtcXG4gICAgICAgICAgYW5pbWF0aW9uOiAwO1xcbiAgICAgICAgfVxcbiAgICAgICc7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGNzcy5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgY3NzLmlubmVySFRNTCA9IGlubmVyQ3NzO1xuXHQgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNzcyk7XG5cdCAgICB9XG5cdCAgfV0pO1xuXHRcblx0ICByZXR1cm4gSW5pdGlhbGl6ZXI7XG5cdH0pKCk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBJbml0aWFsaXplcjtcblx0dmFyIGluaXRpYWxpemVyID0gbmV3IEluaXRpYWxpemVyKCk7XG5cdGV4cG9ydHMuaW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcjtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzICYgb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUeXBlZCBkZWZhdWx0cyAmIG9wdGlvbnNcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0XG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0dmFyIGRlZmF1bHRzID0ge1xuXHQgIC8qKlxuXHQgICAqIEBwcm9wZXJ0eSB7YXJyYXl9IHN0cmluZ3Mgc3RyaW5ncyB0byBiZSB0eXBlZFxuXHQgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHJpbmdzRWxlbWVudCBJRCBvZiBlbGVtZW50IGNvbnRhaW5pbmcgc3RyaW5nIGNoaWxkcmVuXG5cdCAgICovXG5cdCAgc3RyaW5nczogWydUaGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzLi4uJywgJ1lvdSBrbm93IHdoYXQgeW91IHNob3VsZCBkbz8nLCAnVXNlIHlvdXIgb3duIScsICdIYXZlIGEgZ3JlYXQgZGF5ISddLFxuXHQgIHN0cmluZ3NFbGVtZW50OiBudWxsLFxuXHRcblx0ICAvKipcblx0ICAgKiBAcHJvcGVydHkge251bWJlcn0gdHlwZVNwZWVkIHR5cGUgc3BlZWQgaW4gbWlsbGlzZWNvbmRzXG5cdCAgICovXG5cdCAgdHlwZVNwZWVkOiAwLFxuXHRcblx0ICAvKipcblx0ICAgKiBAcHJvcGVydHkge251bWJlcn0gc3RhcnREZWxheSB0aW1lIGJlZm9yZSB0eXBpbmcgc3RhcnRzIGluIG1pbGxpc2Vjb25kc1xuXHQgICAqL1xuXHQgIHN0YXJ0RGVsYXk6IDAsXG5cdFxuXHQgIC8qKlxuXHQgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiYWNrU3BlZWQgYmFja3NwYWNpbmcgc3BlZWQgaW4gbWlsbGlzZWNvbmRzXG5cdCAgICovXG5cdCAgYmFja1NwZWVkOiAwLFxuXHRcblx0ICAvKipcblx0ICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHNtYXJ0QmFja3NwYWNlIG9ubHkgYmFja3NwYWNlIHdoYXQgZG9lc24ndCBtYXRjaCB0aGUgcHJldmlvdXMgc3RyaW5nXG5cdCAgICovXG5cdCAgc21hcnRCYWNrc3BhY2U6IHRydWUsXG5cdFxuXHQgIC8qKlxuXHQgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2h1ZmZsZSBzaHVmZmxlIHRoZSBzdHJpbmdzXG5cdCAgICovXG5cdCAgc2h1ZmZsZTogZmFsc2UsXG5cdFxuXHQgIC8qKlxuXHQgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiYWNrRGVsYXkgdGltZSBiZWZvcmUgYmFja3NwYWNpbmcgaW4gbWlsbGlzZWNvbmRzXG5cdCAgICovXG5cdCAgYmFja0RlbGF5OiA3MDAsXG5cdFxuXHQgIC8qKlxuXHQgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmFkZU91dCBGYWRlIG91dCBpbnN0ZWFkIG9mIGJhY2tzcGFjZVxuXHQgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmYWRlT3V0Q2xhc3MgY3NzIGNsYXNzIGZvciBmYWRlIGFuaW1hdGlvblxuXHQgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmFkZU91dERlbGF5IEZhZGUgb3V0IGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuXHQgICAqL1xuXHQgIGZhZGVPdXQ6IGZhbHNlLFxuXHQgIGZhZGVPdXRDbGFzczogJ3R5cGVkLWZhZGUtb3V0Jyxcblx0ICBmYWRlT3V0RGVsYXk6IDUwMCxcblx0XG5cdCAgLyoqXG5cdCAgICogQHByb3BlcnR5IHtib29sZWFufSBsb29wIGxvb3Agc3RyaW5nc1xuXHQgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb29wQ291bnQgYW1vdW50IG9mIGxvb3BzXG5cdCAgICovXG5cdCAgbG9vcDogZmFsc2UsXG5cdCAgbG9vcENvdW50OiBJbmZpbml0eSxcblx0XG5cdCAgLyoqXG5cdCAgICogQHByb3BlcnR5IHtib29sZWFufSBzaG93Q3Vyc29yIHNob3cgY3Vyc29yXG5cdCAgICogQHByb3BlcnR5IHtzdHJpbmd9IGN1cnNvckNoYXIgY2hhcmFjdGVyIGZvciBjdXJzb3Jcblx0ICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGF1dG9JbnNlcnRDc3MgaW5zZXJ0IENTUyBmb3IgY3Vyc29yIGFuZCBmYWRlT3V0IGludG8gSFRNTCA8aGVhZD5cblx0ICAgKi9cblx0ICBzaG93Q3Vyc29yOiB0cnVlLFxuXHQgIGN1cnNvckNoYXI6ICd8Jyxcblx0ICBhdXRvSW5zZXJ0Q3NzOiB0cnVlLFxuXHRcblx0ICAvKipcblx0ICAgKiBAcHJvcGVydHkge3N0cmluZ30gYXR0ciBhdHRyaWJ1dGUgZm9yIHR5cGluZ1xuXHQgICAqIEV4OiBpbnB1dCBwbGFjZWhvbGRlciwgdmFsdWUsIG9yIGp1c3QgSFRNTCB0ZXh0XG5cdCAgICovXG5cdCAgYXR0cjogbnVsbCxcblx0XG5cdCAgLyoqXG5cdCAgICogQHByb3BlcnR5IHtib29sZWFufSBiaW5kSW5wdXRGb2N1c0V2ZW50cyBiaW5kIHRvIGZvY3VzIGFuZCBibHVyIGlmIGVsIGlzIHRleHQgaW5wdXRcblx0ICAgKi9cblx0ICBiaW5kSW5wdXRGb2N1c0V2ZW50czogZmFsc2UsXG5cdFxuXHQgIC8qKlxuXHQgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50VHlwZSAnaHRtbCcgb3IgJ251bGwnIGZvciBwbGFpbnRleHRcblx0ICAgKi9cblx0ICBjb250ZW50VHlwZTogJ2h0bWwnLFxuXHRcblx0ICAvKipcblx0ICAgKiBBbGwgdHlwaW5nIGlzIGNvbXBsZXRlXG5cdCAgICogQHBhcmFtIHtUeXBlZH0gc2VsZlxuXHQgICAqL1xuXHQgIG9uQ29tcGxldGU6IGZ1bmN0aW9uIG9uQ29tcGxldGUoc2VsZikge30sXG5cdFxuXHQgIC8qKlxuXHQgICAqIEJlZm9yZSBlYWNoIHN0cmluZyBpcyB0eXBlZFxuXHQgICAqIEBwYXJhbSB7bnVtYmVyfSBhcnJheVBvc1xuXHQgICAqIEBwYXJhbSB7VHlwZWR9IHNlbGZcblx0ICAgKi9cblx0ICBwcmVTdHJpbmdUeXBlZDogZnVuY3Rpb24gcHJlU3RyaW5nVHlwZWQoYXJyYXlQb3MsIHNlbGYpIHt9LFxuXHRcblx0ICAvKipcblx0ICAgKiBBZnRlciBlYWNoIHN0cmluZyBpcyB0eXBlZFxuXHQgICAqIEBwYXJhbSB7bnVtYmVyfSBhcnJheVBvc1xuXHQgICAqIEBwYXJhbSB7VHlwZWR9IHNlbGZcblx0ICAgKi9cblx0ICBvblN0cmluZ1R5cGVkOiBmdW5jdGlvbiBvblN0cmluZ1R5cGVkKGFycmF5UG9zLCBzZWxmKSB7fSxcblx0XG5cdCAgLyoqXG5cdCAgICogRHVyaW5nIGxvb3BpbmcsIGFmdGVyIGxhc3Qgc3RyaW5nIGlzIHR5cGVkXG5cdCAgICogQHBhcmFtIHtUeXBlZH0gc2VsZlxuXHQgICAqL1xuXHQgIG9uTGFzdFN0cmluZ0JhY2tzcGFjZWQ6IGZ1bmN0aW9uIG9uTGFzdFN0cmluZ0JhY2tzcGFjZWQoc2VsZikge30sXG5cdFxuXHQgIC8qKlxuXHQgICAqIFR5cGluZyBoYXMgYmVlbiBzdG9wcGVkXG5cdCAgICogQHBhcmFtIHtudW1iZXJ9IGFycmF5UG9zXG5cdCAgICogQHBhcmFtIHtUeXBlZH0gc2VsZlxuXHQgICAqL1xuXHQgIG9uVHlwaW5nUGF1c2VkOiBmdW5jdGlvbiBvblR5cGluZ1BhdXNlZChhcnJheVBvcywgc2VsZikge30sXG5cdFxuXHQgIC8qKlxuXHQgICAqIFR5cGluZyBoYXMgYmVlbiBzdGFydGVkIGFmdGVyIGJlaW5nIHN0b3BwZWRcblx0ICAgKiBAcGFyYW0ge251bWJlcn0gYXJyYXlQb3Ncblx0ICAgKiBAcGFyYW0ge1R5cGVkfSBzZWxmXG5cdCAgICovXG5cdCAgb25UeXBpbmdSZXN1bWVkOiBmdW5jdGlvbiBvblR5cGluZ1Jlc3VtZWQoYXJyYXlQb3MsIHNlbGYpIHt9LFxuXHRcblx0ICAvKipcblx0ICAgKiBBZnRlciByZXNldFxuXHQgICAqIEBwYXJhbSB7VHlwZWR9IHNlbGZcblx0ICAgKi9cblx0ICBvblJlc2V0OiBmdW5jdGlvbiBvblJlc2V0KHNlbGYpIHt9LFxuXHRcblx0ICAvKipcblx0ICAgKiBBZnRlciBzdG9wXG5cdCAgICogQHBhcmFtIHtudW1iZXJ9IGFycmF5UG9zXG5cdCAgICogQHBhcmFtIHtUeXBlZH0gc2VsZlxuXHQgICAqL1xuXHQgIG9uU3RvcDogZnVuY3Rpb24gb25TdG9wKGFycmF5UG9zLCBzZWxmKSB7fSxcblx0XG5cdCAgLyoqXG5cdCAgICogQWZ0ZXIgc3RhcnRcblx0ICAgKiBAcGFyYW0ge251bWJlcn0gYXJyYXlQb3Ncblx0ICAgKiBAcGFyYW0ge1R5cGVkfSBzZWxmXG5cdCAgICovXG5cdCAgb25TdGFydDogZnVuY3Rpb24gb25TdGFydChhcnJheVBvcywgc2VsZikge30sXG5cdFxuXHQgIC8qKlxuXHQgICAqIEFmdGVyIGRlc3Ryb3lcblx0ICAgKiBAcGFyYW0ge1R5cGVkfSBzZWxmXG5cdCAgICovXG5cdCAgb25EZXN0cm95OiBmdW5jdGlvbiBvbkRlc3Ryb3koc2VsZikge31cblx0fTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGRlZmF1bHRzO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XG5cdC8qKlxuXHQgKiBUT0RPOiBUaGVzZSBtZXRob2RzIGNhbiBwcm9iYWJseSBiZSBjb21iaW5lZCBzb21laG93XG5cdCAqIFBhcnNlIEhUTUwgdGFncyAmIEhUTUwgQ2hhcmFjdGVyc1xuXHQgKi9cblx0XG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cdFxuXHRmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblx0XG5cdHZhciBIVE1MUGFyc2VyID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBIVE1MUGFyc2VyKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhUTUxQYXJzZXIpO1xuXHQgIH1cblx0XG5cdCAgX2NyZWF0ZUNsYXNzKEhUTUxQYXJzZXIsIFt7XG5cdCAgICBrZXk6ICd0eXBlSHRtbENoYXJzJyxcblx0XG5cdCAgICAvKipcblx0ICAgICAqIFR5cGUgSFRNTCB0YWdzICYgSFRNTCBDaGFyYWN0ZXJzXG5cdCAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3VyU3RyaW5nIEN1cnJlbnQgc3RyaW5nXG5cdCAgICAgKiBAcGFyYW0ge251bWJlcn0gY3VyU3RyUG9zIFBvc2l0aW9uIGluIGN1cnJlbnQgc3RyaW5nXG5cdCAgICAgKiBAcGFyYW0ge1R5cGVkfSBzZWxmIGluc3RhbmNlIG9mIFR5cGVkXG5cdCAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBhIG5ldyBzdHJpbmcgcG9zaXRpb25cblx0ICAgICAqIEBwcml2YXRlXG5cdCAgICAgKi9cblx0XG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdHlwZUh0bWxDaGFycyhjdXJTdHJpbmcsIGN1clN0clBvcywgc2VsZikge1xuXHQgICAgICBpZiAoc2VsZi5jb250ZW50VHlwZSAhPT0gJ2h0bWwnKSByZXR1cm4gY3VyU3RyUG9zO1xuXHQgICAgICB2YXIgY3VyQ2hhciA9IGN1clN0cmluZy5zdWJzdHIoY3VyU3RyUG9zKS5jaGFyQXQoMCk7XG5cdCAgICAgIGlmIChjdXJDaGFyID09PSAnPCcgfHwgY3VyQ2hhciA9PT0gJyYnKSB7XG5cdCAgICAgICAgdmFyIGVuZFRhZyA9ICcnO1xuXHQgICAgICAgIGlmIChjdXJDaGFyID09PSAnPCcpIHtcblx0ICAgICAgICAgIGVuZFRhZyA9ICc+Jztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgZW5kVGFnID0gJzsnO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB3aGlsZSAoY3VyU3RyaW5nLnN1YnN0cihjdXJTdHJQb3MgKyAxKS5jaGFyQXQoMCkgIT09IGVuZFRhZykge1xuXHQgICAgICAgICAgY3VyU3RyUG9zKys7XG5cdCAgICAgICAgICBpZiAoY3VyU3RyUG9zICsgMSA+IGN1clN0cmluZy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGN1clN0clBvcysrO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBjdXJTdHJQb3M7XG5cdCAgICB9XG5cdFxuXHQgICAgLyoqXG5cdCAgICAgKiBCYWNrc3BhY2UgSFRNTCB0YWdzIGFuZCBIVE1MIENoYXJhY3RlcnNcblx0ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJTdHJpbmcgQ3VycmVudCBzdHJpbmdcblx0ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJTdHJQb3MgUG9zaXRpb24gaW4gY3VycmVudCBzdHJpbmdcblx0ICAgICAqIEBwYXJhbSB7VHlwZWR9IHNlbGYgaW5zdGFuY2Ugb2YgVHlwZWRcblx0ICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGEgbmV3IHN0cmluZyBwb3NpdGlvblxuXHQgICAgICogQHByaXZhdGVcblx0ICAgICAqL1xuXHQgIH0sIHtcblx0ICAgIGtleTogJ2JhY2tTcGFjZUh0bWxDaGFycycsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gYmFja1NwYWNlSHRtbENoYXJzKGN1clN0cmluZywgY3VyU3RyUG9zLCBzZWxmKSB7XG5cdCAgICAgIGlmIChzZWxmLmNvbnRlbnRUeXBlICE9PSAnaHRtbCcpIHJldHVybiBjdXJTdHJQb3M7XG5cdCAgICAgIHZhciBjdXJDaGFyID0gY3VyU3RyaW5nLnN1YnN0cihjdXJTdHJQb3MpLmNoYXJBdCgwKTtcblx0ICAgICAgaWYgKGN1ckNoYXIgPT09ICc+JyB8fCBjdXJDaGFyID09PSAnOycpIHtcblx0ICAgICAgICB2YXIgZW5kVGFnID0gJyc7XG5cdCAgICAgICAgaWYgKGN1ckNoYXIgPT09ICc+Jykge1xuXHQgICAgICAgICAgZW5kVGFnID0gJzwnO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBlbmRUYWcgPSAnJic7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChjdXJTdHJpbmcuc3Vic3RyKGN1clN0clBvcyAtIDEpLmNoYXJBdCgwKSAhPT0gZW5kVGFnKSB7XG5cdCAgICAgICAgICBjdXJTdHJQb3MtLTtcblx0ICAgICAgICAgIGlmIChjdXJTdHJQb3MgPCAwKSB7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBjdXJTdHJQb3MtLTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gY3VyU3RyUG9zO1xuXHQgICAgfVxuXHQgIH1dKTtcblx0XG5cdCAgcmV0dXJuIEhUTUxQYXJzZXI7XG5cdH0pKCk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBIVE1MUGFyc2VyO1xuXHR2YXIgaHRtbFBhcnNlciA9IG5ldyBIVE1MUGFyc2VyKCk7XG5cdGV4cG9ydHMuaHRtbFBhcnNlciA9IGh0bWxQYXJzZXI7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKVxufSk7XG47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi90eXBlZC5qcy9saWIvdHlwZWQuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4\n"); 110 | 111 | /***/ }), 112 | /* 5 */ 113 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 114 | 115 | "use strict"; 116 | eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_typed_js__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_typed_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_typed_js__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_typed_component_config__ = __webpack_require__(2);\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'vue-typed-js',\n props: __WEBPACK_IMPORTED_MODULE_1__config_typed_component_config__[\"a\" /* props */],\n data: function data() {\n return {\n typedObj: null\n };\n },\n\n methods: {\n throwError: function throwError(message) {\n throw new TypeError(message);\n },\n initTypedJS: function initTypedJS() {\n var $typed = this.$refs.typedElement.querySelector('.typing');\n\n if (this.$slots.default.length > 1) {\n this.throwError('Just one child element allowed inside <' + this.$options.name + '> component.');\n } else if (this.$slots.default.length === 1) {\n var typedConfig = this.$props;\n typedConfig = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__config_typed_component_config__[\"b\" /* getEventHandlers */])(this, typedConfig);\n this.typedObj = new __WEBPACK_IMPORTED_MODULE_0_typed_js___default.a($typed, typedConfig);\n }\n }\n },\n mounted: function mounted() {\n this.initTypedJS();\n },\n destroyed: function destroyed() {\n this.typedObj.destroy();\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vVnVlVHlwZWRKcy52dWU/MDVlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQU9BO0FBQ0E7O0FBRUE7QUFDQSxzQkFEQTtBQUVBLHNGQUZBO0FBR0EsTUFIQSxrQkFHQTtBQUNBO0FBQ0E7QUFEQTtBQUdBLEdBUEE7O0FBUUE7QUFDQTtBQUNBO0FBQ0EsS0FIQTtBQUlBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BRkEsTUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQSxHQVJBO0FBd0JBLFNBeEJBLHFCQXdCQTtBQUNBO0FBQ0EsR0ExQkE7QUEyQkEsV0EzQkEsdUJBMkJBO0FBQ0E7QUFDQTtBQTdCQSIsImZpbGUiOiI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwidHlwZWQtZWxlbWVudFwiIHJlZj1cInR5cGVkRWxlbWVudFwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVkIGZyb20gJ3R5cGVkLmpzJ1xuaW1wb3J0IHsgcHJvcHMsIGdldEV2ZW50SGFuZGxlcnMgfSBmcm9tICcuLi9jb25maWcvdHlwZWQtY29tcG9uZW50LmNvbmZpZydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAndnVlLXR5cGVkLWpzJyxcbiAgcHJvcHMsXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlZE9iajogbnVsbCxcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0aHJvd0Vycm9yOiBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihtZXNzYWdlKVxuICAgIH0sXG4gICAgaW5pdFR5cGVkSlM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0ICR0eXBlZCA9IHRoaXMuJHJlZnMudHlwZWRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50eXBpbmcnKVxuXG4gICAgICBpZiAodGhpcy4kc2xvdHMuZGVmYXVsdC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMudGhyb3dFcnJvcihgSnVzdCBvbmUgY2hpbGQgZWxlbWVudCBhbGxvd2VkIGluc2lkZSA8JHt0aGlzLiRvcHRpb25zLm5hbWV9PiBjb21wb25lbnQuYClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4kc2xvdHMuZGVmYXVsdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgbGV0IHR5cGVkQ29uZmlnID0gdGhpcy4kcHJvcHNcbiAgICAgICAgdHlwZWRDb25maWcgPSBnZXRFdmVudEhhbmRsZXJzKHRoaXMsIHR5cGVkQ29uZmlnKVxuICAgICAgICB0aGlzLnR5cGVkT2JqID0gbmV3IFR5cGVkKCR0eXBlZCwgdHlwZWRDb25maWcpXG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgbW91bnRlZCAoKSB7XG4gICAgdGhpcy5pbml0VHlwZWRKUygpXG4gIH0sXG4gIGRlc3Ryb3llZCAoKSB7XG4gICAgdGhpcy50eXBlZE9iai5kZXN0cm95KClcbiAgfSxcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi50eXBlZC1lbGVtZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAudHlwZWQtY3Vyc29yIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGFuaW1hdGlvbjogdHlwZWRqc0JsaW5rIDAuN3MgaW5maW5pdGU7XG4gIH1cbn1cblxuQGtleWZyYW1lcyB0eXBlZGpzQmxpbmt7XG4gIDUwJSB7IG9wYWNpdHk6IDAuMDsgfVxufVxuPC9zdHlsZT5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBWdWVUeXBlZEpzLnZ1ZT8yYjM1NjFiMyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n"); 117 | 118 | /***/ }), 119 | /* 6 */ 120 | /***/ (function(module, exports) { 121 | 122 | eval("module.exports = function (module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function () {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function get() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function get() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2MzYzIiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIndlYnBhY2tQb2x5ZmlsbCIsImRlcHJlY2F0ZSIsInBhdGhzIiwiY2hpbGRyZW4iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJsIiwiaSJdLCJtYXBwaW5ncyI6IkFBQUFBLE9BQU9DLE9BQVAsR0FBaUIsVUFBU0QsTUFBVCxFQUFpQjtBQUNqQyxLQUFHLENBQUNBLE9BQU9FLGVBQVgsRUFBNEI7QUFDM0JGLFNBQU9HLFNBQVAsR0FBbUIsWUFBVyxDQUFFLENBQWhDO0FBQ0FILFNBQU9JLEtBQVAsR0FBZSxFQUFmO0FBQ0E7QUFDQSxNQUFHLENBQUNKLE9BQU9LLFFBQVgsRUFBcUJMLE9BQU9LLFFBQVAsR0FBa0IsRUFBbEI7QUFDckJDLFNBQU9DLGNBQVAsQ0FBc0JQLE1BQXRCLEVBQThCLFFBQTlCLEVBQXdDO0FBQ3ZDUSxlQUFZLElBRDJCO0FBRXZDQyxRQUFLLGVBQVc7QUFDZixXQUFPVCxPQUFPVSxDQUFkO0FBQ0E7QUFKc0MsR0FBeEM7QUFNQUosU0FBT0MsY0FBUCxDQUFzQlAsTUFBdEIsRUFBOEIsSUFBOUIsRUFBb0M7QUFDbkNRLGVBQVksSUFEdUI7QUFFbkNDLFFBQUssZUFBVztBQUNmLFdBQU9ULE9BQU9XLENBQWQ7QUFDQTtBQUprQyxHQUFwQztBQU1BWCxTQUFPRSxlQUFQLEdBQXlCLENBQXpCO0FBQ0E7QUFDRCxRQUFPRixNQUFQO0FBQ0EsQ0FyQkQiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XHJcblx0aWYoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcclxuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xyXG5cdFx0bW9kdWxlLnBhdGhzID0gW107XHJcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcclxuXHRcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XHJcblx0fVxyXG5cdHJldHVybiBtb2R1bGU7XHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAod2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6\n"); 123 | 124 | /***/ }), 125 | /* 7 */ 126 | /***/ (function(module, exports) { 127 | 128 | eval("// removed by extract-text-webpack-plugin//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9WdWVUeXBlZEpzLnZ1ZT9iYzY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9leHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW4vbG9hZGVyLmpzP3tcIm9taXRcIjowLFwicmVtb3ZlXCI6dHJ1ZX0hLi9+L2Nzcy1sb2FkZXIhLi9+L3Z1ZS1sb2FkZXIvbGliL3N0eWxlLXJld3JpdGVyLmpzP2lkPWRhdGEtdi0xZGU0NjQyZCEuL34vc2Fzcy1sb2FkZXIhLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c3R5bGVzJmluZGV4PTAhLi9zcmMvY29tcG9uZW50cy9WdWVUeXBlZEpzLnZ1ZVxuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7\n"); 129 | 130 | /***/ }), 131 | /* 8 */ 132 | /***/ (function(module, exports) { 133 | 134 | eval("module.exports = function normalizeComponent (\n rawScriptExports,\n compiledTemplate,\n scopeId,\n cssModules\n) {\n var esModule\n var scriptExports = rawScriptExports = rawScriptExports || {}\n\n // ES6 modules interop\n var type = typeof rawScriptExports.default\n if (type === 'object' || type === 'function') {\n esModule = rawScriptExports\n scriptExports = rawScriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (compiledTemplate) {\n options.render = compiledTemplate.render\n options.staticRenderFns = compiledTemplate.staticRenderFns\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n // inject cssModules\n if (cssModules) {\n var computed = options.computed || (options.computed = {})\n Object.keys(cssModules).forEach(function (key) {\n var module = cssModules[key]\n computed[key] = function () { return module }\n })\n }\n\n return {\n esModule: esModule,\n exports: scriptExports,\n options: options\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyLmpzP2Q0ZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICByYXdTY3JpcHRFeHBvcnRzLFxuICBjb21waWxlZFRlbXBsYXRlLFxuICBzY29wZUlkLFxuICBjc3NNb2R1bGVzXG4pIHtcbiAgdmFyIGVzTW9kdWxlXG4gIHZhciBzY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgfHwge31cblxuICAvLyBFUzYgbW9kdWxlcyBpbnRlcm9wXG4gIHZhciB0eXBlID0gdHlwZW9mIHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuICBpZiAodHlwZSA9PT0gJ29iamVjdCcgfHwgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGVzTW9kdWxlID0gcmF3U2NyaXB0RXhwb3J0c1xuICAgIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcbiAgfVxuXG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAoY29tcGlsZWRUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gY29tcGlsZWRUZW1wbGF0ZS5yZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSBzY29wZUlkXG4gIH1cblxuICAvLyBpbmplY3QgY3NzTW9kdWxlc1xuICBpZiAoY3NzTW9kdWxlcykge1xuICAgIHZhciBjb21wdXRlZCA9IG9wdGlvbnMuY29tcHV0ZWQgfHwgKG9wdGlvbnMuY29tcHV0ZWQgPSB7fSlcbiAgICBPYmplY3Qua2V5cyhjc3NNb2R1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtb2R1bGUgPSBjc3NNb2R1bGVzW2tleV1cbiAgICAgIGNvbXB1dGVkW2tleV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtb2R1bGUgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVzTW9kdWxlOiBlc01vZHVsZSxcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyLmpzXG4vLyBtb2R1bGUgaWQgPSA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n"); 135 | 136 | /***/ }), 137 | /* 9 */ 138 | /***/ (function(module, exports, __webpack_require__) { 139 | 140 | eval("module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n ref: \"typedElement\",\n staticClass: \"typed-element\"\n }, [_vm._t(\"default\")], 2)\n},staticRenderFns: []}\nmodule.exports.render._withStripped = true\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\").rerender(\"data-v-1de4642d\", module.exports)\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9WdWVUeXBlZEpzLnZ1ZT9jZjljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDMUU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCdkaXYnLCB7XG4gICAgcmVmOiBcInR5cGVkRWxlbWVudFwiLFxuICAgIHN0YXRpY0NsYXNzOiBcInR5cGVkLWVsZW1lbnRcIlxuICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG59LHN0YXRpY1JlbmRlckZuczogW119XG5tb2R1bGUuZXhwb3J0cy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpLnJlcmVuZGVyKFwiZGF0YS12LTFkZTQ2NDJkXCIsIG1vZHVsZS5leHBvcnRzKVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyLmpzP2lkPWRhdGEtdi0xZGU0NjQyZCEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL2NvbXBvbmVudHMvVnVlVHlwZWRKcy52dWVcbi8vIG1vZHVsZSBpZCA9IDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n"); 141 | 142 | /***/ }) 143 | /******/ ]); 144 | }); -------------------------------------------------------------------------------- /dist/vue-typed-js.css: -------------------------------------------------------------------------------- 1 | 2 | .typed-element { 3 | display: flex; 4 | align-items: center; 5 | } 6 | .typed-element .typed-cursor { 7 | opacity: 1; 8 | animation: typedjsBlink 0.7s infinite; 9 | } 10 | @keyframes typedjsBlink { 11 | 50% { 12 | opacity: 0.0; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | export { default } from './dist/vue-typed-js.common' 2 | export * from './dist/vue-typed-js.common' 3 | import './dist/vue-typed-js.css' 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-typed-js", 3 | "description": "typed.js vue integration - easily create typing animations", 4 | "version": "0.2.0", 5 | "author": { 6 | "name": "Orlando Wenzinger", 7 | "email": "orlando.wenzinger@bluewin.ch" 8 | }, 9 | "keywords": [ 10 | "vue", 11 | "vuejs", 12 | "plugin" 13 | ], 14 | "repository": "https://github.com/Orlandster1998/vue-typed-js", 15 | "license": "MIT", 16 | "main": "dist/vue-typed-js.common.js", 17 | "unpkg": "dist/vue-typed-js.browser.js", 18 | "module": "index.js", 19 | "scripts": { 20 | "dev": "cross-env NODE_ENV=development webpack --config config/webpack.config.dev.js --progress --watch", 21 | "build": "npm run build:browser && npm run build:common", 22 | "build:browser": "cross-env NODE_ENV=production webpack --config config/webpack.config.browser.js --progress --hide-modules", 23 | "build:common": "cross-env NODE_ENV=production webpack --config config/webpack.config.common.js --progress --hide-modules", 24 | "prepublish": "npm run build" 25 | }, 26 | "devDependencies": { 27 | "babel-core": "^6.0.0", 28 | "babel-eslint": "^7.1.1", 29 | "babel-loader": "^6.0.0", 30 | "babel-preset-es2015": "^6.14.0", 31 | "babel-preset-stage-0": "^6.16.0", 32 | "cross-env": "^3.1.3", 33 | "css-loader": "^0.26.1", 34 | "eslint": "^3.12.1", 35 | "eslint-config-standard": "^6.2.1", 36 | "eslint-loader": "^1.6.1", 37 | "eslint-plugin-html": "^1.6.0", 38 | "eslint-plugin-promise": "^3.4.0", 39 | "eslint-plugin-standard": "^2.0.1", 40 | "extract-text-webpack-plugin": "^2.0.0-beta.4", 41 | "node-sass": "^4.0.0", 42 | "sass-loader": "^4.1.0", 43 | "vue-loader": "^10.0.0", 44 | "vue-template-compiler": "^2.1.6", 45 | "webpack": "^2.1.0-beta.28", 46 | "webpack-merge": "^1.1.2" 47 | }, 48 | "dependencies": { 49 | "typed.js": "git+https://github.com/mattboldt/typed.js.git" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/components/VueTypedJs.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 43 | 44 | 59 | -------------------------------------------------------------------------------- /src/config/typed-component.config.js: -------------------------------------------------------------------------------- 1 | export const props = { 2 | strings: { 3 | type: Array, 4 | required: false, 5 | default: function () { 6 | return [ 'Hello World!' ] 7 | }, 8 | }, 9 | stringsElement: { 10 | type: String, 11 | required: false, 12 | default: null, 13 | }, 14 | typeSpeed: { 15 | type: Number, 16 | required: false, 17 | default: 50, 18 | }, 19 | startDelay: { 20 | type: Number, 21 | required: false, 22 | default: 0, 23 | }, 24 | backSpeed: { 25 | type: Number, 26 | required: false, 27 | default: 0, 28 | }, 29 | smartBackspace: { 30 | type: Boolean, 31 | required: false, 32 | default: true, 33 | }, 34 | shuffle: { 35 | type: Boolean, 36 | required: false, 37 | default: false, 38 | }, 39 | backDelay: { 40 | type: Number, 41 | required: false, 42 | default: 700, 43 | }, 44 | fadeOut: { 45 | type: Boolean, 46 | required: false, 47 | default: false, 48 | }, 49 | fadeOutClass: { 50 | type: String, 51 | required: false, 52 | default: 'typed-fade-out', 53 | }, 54 | fadeOutDelay: { 55 | type: Number, 56 | required: false, 57 | default: 500, 58 | }, 59 | loop: { 60 | type: Boolean, 61 | required: false, 62 | default: false, 63 | }, 64 | loopCount: { 65 | type: Number, 66 | required: false, 67 | default: Infinity, 68 | }, 69 | showCursor: { 70 | type: Boolean, 71 | required: false, 72 | default: true, 73 | }, 74 | cursorChar: { 75 | type: String, 76 | required: false, 77 | default: '|', 78 | }, 79 | autoInsertCss: { 80 | type: Boolean, 81 | required: false, 82 | default: true, 83 | }, 84 | attr: { 85 | type: String, 86 | required: false, 87 | default: null, 88 | }, 89 | bindInputFocusEvents: { 90 | type: Boolean, 91 | required: false, 92 | default: false, 93 | }, 94 | contentType: { 95 | type: String, 96 | required: false, 97 | default: 'html', 98 | }, 99 | } 100 | 101 | export const getEventHandlers = (context, typedConfig) => { 102 | typedConfig.onComplete = () => { 103 | context.$emit('onComplete') 104 | } 105 | 106 | typedConfig.preStringTyped = () => { 107 | context.$emit('preStringTyped') 108 | } 109 | 110 | typedConfig.onStringTyped = () => { 111 | context.$emit('onStringTyped') 112 | } 113 | 114 | typedConfig.onLastStringBackspaced = () => { 115 | context.$emit('onLastStringBackspaced') 116 | } 117 | 118 | typedConfig.onTypingPaused = () => { 119 | context.$emit('onTypingPaused') 120 | } 121 | 122 | typedConfig.onTypingResumed = () => { 123 | context.$emit('onTypingResumed') 124 | } 125 | 126 | typedConfig.onReset = () => { 127 | context.$emit('onReset') 128 | } 129 | 130 | typedConfig.onStop = () => { 131 | context.$emit('onStop') 132 | } 133 | 134 | typedConfig.onStart = () => { 135 | context.$emit('onStart') 136 | } 137 | 138 | typedConfig.onDestroy = () => { 139 | context.$emit('onDestroy') 140 | } 141 | 142 | return typedConfig 143 | } 144 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import VueTypedJs from './components/VueTypedJs.vue' 2 | 3 | // Install the components 4 | export function install (Vue) { 5 | Vue.component('vue-typed-js', VueTypedJs) 6 | } 7 | 8 | // Expose the components 9 | export { 10 | VueTypedJs, 11 | } 12 | 13 | // Plugin 14 | const plugin = { 15 | /* eslint-disable no-undef */ 16 | version: VERSION, 17 | install, 18 | } 19 | 20 | export default plugin 21 | 22 | // Auto-install 23 | let GlobalVue = null 24 | if (typeof window !== 'undefined') { 25 | GlobalVue = window.Vue 26 | } else if (typeof global !== 'undefined') { 27 | GlobalVue = global.Vue 28 | } 29 | if (GlobalVue) { 30 | GlobalVue.use(plugin) 31 | } 32 | --------------------------------------------------------------------------------