[DeviceHome] Remove unnecessary files 00/257000/2 accepted/tizen/unified/20210416.143337 accepted/tizen/unified/20210419.153541 submit/tizen/20210416.072715 submit/tizen/20210416.160018 submit/tizen/20210417.030150
authorHunseop Jeong <hs85.jeong@samsung.com>
Fri, 16 Apr 2021 07:11:01 +0000 (00:11 -0700)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Fri, 16 Apr 2021 07:20:07 +0000 (00:20 -0700)
The unnecessary test, example folders and md, map files are removed.
The rom size is saved from 8060 KB to 5140 KB.

Change-Id: I321bceec31080aca1cee4cd5be415bac7d0e497b
Signed-off-by: Hunseop Jeong <hs85.jeong@samsung.com>
Signed-off-by: Youngsoo Choi <kenshin.choi@samsung.com>
236 files changed:
device_home/node_modules/accepts/HISTORY.md [deleted file]
device_home/node_modules/accepts/README.md [deleted file]
device_home/node_modules/after/README.md [deleted file]
device_home/node_modules/after/test/after-test.js [deleted file]
device_home/node_modules/ansi-regex/readme.md [deleted file]
device_home/node_modules/ansi-styles/readme.md [deleted file]
device_home/node_modules/array-flatten/README.md [deleted file]
device_home/node_modules/arraybuffer.slice/README.md [deleted file]
device_home/node_modules/arraybuffer.slice/test/slice-buffer.js [deleted file]
device_home/node_modules/async/README.md [deleted file]
device_home/node_modules/backo2/History.md [deleted file]
device_home/node_modules/backo2/Readme.md [deleted file]
device_home/node_modules/backo2/test/index.js [deleted file]
device_home/node_modules/balanced-match/LICENSE.md [deleted file]
device_home/node_modules/balanced-match/README.md [deleted file]
device_home/node_modules/base64-arraybuffer/README.md [deleted file]
device_home/node_modules/base64-js/README.md [deleted file]
device_home/node_modules/blob/README.md [deleted file]
device_home/node_modules/blob/test/index.js [deleted file]
device_home/node_modules/body-parser/HISTORY.md [deleted file]
device_home/node_modules/body-parser/README.md [deleted file]
device_home/node_modules/brace-expansion/README.md [deleted file]
device_home/node_modules/buffer-alloc-unsafe/readme.md [deleted file]
device_home/node_modules/buffer-alloc/readme.md [deleted file]
device_home/node_modules/buffer-fill/readme.md [deleted file]
device_home/node_modules/buffer-from/readme.md [deleted file]
device_home/node_modules/buffer/AUTHORS.md [deleted file]
device_home/node_modules/buffer/README.md [deleted file]
device_home/node_modules/bytes/History.md [deleted file]
device_home/node_modules/bytes/Readme.md [deleted file]
device_home/node_modules/camelcase/readme.md [deleted file]
device_home/node_modules/chalk/readme.md [deleted file]
device_home/node_modules/cliui/CHANGELOG.md [deleted file]
device_home/node_modules/cliui/README.md [deleted file]
device_home/node_modules/color-convert/CHANGELOG.md [deleted file]
device_home/node_modules/color-convert/README.md [deleted file]
device_home/node_modules/color-name/README.md [deleted file]
device_home/node_modules/component-bind/History.md [deleted file]
device_home/node_modules/component-bind/Readme.md [deleted file]
device_home/node_modules/component-emitter/History.md [deleted file]
device_home/node_modules/component-emitter/Readme.md [deleted file]
device_home/node_modules/component-inherit/History.md [deleted file]
device_home/node_modules/component-inherit/Readme.md [deleted file]
device_home/node_modules/component-inherit/test/inherit.js [deleted file]
device_home/node_modules/concat-map/example/map.js [deleted file]
device_home/node_modules/concat-map/test/map.js [deleted file]
device_home/node_modules/content-disposition/HISTORY.md [deleted file]
device_home/node_modules/content-disposition/README.md [deleted file]
device_home/node_modules/content-type/HISTORY.md [deleted file]
device_home/node_modules/content-type/README.md [deleted file]
device_home/node_modules/cookie-signature/History.md [deleted file]
device_home/node_modules/cookie-signature/Readme.md [deleted file]
device_home/node_modules/cookie/HISTORY.md [deleted file]
device_home/node_modules/cookie/README.md [deleted file]
device_home/node_modules/debug/CHANGELOG.md [deleted file]
device_home/node_modules/debug/README.md [deleted file]
device_home/node_modules/decamelize/readme.md [deleted file]
device_home/node_modules/depd/History.md [deleted file]
device_home/node_modules/depd/Readme.md [deleted file]
device_home/node_modules/destroy/README.md [deleted file]
device_home/node_modules/dijkstrajs/CONTRIBUTING.md [deleted file]
device_home/node_modules/dijkstrajs/LICENSE.md [deleted file]
device_home/node_modules/dijkstrajs/README.md [deleted file]
device_home/node_modules/dijkstrajs/test/dijkstra.test.js [deleted file]
device_home/node_modules/ee-first/README.md [deleted file]
device_home/node_modules/ejs/README.md [deleted file]
device_home/node_modules/emoji-regex/README.md [deleted file]
device_home/node_modules/encodeurl/HISTORY.md [deleted file]
device_home/node_modules/encodeurl/README.md [deleted file]
device_home/node_modules/engine.io-client/CHANGELOG.md [deleted file]
device_home/node_modules/engine.io-client/README.md [deleted file]
device_home/node_modules/engine.io-parser/CHANGELOG.md [deleted file]
device_home/node_modules/engine.io-parser/Readme.md [deleted file]
device_home/node_modules/engine.io/CHANGELOG.md [deleted file]
device_home/node_modules/engine.io/README.md [deleted file]
device_home/node_modules/engine.io/node_modules/base64id/CHANGELOG.md [deleted file]
device_home/node_modules/engine.io/node_modules/base64id/README.md [deleted file]
device_home/node_modules/escape-html/Readme.md [deleted file]
device_home/node_modules/escape-string-regexp/readme.md [deleted file]
device_home/node_modules/etag/HISTORY.md [deleted file]
device_home/node_modules/etag/README.md [deleted file]
device_home/node_modules/express-session/HISTORY.md [deleted file]
device_home/node_modules/express-session/README.md [deleted file]
device_home/node_modules/express/History.md [deleted file]
device_home/node_modules/express/Readme.md [deleted file]
device_home/node_modules/finalhandler/HISTORY.md [deleted file]
device_home/node_modules/finalhandler/README.md [deleted file]
device_home/node_modules/find-up/readme.md [deleted file]
device_home/node_modules/forwarded/HISTORY.md [deleted file]
device_home/node_modules/forwarded/README.md [deleted file]
device_home/node_modules/fresh/HISTORY.md [deleted file]
device_home/node_modules/fresh/README.md [deleted file]
device_home/node_modules/get-caller-file/LICENSE.md [deleted file]
device_home/node_modules/get-caller-file/README.md [deleted file]
device_home/node_modules/get-caller-file/index.js.map [deleted file]
device_home/node_modules/get-port/readme.md [deleted file]
device_home/node_modules/has-binary2/History.md [deleted file]
device_home/node_modules/has-binary2/README.md [deleted file]
device_home/node_modules/has-cors/History.md [deleted file]
device_home/node_modules/has-cors/Readme.md [deleted file]
device_home/node_modules/has-flag/readme.md [deleted file]
device_home/node_modules/http-errors/HISTORY.md [deleted file]
device_home/node_modules/http-errors/README.md [deleted file]
device_home/node_modules/iconv-lite/Changelog.md [deleted file]
device_home/node_modules/iconv-lite/README.md [deleted file]
device_home/node_modules/ieee754/README.md [deleted file]
device_home/node_modules/indexof/Readme.md [deleted file]
device_home/node_modules/inherits/README.md [deleted file]
device_home/node_modules/ipaddr.js/README.md [deleted file]
device_home/node_modules/is-fullwidth-code-point/readme.md [deleted file]
device_home/node_modules/isarray/README.md [deleted file]
device_home/node_modules/jake/README.md [deleted file]
device_home/node_modules/jake/test/integration/concurrent.js [deleted file]
device_home/node_modules/jake/test/integration/file.js [deleted file]
device_home/node_modules/jake/test/integration/file_task.js [deleted file]
device_home/node_modules/jake/test/integration/helpers.js [deleted file]
device_home/node_modules/jake/test/integration/jakefile.js [deleted file]
device_home/node_modules/jake/test/integration/jakelib/concurrent.jake.js [deleted file]
device_home/node_modules/jake/test/integration/jakelib/publish.jake.js [deleted file]
device_home/node_modules/jake/test/integration/jakelib/required_module.jake.js [deleted file]
device_home/node_modules/jake/test/integration/jakelib/rule.jake.js [deleted file]
device_home/node_modules/jake/test/integration/publish_task.js [deleted file]
device_home/node_modules/jake/test/integration/rule.js [deleted file]
device_home/node_modules/jake/test/integration/selfdep.js [deleted file]
device_home/node_modules/jake/test/integration/task_base.js [deleted file]
device_home/node_modules/jake/test/unit/jakefile.js [deleted file]
device_home/node_modules/jake/test/unit/namespace.js [deleted file]
device_home/node_modules/jake/test/unit/parseargs.js [deleted file]
device_home/node_modules/locate-path/readme.md [deleted file]
device_home/node_modules/media-typer/HISTORY.md [deleted file]
device_home/node_modules/media-typer/README.md [deleted file]
device_home/node_modules/merge-descriptors/HISTORY.md [deleted file]
device_home/node_modules/merge-descriptors/README.md [deleted file]
device_home/node_modules/methods/HISTORY.md [deleted file]
device_home/node_modules/methods/README.md [deleted file]
device_home/node_modules/mime-db/HISTORY.md [deleted file]
device_home/node_modules/mime-db/README.md [deleted file]
device_home/node_modules/mime-types/HISTORY.md [deleted file]
device_home/node_modules/mime-types/README.md [deleted file]
device_home/node_modules/mime/CHANGELOG.md [deleted file]
device_home/node_modules/mime/README.md [deleted file]
device_home/node_modules/minimatch/README.md [deleted file]
device_home/node_modules/ms/license.md [deleted file]
device_home/node_modules/ms/readme.md [deleted file]
device_home/node_modules/negotiator/HISTORY.md [deleted file]
device_home/node_modules/negotiator/README.md [deleted file]
device_home/node_modules/on-finished/HISTORY.md [deleted file]
device_home/node_modules/on-finished/README.md [deleted file]
device_home/node_modules/on-headers/HISTORY.md [deleted file]
device_home/node_modules/on-headers/README.md [deleted file]
device_home/node_modules/p-limit/readme.md [deleted file]
device_home/node_modules/p-locate/readme.md [deleted file]
device_home/node_modules/p-try/readme.md [deleted file]
device_home/node_modules/parseqs/README.md [deleted file]
device_home/node_modules/parseuri/History.md [deleted file]
device_home/node_modules/parseuri/README.md [deleted file]
device_home/node_modules/parseurl/HISTORY.md [deleted file]
device_home/node_modules/parseurl/README.md [deleted file]
device_home/node_modules/path-exists/readme.md [deleted file]
device_home/node_modules/path-to-regexp/History.md [deleted file]
device_home/node_modules/path-to-regexp/Readme.md [deleted file]
device_home/node_modules/pngjs/README.md [deleted file]
device_home/node_modules/proxy-addr/HISTORY.md [deleted file]
device_home/node_modules/proxy-addr/README.md [deleted file]
device_home/node_modules/qrcode/CHANGELOG.md [deleted file]
device_home/node_modules/qrcode/README.md [deleted file]
device_home/node_modules/qrcode/build/qrcode.min.js.map [deleted file]
device_home/node_modules/qrcode/build/qrcode.tosjis.min.js.map [deleted file]
device_home/node_modules/qs/CHANGELOG.md [deleted file]
device_home/node_modules/qs/README.md [deleted file]
device_home/node_modules/qs/test/.eslintrc [deleted file]
device_home/node_modules/qs/test/index.js [deleted file]
device_home/node_modules/qs/test/parse.js [deleted file]
device_home/node_modules/qs/test/stringify.js [deleted file]
device_home/node_modules/qs/test/utils.js [deleted file]
device_home/node_modules/random-bytes/HISTORY.md [deleted file]
device_home/node_modules/random-bytes/README.md [deleted file]
device_home/node_modules/range-parser/HISTORY.md [deleted file]
device_home/node_modules/range-parser/README.md [deleted file]
device_home/node_modules/raw-body/HISTORY.md [deleted file]
device_home/node_modules/raw-body/README.md [deleted file]
device_home/node_modules/require-main-filename/CHANGELOG.md [deleted file]
device_home/node_modules/require-main-filename/README.md [deleted file]
device_home/node_modules/safe-buffer/README.md [deleted file]
device_home/node_modules/safer-buffer/Porting-Buffer.md [deleted file]
device_home/node_modules/safer-buffer/Readme.md [deleted file]
device_home/node_modules/send/HISTORY.md [deleted file]
device_home/node_modules/send/README.md [deleted file]
device_home/node_modules/serve-static/HISTORY.md [deleted file]
device_home/node_modules/serve-static/README.md [deleted file]
device_home/node_modules/set-blocking/CHANGELOG.md [deleted file]
device_home/node_modules/set-blocking/README.md [deleted file]
device_home/node_modules/setprototypeof/README.md [deleted file]
device_home/node_modules/setprototypeof/test/index.js [deleted file]
device_home/node_modules/socket.io-adapter/Readme.md [deleted file]
device_home/node_modules/socket.io-parser/CHANGELOG.md [deleted file]
device_home/node_modules/socket.io-parser/Readme.md [deleted file]
device_home/node_modules/socket.io/CHANGELOG.md [deleted file]
device_home/node_modules/socket.io/Readme.md [deleted file]
device_home/node_modules/socket.io/node_modules/socket.io-client/CHANGELOG.md [deleted file]
device_home/node_modules/socket.io/node_modules/socket.io-client/README.md [deleted file]
device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.dev.js.map [deleted file]
device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js.map [deleted file]
device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.dev.js.map [deleted file]
device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.js.map [deleted file]
device_home/node_modules/statuses/HISTORY.md [deleted file]
device_home/node_modules/statuses/README.md [deleted file]
device_home/node_modules/string-width/readme.md [deleted file]
device_home/node_modules/strip-ansi/readme.md [deleted file]
device_home/node_modules/supports-color/readme.md [deleted file]
device_home/node_modules/to-array/README.md [deleted file]
device_home/node_modules/toidentifier/README.md [deleted file]
device_home/node_modules/type-is/HISTORY.md [deleted file]
device_home/node_modules/type-is/README.md [deleted file]
device_home/node_modules/uid-safe/HISTORY.md [deleted file]
device_home/node_modules/uid-safe/README.md [deleted file]
device_home/node_modules/unpipe/HISTORY.md [deleted file]
device_home/node_modules/unpipe/README.md [deleted file]
device_home/node_modules/utils-merge/README.md [deleted file]
device_home/node_modules/vary/HISTORY.md [deleted file]
device_home/node_modules/vary/README.md [deleted file]
device_home/node_modules/which-module/CHANGELOG.md [deleted file]
device_home/node_modules/which-module/README.md [deleted file]
device_home/node_modules/wrap-ansi/readme.md [deleted file]
device_home/node_modules/ws/README.md [deleted file]
device_home/node_modules/ws/node_modules/async-limiter/readme.md [deleted file]
device_home/node_modules/xmlhttprequest-ssl/README.md [deleted file]
device_home/node_modules/xmlhttprequest-ssl/example/demo.js [deleted file]
device_home/node_modules/xmlhttprequest/README.md [deleted file]
device_home/node_modules/y18n/CHANGELOG.md [deleted file]
device_home/node_modules/y18n/README.md [deleted file]
device_home/node_modules/yargs-parser/CHANGELOG.md [deleted file]
device_home/node_modules/yargs-parser/README.md [deleted file]
device_home/node_modules/yargs/CHANGELOG.md [deleted file]
device_home/node_modules/yargs/README.md [deleted file]
device_home/node_modules/yeast/README.md [deleted file]

diff --git a/device_home/node_modules/accepts/HISTORY.md b/device_home/node_modules/accepts/HISTORY.md
deleted file mode 100644 (file)
index 0bf0417..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-1.3.7 / 2019-04-29
-==================
-
-  * deps: negotiator@0.6.2
-    - Fix sorting charset, encoding, and language with extra parameters
-
-1.3.6 / 2019-04-28
-==================
-
-  * deps: mime-types@~2.1.24
-    - deps: mime-db@~1.40.0
-
-1.3.5 / 2018-02-28
-==================
-
-  * deps: mime-types@~2.1.18
-    - deps: mime-db@~1.33.0
-
-1.3.4 / 2017-08-22
-==================
-
-  * deps: mime-types@~2.1.16
-    - deps: mime-db@~1.29.0
-
-1.3.3 / 2016-05-02
-==================
-
-  * deps: mime-types@~2.1.11
-    - deps: mime-db@~1.23.0
-  * deps: negotiator@0.6.1
-    - perf: improve `Accept` parsing speed
-    - perf: improve `Accept-Charset` parsing speed
-    - perf: improve `Accept-Encoding` parsing speed
-    - perf: improve `Accept-Language` parsing speed
-
-1.3.2 / 2016-03-08
-==================
-
-  * deps: mime-types@~2.1.10
-    - Fix extension of `application/dash+xml`
-    - Update primary extension for `audio/mp4`
-    - deps: mime-db@~1.22.0
-
-1.3.1 / 2016-01-19
-==================
-
-  * deps: mime-types@~2.1.9
-    - deps: mime-db@~1.21.0
-
-1.3.0 / 2015-09-29
-==================
-
-  * deps: mime-types@~2.1.7
-    - deps: mime-db@~1.19.0
-  * deps: negotiator@0.6.0
-    - Fix including type extensions in parameters in `Accept` parsing
-    - Fix parsing `Accept` parameters with quoted equals
-    - Fix parsing `Accept` parameters with quoted semicolons
-    - Lazy-load modules from main entry point
-    - perf: delay type concatenation until needed
-    - perf: enable strict mode
-    - perf: hoist regular expressions
-    - perf: remove closures getting spec properties
-    - perf: remove a closure from media type parsing
-    - perf: remove property delete from media type parsing
-
-1.2.13 / 2015-09-06
-===================
-
-  * deps: mime-types@~2.1.6
-    - deps: mime-db@~1.18.0
-
-1.2.12 / 2015-07-30
-===================
-
-  * deps: mime-types@~2.1.4
-    - deps: mime-db@~1.16.0
-
-1.2.11 / 2015-07-16
-===================
-
-  * deps: mime-types@~2.1.3
-    - deps: mime-db@~1.15.0
-
-1.2.10 / 2015-07-01
-===================
-
-  * deps: mime-types@~2.1.2
-    - deps: mime-db@~1.14.0
-
-1.2.9 / 2015-06-08
-==================
-
-  * deps: mime-types@~2.1.1
-    - perf: fix deopt during mapping
-
-1.2.8 / 2015-06-07
-==================
-
-  * deps: mime-types@~2.1.0
-    - deps: mime-db@~1.13.0
-  * perf: avoid argument reassignment & argument slice
-  * perf: avoid negotiator recursive construction
-  * perf: enable strict mode
-  * perf: remove unnecessary bitwise operator
-
-1.2.7 / 2015-05-10
-==================
-
-  * deps: negotiator@0.5.3
-    - Fix media type parameter matching to be case-insensitive
-
-1.2.6 / 2015-05-07
-==================
-
-  * deps: mime-types@~2.0.11
-    - deps: mime-db@~1.9.1
-  * deps: negotiator@0.5.2
-    - Fix comparing media types with quoted values
-    - Fix splitting media types with quoted commas
-
-1.2.5 / 2015-03-13
-==================
-
-  * deps: mime-types@~2.0.10
-    - deps: mime-db@~1.8.0
-
-1.2.4 / 2015-02-14
-==================
-
-  * Support Node.js 0.6
-  * deps: mime-types@~2.0.9
-    - deps: mime-db@~1.7.0
-  * deps: negotiator@0.5.1
-    - Fix preference sorting to be stable for long acceptable lists
-
-1.2.3 / 2015-01-31
-==================
-
-  * deps: mime-types@~2.0.8
-    - deps: mime-db@~1.6.0
-
-1.2.2 / 2014-12-30
-==================
-
-  * deps: mime-types@~2.0.7
-    - deps: mime-db@~1.5.0
-
-1.2.1 / 2014-12-30
-==================
-
-  * deps: mime-types@~2.0.5
-    - deps: mime-db@~1.3.1
-
-1.2.0 / 2014-12-19
-==================
-
-  * deps: negotiator@0.5.0
-    - Fix list return order when large accepted list
-    - Fix missing identity encoding when q=0 exists
-    - Remove dynamic building of Negotiator class
-
-1.1.4 / 2014-12-10
-==================
-
-  * deps: mime-types@~2.0.4
-    - deps: mime-db@~1.3.0
-
-1.1.3 / 2014-11-09
-==================
-
-  * deps: mime-types@~2.0.3
-    - deps: mime-db@~1.2.0
-
-1.1.2 / 2014-10-14
-==================
-
-  * deps: negotiator@0.4.9
-    - Fix error when media type has invalid parameter
-
-1.1.1 / 2014-09-28
-==================
-
-  * deps: mime-types@~2.0.2
-    - deps: mime-db@~1.1.0
-  * deps: negotiator@0.4.8
-    - Fix all negotiations to be case-insensitive
-    - Stable sort preferences of same quality according to client order
-
-1.1.0 / 2014-09-02
-==================
-
-  * update `mime-types`
-
-1.0.7 / 2014-07-04
-==================
-
-  * Fix wrong type returned from `type` when match after unknown extension
-
-1.0.6 / 2014-06-24
-==================
-
-  * deps: negotiator@0.4.7
-
-1.0.5 / 2014-06-20
-==================
-
- * fix crash when unknown extension given
-
-1.0.4 / 2014-06-19
-==================
-
-  * use `mime-types`
-
-1.0.3 / 2014-06-11
-==================
-
-  * deps: negotiator@0.4.6
-    - Order by specificity when quality is the same
-
-1.0.2 / 2014-05-29
-==================
-
-  * Fix interpretation when header not in request
-  * deps: pin negotiator@0.4.5
-
-1.0.1 / 2014-01-18
-==================
-
-  * Identity encoding isn't always acceptable
-  * deps: negotiator@~0.4.0
-
-1.0.0 / 2013-12-27
-==================
-
-  * Genesis
diff --git a/device_home/node_modules/accepts/README.md b/device_home/node_modules/accepts/README.md
deleted file mode 100644 (file)
index 66a2f54..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-# accepts
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
-Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
-
-In addition to negotiator, it allows:
-
-- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
-  as well as `('text/html', 'application/json')`.
-- Allows type shorthands such as `json`.
-- Returns `false` when no types match
-- Treats non-existent headers as `*`
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install accepts
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var accepts = require('accepts')
-```
-
-### accepts(req)
-
-Create a new `Accepts` object for the given `req`.
-
-#### .charset(charsets)
-
-Return the first accepted charset. If nothing in `charsets` is accepted,
-then `false` is returned.
-
-#### .charsets()
-
-Return the charsets that the request accepts, in the order of the client's
-preference (most preferred first).
-
-#### .encoding(encodings)
-
-Return the first accepted encoding. If nothing in `encodings` is accepted,
-then `false` is returned.
-
-#### .encodings()
-
-Return the encodings that the request accepts, in the order of the client's
-preference (most preferred first).
-
-#### .language(languages)
-
-Return the first accepted language. If nothing in `languages` is accepted,
-then `false` is returned.
-
-#### .languages()
-
-Return the languages that the request accepts, in the order of the client's
-preference (most preferred first).
-
-#### .type(types)
-
-Return the first accepted type (and it is returned as the same text as what
-appears in the `types` array). If nothing in `types` is accepted, then `false`
-is returned.
-
-The `types` array can contain full MIME types or file extensions. Any value
-that is not a full MIME types is passed to `require('mime-types').lookup`.
-
-#### .types()
-
-Return the types that the request accepts, in the order of the client's
-preference (most preferred first).
-
-## Examples
-
-### Simple type negotiation
-
-This simple example shows how to use `accepts` to return a different typed
-respond body based on what the client wants to accept. The server lists it's
-preferences in order and will get back the best match between the client and
-server.
-
-```js
-var accepts = require('accepts')
-var http = require('http')
-
-function app (req, res) {
-  var accept = accepts(req)
-
-  // the order of this list is significant; should be server preferred order
-  switch (accept.type(['json', 'html'])) {
-    case 'json':
-      res.setHeader('Content-Type', 'application/json')
-      res.write('{"hello":"world!"}')
-      break
-    case 'html':
-      res.setHeader('Content-Type', 'text/html')
-      res.write('<b>hello, world!</b>')
-      break
-    default:
-      // the fallback is text/plain, so no need to specify it above
-      res.setHeader('Content-Type', 'text/plain')
-      res.write('hello, world!')
-      break
-  }
-
-  res.end()
-}
-
-http.createServer(app).listen(3000)
-```
-
-You can test this out with the cURL program:
-```sh
-curl -I -H'Accept: text/html' http://localhost:3000/
-```
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
-[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
-[node-version-image]: https://badgen.net/npm/node/accepts
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/accepts
-[npm-url]: https://npmjs.org/package/accepts
-[npm-version-image]: https://badgen.net/npm/v/accepts
-[travis-image]: https://badgen.net/travis/jshttp/accepts/master
-[travis-url]: https://travis-ci.org/jshttp/accepts
diff --git a/device_home/node_modules/after/README.md b/device_home/node_modules/after/README.md
deleted file mode 100644 (file)
index fc69096..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-# After [![Build Status][1]][2]
-
-Invoke callback after n calls
-
-## Status: production ready
-
-## Example
-
-```js
-var after = require("after")
-var db = require("./db") // some db.
-
-var updateUser = function (req, res) {
-  // use after to run two tasks in parallel,
-  // namely get request body and get session
-  // then run updateUser with the results
-  var next = after(2, updateUser)
-  var results = {}
-  
-  getJSONBody(req, res, function (err, body) {
-    if (err) return next(err)
-    
-    results.body = body
-    next(null, results)
-  })
-  
-  getSessionUser(req, res, function (err, user) {
-    if (err) return next(err)
-    
-    results.user = user
-    next(null, results)
-  })
-  
-  // now do the thing!
-  function updateUser(err, result) {
-    if (err) {
-      res.statusCode = 500
-      return res.end("Unexpected Error")
-    }
-    
-    if (!result.user || result.user.role !== "admin") {
-      res.statusCode = 403
-      return res.end("Permission Denied")
-    }
-    
-    db.put("users:" + req.params.userId, result.body, function (err) {
-      if (err) {
-        res.statusCode = 500
-        return res.end("Unexpected Error")
-      }
-      
-      res.statusCode = 200
-      res.end("Ok")  
-    })   
-  }
-}
-```
-
-## Naive Example
-
-```js
-var after = require("after")
-    , next = after(3, logItWorks)
-
-next()
-next()
-next() // it works
-
-function logItWorks() {
-    console.log("it works!")
-}
-```
-
-## Example with error handling
-
-```js
-var after = require("after")
-    , next = after(3, logError)
-
-next()
-next(new Error("oops")) // logs oops
-next() // does nothing
-
-// This callback is only called once.
-// If there is an error the callback gets called immediately
-// this avoids the situation where errors get lost.
-function logError(err) {
-    console.log(err)
-}
-```
-
-## Installation
-
-`npm install after`
-
-## Tests
-
-`npm test`
-
-## Contributors
-
- - Raynos
- - defunctzombie
-
-## MIT Licenced
-
-  [1]: https://secure.travis-ci.org/Raynos/after.png
-  [2]: http://travis-ci.org/Raynos/after
-  [3]: http://raynos.org/blog/2/Flow-control-in-node.js
-  [4]: http://stackoverflow.com/questions/6852059/determining-the-end-of-asynchronous-operations-javascript/6852307#6852307
-  [5]: http://stackoverflow.com/questions/6869872/in-javascript-what-are-best-practices-for-executing-multiple-asynchronous-functi/6870031#6870031
-  [6]: http://stackoverflow.com/questions/6864397/javascript-performance-long-running-tasks/6889419#6889419
-  [7]: http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js/6620091#6620091
-  [8]: http://github.com/Raynos/iterators
-  [9]: http://github.com/Raynos/composite
diff --git a/device_home/node_modules/after/test/after-test.js b/device_home/node_modules/after/test/after-test.js
deleted file mode 100644 (file)
index 4c1fdb8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var assert=require("assert"),after=require("../");test("exists",(function(){assert("function"==typeof after,"after is not a function")})),test("after when called with 0 invokes",(function(e){after(0,e)})),test("after 1",(function(e){after(1,e)()})),test("after 5",(function(e){for(var t=after(5,e),r=5;r--;)t()})),test("manipulate count",(function(e){var t=after(1,e),r=5;for(t.count=r;r--;)t()})),test("after terminates on error",(function(e){var t=after(2,(function(t){assert.equal(t.message,"test"),e()}));t(new Error("test")),t(new Error("test2"))})),test("gee",(function(e){e=after(2,e);var t=after(3,(function(t){assert.equal(t.message,1),e()}),(function(t){assert.equal(t.message,2),e()}));t(),t(new Error(1)),t(new Error(2))})),test("eee",(function(e){e=after(3,e);var t=after(3,(function(t){assert.equal(t.message,1),e()}),(function(t){assert.equal(t.message,2),e()}));t(new Error(1)),t(new Error(2)),t(new Error(2))})),test("gge",(function(e){var t=after(3,(function(t){assert.equal(t.message,1),e()}),(function(e){assert.ok(!1)}));t(),t(),t(new Error(1))})),test("egg",(function(e){var t=after(3,(function(t){assert.equal(t.message,1),e()}),(function(e){assert.ok(!1)}));t(new Error(1)),t(),t()})),test("throws on too many calls",(function(e){var t=after(1,e);t(),assert.throws(t,/after called too many times/)}));
\ No newline at end of file
diff --git a/device_home/node_modules/ansi-regex/readme.md b/device_home/node_modules/ansi-regex/readme.md
deleted file mode 100644 (file)
index d19c446..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
-
-> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
-
----
-
-<div align="center">
-       <b>
-               <a href="https://tidelift.com/subscription/pkg/npm-ansi-regex?utm_source=npm-ansi-regex&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
-       </b>
-       <br>
-       <sub>
-               Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
-       </sub>
-</div>
-
----
-
-
-## Install
-
-```
-$ npm install ansi-regex
-```
-
-
-## Usage
-
-```js
-const ansiRegex = require('ansi-regex');
-
-ansiRegex().test('\u001B[4mcake\u001B[0m');
-//=> true
-
-ansiRegex().test('cake');
-//=> false
-
-'\u001B[4mcake\u001B[0m'.match(ansiRegex());
-//=> ['\u001B[4m', '\u001B[0m']
-
-'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
-//=> ['\u001B[4m']
-
-'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
-//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
-```
-
-
-## API
-
-### ansiRegex([options])
-
-Returns a regex for matching ANSI escape codes.
-
-#### options
-
-##### onlyFirst
-
-Type: `boolean`<br>
-Default: `false` *(Matches any ANSI escape codes in a string)*
-
-Match only the first ANSI escape.
-
-
-## FAQ
-
-### Why do you test for codes not in the ECMA 48 standard?
-
-Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
-
-On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
-
-
-## Security
-
-To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
-
-
-## Maintainers
-
-- [Sindre Sorhus](https://github.com/sindresorhus)
-- [Josh Junon](https://github.com/qix-)
-
-
-## License
-
-MIT
diff --git a/device_home/node_modules/ansi-styles/readme.md b/device_home/node_modules/ansi-styles/readme.md
deleted file mode 100644 (file)
index 3158e2d..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)
-
-> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
-
-You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.
-
-<img src="https://cdn.rawgit.com/chalk/ansi-styles/8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg" width="900">
-
-
-## Install
-
-```
-$ npm install ansi-styles
-```
-
-
-## Usage
-
-```js
-const style = require('ansi-styles');
-
-console.log(`${style.green.open}Hello world!${style.green.close}`);
-
-
-// Color conversion between 16/256/truecolor
-// NOTE: If conversion goes to 16 colors or 256 colors, the original color
-//       may be degraded to fit that color palette. This means terminals
-//       that do not support 16 million colors will best-match the
-//       original color.
-console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close);
-console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close);
-console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close);
-```
-
-## API
-
-Each style has an `open` and `close` property.
-
-
-## Styles
-
-### Modifiers
-
-- `reset`
-- `bold`
-- `dim`
-- `italic` *(Not widely supported)*
-- `underline`
-- `inverse`
-- `hidden`
-- `strikethrough` *(Not widely supported)*
-
-### Colors
-
-- `black`
-- `red`
-- `green`
-- `yellow`
-- `blue`
-- `magenta`
-- `cyan`
-- `white`
-- `gray` ("bright black")
-- `redBright`
-- `greenBright`
-- `yellowBright`
-- `blueBright`
-- `magentaBright`
-- `cyanBright`
-- `whiteBright`
-
-### Background colors
-
-- `bgBlack`
-- `bgRed`
-- `bgGreen`
-- `bgYellow`
-- `bgBlue`
-- `bgMagenta`
-- `bgCyan`
-- `bgWhite`
-- `bgBlackBright`
-- `bgRedBright`
-- `bgGreenBright`
-- `bgYellowBright`
-- `bgBlueBright`
-- `bgMagentaBright`
-- `bgCyanBright`
-- `bgWhiteBright`
-
-
-## Advanced usage
-
-By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
-
-- `style.modifier`
-- `style.color`
-- `style.bgColor`
-
-###### Example
-
-```js
-console.log(style.color.green.open);
-```
-
-Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values.
-
-###### Example
-
-```js
-console.log(style.codes.get(36));
-//=> 39
-```
-
-
-## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728)
-
-`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors.
-
-To use these, call the associated conversion function with the intended output, for example:
-
-```js
-style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code
-style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code
-
-style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
-style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
-
-style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code
-style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code
-```
-
-
-## Related
-
-- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal
-
-
-## Maintainers
-
-- [Sindre Sorhus](https://github.com/sindresorhus)
-- [Josh Junon](https://github.com/qix-)
-
-
-## License
-
-MIT
diff --git a/device_home/node_modules/array-flatten/README.md b/device_home/node_modules/array-flatten/README.md
deleted file mode 100644 (file)
index 91fa5b6..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# Array Flatten
-
-[![NPM version][npm-image]][npm-url]
-[![NPM downloads][downloads-image]][downloads-url]
-[![Build status][travis-image]][travis-url]
-[![Test coverage][coveralls-image]][coveralls-url]
-
-> Flatten an array of nested arrays into a single flat array. Accepts an optional depth.
-
-## Installation
-
-```
-npm install array-flatten --save
-```
-
-## Usage
-
-```javascript
-var flatten = require('array-flatten')
-
-flatten([1, [2, [3, [4, [5], 6], 7], 8], 9])
-//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2)
-//=> [1, 2, 3, [4, [5], 6], 7, 8, 9]
-
-(function () {
-  flatten(arguments) //=> [1, 2, 3]
-})(1, [2, 3])
-```
-
-## License
-
-MIT
-
-[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat
-[npm-url]: https://npmjs.org/package/array-flatten
-[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat
-[downloads-url]: https://npmjs.org/package/array-flatten
-[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat
-[travis-url]: https://travis-ci.org/blakeembrey/array-flatten
-[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat
-[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master
diff --git a/device_home/node_modules/arraybuffer.slice/README.md b/device_home/node_modules/arraybuffer.slice/README.md
deleted file mode 100644 (file)
index 15e465e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# How to
-```javascript
-var sliceBuffer = require('arraybuffer.slice');
-var ab = (new Int8Array(5)).buffer;
-var sliced = sliceBuffer(ab, 1, 3);
-sliced = sliceBuffer(ab, 1);
-```
-
-# Licence (MIT)
-Copyright (C) 2013 Rase-
-
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/device_home/node_modules/arraybuffer.slice/test/slice-buffer.js b/device_home/node_modules/arraybuffer.slice/test/slice-buffer.js
deleted file mode 100644 (file)
index 07f01d2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var sliceBuffer=require("../index.js"),expect=require("expect.js");describe("sliceBuffer",(function(){describe("using standard slice",(function(){it("should slice correctly with only start provided",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;for(var t=sliceBuffer(e.buffer,3),n=new Uint8Array(t),i=(r=3,0);r<e.length;r++,i++)expect(e[r]).to.equal(n[i])})),it("should slice correctly with start and end provided",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;for(var t=sliceBuffer(e.buffer,3,8),n=new Uint8Array(t),i=(r=3,0);r<8;r++,i++)expect(e[r]).to.equal(n[i])})),it("should slice correctly with negative start",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;for(var t=sliceBuffer(e.buffer,-3),n=new Uint8Array(t),i=(r=e.length-3,0);r<e.length;r++,i++)expect(e[r]).to.equal(n[i])})),it("should slice correctly with negative end",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;for(var t=sliceBuffer(e.buffer,0,-3),n=new Uint8Array(t),i=(r=0,0);r<e.length-3;r++,i++)expect(e[r]).to.equal(n[i])})),it("should slice correctly with negative start and end",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;for(var t=sliceBuffer(e.buffer,-6,-3),n=new Uint8Array(t),i=(r=e.length-6,0);r<e.length-3;r++,i++)expect(e[r]).to.equal(n[i])})),it("should slice correctly with equal start and end",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=sliceBuffer(e.buffer,1,1);expect(t.byteLength).to.equal(0)})),it("should slice correctly when end larger than buffer",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=sliceBuffer(e.buffer,0,100);expect(new Uint8Array(t)).to.eql(e)})),it("shoud slice correctly when start larger than end",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=sliceBuffer(e.buffer,6,5);expect(t.byteLength).to.equal(0)}))})),describe("using fallback",(function(){it("should slice correctly with only start provided",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=e.buffer;t.slice=void 0;for(var n=sliceBuffer(t,3),i=new Uint8Array(n),l=(r=3,0);r<e.length;r++,l++)expect(e[r]).to.equal(i[l])})),it("should slice correctly with start and end provided",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=e.buffer;t.slice=void 0;for(var n=sliceBuffer(t,3,8),i=new Uint8Array(n),l=(r=3,0);r<8;r++,l++)expect(e[r]).to.equal(i[l])})),it("should slice correctly with negative start",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=e.buffer;t.slice=void 0;for(var n=sliceBuffer(t,-3),i=new Uint8Array(n),l=(r=e.length-3,0);r<e.length;r++,l++)expect(e[r]).to.equal(i[l])})),it("should slice correctly with negative end",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=e.buffer;t.slice=void 0;for(var n=sliceBuffer(t,0,-3),i=new Uint8Array(n),l=(r=0,0);r<e.length-3;r++,l++)expect(e[r]).to.equal(i[l])})),it("should slice correctly with negative start and end",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=e.buffer;t.slice=void 0;for(var n=sliceBuffer(t,-6,-3),i=new Uint8Array(n),l=(r=e.length-6,0);r<e.length-3;r++,l++)expect(e[r]).to.equal(i[l])})),it("should slice correctly with equal start and end",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=e.buffer;t.slice=void 0;var n=sliceBuffer(t,1,1);expect(n.byteLength).to.equal(0)})),it("should slice correctly when end larger than buffer",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=e.buffer;t.slice=void 0;var n=sliceBuffer(t,0,100),i=new Uint8Array(n);for(r=0;r<e.length;r++)expect(e[r]).to.equal(i[r])})),it("shoud slice correctly when start larger than end",(function(){for(var e=new Uint8Array(10),r=0;r<e.length;r++)e[r]=r;var t=e.buffer;t.slice=void 0;var n=sliceBuffer(t,6,5);expect(n.byteLength).to.equal(0)}))}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/async/README.md b/device_home/node_modules/async/README.md
deleted file mode 100644 (file)
index 6cfb922..0000000
+++ /dev/null
@@ -1,1647 +0,0 @@
-# Async.js
-
-[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async)
-
-
-Async is a utility module which provides straight-forward, powerful functions
-for working with asynchronous JavaScript. Although originally designed for
-use with [Node.js](http://nodejs.org) and installable via `npm install async`,
-it can also be used directly in the browser.
-
-Async is also installable via:
-
-- [bower](http://bower.io/): `bower install async`
-- [component](https://github.com/component/component): `component install
-  caolan/async`
-- [jam](http://jamjs.org/): `jam install async`
-- [spm](http://spmjs.io/): `spm install async`
-
-Async provides around 20 functions that include the usual 'functional'
-suspects (`map`, `reduce`, `filter`, `each`…) as well as some common patterns
-for asynchronous control flow (`parallel`, `series`, `waterfall`…). All these
-functions assume you follow the Node.js convention of providing a single
-callback as the last argument of your `async` function.
-
-
-## Quick Examples
-
-```javascript
-async.map(['file1','file2','file3'], fs.stat, function(err, results){
-    // results is now an array of stats for each file
-});
-
-async.filter(['file1','file2','file3'], fs.exists, function(results){
-    // results now equals an array of the existing files
-});
-
-async.parallel([
-    function(){ ... },
-    function(){ ... }
-], callback);
-
-async.series([
-    function(){ ... },
-    function(){ ... }
-]);
-```
-
-There are many more functions available so take a look at the docs below for a
-full list. This module aims to be comprehensive, so if you feel anything is
-missing please create a GitHub issue for it.
-
-## Common Pitfalls
-
-### Binding a context to an iterator
-
-This section is really about `bind`, not about `async`. If you are wondering how to
-make `async` execute your iterators in a given context, or are confused as to why
-a method of another library isn't working as an iterator, study this example:
-
-```js
-// Here is a simple object with an (unnecessarily roundabout) squaring method
-var AsyncSquaringLibrary = {
-  squareExponent: 2,
-  square: function(number, callback){ 
-    var result = Math.pow(number, this.squareExponent);
-    setTimeout(function(){
-      callback(null, result);
-    }, 200);
-  }
-};
-
-async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){
-  // result is [NaN, NaN, NaN]
-  // This fails because the `this.squareExponent` expression in the square
-  // function is not evaluated in the context of AsyncSquaringLibrary, and is
-  // therefore undefined.
-});
-
-async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){
-  // result is [1, 4, 9]
-  // With the help of bind we can attach a context to the iterator before
-  // passing it to async. Now the square function will be executed in its 
-  // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent`
-  // will be as expected.
-});
-```
-
-## Download
-
-The source is available for download from
-[GitHub](http://github.com/caolan/async).
-Alternatively, you can install using Node Package Manager (`npm`):
-
-    npm install async
-
-__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed
-
-## In the Browser
-
-So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. 
-
-Usage:
-
-```html
-<script type="text/javascript" src="async.js"></script>
-<script type="text/javascript">
-
-    async.map(data, asyncProcess, function(err, results){
-        alert(results);
-    });
-
-</script>
-```
-
-## Documentation
-
-### Collections
-
-* [`each`](#each)
-* [`eachSeries`](#eachSeries)
-* [`eachLimit`](#eachLimit)
-* [`map`](#map)
-* [`mapSeries`](#mapSeries)
-* [`mapLimit`](#mapLimit)
-* [`filter`](#filter)
-* [`filterSeries`](#filterSeries)
-* [`reject`](#reject)
-* [`rejectSeries`](#rejectSeries)
-* [`reduce`](#reduce)
-* [`reduceRight`](#reduceRight)
-* [`detect`](#detect)
-* [`detectSeries`](#detectSeries)
-* [`sortBy`](#sortBy)
-* [`some`](#some)
-* [`every`](#every)
-* [`concat`](#concat)
-* [`concatSeries`](#concatSeries)
-
-### Control Flow
-
-* [`series`](#seriestasks-callback)
-* [`parallel`](#parallel)
-* [`parallelLimit`](#parallellimittasks-limit-callback)
-* [`whilst`](#whilst)
-* [`doWhilst`](#doWhilst)
-* [`until`](#until)
-* [`doUntil`](#doUntil)
-* [`forever`](#forever)
-* [`waterfall`](#waterfall)
-* [`compose`](#compose)
-* [`seq`](#seq)
-* [`applyEach`](#applyEach)
-* [`applyEachSeries`](#applyEachSeries)
-* [`queue`](#queue)
-* [`priorityQueue`](#priorityQueue)
-* [`cargo`](#cargo)
-* [`auto`](#auto)
-* [`retry`](#retry)
-* [`iterator`](#iterator)
-* [`apply`](#apply)
-* [`nextTick`](#nextTick)
-* [`times`](#times)
-* [`timesSeries`](#timesSeries)
-
-### Utils
-
-* [`memoize`](#memoize)
-* [`unmemoize`](#unmemoize)
-* [`log`](#log)
-* [`dir`](#dir)
-* [`noConflict`](#noConflict)
-
-
-## Collections
-
-<a name="forEach" />
-<a name="each" />
-### each(arr, iterator, callback)
-
-Applies the function `iterator` to each item in `arr`, in parallel.
-The `iterator` is called with an item from the list, and a callback for when it
-has finished. If the `iterator` passes an error to its `callback`, the main
-`callback` (for the `each` function) is immediately called with the error.
-
-Note, that since this function applies `iterator` to each item in parallel,
-there is no guarantee that the iterator functions will complete in order.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `iterator(item, callback)` - A function to apply to each item in `arr`.
-  The iterator is passed a `callback(err)` which must be called once it has 
-  completed. If no error has occurred, the `callback` should be run without 
-  arguments or with an explicit `null` argument.
-* `callback(err)` - A callback which is called when all `iterator` functions
-  have finished, or an error occurs.
-
-__Examples__
-
-
-```js
-// assuming openFiles is an array of file names and saveFile is a function
-// to save the modified contents of that file:
-
-async.each(openFiles, saveFile, function(err){
-    // if any of the saves produced an error, err would equal that error
-});
-```
-
-```js
-// assuming openFiles is an array of file names 
-
-async.each(openFiles, function(file, callback) {
-  
-  // Perform operation on file here.
-  console.log('Processing file ' + file);
-  
-  if( file.length > 32 ) {
-    console.log('This file name is too long');
-    callback('File name too long');
-  } else {
-    // Do work to process file here
-    console.log('File processed');
-    callback();
-  }
-}, function(err){
-    // if any of the file processing produced an error, err would equal that error
-    if( err ) {
-      // One of the iterations produced an error.
-      // All processing will now stop.
-      console.log('A file failed to process');
-    } else {
-      console.log('All files have been processed successfully');
-    }
-});
-```
-
----------------------------------------
-
-<a name="forEachSeries" />
-<a name="eachSeries" />
-### eachSeries(arr, iterator, callback)
-
-The same as [`each`](#each), only `iterator` is applied to each item in `arr` in
-series. The next `iterator` is only called once the current one has completed. 
-This means the `iterator` functions will complete in order.
-
-
----------------------------------------
-
-<a name="forEachLimit" />
-<a name="eachLimit" />
-### eachLimit(arr, limit, iterator, callback)
-
-The same as [`each`](#each), only no more than `limit` `iterator`s will be simultaneously 
-running at any time.
-
-Note that the items in `arr` are not processed in batches, so there is no guarantee that 
-the first `limit` `iterator` functions will complete before any others are started.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `limit` - The maximum number of `iterator`s to run at any time.
-* `iterator(item, callback)` - A function to apply to each item in `arr`.
-  The iterator is passed a `callback(err)` which must be called once it has 
-  completed. If no error has occurred, the callback should be run without 
-  arguments or with an explicit `null` argument.
-* `callback(err)` - A callback which is called when all `iterator` functions
-  have finished, or an error occurs.
-
-__Example__
-
-```js
-// Assume documents is an array of JSON objects and requestApi is a
-// function that interacts with a rate-limited REST api.
-
-async.eachLimit(documents, 20, requestApi, function(err){
-    // if any of the saves produced an error, err would equal that error
-});
-```
-
----------------------------------------
-
-<a name="map" />
-### map(arr, iterator, callback)
-
-Produces a new array of values by mapping each value in `arr` through
-the `iterator` function. The `iterator` is called with an item from `arr` and a
-callback for when it has finished processing. Each of these callback takes 2 arguments: 
-an `error`, and the transformed item from `arr`. If `iterator` passes an error to his 
-callback, the main `callback` (for the `map` function) is immediately called with the error.
-
-Note, that since this function applies the `iterator` to each item in parallel,
-there is no guarantee that the `iterator` functions will complete in order. 
-However, the results array will be in the same order as the original `arr`.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `iterator(item, callback)` - A function to apply to each item in `arr`.
-  The iterator is passed a `callback(err, transformed)` which must be called once 
-  it has completed with an error (which can be `null`) and a transformed item.
-* `callback(err, results)` - A callback which is called when all `iterator`
-  functions have finished, or an error occurs. Results is an array of the
-  transformed items from the `arr`.
-
-__Example__
-
-```js
-async.map(['file1','file2','file3'], fs.stat, function(err, results){
-    // results is now an array of stats for each file
-});
-```
-
----------------------------------------
-
-<a name="mapSeries" />
-### mapSeries(arr, iterator, callback)
-
-The same as [`map`](#map), only the `iterator` is applied to each item in `arr` in
-series. The next `iterator` is only called once the current one has completed. 
-The results array will be in the same order as the original.
-
-
----------------------------------------
-
-<a name="mapLimit" />
-### mapLimit(arr, limit, iterator, callback)
-
-The same as [`map`](#map), only no more than `limit` `iterator`s will be simultaneously 
-running at any time.
-
-Note that the items are not processed in batches, so there is no guarantee that 
-the first `limit` `iterator` functions will complete before any others are started.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `limit` - The maximum number of `iterator`s to run at any time.
-* `iterator(item, callback)` - A function to apply to each item in `arr`.
-  The iterator is passed a `callback(err, transformed)` which must be called once 
-  it has completed with an error (which can be `null`) and a transformed item.
-* `callback(err, results)` - A callback which is called when all `iterator`
-  calls have finished, or an error occurs. The result is an array of the
-  transformed items from the original `arr`.
-
-__Example__
-
-```js
-async.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){
-    // results is now an array of stats for each file
-});
-```
-
----------------------------------------
-
-<a name="select" />
-<a name="filter" />
-### filter(arr, iterator, callback)
-
-__Alias:__ `select`
-
-Returns a new array of all the values in `arr` which pass an async truth test.
-_The callback for each `iterator` call only accepts a single argument of `true` or
-`false`; it does not accept an error argument first!_ This is in-line with the
-way node libraries work with truth tests like `fs.exists`. This operation is
-performed in parallel, but the results array will be in the same order as the
-original.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `iterator(item, callback)` - A truth test to apply to each item in `arr`.
-  The `iterator` is passed a `callback(truthValue)`, which must be called with a 
-  boolean argument once it has completed.
-* `callback(results)` - A callback which is called after all the `iterator`
-  functions have finished.
-
-__Example__
-
-```js
-async.filter(['file1','file2','file3'], fs.exists, function(results){
-    // results now equals an array of the existing files
-});
-```
-
----------------------------------------
-
-<a name="selectSeries" />
-<a name="filterSeries" />
-### filterSeries(arr, iterator, callback)
-
-__Alias:__ `selectSeries`
-
-The same as [`filter`](#filter) only the `iterator` is applied to each item in `arr` in
-series. The next `iterator` is only called once the current one has completed. 
-The results array will be in the same order as the original.
-
----------------------------------------
-
-<a name="reject" />
-### reject(arr, iterator, callback)
-
-The opposite of [`filter`](#filter). Removes values that pass an `async` truth test.
-
----------------------------------------
-
-<a name="rejectSeries" />
-### rejectSeries(arr, iterator, callback)
-
-The same as [`reject`](#reject), only the `iterator` is applied to each item in `arr`
-in series.
-
-
----------------------------------------
-
-<a name="reduce" />
-### reduce(arr, memo, iterator, callback)
-
-__Aliases:__ `inject`, `foldl`
-
-Reduces `arr` into a single value using an async `iterator` to return
-each successive step. `memo` is the initial state of the reduction. 
-This function only operates in series. 
-
-For performance reasons, it may make sense to split a call to this function into 
-a parallel map, and then use the normal `Array.prototype.reduce` on the results. 
-This function is for situations where each step in the reduction needs to be async; 
-if you can get the data before reducing it, then it's probably a good idea to do so.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `memo` - The initial state of the reduction.
-* `iterator(memo, item, callback)` - A function applied to each item in the
-  array to produce the next step in the reduction. The `iterator` is passed a
-  `callback(err, reduction)` which accepts an optional error as its first 
-  argument, and the state of the reduction as the second. If an error is 
-  passed to the callback, the reduction is stopped and the main `callback` is 
-  immediately called with the error.
-* `callback(err, result)` - A callback which is called after all the `iterator`
-  functions have finished. Result is the reduced value.
-
-__Example__
-
-```js
-async.reduce([1,2,3], 0, function(memo, item, callback){
-    // pointless async:
-    process.nextTick(function(){
-        callback(null, memo + item)
-    });
-}, function(err, result){
-    // result is now equal to the last value of memo, which is 6
-});
-```
-
----------------------------------------
-
-<a name="reduceRight" />
-### reduceRight(arr, memo, iterator, callback)
-
-__Alias:__ `foldr`
-
-Same as [`reduce`](#reduce), only operates on `arr` in reverse order.
-
-
----------------------------------------
-
-<a name="detect" />
-### detect(arr, iterator, callback)
-
-Returns the first value in `arr` that passes an async truth test. The
-`iterator` is applied in parallel, meaning the first iterator to return `true` will
-fire the detect `callback` with that result. That means the result might not be
-the first item in the original `arr` (in terms of order) that passes the test.
-
-If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries).
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `iterator(item, callback)` - A truth test to apply to each item in `arr`.
-  The iterator is passed a `callback(truthValue)` which must be called with a 
-  boolean argument once it has completed.
-* `callback(result)` - A callback which is called as soon as any iterator returns
-  `true`, or after all the `iterator` functions have finished. Result will be
-  the first item in the array that passes the truth test (iterator) or the
-  value `undefined` if none passed.
-
-__Example__
-
-```js
-async.detect(['file1','file2','file3'], fs.exists, function(result){
-    // result now equals the first file in the list that exists
-});
-```
-
----------------------------------------
-
-<a name="detectSeries" />
-### detectSeries(arr, iterator, callback)
-
-The same as [`detect`](#detect), only the `iterator` is applied to each item in `arr`
-in series. This means the result is always the first in the original `arr` (in
-terms of array order) that passes the truth test.
-
-
----------------------------------------
-
-<a name="sortBy" />
-### sortBy(arr, iterator, callback)
-
-Sorts a list by the results of running each `arr` value through an async `iterator`.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `iterator(item, callback)` - A function to apply to each item in `arr`.
-  The iterator is passed a `callback(err, sortValue)` which must be called once it
-  has completed with an error (which can be `null`) and a value to use as the sort
-  criteria.
-* `callback(err, results)` - A callback which is called after all the `iterator`
-  functions have finished, or an error occurs. Results is the items from
-  the original `arr` sorted by the values returned by the `iterator` calls.
-
-__Example__
-
-```js
-async.sortBy(['file1','file2','file3'], function(file, callback){
-    fs.stat(file, function(err, stats){
-        callback(err, stats.mtime);
-    });
-}, function(err, results){
-    // results is now the original array of files sorted by
-    // modified date
-});
-```
-
-__Sort Order__
-
-By modifying the callback parameter the sorting order can be influenced:
-
-```js
-//ascending order
-async.sortBy([1,9,3,5], function(x, callback){
-    callback(null, x);
-}, function(err,result){
-    //result callback
-} );
-
-//descending order
-async.sortBy([1,9,3,5], function(x, callback){
-    callback(null, x*-1);    //<- x*-1 instead of x, turns the order around
-}, function(err,result){
-    //result callback
-} );
-```
-
----------------------------------------
-
-<a name="some" />
-### some(arr, iterator, callback)
-
-__Alias:__ `any`
-
-Returns `true` if at least one element in the `arr` satisfies an async test.
-_The callback for each iterator call only accepts a single argument of `true` or
-`false`; it does not accept an error argument first!_ This is in-line with the
-way node libraries work with truth tests like `fs.exists`. Once any iterator
-call returns `true`, the main `callback` is immediately called.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `iterator(item, callback)` - A truth test to apply to each item in the array
-  in parallel. The iterator is passed a callback(truthValue) which must be 
-  called with a boolean argument once it has completed.
-* `callback(result)` - A callback which is called as soon as any iterator returns
-  `true`, or after all the iterator functions have finished. Result will be
-  either `true` or `false` depending on the values of the async tests.
-
-__Example__
-
-```js
-async.some(['file1','file2','file3'], fs.exists, function(result){
-    // if result is true then at least one of the files exists
-});
-```
-
----------------------------------------
-
-<a name="every" />
-### every(arr, iterator, callback)
-
-__Alias:__ `all`
-
-Returns `true` if every element in `arr` satisfies an async test.
-_The callback for each `iterator` call only accepts a single argument of `true` or
-`false`; it does not accept an error argument first!_ This is in-line with the
-way node libraries work with truth tests like `fs.exists`.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `iterator(item, callback)` - A truth test to apply to each item in the array
-  in parallel. The iterator is passed a callback(truthValue) which must be 
-  called with a  boolean argument once it has completed.
-* `callback(result)` - A callback which is called after all the `iterator`
-  functions have finished. Result will be either `true` or `false` depending on
-  the values of the async tests.
-
-__Example__
-
-```js
-async.every(['file1','file2','file3'], fs.exists, function(result){
-    // if result is true then every file exists
-});
-```
-
----------------------------------------
-
-<a name="concat" />
-### concat(arr, iterator, callback)
-
-Applies `iterator` to each item in `arr`, concatenating the results. Returns the
-concatenated list. The `iterator`s are called in parallel, and the results are
-concatenated as they return. There is no guarantee that the results array will
-be returned in the original order of `arr` passed to the `iterator` function.
-
-__Arguments__
-
-* `arr` - An array to iterate over.
-* `iterator(item, callback)` - A function to apply to each item in `arr`.
-  The iterator is passed a `callback(err, results)` which must be called once it 
-  has completed with an error (which can be `null`) and an array of results.
-* `callback(err, results)` - A callback which is called after all the `iterator`
-  functions have finished, or an error occurs. Results is an array containing
-  the concatenated results of the `iterator` function.
-
-__Example__
-
-```js
-async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){
-    // files is now a list of filenames that exist in the 3 directories
-});
-```
-
----------------------------------------
-
-<a name="concatSeries" />
-### concatSeries(arr, iterator, callback)
-
-Same as [`concat`](#concat), but executes in series instead of parallel.
-
-
-## Control Flow
-
-<a name="series" />
-### series(tasks, [callback])
-
-Run the functions in the `tasks` array in series, each one running once the previous
-function has completed. If any functions in the series pass an error to its
-callback, no more functions are run, and `callback` is immediately called with the value of the error. 
-Otherwise, `callback` receives an array of results when `tasks` have completed.
-
-It is also possible to use an object instead of an array. Each property will be
-run as a function, and the results will be passed to the final `callback` as an object
-instead of an array. This can be a more readable way of handling results from
-[`series`](#series).
-
-**Note** that while many implementations preserve the order of object properties, the
-[ECMAScript Language Specifcation](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) 
-explicitly states that
-
-> The mechanics and order of enumerating the properties is not specified.
-
-So if you rely on the order in which your series of functions are executed, and want
-this to work on all platforms, consider using an array. 
-
-__Arguments__
-
-* `tasks` - An array or object containing functions to run, each function is passed
-  a `callback(err, result)` it must call on completion with an error `err` (which can
-  be `null`) and an optional `result` value.
-* `callback(err, results)` - An optional callback to run once all the functions
-  have completed. This function gets a results array (or object) containing all 
-  the result arguments passed to the `task` callbacks.
-
-__Example__
-
-```js
-async.series([
-    function(callback){
-        // do some stuff ...
-        callback(null, 'one');
-    },
-    function(callback){
-        // do some more stuff ...
-        callback(null, 'two');
-    }
-],
-// optional callback
-function(err, results){
-    // results is now equal to ['one', 'two']
-});
-
-
-// an example using an object instead of an array
-async.series({
-    one: function(callback){
-        setTimeout(function(){
-            callback(null, 1);
-        }, 200);
-    },
-    two: function(callback){
-        setTimeout(function(){
-            callback(null, 2);
-        }, 100);
-    }
-},
-function(err, results) {
-    // results is now equal to: {one: 1, two: 2}
-});
-```
-
----------------------------------------
-
-<a name="parallel" />
-### parallel(tasks, [callback])
-
-Run the `tasks` array of functions in parallel, without waiting until the previous
-function has completed. If any of the functions pass an error to its
-callback, the main `callback` is immediately called with the value of the error.
-Once the `tasks` have completed, the results are passed to the final `callback` as an
-array.
-
-It is also possible to use an object instead of an array. Each property will be
-run as a function and the results will be passed to the final `callback` as an object
-instead of an array. This can be a more readable way of handling results from
-[`parallel`](#parallel).
-
-
-__Arguments__
-
-* `tasks` - An array or object containing functions to run. Each function is passed 
-  a `callback(err, result)` which it must call on completion with an error `err` 
-  (which can be `null`) and an optional `result` value.
-* `callback(err, results)` - An optional callback to run once all the functions
-  have completed. This function gets a results array (or object) containing all 
-  the result arguments passed to the task callbacks.
-
-__Example__
-
-```js
-async.parallel([
-    function(callback){
-        setTimeout(function(){
-            callback(null, 'one');
-        }, 200);
-    },
-    function(callback){
-        setTimeout(function(){
-            callback(null, 'two');
-        }, 100);
-    }
-],
-// optional callback
-function(err, results){
-    // the results array will equal ['one','two'] even though
-    // the second function had a shorter timeout.
-});
-
-
-// an example using an object instead of an array
-async.parallel({
-    one: function(callback){
-        setTimeout(function(){
-            callback(null, 1);
-        }, 200);
-    },
-    two: function(callback){
-        setTimeout(function(){
-            callback(null, 2);
-        }, 100);
-    }
-},
-function(err, results) {
-    // results is now equals to: {one: 1, two: 2}
-});
-```
-
----------------------------------------
-
-<a name="parallelLimit" />
-### parallelLimit(tasks, limit, [callback])
-
-The same as [`parallel`](#parallel), only `tasks` are executed in parallel 
-with a maximum of `limit` tasks executing at any time.
-
-Note that the `tasks` are not executed in batches, so there is no guarantee that 
-the first `limit` tasks will complete before any others are started.
-
-__Arguments__
-
-* `tasks` - An array or object containing functions to run, each function is passed 
-  a `callback(err, result)` it must call on completion with an error `err` (which can
-  be `null`) and an optional `result` value.
-* `limit` - The maximum number of `tasks` to run at any time.
-* `callback(err, results)` - An optional callback to run once all the functions
-  have completed. This function gets a results array (or object) containing all 
-  the result arguments passed to the `task` callbacks.
-
----------------------------------------
-
-<a name="whilst" />
-### whilst(test, fn, callback)
-
-Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped,
-or an error occurs.
-
-__Arguments__
-
-* `test()` - synchronous truth test to perform before each execution of `fn`.
-* `fn(callback)` - A function which is called each time `test` passes. The function is
-  passed a `callback(err)`, which must be called once it has completed with an 
-  optional `err` argument.
-* `callback(err)` - A callback which is called after the test fails and repeated
-  execution of `fn` has stopped.
-
-__Example__
-
-```js
-var count = 0;
-
-async.whilst(
-    function () { return count < 5; },
-    function (callback) {
-        count++;
-        setTimeout(callback, 1000);
-    },
-    function (err) {
-        // 5 seconds have passed
-    }
-);
-```
-
----------------------------------------
-
-<a name="doWhilst" />
-### doWhilst(fn, test, callback)
-
-The post-check version of [`whilst`](#whilst). To reflect the difference in 
-the order of operations, the arguments `test` and `fn` are switched. 
-
-`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.
-
----------------------------------------
-
-<a name="until" />
-### until(test, fn, callback)
-
-Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped,
-or an error occurs.
-
-The inverse of [`whilst`](#whilst).
-
----------------------------------------
-
-<a name="doUntil" />
-### doUntil(fn, test, callback)
-
-Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`.
-
----------------------------------------
-
-<a name="forever" />
-### forever(fn, errback)
-
-Calls the asynchronous function `fn` with a callback parameter that allows it to
-call itself again, in series, indefinitely.
-
-If an error is passed to the callback then `errback` is called with the
-error, and execution stops, otherwise it will never be called.
-
-```js
-async.forever(
-    function(next) {
-        // next is suitable for passing to things that need a callback(err [, whatever]);
-        // it will result in this function being called again.
-    },
-    function(err) {
-        // if next is called with a value in its first parameter, it will appear
-        // in here as 'err', and execution will stop.
-    }
-);
-```
-
----------------------------------------
-
-<a name="waterfall" />
-### waterfall(tasks, [callback])
-
-Runs the `tasks` array of functions in series, each passing their results to the next in
-the array. However, if any of the `tasks` pass an error to their own callback, the
-next function is not executed, and the main `callback` is immediately called with
-the error.
-
-__Arguments__
-
-* `tasks` - An array of functions to run, each function is passed a 
-  `callback(err, result1, result2, ...)` it must call on completion. The first
-  argument is an error (which can be `null`) and any further arguments will be 
-  passed as arguments in order to the next task.
-* `callback(err, [results])` - An optional callback to run once all the functions
-  have completed. This will be passed the results of the last task's callback.
-
-
-
-__Example__
-
-```js
-async.waterfall([
-    function(callback) {
-        callback(null, 'one', 'two');
-    },
-    function(arg1, arg2, callback) {
-      // arg1 now equals 'one' and arg2 now equals 'two'
-        callback(null, 'three');
-    },
-    function(arg1, callback) {
-        // arg1 now equals 'three'
-        callback(null, 'done');
-    }
-], function (err, result) {
-    // result now equals 'done'    
-});
-```
-
----------------------------------------
-<a name="compose" />
-### compose(fn1, fn2...)
-
-Creates a function which is a composition of the passed asynchronous
-functions. Each function consumes the return value of the function that
-follows. Composing functions `f()`, `g()`, and `h()` would produce the result of
-`f(g(h()))`, only this version uses callbacks to obtain the return values.
-
-Each function is executed with the `this` binding of the composed function.
-
-__Arguments__
-
-* `functions...` - the asynchronous functions to compose
-
-
-__Example__
-
-```js
-function add1(n, callback) {
-    setTimeout(function () {
-        callback(null, n + 1);
-    }, 10);
-}
-
-function mul3(n, callback) {
-    setTimeout(function () {
-        callback(null, n * 3);
-    }, 10);
-}
-
-var add1mul3 = async.compose(mul3, add1);
-
-add1mul3(4, function (err, result) {
-   // result now equals 15
-});
-```
-
----------------------------------------
-<a name="seq" />
-### seq(fn1, fn2...)
-
-Version of the compose function that is more natural to read.
-Each function consumes the return value of the previous function.
-It is the equivalent of [`compose`](#compose) with the arguments reversed.
-
-Each function is executed with the `this` binding of the composed function.
-
-__Arguments__
-
-* functions... - the asynchronous functions to compose
-
-
-__Example__
-
-```js
-// Requires lodash (or underscore), express3 and dresende's orm2.
-// Part of an app, that fetches cats of the logged user.
-// This example uses `seq` function to avoid overnesting and error 
-// handling clutter.
-app.get('/cats', function(request, response) {
-  var User = request.models.User;
-  async.seq(
-    _.bind(User.get, User),  // 'User.get' has signature (id, callback(err, data))
-    function(user, fn) {
-      user.getCats(fn);      // 'getCats' has signature (callback(err, data))
-    }
-  )(req.session.user_id, function (err, cats) {
-    if (err) {
-      console.error(err);
-      response.json({ status: 'error', message: err.message });
-    } else {
-      response.json({ status: 'ok', message: 'Cats found', data: cats });
-    }
-  });
-});
-```
-
----------------------------------------
-<a name="applyEach" />
-### applyEach(fns, args..., callback)
-
-Applies the provided arguments to each function in the array, calling 
-`callback` after all functions have completed. If you only provide the first
-argument, then it will return a function which lets you pass in the
-arguments as if it were a single function call.
-
-__Arguments__
-
-* `fns` - the asynchronous functions to all call with the same arguments
-* `args...` - any number of separate arguments to pass to the function
-* `callback` - the final argument should be the callback, called when all
-  functions have completed processing
-
-
-__Example__
-
-```js
-async.applyEach([enableSearch, updateSchema], 'bucket', callback);
-
-// partial application example:
-async.each(
-    buckets,
-    async.applyEach([enableSearch, updateSchema]),
-    callback
-);
-```
-
----------------------------------------
-
-<a name="applyEachSeries" />
-### applyEachSeries(arr, iterator, callback)
-
-The same as [`applyEach`](#applyEach) only the functions are applied in series.
-
----------------------------------------
-
-<a name="queue" />
-### queue(worker, concurrency)
-
-Creates a `queue` object with the specified `concurrency`. Tasks added to the
-`queue` are processed in parallel (up to the `concurrency` limit). If all
-`worker`s are in progress, the task is queued until one becomes available. 
-Once a `worker` completes a `task`, that `task`'s callback is called.
-
-__Arguments__
-
-* `worker(task, callback)` - An asynchronous function for processing a queued
-  task, which must call its `callback(err)` argument when finished, with an 
-  optional `error` as an argument.
-* `concurrency` - An `integer` for determining how many `worker` functions should be
-  run in parallel.
-
-__Queue objects__
-
-The `queue` object returned by this function has the following properties and
-methods:
-
-* `length()` - a function returning the number of items waiting to be processed.
-* `started` - a function returning whether or not any items have been pushed and processed by the queue
-* `running()` - a function returning the number of items currently being processed.
-* `idle()` - a function returning false if there are items waiting or being processed, or true if not.
-* `concurrency` - an integer for determining how many `worker` functions should be
-  run in parallel. This property can be changed after a `queue` is created to
-  alter the concurrency on-the-fly.
-* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once 
-  the `worker` has finished processing the task. Instead of a single task, a `tasks` array
-  can be submitted. The respective callback is used for every task in the list.
-* `unshift(task, [callback])` - add a new task to the front of the `queue`.
-* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, 
-   and further tasks will be queued.
-* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`.
-* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`.
-* `paused` - a boolean for determining whether the queue is in a paused state
-* `pause()` - a function that pauses the processing of tasks until `resume()` is called.
-* `resume()` - a function that resumes the processing of queued tasks when the queue is paused.
-* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle.
-
-__Example__
-
-```js
-// create a queue object with concurrency 2
-
-var q = async.queue(function (task, callback) {
-    console.log('hello ' + task.name);
-    callback();
-}, 2);
-
-
-// assign a callback
-q.drain = function() {
-    console.log('all items have been processed');
-}
-
-// add some items to the queue
-
-q.push({name: 'foo'}, function (err) {
-    console.log('finished processing foo');
-});
-q.push({name: 'bar'}, function (err) {
-    console.log('finished processing bar');
-});
-
-// add some items to the queue (batch-wise)
-
-q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {
-    console.log('finished processing item');
-});
-
-// add some items to the front of the queue
-
-q.unshift({name: 'bar'}, function (err) {
-    console.log('finished processing bar');
-});
-```
-
-
----------------------------------------
-
-<a name="priorityQueue" />
-### priorityQueue(worker, concurrency)
-
-The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects:
-
-* `push(task, priority, [callback])` - `priority` should be a number. If an array of
-  `tasks` is given, all tasks will be assigned the same priority.
-* The `unshift` method was removed.
-
----------------------------------------
-
-<a name="cargo" />
-### cargo(worker, [payload])
-
-Creates a `cargo` object with the specified payload. Tasks added to the
-cargo will be processed altogether (up to the `payload` limit). If the
-`worker` is in progress, the task is queued until it becomes available. Once
-the `worker` has completed some tasks, each callback of those tasks is called.
-Check out [this animation](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) for how `cargo` and `queue` work.
-
-While [queue](#queue) passes only one task to one of a group of workers
-at a time, cargo passes an array of tasks to a single worker, repeating
-when the worker is finished.
-
-__Arguments__
-
-* `worker(tasks, callback)` - An asynchronous function for processing an array of
-  queued tasks, which must call its `callback(err)` argument when finished, with 
-  an optional `err` argument.
-* `payload` - An optional `integer` for determining how many tasks should be
-  processed per round; if omitted, the default is unlimited.
-
-__Cargo objects__
-
-The `cargo` object returned by this function has the following properties and
-methods:
-
-* `length()` - A function returning the number of items waiting to be processed.
-* `payload` - An `integer` for determining how many tasks should be
-  process per round. This property can be changed after a `cargo` is created to
-  alter the payload on-the-fly.
-* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called
-  once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` 
-  can be submitted. The respective callback is used for every task in the list.
-* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued.
-* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`.
-* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`.
-
-__Example__
-
-```js
-// create a cargo object with payload 2
-
-var cargo = async.cargo(function (tasks, callback) {
-    for(var i=0; i<tasks.length; i++){
-      console.log('hello ' + tasks[i].name);
-    }
-    callback();
-}, 2);
-
-
-// add some items
-
-cargo.push({name: 'foo'}, function (err) {
-    console.log('finished processing foo');
-});
-cargo.push({name: 'bar'}, function (err) {
-    console.log('finished processing bar');
-});
-cargo.push({name: 'baz'}, function (err) {
-    console.log('finished processing baz');
-});
-```
-
----------------------------------------
-
-<a name="auto" />
-### auto(tasks, [callback])
-
-Determines the best order for running the functions in `tasks`, based on their 
-requirements. Each function can optionally depend on other functions being completed 
-first, and each function is run as soon as its requirements are satisfied. 
-
-If any of the functions pass an error to their callback, it will not 
-complete (so any other functions depending on it will not run), and the main 
-`callback` is immediately called with the error. Functions also receive an 
-object containing the results of functions which have completed so far.
-
-Note, all functions are called with a `results` object as a second argument, 
-so it is unsafe to pass functions in the `tasks` object which cannot handle the
-extra argument. 
-
-For example, this snippet of code:
-
-```js
-async.auto({
-  readData: async.apply(fs.readFile, 'data.txt', 'utf-8')
-}, callback);
-```
-
-will have the effect of calling `readFile` with the results object as the last
-argument, which will fail:
-
-```js
-fs.readFile('data.txt', 'utf-8', cb, {});
-```
-
-Instead, wrap the call to `readFile` in a function which does not forward the 
-`results` object:
-
-```js
-async.auto({
-  readData: function(cb, results){
-    fs.readFile('data.txt', 'utf-8', cb);
-  }
-}, callback);
-```
-
-__Arguments__
-
-* `tasks` - An object. Each of its properties is either a function or an array of
-  requirements, with the function itself the last item in the array. The object's key
-  of a property serves as the name of the task defined by that property,
-  i.e. can be used when specifying requirements for other tasks.
-  The function receives two arguments: (1) a `callback(err, result)` which must be 
-  called when finished, passing an `error` (which can be `null`) and the result of 
-  the function's execution, and (2) a `results` object, containing the results of
-  the previously executed functions.
-* `callback(err, results)` - An optional callback which is called when all the
-  tasks have been completed. It receives the `err` argument if any `tasks` 
-  pass an error to their callback. Results are always returned; however, if 
-  an error occurs, no further `tasks` will be performed, and the results
-  object will only contain partial results.
-
-
-__Example__
-
-```js
-async.auto({
-    get_data: function(callback){
-        console.log('in get_data');
-        // async code to get some data
-        callback(null, 'data', 'converted to array');
-    },
-    make_folder: function(callback){
-        console.log('in make_folder');
-        // async code to create a directory to store a file in
-        // this is run at the same time as getting the data
-        callback(null, 'folder');
-    },
-    write_file: ['get_data', 'make_folder', function(callback, results){
-        console.log('in write_file', JSON.stringify(results));
-        // once there is some data and the directory exists,
-        // write the data to a file in the directory
-        callback(null, 'filename');
-    }],
-    email_link: ['write_file', function(callback, results){
-        console.log('in email_link', JSON.stringify(results));
-        // once the file is written let's email a link to it...
-        // results.write_file contains the filename returned by write_file.
-        callback(null, {'file':results.write_file, 'email':'user@example.com'});
-    }]
-}, function(err, results) {
-    console.log('err = ', err);
-    console.log('results = ', results);
-});
-```
-
-This is a fairly trivial example, but to do this using the basic parallel and
-series functions would look like this:
-
-```js
-async.parallel([
-    function(callback){
-        console.log('in get_data');
-        // async code to get some data
-        callback(null, 'data', 'converted to array');
-    },
-    function(callback){
-        console.log('in make_folder');
-        // async code to create a directory to store a file in
-        // this is run at the same time as getting the data
-        callback(null, 'folder');
-    }
-],
-function(err, results){
-    async.series([
-        function(callback){
-            console.log('in write_file', JSON.stringify(results));
-            // once there is some data and the directory exists,
-            // write the data to a file in the directory
-            results.push('filename');
-            callback(null);
-        },
-        function(callback){
-            console.log('in email_link', JSON.stringify(results));
-            // once the file is written let's email a link to it...
-            callback(null, {'file':results.pop(), 'email':'user@example.com'});
-        }
-    ]);
-});
-```
-
-For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding
-new tasks much easier (and the code more readable).
-
-
----------------------------------------
-
-<a name="retry" />
-### retry([times = 5], task, [callback])
-
-Attempts to get a successful response from `task` no more than `times` times before
-returning an error. If the task is successful, the `callback` will be passed the result
-of the successful task. If all attempts fail, the callback will be passed the error and
-result (if any) of the final attempt.
-
-__Arguments__
-
-* `times` - An integer indicating how many times to attempt the `task` before giving up. Defaults to 5.
-* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)`
-  which must be called when finished, passing `err` (which can be `null`) and the `result` of 
-  the function's execution, and (2) a `results` object, containing the results of
-  the previously executed functions (if nested inside another control flow).
-* `callback(err, results)` - An optional callback which is called when the
-  task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`.
-
-The [`retry`](#retry) function can be used as a stand-alone control flow by passing a
-callback, as shown below:
-
-```js
-async.retry(3, apiMethod, function(err, result) {
-    // do something with the result
-});
-```
-
-It can also be embeded within other control flow functions to retry individual methods
-that are not as reliable, like this:
-
-```js
-async.auto({
-    users: api.getUsers.bind(api),
-    payments: async.retry(3, api.getPayments.bind(api))
-}, function(err, results) {
-  // do something with the results
-});
-```
-
-
----------------------------------------
-
-<a name="iterator" />
-### iterator(tasks)
-
-Creates an iterator function which calls the next function in the `tasks` array,
-returning a continuation to call the next one after that. It's also possible to
-“peek” at the next iterator with `iterator.next()`.
-
-This function is used internally by the `async` module, but can be useful when
-you want to manually control the flow of functions in series.
-
-__Arguments__
-
-* `tasks` - An array of functions to run.
-
-__Example__
-
-```js
-var iterator = async.iterator([
-    function(){ sys.p('one'); },
-    function(){ sys.p('two'); },
-    function(){ sys.p('three'); }
-]);
-
-node> var iterator2 = iterator();
-'one'
-node> var iterator3 = iterator2();
-'two'
-node> iterator3();
-'three'
-node> var nextfn = iterator2.next();
-node> nextfn();
-'three'
-```
-
----------------------------------------
-
-<a name="apply" />
-### apply(function, arguments..)
-
-Creates a continuation function with some arguments already applied. 
-
-Useful as a shorthand when combined with other control flow functions. Any arguments
-passed to the returned function are added to the arguments originally passed
-to apply.
-
-__Arguments__
-
-* `function` - The function you want to eventually apply all arguments to.
-* `arguments...` - Any number of arguments to automatically apply when the
-  continuation is called.
-
-__Example__
-
-```js
-// using apply
-
-async.parallel([
-    async.apply(fs.writeFile, 'testfile1', 'test1'),
-    async.apply(fs.writeFile, 'testfile2', 'test2'),
-]);
-
-
-// the same process without using apply
-
-async.parallel([
-    function(callback){
-        fs.writeFile('testfile1', 'test1', callback);
-    },
-    function(callback){
-        fs.writeFile('testfile2', 'test2', callback);
-    }
-]);
-```
-
-It's possible to pass any number of additional arguments when calling the
-continuation:
-
-```js
-node> var fn = async.apply(sys.puts, 'one');
-node> fn('two', 'three');
-one
-two
-three
-```
-
----------------------------------------
-
-<a name="nextTick" />
-### nextTick(callback), setImmediate(callback)
-
-Calls `callback` on a later loop around the event loop. In Node.js this just
-calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)`
-if available, otherwise `setTimeout(callback, 0)`, which means other higher priority
-events may precede the execution of `callback`.
-
-This is used internally for browser-compatibility purposes.
-
-__Arguments__
-
-* `callback` - The function to call on a later loop around the event loop.
-
-__Example__
-
-```js
-var call_order = [];
-async.nextTick(function(){
-    call_order.push('two');
-    // call_order now equals ['one','two']
-});
-call_order.push('one')
-```
-
-<a name="times" />
-### times(n, callback)
-
-Calls the `callback` function `n` times, and accumulates results in the same manner
-you would use with [`map`](#map).
-
-__Arguments__
-
-* `n` - The number of times to run the function.
-* `callback` - The function to call `n` times.
-
-__Example__
-
-```js
-// Pretend this is some complicated async factory
-var createUser = function(id, callback) {
-  callback(null, {
-    id: 'user' + id
-  })
-}
-// generate 5 users
-async.times(5, function(n, next){
-    createUser(n, function(err, user) {
-      next(err, user)
-    })
-}, function(err, users) {
-  // we should now have 5 users
-});
-```
-
-<a name="timesSeries" />
-### timesSeries(n, callback)
-
-The same as [`times`](#times), only the iterator is applied to each item in `arr` in
-series. The next `iterator` is only called once the current one has completed. 
-The results array will be in the same order as the original.
-
-
-## Utils
-
-<a name="memoize" />
-### memoize(fn, [hasher])
-
-Caches the results of an `async` function. When creating a hash to store function
-results against, the callback is omitted from the hash and an optional hash
-function can be used.
-
-The cache of results is exposed as the `memo` property of the function returned
-by `memoize`.
-
-__Arguments__
-
-* `fn` - The function to proxy and cache results from.
-* `hasher` - Tn optional function for generating a custom hash for storing
-  results. It has all the arguments applied to it apart from the callback, and
-  must be synchronous.
-
-__Example__
-
-```js
-var slow_fn = function (name, callback) {
-    // do something
-    callback(null, result);
-};
-var fn = async.memoize(slow_fn);
-
-// fn can now be used as if it were slow_fn
-fn('some name', function () {
-    // callback
-});
-```
-
-<a name="unmemoize" />
-### unmemoize(fn)
-
-Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized
-form. Handy for testing.
-
-__Arguments__
-
-* `fn` - the memoized function
-
-<a name="log" />
-### log(function, arguments)
-
-Logs the result of an `async` function to the `console`. Only works in Node.js or
-in browsers that support `console.log` and `console.error` (such as FF and Chrome).
-If multiple arguments are returned from the async function, `console.log` is
-called on each argument in order.
-
-__Arguments__
-
-* `function` - The function you want to eventually apply all arguments to.
-* `arguments...` - Any number of arguments to apply to the function.
-
-__Example__
-
-```js
-var hello = function(name, callback){
-    setTimeout(function(){
-        callback(null, 'hello ' + name);
-    }, 1000);
-};
-```
-```js
-node> async.log(hello, 'world');
-'hello world'
-```
-
----------------------------------------
-
-<a name="dir" />
-### dir(function, arguments)
-
-Logs the result of an `async` function to the `console` using `console.dir` to
-display the properties of the resulting object. Only works in Node.js or
-in browsers that support `console.dir` and `console.error` (such as FF and Chrome).
-If multiple arguments are returned from the async function, `console.dir` is
-called on each argument in order.
-
-__Arguments__
-
-* `function` - The function you want to eventually apply all arguments to.
-* `arguments...` - Any number of arguments to apply to the function.
-
-__Example__
-
-```js
-var hello = function(name, callback){
-    setTimeout(function(){
-        callback(null, {hello: name});
-    }, 1000);
-};
-```
-```js
-node> async.dir(hello, 'world');
-{hello: 'world'}
-```
-
----------------------------------------
-
-<a name="noConflict" />
-### noConflict()
-
-Changes the value of `async` back to its original value, returning a reference to the
-`async` object.
diff --git a/device_home/node_modules/backo2/History.md b/device_home/node_modules/backo2/History.md
deleted file mode 100644 (file)
index 8eb28b8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-1.0.1 / 2014-02-17
-==================
-
- * go away decimal point
- * history
-
-1.0.0 / 2014-02-17
-==================
-
- * add jitter option
- * Initial commit
diff --git a/device_home/node_modules/backo2/Readme.md b/device_home/node_modules/backo2/Readme.md
deleted file mode 100644 (file)
index 0df2a39..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# backo
-
-  Simple exponential backoff because the others seem to have weird abstractions.
-
-## Installation
-
-```
-$ npm install backo
-```
-
-## Options
-
- - `min` initial timeout in milliseconds [100]
- - `max` max timeout [10000]
- - `jitter` [0]
- - `factor` [2]
-
-## Example
-
-```js
-var Backoff = require('backo');
-var backoff = new Backoff({ min: 100, max: 20000 });
-
-setTimeout(function(){
-  something.reconnect();
-}, backoff.duration());
-
-// later when something works
-backoff.reset()
-```
-
-# License
-
-  MIT
diff --git a/device_home/node_modules/backo2/test/index.js b/device_home/node_modules/backo2/test/index.js
deleted file mode 100644 (file)
index d9ef3b1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var Backoff=require(".."),assert=require("assert");describe(".duration()",(function(){it("should increase the backoff",(function(){var r=new Backoff;assert(100==r.duration()),assert(200==r.duration()),assert(400==r.duration()),assert(800==r.duration()),r.reset(),assert(100==r.duration()),assert(200==r.duration())}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/balanced-match/LICENSE.md b/device_home/node_modules/balanced-match/LICENSE.md
deleted file mode 100644 (file)
index 2cdc8e4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(MIT)
-
-Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/device_home/node_modules/balanced-match/README.md b/device_home/node_modules/balanced-match/README.md
deleted file mode 100644 (file)
index 08e918c..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-# balanced-match
-
-Match balanced string pairs, like `{` and `}` or `<b>` and `</b>`. Supports regular expressions as well!
-
-[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)
-[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)
-
-[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)
-
-## Example
-
-Get the first matching pair of braces:
-
-```js
-var balanced = require('balanced-match');
-
-console.log(balanced('{', '}', 'pre{in{nested}}post'));
-console.log(balanced('{', '}', 'pre{first}between{second}post'));
-console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre  {   in{nest}   }  post'));
-```
-
-The matches are:
-
-```bash
-$ node example.js
-{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
-{ start: 3,
-  end: 9,
-  pre: 'pre',
-  body: 'first',
-  post: 'between{second}post' }
-{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }
-```
-
-## API
-
-### var m = balanced(a, b, str)
-
-For the first non-nested matching pair of `a` and `b` in `str`, return an
-object with those keys:
-
-* **start** the index of the first match of `a`
-* **end** the index of the matching `b`
-* **pre** the preamble, `a` and `b` not included
-* **body** the match, `a` and `b` not included
-* **post** the postscript, `a` and `b` not included
-
-If there's no match, `undefined` will be returned.
-
-If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.
-
-### var r = balanced.range(a, b, str)
-
-For the first non-nested matching pair of `a` and `b` in `str`, return an
-array with indexes: `[ <a index>, <b index> ]`.
-
-If there's no match, `undefined` will be returned.
-
-If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.
-
-## Installation
-
-With [npm](https://npmjs.org) do:
-
-```bash
-npm install balanced-match
-```
-
-## License
-
-(MIT)
-
-Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/device_home/node_modules/base64-arraybuffer/README.md b/device_home/node_modules/base64-arraybuffer/README.md
deleted file mode 100644 (file)
index 50009e4..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# base64-arraybuffer
-
-[![Build Status](https://travis-ci.org/niklasvh/base64-arraybuffer.png)](https://travis-ci.org/niklasvh/base64-arraybuffer)
-[![NPM Downloads](https://img.shields.io/npm/dm/base64-arraybuffer.svg)](https://www.npmjs.org/package/base64-arraybuffer)
-[![NPM Version](https://img.shields.io/npm/v/base64-arraybuffer.svg)](https://www.npmjs.org/package/base64-arraybuffer)
-
-Encode/decode base64 data into ArrayBuffers
-
-## Getting Started
-Install the module with: `npm install base64-arraybuffer`
-
-## API
-The library encodes and decodes base64 to and from ArrayBuffers
-
- - __encode(buffer)__ - Encodes `ArrayBuffer` into base64 string
- - __decode(str)__ - Decodes base64 string to `ArrayBuffer`
-
-## License
-Copyright (c) 2012 Niklas von Hertzen
-Licensed under the MIT license.
diff --git a/device_home/node_modules/base64-js/README.md b/device_home/node_modules/base64-js/README.md
deleted file mode 100644 (file)
index b42a48f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-base64-js
-=========
-
-`base64-js` does basic base64 encoding/decoding in pure JS.
-
-[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js)
-
-Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data.
-
-Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does.
-
-## install
-
-With [npm](https://npmjs.org) do:
-
-`npm install base64-js` and `var base64js = require('base64-js')`
-
-For use in web browsers do:
-
-`<script src="base64js.min.js"></script>`
-
-[Get supported base64-js with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-base64-js?utm_source=npm-base64-js&utm_medium=referral&utm_campaign=readme)
-
-## methods
-
-`base64js` has three exposed functions, `byteLength`, `toByteArray` and `fromByteArray`, which both take a single argument.
-
-* `byteLength` - Takes a base64 string and returns length of byte array
-* `toByteArray` - Takes a base64 string and returns a byte array
-* `fromByteArray` - Takes a byte array and returns a base64 string
-
-## license
-
-MIT
diff --git a/device_home/node_modules/blob/README.md b/device_home/node_modules/blob/README.md
deleted file mode 100644 (file)
index 4073ce9..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# Blob\r
-\r
-A cross-browser `Blob` that falls back to `BlobBuilder` when appropriate.\r
-If neither is available, it exports `undefined`.\r
-\r
-## Installation\r
-\r
-``` bash\r
-$ npm install blob\r
-```\r
-\r
-## Example\r
-\r
-``` js\r
-var Blob = require('blob');\r
-var b = new Blob(['hi', 'constructing', 'a', 'blob']);\r
-```\r
-\r
-## License\r
-\r
-MIT\r
diff --git a/device_home/node_modules/blob/test/index.js b/device_home/node_modules/blob/test/index.js
deleted file mode 100644 (file)
index a922ae6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var Blob=require("../"),expect=require("expect.js");describe("blob",(function(){Blob?(it("should encode a proper sized blob when given a string argument",(function(){var e=new Blob(["hi"]);expect(e.size).to.be(2)})),it("should encode a blob with proper size when given two strings as arguments",(function(){var e=new Blob(["hi","hello"]);expect(e.size).to.be(7)})),it("should encode arraybuffers with right content",(function(e){for(var o=new Uint8Array(5),t=0;t<5;t++)o[t]=t;var r=new Blob([o.buffer]),n=new FileReader;n.onload=function(){for(var o=new Uint8Array(this.result),t=0;t<5;t++)expect(o[t]).to.be(t);e()},n.readAsArrayBuffer(r)})),it("should encode typed arrays with right content",(function(e){for(var o=new Uint8Array(5),t=0;t<5;t++)o[t]=t;var r=new Blob([o]),n=new FileReader;n.onload=function(){for(var o=new Uint8Array(this.result),t=0;t<5;t++)expect(o[t]).to.be(t);e()},n.readAsArrayBuffer(r)})),it("should encode sliced typed arrays with right content",(function(e){for(var o=new Uint8Array(5),t=0;t<5;t++)o[t]=t;var r=new Blob([o.subarray(2)]),n=new FileReader;n.onload=function(){for(var o=new Uint8Array(this.result),t=0;t<3;t++)expect(o[t]).to.be(t+2);e()},n.readAsArrayBuffer(r)})),it("should encode with blobs",(function(e){for(var o=new Uint8Array(5),t=0;t<5;t++)o[t]=t;var r=new Blob([new Blob([o.buffer])]),n=new FileReader;n.onload=function(){for(var o=new Uint8Array(this.result),t=0;t<5;t++)expect(o[t]).to.be(t);e()},n.readAsArrayBuffer(r)})),it("should enode mixed contents to right size",(function(){for(var e=new Uint8Array(5),o=0;o<5;o++)e[o]=o;var t=new Blob([e.buffer,"hello"]);expect(t.size).to.be(10)})),it("should accept mime type",(function(){var e=new Blob(["hi","hello"],{type:"text/html"});expect(e.type).to.be("text/html")})),it("should be an instance of constructor",(function(){var e=new Blob(["hi"]);expect(e).to.be.a(Blob),expect(e).to.be.a(global.Blob)}))):it("should not have a blob or a blob builder in the global namespace, or blob should not be a constructor function if the module exports false",(function(){try{var e=new Uint8Array(5).buffer;global.Blob([e]),expect().fail("Blob shouldn't be constructable")}catch(e){}var o=global.BlobBuilder||global.WebKitBlobBuilder||global.MSBlobBuilder||global.MozBlobBuilder;expect(o).to.be(void 0)}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/body-parser/HISTORY.md b/device_home/node_modules/body-parser/HISTORY.md
deleted file mode 100644 (file)
index a1d3fbf..0000000
+++ /dev/null
@@ -1,609 +0,0 @@
-1.19.0 / 2019-04-25
-===================
-
-  * deps: bytes@3.1.0
-    - Add petabyte (`pb`) support
-  * deps: http-errors@1.7.2
-    - Set constructor name when possible
-    - deps: setprototypeof@1.1.1
-    - deps: statuses@'>= 1.5.0 < 2'
-  * deps: iconv-lite@0.4.24
-    - Added encoding MIK
-  * deps: qs@6.7.0
-    - Fix parsing array brackets after index
-  * deps: raw-body@2.4.0
-    - deps: bytes@3.1.0
-    - deps: http-errors@1.7.2
-    - deps: iconv-lite@0.4.24
-  * deps: type-is@~1.6.17
-    - deps: mime-types@~2.1.24
-    - perf: prevent internal `throw` on invalid type
-
-1.18.3 / 2018-05-14
-===================
-
-  * Fix stack trace for strict json parse error
-  * deps: depd@~1.1.2
-    - perf: remove argument reassignment
-  * deps: http-errors@~1.6.3
-    - deps: depd@~1.1.2
-    - deps: setprototypeof@1.1.0
-    - deps: statuses@'>= 1.3.1 < 2'
-  * deps: iconv-lite@0.4.23
-    - Fix loading encoding with year appended
-    - Fix deprecation warnings on Node.js 10+
-  * deps: qs@6.5.2
-  * deps: raw-body@2.3.3
-    - deps: http-errors@1.6.3
-    - deps: iconv-lite@0.4.23
-  * deps: type-is@~1.6.16
-    - deps: mime-types@~2.1.18
-
-1.18.2 / 2017-09-22
-===================
-
-  * deps: debug@2.6.9
-  * perf: remove argument reassignment
-
-1.18.1 / 2017-09-12
-===================
-
-  * deps: content-type@~1.0.4
-    - perf: remove argument reassignment
-    - perf: skip parameter parsing when no parameters
-  * deps: iconv-lite@0.4.19
-    - Fix ISO-8859-1 regression
-    - Update Windows-1255
-  * deps: qs@6.5.1
-    - Fix parsing & compacting very deep objects
-  * deps: raw-body@2.3.2
-    - deps: iconv-lite@0.4.19
-
-1.18.0 / 2017-09-08
-===================
-
-  * Fix JSON strict violation error to match native parse error
-  * Include the `body` property on verify errors
-  * Include the `type` property on all generated errors
-  * Use `http-errors` to set status code on errors
-  * deps: bytes@3.0.0
-  * deps: debug@2.6.8
-  * deps: depd@~1.1.1
-    - Remove unnecessary `Buffer` loading
-  * deps: http-errors@~1.6.2
-    - deps: depd@1.1.1
-  * deps: iconv-lite@0.4.18
-    - Add support for React Native
-    - Add a warning if not loaded as utf-8
-    - Fix CESU-8 decoding in Node.js 8
-    - Improve speed of ISO-8859-1 encoding
-  * deps: qs@6.5.0
-  * deps: raw-body@2.3.1
-    - Use `http-errors` for standard emitted errors
-    - deps: bytes@3.0.0
-    - deps: iconv-lite@0.4.18
-    - perf: skip buffer decoding on overage chunk
-  * perf: prevent internal `throw` when missing charset
-
-1.17.2 / 2017-05-17
-===================
-
-  * deps: debug@2.6.7
-    - Fix `DEBUG_MAX_ARRAY_LENGTH`
-    - deps: ms@2.0.0
-  * deps: type-is@~1.6.15
-    - deps: mime-types@~2.1.15
-
-1.17.1 / 2017-03-06
-===================
-
-  * deps: qs@6.4.0
-    - Fix regression parsing keys starting with `[`
-
-1.17.0 / 2017-03-01
-===================
-
-  * deps: http-errors@~1.6.1
-    - Make `message` property enumerable for `HttpError`s
-    - deps: setprototypeof@1.0.3
-  * deps: qs@6.3.1
-    - Fix compacting nested arrays
-
-1.16.1 / 2017-02-10
-===================
-
-  * deps: debug@2.6.1
-    - Fix deprecation messages in WebStorm and other editors
-    - Undeprecate `DEBUG_FD` set to `1` or `2`
-
-1.16.0 / 2017-01-17
-===================
-
-  * deps: debug@2.6.0
-    - Allow colors in workers
-    - Deprecated `DEBUG_FD` environment variable
-    - Fix error when running under React Native
-    - Use same color for same namespace
-    - deps: ms@0.7.2
-  * deps: http-errors@~1.5.1
-    - deps: inherits@2.0.3
-    - deps: setprototypeof@1.0.2
-    - deps: statuses@'>= 1.3.1 < 2'
-  * deps: iconv-lite@0.4.15
-    - Added encoding MS-31J
-    - Added encoding MS-932
-    - Added encoding MS-936
-    - Added encoding MS-949
-    - Added encoding MS-950
-    - Fix GBK/GB18030 handling of Euro character
-  * deps: qs@6.2.1
-    - Fix array parsing from skipping empty values
-  * deps: raw-body@~2.2.0
-    - deps: iconv-lite@0.4.15
-  * deps: type-is@~1.6.14
-    - deps: mime-types@~2.1.13
-
-1.15.2 / 2016-06-19
-===================
-
-  * deps: bytes@2.4.0
-  * deps: content-type@~1.0.2
-    - perf: enable strict mode
-  * deps: http-errors@~1.5.0
-    - Use `setprototypeof` module to replace `__proto__` setting
-    - deps: statuses@'>= 1.3.0 < 2'
-    - perf: enable strict mode
-  * deps: qs@6.2.0
-  * deps: raw-body@~2.1.7
-    - deps: bytes@2.4.0
-    - perf: remove double-cleanup on happy path
-  * deps: type-is@~1.6.13
-    - deps: mime-types@~2.1.11
-
-1.15.1 / 2016-05-05
-===================
-
-  * deps: bytes@2.3.0
-    - Drop partial bytes on all parsed units
-    - Fix parsing byte string that looks like hex
-  * deps: raw-body@~2.1.6
-    - deps: bytes@2.3.0
-  * deps: type-is@~1.6.12
-    - deps: mime-types@~2.1.10
-
-1.15.0 / 2016-02-10
-===================
-
-  * deps: http-errors@~1.4.0
-    - Add `HttpError` export, for `err instanceof createError.HttpError`
-    - deps: inherits@2.0.1
-    - deps: statuses@'>= 1.2.1 < 2'
-  * deps: qs@6.1.0
-  * deps: type-is@~1.6.11
-    - deps: mime-types@~2.1.9
-
-1.14.2 / 2015-12-16
-===================
-
-  * deps: bytes@2.2.0
-  * deps: iconv-lite@0.4.13
-  * deps: qs@5.2.0
-  * deps: raw-body@~2.1.5
-    - deps: bytes@2.2.0
-    - deps: iconv-lite@0.4.13
-  * deps: type-is@~1.6.10
-    - deps: mime-types@~2.1.8
-
-1.14.1 / 2015-09-27
-===================
-
-  * Fix issue where invalid charset results in 400 when `verify` used
-  * deps: iconv-lite@0.4.12
-    - Fix CESU-8 decoding in Node.js 4.x
-  * deps: raw-body@~2.1.4
-    - Fix masking critical errors from `iconv-lite`
-    - deps: iconv-lite@0.4.12
-  * deps: type-is@~1.6.9
-    - deps: mime-types@~2.1.7
-
-1.14.0 / 2015-09-16
-===================
-
-  * Fix JSON strict parse error to match syntax errors
-  * Provide static `require` analysis in `urlencoded` parser
-  * deps: depd@~1.1.0
-    - Support web browser loading
-  * deps: qs@5.1.0
-  * deps: raw-body@~2.1.3
-    - Fix sync callback when attaching data listener causes sync read
-  * deps: type-is@~1.6.8
-    - Fix type error when given invalid type to match against
-    - deps: mime-types@~2.1.6
-
-1.13.3 / 2015-07-31
-===================
-
-  * deps: type-is@~1.6.6
-    - deps: mime-types@~2.1.4
-
-1.13.2 / 2015-07-05
-===================
-
-  * deps: iconv-lite@0.4.11
-  * deps: qs@4.0.0
-    - Fix dropping parameters like `hasOwnProperty`
-    - Fix user-visible incompatibilities from 3.1.0
-    - Fix various parsing edge cases
-  * deps: raw-body@~2.1.2
-    - Fix error stack traces to skip `makeError`
-    - deps: iconv-lite@0.4.11
-  * deps: type-is@~1.6.4
-    - deps: mime-types@~2.1.2
-    - perf: enable strict mode
-    - perf: remove argument reassignment
-
-1.13.1 / 2015-06-16
-===================
-
-  * deps: qs@2.4.2
-    - Downgraded from 3.1.0 because of user-visible incompatibilities
-
-1.13.0 / 2015-06-14
-===================
-
-  * Add `statusCode` property on `Error`s, in addition to `status`
-  * Change `type` default to `application/json` for JSON parser
-  * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
-  * Provide static `require` analysis
-  * Use the `http-errors` module to generate errors
-  * deps: bytes@2.1.0
-    - Slight optimizations
-  * deps: iconv-lite@0.4.10
-    - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
-    - Leading BOM is now removed when decoding
-  * deps: on-finished@~2.3.0
-    - Add defined behavior for HTTP `CONNECT` requests
-    - Add defined behavior for HTTP `Upgrade` requests
-    - deps: ee-first@1.1.1
-  * deps: qs@3.1.0
-    - Fix dropping parameters like `hasOwnProperty`
-    - Fix various parsing edge cases
-    - Parsed object now has `null` prototype
-  * deps: raw-body@~2.1.1
-    - Use `unpipe` module for unpiping requests
-    - deps: iconv-lite@0.4.10
-  * deps: type-is@~1.6.3
-    - deps: mime-types@~2.1.1
-    - perf: reduce try block size
-    - perf: remove bitwise operations
-  * perf: enable strict mode
-  * perf: remove argument reassignment
-  * perf: remove delete call
-
-1.12.4 / 2015-05-10
-===================
-
-  * deps: debug@~2.2.0
-  * deps: qs@2.4.2
-    - Fix allowing parameters like `constructor`
-  * deps: on-finished@~2.2.1
-  * deps: raw-body@~2.0.1
-    - Fix a false-positive when unpiping in Node.js 0.8
-    - deps: bytes@2.0.1
-  * deps: type-is@~1.6.2
-    - deps: mime-types@~2.0.11
-
-1.12.3 / 2015-04-15
-===================
-
-  * Slight efficiency improvement when not debugging
-  * deps: depd@~1.0.1
-  * deps: iconv-lite@0.4.8
-    - Add encoding alias UNICODE-1-1-UTF-7
-  * deps: raw-body@1.3.4
-    - Fix hanging callback if request aborts during read
-    - deps: iconv-lite@0.4.8
-
-1.12.2 / 2015-03-16
-===================
-
-  * deps: qs@2.4.1
-    - Fix error when parameter `hasOwnProperty` is present
-
-1.12.1 / 2015-03-15
-===================
-
-  * deps: debug@~2.1.3
-    - Fix high intensity foreground color for bold
-    - deps: ms@0.7.0
-  * deps: type-is@~1.6.1
-    - deps: mime-types@~2.0.10
-
-1.12.0 / 2015-02-13
-===================
-
-  * add `debug` messages
-  * accept a function for the `type` option
-  * use `content-type` to parse `Content-Type` headers
-  * deps: iconv-lite@0.4.7
-    - Gracefully support enumerables on `Object.prototype`
-  * deps: raw-body@1.3.3
-    - deps: iconv-lite@0.4.7
-  * deps: type-is@~1.6.0
-    - fix argument reassignment
-    - fix false-positives in `hasBody` `Transfer-Encoding` check
-    - support wildcard for both type and subtype (`*/*`)
-    - deps: mime-types@~2.0.9
-
-1.11.0 / 2015-01-30
-===================
-
-  * make internal `extended: true` depth limit infinity
-  * deps: type-is@~1.5.6
-    - deps: mime-types@~2.0.8
-
-1.10.2 / 2015-01-20
-===================
-
-  * deps: iconv-lite@0.4.6
-    - Fix rare aliases of single-byte encodings
-  * deps: raw-body@1.3.2
-    - deps: iconv-lite@0.4.6
-
-1.10.1 / 2015-01-01
-===================
-
-  * deps: on-finished@~2.2.0
-  * deps: type-is@~1.5.5
-    - deps: mime-types@~2.0.7
-
-1.10.0 / 2014-12-02
-===================
-
-  * make internal `extended: true` array limit dynamic
-
-1.9.3 / 2014-11-21
-==================
-
-  * deps: iconv-lite@0.4.5
-    - Fix Windows-31J and X-SJIS encoding support
-  * deps: qs@2.3.3
-    - Fix `arrayLimit` behavior
-  * deps: raw-body@1.3.1
-    - deps: iconv-lite@0.4.5
-  * deps: type-is@~1.5.3
-    - deps: mime-types@~2.0.3
-
-1.9.2 / 2014-10-27
-==================
-
-  * deps: qs@2.3.2
-    - Fix parsing of mixed objects and values
-
-1.9.1 / 2014-10-22
-==================
-
-  * deps: on-finished@~2.1.1
-    - Fix handling of pipelined requests
-  * deps: qs@2.3.0
-    - Fix parsing of mixed implicit and explicit arrays
-  * deps: type-is@~1.5.2
-    - deps: mime-types@~2.0.2
-
-1.9.0 / 2014-09-24
-==================
-
-  * include the charset in "unsupported charset" error message
-  * include the encoding in "unsupported content encoding" error message
-  * deps: depd@~1.0.0
-
-1.8.4 / 2014-09-23
-==================
-
-  * fix content encoding to be case-insensitive
-
-1.8.3 / 2014-09-19
-==================
-
-  * deps: qs@2.2.4
-    - Fix issue with object keys starting with numbers truncated
-
-1.8.2 / 2014-09-15
-==================
-
-  * deps: depd@0.4.5
-
-1.8.1 / 2014-09-07
-==================
-
-  * deps: media-typer@0.3.0
-  * deps: type-is@~1.5.1
-
-1.8.0 / 2014-09-05
-==================
-
-  * make empty-body-handling consistent between chunked requests
-    - empty `json` produces `{}`
-    - empty `raw` produces `new Buffer(0)`
-    - empty `text` produces `''`
-    - empty `urlencoded` produces `{}`
-  * deps: qs@2.2.3
-    - Fix issue where first empty value in array is discarded
-  * deps: type-is@~1.5.0
-    - fix `hasbody` to be true for `content-length: 0`
-
-1.7.0 / 2014-09-01
-==================
-
-  * add `parameterLimit` option to `urlencoded` parser
-  * change `urlencoded` extended array limit to 100
-  * respond with 413 when over `parameterLimit` in `urlencoded`
-
-1.6.7 / 2014-08-29
-==================
-
-  * deps: qs@2.2.2
-    - Remove unnecessary cloning
-
-1.6.6 / 2014-08-27
-==================
-
-  * deps: qs@2.2.0
-    - Array parsing fix
-    - Performance improvements
-
-1.6.5 / 2014-08-16
-==================
-
-  * deps: on-finished@2.1.0
-
-1.6.4 / 2014-08-14
-==================
-
-  * deps: qs@1.2.2
-
-1.6.3 / 2014-08-10
-==================
-
-  * deps: qs@1.2.1
-
-1.6.2 / 2014-08-07
-==================
-
-  * deps: qs@1.2.0
-    - Fix parsing array of objects
-
-1.6.1 / 2014-08-06
-==================
-
-  * deps: qs@1.1.0
-    - Accept urlencoded square brackets
-    - Accept empty values in implicit array notation
-
-1.6.0 / 2014-08-05
-==================
-
-  * deps: qs@1.0.2
-    - Complete rewrite
-    - Limits array length to 20
-    - Limits object depth to 5
-    - Limits parameters to 1,000
-
-1.5.2 / 2014-07-27
-==================
-
-  * deps: depd@0.4.4
-    - Work-around v8 generating empty stack traces
-
-1.5.1 / 2014-07-26
-==================
-
-  * deps: depd@0.4.3
-    - Fix exception when global `Error.stackTraceLimit` is too low
-
-1.5.0 / 2014-07-20
-==================
-
-  * deps: depd@0.4.2
-    - Add `TRACE_DEPRECATION` environment variable
-    - Remove non-standard grey color from color output
-    - Support `--no-deprecation` argument
-    - Support `--trace-deprecation` argument
-  * deps: iconv-lite@0.4.4
-    - Added encoding UTF-7
-  * deps: raw-body@1.3.0
-    - deps: iconv-lite@0.4.4
-    - Added encoding UTF-7
-    - Fix `Cannot switch to old mode now` error on Node.js 0.10+
-  * deps: type-is@~1.3.2
-
-1.4.3 / 2014-06-19
-==================
-
-  * deps: type-is@1.3.1
-    - fix global variable leak
-
-1.4.2 / 2014-06-19
-==================
-
-  * deps: type-is@1.3.0
-    - improve type parsing
-
-1.4.1 / 2014-06-19
-==================
-
-  * fix urlencoded extended deprecation message
-
-1.4.0 / 2014-06-19
-==================
-
-  * add `text` parser
-  * add `raw` parser
-  * check accepted charset in content-type (accepts utf-8)
-  * check accepted encoding in content-encoding (accepts identity)
-  * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed
-  * deprecate `urlencoded()` without provided `extended` option
-  * lazy-load urlencoded parsers
-  * parsers split into files for reduced mem usage
-  * support gzip and deflate bodies
-    - set `inflate: false` to turn off
-  * deps: raw-body@1.2.2
-    - Support all encodings from `iconv-lite`
-
-1.3.1 / 2014-06-11
-==================
-
-  * deps: type-is@1.2.1
-    - Switch dependency from mime to mime-types@1.0.0
-
-1.3.0 / 2014-05-31
-==================
-
-  * add `extended` option to urlencoded parser
-
-1.2.2 / 2014-05-27
-==================
-
-  * deps: raw-body@1.1.6
-    - assert stream encoding on node.js 0.8
-    - assert stream encoding on node.js < 0.10.6
-    - deps: bytes@1
-
-1.2.1 / 2014-05-26
-==================
-
-  * invoke `next(err)` after request fully read
-    - prevents hung responses and socket hang ups
-
-1.2.0 / 2014-05-11
-==================
-
-  * add `verify` option
-  * deps: type-is@1.2.0
-    - support suffix matching
-
-1.1.2 / 2014-05-11
-==================
-
-  * improve json parser speed
-
-1.1.1 / 2014-05-11
-==================
-
-  * fix repeated limit parsing with every request
-
-1.1.0 / 2014-05-10
-==================
-
-  * add `type` option
-  * deps: pin for safety and consistency
-
-1.0.2 / 2014-04-14
-==================
-
-  * use `type-is` module
-
-1.0.1 / 2014-03-20
-==================
-
-  * lower default limits to 100kb
diff --git a/device_home/node_modules/body-parser/README.md b/device_home/node_modules/body-parser/README.md
deleted file mode 100644 (file)
index aba6297..0000000
+++ /dev/null
@@ -1,443 +0,0 @@
-# body-parser
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Node.js body parsing middleware.
-
-Parse incoming request bodies in a middleware before your handlers, available
-under the `req.body` property.
-
-**Note** As `req.body`'s shape is based on user-controlled input, all
-properties and values in this object are untrusted and should be validated
-before trusting. For example, `req.body.foo.toString()` may fail in multiple
-ways, for example the `foo` property may not be there or may not be a string,
-and `toString` may not be a function and instead a string or other user input.
-
-[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).
-
-_This does not handle multipart bodies_, due to their complex and typically
-large nature. For multipart bodies, you may be interested in the following
-modules:
-
-  * [busboy](https://www.npmjs.org/package/busboy#readme) and
-    [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)
-  * [multiparty](https://www.npmjs.org/package/multiparty#readme) and
-    [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)
-  * [formidable](https://www.npmjs.org/package/formidable#readme)
-  * [multer](https://www.npmjs.org/package/multer#readme)
-
-This module provides the following parsers:
-
-  * [JSON body parser](#bodyparserjsonoptions)
-  * [Raw body parser](#bodyparserrawoptions)
-  * [Text body parser](#bodyparsertextoptions)
-  * [URL-encoded form body parser](#bodyparserurlencodedoptions)
-
-Other body parsers you might be interested in:
-
-- [body](https://www.npmjs.org/package/body#readme)
-- [co-body](https://www.npmjs.org/package/co-body#readme)
-
-## Installation
-
-```sh
-$ npm install body-parser
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var bodyParser = require('body-parser')
-```
-
-The `bodyParser` object exposes various factories to create middlewares. All
-middlewares will populate the `req.body` property with the parsed body when
-the `Content-Type` request header matches the `type` option, or an empty
-object (`{}`) if there was no body to parse, the `Content-Type` was not matched,
-or an error occurred.
-
-The various errors returned by this module are described in the
-[errors section](#errors).
-
-### bodyParser.json([options])
-
-Returns middleware that only parses `json` and only looks at requests where
-the `Content-Type` header matches the `type` option. This parser accepts any
-Unicode encoding of the body and supports automatic inflation of `gzip` and
-`deflate` encodings.
-
-A new `body` object containing the parsed data is populated on the `request`
-object after the middleware (i.e. `req.body`).
-
-#### Options
-
-The `json` function takes an optional `options` object that may contain any of
-the following keys:
-
-##### inflate
-
-When set to `true`, then deflated (compressed) bodies will be inflated; when
-`false`, deflated bodies are rejected. Defaults to `true`.
-
-##### limit
-
-Controls the maximum request body size. If this is a number, then the value
-specifies the number of bytes; if it is a string, the value is passed to the
-[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
-to `'100kb'`.
-
-##### reviver
-
-The `reviver` option is passed directly to `JSON.parse` as the second
-argument. You can find more information on this argument
-[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).
-
-##### strict
-
-When set to `true`, will only accept arrays and objects; when `false` will
-accept anything `JSON.parse` accepts. Defaults to `true`.
-
-##### type
-
-The `type` option is used to determine what media type the middleware will
-parse. This option can be a string, array of strings, or a function. If not a
-function, `type` option is passed directly to the
-[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
-be an extension name (like `json`), a mime type (like `application/json`), or
-a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`
-option is called as `fn(req)` and the request is parsed if it returns a truthy
-value. Defaults to `application/json`.
-
-##### verify
-
-The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
-where `buf` is a `Buffer` of the raw request body and `encoding` is the
-encoding of the request. The parsing can be aborted by throwing an error.
-
-### bodyParser.raw([options])
-
-Returns middleware that parses all bodies as a `Buffer` and only looks at
-requests where the `Content-Type` header matches the `type` option. This
-parser supports automatic inflation of `gzip` and `deflate` encodings.
-
-A new `body` object containing the parsed data is populated on the `request`
-object after the middleware (i.e. `req.body`). This will be a `Buffer` object
-of the body.
-
-#### Options
-
-The `raw` function takes an optional `options` object that may contain any of
-the following keys:
-
-##### inflate
-
-When set to `true`, then deflated (compressed) bodies will be inflated; when
-`false`, deflated bodies are rejected. Defaults to `true`.
-
-##### limit
-
-Controls the maximum request body size. If this is a number, then the value
-specifies the number of bytes; if it is a string, the value is passed to the
-[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
-to `'100kb'`.
-
-##### type
-
-The `type` option is used to determine what media type the middleware will
-parse. This option can be a string, array of strings, or a function.
-If not a function, `type` option is passed directly to the
-[type-is](https://www.npmjs.org/package/type-is#readme) library and this
-can be an extension name (like `bin`), a mime type (like
-`application/octet-stream`), or a mime type with a wildcard (like `*/*` or
-`application/*`). If a function, the `type` option is called as `fn(req)`
-and the request is parsed if it returns a truthy value. Defaults to
-`application/octet-stream`.
-
-##### verify
-
-The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
-where `buf` is a `Buffer` of the raw request body and `encoding` is the
-encoding of the request. The parsing can be aborted by throwing an error.
-
-### bodyParser.text([options])
-
-Returns middleware that parses all bodies as a string and only looks at
-requests where the `Content-Type` header matches the `type` option. This
-parser supports automatic inflation of `gzip` and `deflate` encodings.
-
-A new `body` string containing the parsed data is populated on the `request`
-object after the middleware (i.e. `req.body`). This will be a string of the
-body.
-
-#### Options
-
-The `text` function takes an optional `options` object that may contain any of
-the following keys:
-
-##### defaultCharset
-
-Specify the default character set for the text content if the charset is not
-specified in the `Content-Type` header of the request. Defaults to `utf-8`.
-
-##### inflate
-
-When set to `true`, then deflated (compressed) bodies will be inflated; when
-`false`, deflated bodies are rejected. Defaults to `true`.
-
-##### limit
-
-Controls the maximum request body size. If this is a number, then the value
-specifies the number of bytes; if it is a string, the value is passed to the
-[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
-to `'100kb'`.
-
-##### type
-
-The `type` option is used to determine what media type the middleware will
-parse. This option can be a string, array of strings, or a function. If not
-a function, `type` option is passed directly to the
-[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
-be an extension name (like `txt`), a mime type (like `text/plain`), or a mime
-type with a wildcard (like `*/*` or `text/*`). If a function, the `type`
-option is called as `fn(req)` and the request is parsed if it returns a
-truthy value. Defaults to `text/plain`.
-
-##### verify
-
-The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
-where `buf` is a `Buffer` of the raw request body and `encoding` is the
-encoding of the request. The parsing can be aborted by throwing an error.
-
-### bodyParser.urlencoded([options])
-
-Returns middleware that only parses `urlencoded` bodies and only looks at
-requests where the `Content-Type` header matches the `type` option. This
-parser accepts only UTF-8 encoding of the body and supports automatic
-inflation of `gzip` and `deflate` encodings.
-
-A new `body` object containing the parsed data is populated on the `request`
-object after the middleware (i.e. `req.body`). This object will contain
-key-value pairs, where the value can be a string or array (when `extended` is
-`false`), or any type (when `extended` is `true`).
-
-#### Options
-
-The `urlencoded` function takes an optional `options` object that may contain
-any of the following keys:
-
-##### extended
-
-The `extended` option allows to choose between parsing the URL-encoded data
-with the `querystring` library (when `false`) or the `qs` library (when
-`true`). The "extended" syntax allows for rich objects and arrays to be
-encoded into the URL-encoded format, allowing for a JSON-like experience
-with URL-encoded. For more information, please
-[see the qs library](https://www.npmjs.org/package/qs#readme).
-
-Defaults to `true`, but using the default has been deprecated. Please
-research into the difference between `qs` and `querystring` and choose the
-appropriate setting.
-
-##### inflate
-
-When set to `true`, then deflated (compressed) bodies will be inflated; when
-`false`, deflated bodies are rejected. Defaults to `true`.
-
-##### limit
-
-Controls the maximum request body size. If this is a number, then the value
-specifies the number of bytes; if it is a string, the value is passed to the
-[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
-to `'100kb'`.
-
-##### parameterLimit
-
-The `parameterLimit` option controls the maximum number of parameters that
-are allowed in the URL-encoded data. If a request contains more parameters
-than this value, a 413 will be returned to the client. Defaults to `1000`.
-
-##### type
-
-The `type` option is used to determine what media type the middleware will
-parse. This option can be a string, array of strings, or a function. If not
-a function, `type` option is passed directly to the
-[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
-be an extension name (like `urlencoded`), a mime type (like
-`application/x-www-form-urlencoded`), or a mime type with a wildcard (like
-`*/x-www-form-urlencoded`). If a function, the `type` option is called as
-`fn(req)` and the request is parsed if it returns a truthy value. Defaults
-to `application/x-www-form-urlencoded`.
-
-##### verify
-
-The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
-where `buf` is a `Buffer` of the raw request body and `encoding` is the
-encoding of the request. The parsing can be aborted by throwing an error.
-
-## Errors
-
-The middlewares provided by this module create errors depending on the error
-condition during parsing. The errors will typically have a `status`/`statusCode`
-property that contains the suggested HTTP response code, an `expose` property
-to determine if the `message` property should be displayed to the client, a
-`type` property to determine the type of error without matching against the
-`message`, and a `body` property containing the read body, if available.
-
-The following are the common errors emitted, though any error can come through
-for various reasons.
-
-### content encoding unsupported
-
-This error will occur when the request had a `Content-Encoding` header that
-contained an encoding but the "inflation" option was set to `false`. The
-`status` property is set to `415`, the `type` property is set to
-`'encoding.unsupported'`, and the `charset` property will be set to the
-encoding that is unsupported.
-
-### request aborted
-
-This error will occur when the request is aborted by the client before reading
-the body has finished. The `received` property will be set to the number of
-bytes received before the request was aborted and the `expected` property is
-set to the number of expected bytes. The `status` property is set to `400`
-and `type` property is set to `'request.aborted'`.
-
-### request entity too large
-
-This error will occur when the request body's size is larger than the "limit"
-option. The `limit` property will be set to the byte limit and the `length`
-property will be set to the request body's length. The `status` property is
-set to `413` and the `type` property is set to `'entity.too.large'`.
-
-### request size did not match content length
-
-This error will occur when the request's length did not match the length from
-the `Content-Length` header. This typically occurs when the request is malformed,
-typically when the `Content-Length` header was calculated based on characters
-instead of bytes. The `status` property is set to `400` and the `type` property
-is set to `'request.size.invalid'`.
-
-### stream encoding should not be set
-
-This error will occur when something called the `req.setEncoding` method prior
-to this middleware. This module operates directly on bytes only and you cannot
-call `req.setEncoding` when using this module. The `status` property is set to
-`500` and the `type` property is set to `'stream.encoding.set'`.
-
-### too many parameters
-
-This error will occur when the content of the request exceeds the configured
-`parameterLimit` for the `urlencoded` parser. The `status` property is set to
-`413` and the `type` property is set to `'parameters.too.many'`.
-
-### unsupported charset "BOGUS"
-
-This error will occur when the request had a charset parameter in the
-`Content-Type` header, but the `iconv-lite` module does not support it OR the
-parser does not support it. The charset is contained in the message as well
-as in the `charset` property. The `status` property is set to `415`, the
-`type` property is set to `'charset.unsupported'`, and the `charset` property
-is set to the charset that is unsupported.
-
-### unsupported content encoding "bogus"
-
-This error will occur when the request had a `Content-Encoding` header that
-contained an unsupported encoding. The encoding is contained in the message
-as well as in the `encoding` property. The `status` property is set to `415`,
-the `type` property is set to `'encoding.unsupported'`, and the `encoding`
-property is set to the encoding that is unsupported.
-
-## Examples
-
-### Express/Connect top-level generic
-
-This example demonstrates adding a generic JSON and URL-encoded parser as a
-top-level middleware, which will parse the bodies of all incoming requests.
-This is the simplest setup.
-
-```js
-var express = require('express')
-var bodyParser = require('body-parser')
-
-var app = express()
-
-// parse application/x-www-form-urlencoded
-app.use(bodyParser.urlencoded({ extended: false }))
-
-// parse application/json
-app.use(bodyParser.json())
-
-app.use(function (req, res) {
-  res.setHeader('Content-Type', 'text/plain')
-  res.write('you posted:\n')
-  res.end(JSON.stringify(req.body, null, 2))
-})
-```
-
-### Express route-specific
-
-This example demonstrates adding body parsers specifically to the routes that
-need them. In general, this is the most recommended way to use body-parser with
-Express.
-
-```js
-var express = require('express')
-var bodyParser = require('body-parser')
-
-var app = express()
-
-// create application/json parser
-var jsonParser = bodyParser.json()
-
-// create application/x-www-form-urlencoded parser
-var urlencodedParser = bodyParser.urlencoded({ extended: false })
-
-// POST /login gets urlencoded bodies
-app.post('/login', urlencodedParser, function (req, res) {
-  res.send('welcome, ' + req.body.username)
-})
-
-// POST /api/users gets JSON bodies
-app.post('/api/users', jsonParser, function (req, res) {
-  // create user in req.body
-})
-```
-
-### Change accepted type for parsers
-
-All the parsers accept a `type` option which allows you to change the
-`Content-Type` that the middleware will parse.
-
-```js
-var express = require('express')
-var bodyParser = require('body-parser')
-
-var app = express()
-
-// parse various different custom JSON types as JSON
-app.use(bodyParser.json({ type: 'application/*+json' }))
-
-// parse some custom thing into a Buffer
-app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
-
-// parse an HTML body into a string
-app.use(bodyParser.text({ type: 'text/html' }))
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/body-parser.svg
-[npm-url]: https://npmjs.org/package/body-parser
-[travis-image]: https://img.shields.io/travis/expressjs/body-parser/master.svg
-[travis-url]: https://travis-ci.org/expressjs/body-parser
-[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg
-[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg
-[downloads-url]: https://npmjs.org/package/body-parser
diff --git a/device_home/node_modules/brace-expansion/README.md b/device_home/node_modules/brace-expansion/README.md
deleted file mode 100644 (file)
index 6b4e0e1..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-# brace-expansion
-
-[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), 
-as known from sh/bash, in JavaScript.
-
-[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion)
-[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion)
-[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/)
-
-[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion)
-
-## Example
-
-```js
-var expand = require('brace-expansion');
-
-expand('file-{a,b,c}.jpg')
-// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
-
-expand('-v{,,}')
-// => ['-v', '-v', '-v']
-
-expand('file{0..2}.jpg')
-// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
-
-expand('file-{a..c}.jpg')
-// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
-
-expand('file{2..0}.jpg')
-// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
-
-expand('file{0..4..2}.jpg')
-// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
-
-expand('file-{a..e..2}.jpg')
-// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
-
-expand('file{00..10..5}.jpg')
-// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
-
-expand('{{A..C},{a..c}}')
-// => ['A', 'B', 'C', 'a', 'b', 'c']
-
-expand('ppp{,config,oe{,conf}}')
-// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
-```
-
-## API
-
-```js
-var expand = require('brace-expansion');
-```
-
-### var expanded = expand(str)
-
-Return an array of all possible and valid expansions of `str`. If none are
-found, `[str]` is returned.
-
-Valid expansions are:
-
-```js
-/^(.*,)+(.+)?$/
-// {a,b,...}
-```
-
-A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
-
-```js
-/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
-// {x..y[..incr]}
-```
-
-A numeric sequence from `x` to `y` inclusive, with optional increment.
-If `x` or `y` start with a leading `0`, all the numbers will be padded
-to have equal length. Negative numbers and backwards iteration work too.
-
-```js
-/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
-// {x..y[..incr]}
-```
-
-An alphabetic sequence from `x` to `y` inclusive, with optional increment.
-`x` and `y` must be exactly one character, and if given, `incr` must be a
-number.
-
-For compatibility reasons, the string `${` is not eligible for brace expansion.
-
-## Installation
-
-With [npm](https://npmjs.org) do:
-
-```bash
-npm install brace-expansion
-```
-
-## Contributors
-
-- [Julian Gruber](https://github.com/juliangruber)
-- [Isaac Z. Schlueter](https://github.com/isaacs)
-
-## Sponsors
-
-This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)!
-
-Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)!
-
-## License
-
-(MIT)
-
-Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/device_home/node_modules/buffer-alloc-unsafe/readme.md b/device_home/node_modules/buffer-alloc-unsafe/readme.md
deleted file mode 100644 (file)
index 8725ecf..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Buffer Alloc Unsafe
-
-A [ponyfill](https://ponyfill.com) for `Buffer.allocUnsafe`.
-
-Works as Node.js: `v7.0.0` <br>
-Works on Node.js: `v0.10.0`
-
-## Installation
-
-```sh
-npm install --save buffer-alloc-unsafe
-```
-
-## Usage
-
-```js
-const allocUnsafe = require('buffer-alloc-unsafe')
-
-console.log(allocUnsafe(10))
-//=> <Buffer 78 0c 80 03 01 00 00 00 05 00>
-
-console.log(allocUnsafe(10))
-//=> <Buffer 58 ed bf 5f ff 7f 00 00 01 00>
-
-console.log(allocUnsafe(10))
-//=> <Buffer 50 0c 80 03 01 00 00 00 0a 00>
-
-allocUnsafe(-10)
-//=> RangeError: "size" argument must not be negative
-```
-
-## API
-
-### allocUnsafe(size)
-
-- `size` &lt;Integer&gt; The desired length of the new `Buffer`
-
-Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must be
-less than or equal to the value of `buffer.kMaxLength` and greater than or equal
-to zero. Otherwise, a `RangeError` is thrown.
-
-## See also
-
-- [buffer-alloc](https://github.com/LinusU/buffer-alloc) A ponyfill for `Buffer.alloc`
-- [buffer-fill](https://github.com/LinusU/buffer-fill) A ponyfill for `Buffer.fill`
-- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from`
diff --git a/device_home/node_modules/buffer-alloc/readme.md b/device_home/node_modules/buffer-alloc/readme.md
deleted file mode 100644 (file)
index 80c7d7b..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# Buffer Alloc
-
-A [ponyfill](https://ponyfill.com) for `Buffer.alloc`.
-
-Works as Node.js: `v7.0.0` <br>
-Works on Node.js: `v0.10.0`
-
-## Installation
-
-```sh
-npm install --save buffer-alloc
-```
-
-## Usage
-
-```js
-const alloc = require('buffer-alloc')
-
-console.log(alloc(4))
-//=> <Buffer 00 00 00 00>
-
-console.log(alloc(6, 0x41))
-//=> <Buffer 41 41 41 41 41 41>
-
-console.log(alloc(10, 'linus', 'utf8'))
-//=> <Buffer 6c 69 6e 75 73 6c 69 6e 75 73>
-```
-
-## API
-
-### alloc(size[, fill[, encoding]])
-
-- `size` &lt;Integer&gt; The desired length of the new `Buffer`
-- `fill` &lt;String&gt; | &lt;Buffer&gt; | &lt;Integer&gt; A value to pre-fill the new `Buffer` with. **Default:** `0`
-- `encoding` &lt;String&gt; If `fill` is a string, this is its encoding. **Default:** `'utf8'`
-
-Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the `Buffer` will be zero-filled.
-
-## See also
-
-- [buffer-alloc-unsafe](https://github.com/LinusU/buffer-alloc-unsafe) A ponyfill for `Buffer.allocUnsafe`
-- [buffer-fill](https://github.com/LinusU/buffer-fill) A ponyfill for `Buffer.fill`
-- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from`
diff --git a/device_home/node_modules/buffer-fill/readme.md b/device_home/node_modules/buffer-fill/readme.md
deleted file mode 100644 (file)
index ac30738..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Buffer Fill
-
-A [ponyfill](https://ponyfill.com) for `Buffer.fill`.
-
-Works as Node.js: `v6.4.0` <br>
-Works on Node.js: `v0.10.0`
-
-## Installation
-
-```sh
-npm install --save buffer-fill
-```
-
-## Usage
-
-```js
-const fill = require('buffer-fill')
-const buf = Buffer.allocUnsafe(5)
-
-console.log(buf.fill(8))
-//=> <Buffer 08 08 08 08 08>
-
-console.log(buf.fill(9, 2, 4))
-//=> <Buffer 08 08 09 09 08>
-
-console.log(buf.fill('linus', 'latin1'))
-//=> <Buffer 6c 69 6e 75 73>
-
-console.log(buf.fill('\u0222'))
-//=> <Buffer c8 a2 c8 a2 c8>
-```
-
-## API
-
-### fill(buf, value[, offset[, end]][, encoding])
-
-- `value` &lt;String&gt; | &lt;Buffer&gt; | &lt;Integer&gt; The value to fill `buf` with
-- `offset` &lt;Integer&gt; Where to start filling `buf`. **Default:** `0`
-- `end` &lt;Integer&gt; Where to stop filling `buf` (not inclusive). **Default:** `buf.length`
-- `encoding` &lt;String&gt; If `value` is a string, this is its encoding. **Default:** `'utf8'`
-- Return: &lt;Buffer&gt; A reference to `buf`
-
-Fills `buf` with the specified `value`. If the `offset` and `end` are not given,
-the entire `buf` will be filled. This is meant to be a small simplification to
-allow the creation and filling of a `Buffer` to be done on a single line.
-
-If the final write of a `fill()` operation falls on a multi-byte character, then
-only the first bytes of that character that fit into `buf` are written.
-
-## See also
-
-- [buffer-alloc-unsafe](https://github.com/LinusU/buffer-alloc-unsafe) A ponyfill for `Buffer.allocUnsafe`
-- [buffer-alloc](https://github.com/LinusU/buffer-alloc) A ponyfill for `Buffer.alloc`
-- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from`
diff --git a/device_home/node_modules/buffer-from/readme.md b/device_home/node_modules/buffer-from/readme.md
deleted file mode 100644 (file)
index 9880a55..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-# Buffer From
-
-A [ponyfill](https://ponyfill.com) for `Buffer.from`, uses native implementation if available.
-
-## Installation
-
-```sh
-npm install --save buffer-from
-```
-
-## Usage
-
-```js
-const bufferFrom = require('buffer-from')
-
-console.log(bufferFrom([1, 2, 3, 4]))
-//=> <Buffer 01 02 03 04>
-
-const arr = new Uint8Array([1, 2, 3, 4])
-console.log(bufferFrom(arr.buffer, 1, 2))
-//=> <Buffer 02 03>
-
-console.log(bufferFrom('test', 'utf8'))
-//=> <Buffer 74 65 73 74>
-
-const buf = bufferFrom('test')
-console.log(bufferFrom(buf))
-//=> <Buffer 74 65 73 74>
-```
-
-## API
-
-### bufferFrom(array)
-
-- `array` &lt;Array&gt;
-
-Allocates a new `Buffer` using an `array` of octets.
-
-### bufferFrom(arrayBuffer[, byteOffset[, length]])
-
-- `arrayBuffer` &lt;ArrayBuffer&gt; The `.buffer` property of a TypedArray or ArrayBuffer
-- `byteOffset` &lt;Integer&gt; Where to start copying from `arrayBuffer`. **Default:** `0`
-- `length` &lt;Integer&gt; How many bytes to copy from `arrayBuffer`. **Default:** `arrayBuffer.length - byteOffset`
-
-When passed a reference to the `.buffer` property of a TypedArray instance, the
-newly created `Buffer` will share the same allocated memory as the TypedArray.
-
-The optional `byteOffset` and `length` arguments specify a memory range within
-the `arrayBuffer` that will be shared by the `Buffer`.
-
-### bufferFrom(buffer)
-
-- `buffer` &lt;Buffer&gt; An existing `Buffer` to copy data from
-
-Copies the passed `buffer` data onto a new `Buffer` instance.
-
-### bufferFrom(string[, encoding])
-
-- `string` &lt;String&gt; A string to encode.
-- `encoding` &lt;String&gt; The encoding of `string`. **Default:** `'utf8'`
-
-Creates a new `Buffer` containing the given JavaScript string `string`. If
-provided, the `encoding` parameter identifies the character encoding of
-`string`.
-
-## See also
-
-- [buffer-alloc](https://github.com/LinusU/buffer-alloc) A ponyfill for `Buffer.alloc`
-- [buffer-alloc-unsafe](https://github.com/LinusU/buffer-alloc-unsafe) A ponyfill for `Buffer.allocUnsafe`
diff --git a/device_home/node_modules/buffer/AUTHORS.md b/device_home/node_modules/buffer/AUTHORS.md
deleted file mode 100644 (file)
index 22eb171..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-# Authors
-
-#### Ordered by first contribution.
-
-- Romain Beauxis (toots@rastageeks.org)
-- Tobias Koppers (tobias.koppers@googlemail.com)
-- Janus (ysangkok@gmail.com)
-- Rainer Dreyer (rdrey1@gmail.com)
-- Tõnis Tiigi (tonistiigi@gmail.com)
-- James Halliday (mail@substack.net)
-- Michael Williamson (mike@zwobble.org)
-- elliottcable (github@elliottcable.name)
-- rafael (rvalle@livelens.net)
-- Andrew Kelley (superjoe30@gmail.com)
-- Andreas Madsen (amwebdk@gmail.com)
-- Mike Brevoort (mike.brevoort@pearson.com)
-- Brian White (mscdex@mscdex.net)
-- Feross Aboukhadijeh (feross@feross.org)
-- Ruben Verborgh (ruben@verborgh.org)
-- eliang (eliang.cs@gmail.com)
-- Jesse Tane (jesse.tane@gmail.com)
-- Alfonso Boza (alfonso@cloud.com)
-- Mathias Buus (mathiasbuus@gmail.com)
-- Devon Govett (devongovett@gmail.com)
-- Daniel Cousens (github@dcousens.com)
-- Joseph Dykstra (josephdykstra@gmail.com)
-- Parsha Pourkhomami (parshap+git@gmail.com)
-- Damjan Košir (damjan.kosir@gmail.com)
-- daverayment (dave.rayment@gmail.com)
-- kawanet (u-suke@kawa.net)
-- Linus Unnebäck (linus@folkdatorn.se)
-- Nolan Lawson (nolan.lawson@gmail.com)
-- Calvin Metcalf (calvin.metcalf@gmail.com)
-- Koki Takahashi (hakatasiloving@gmail.com)
-- Guy Bedford (guybedford@gmail.com)
-- Jan Schär (jscissr@gmail.com)
-- RaulTsc (tomescu.raul@gmail.com)
-- Matthieu Monsch (monsch@alum.mit.edu)
-- Dan Ehrenberg (littledan@chromium.org)
-- Kirill Fomichev (fanatid@ya.ru)
-- Yusuke Kawasaki (u-suke@kawa.net)
-- DC (dcposch@dcpos.ch)
-- John-David Dalton (john.david.dalton@gmail.com)
-- adventure-yunfei (adventure030@gmail.com)
-- Emil Bay (github@tixz.dk)
-- Sam Sudar (sudar.sam@gmail.com)
-- Volker Mische (volker.mische@gmail.com)
-- David Walton (support@geekstocks.com)
-- Сковорода Никита Андреевич (chalkerx@gmail.com)
-- greenkeeper[bot] (greenkeeper[bot]@users.noreply.github.com)
-- ukstv (sergey.ukustov@machinomy.com)
-- Renée Kooi (renee@kooi.me)
-- ranbochen (ranbochen@qq.com)
-- Vladimir Borovik (bobahbdb@gmail.com)
-- greenkeeper[bot] (23040076+greenkeeper[bot]@users.noreply.github.com)
-- kumavis (aaron@kumavis.me)
-- Sergey Ukustov (sergey.ukustov@machinomy.com)
-- Fei Liu (liu.feiwood@gmail.com)
-- Blaine Bublitz (blaine.bublitz@gmail.com)
-- clement (clement@seald.io)
-- Koushik Dutta (koushd@gmail.com)
-- Jordan Harband (ljharb@gmail.com)
-- Niklas Mischkulnig (mischnic@users.noreply.github.com)
-- Nikolai Vavilov (vvnicholas@gmail.com)
-- Fedor Nezhivoi (gyzerok@users.noreply.github.com)
-- Peter Newman (peternewman@users.noreply.github.com)
-- mathmakgakpak (44949126+mathmakgakpak@users.noreply.github.com)
-- jkkang (jkkang@smartauth.kr)
-
-#### Generated by bin/update-authors.sh.
diff --git a/device_home/node_modules/buffer/README.md b/device_home/node_modules/buffer/README.md
deleted file mode 100644 (file)
index 9a23d7c..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-# buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]
-
-[travis-image]: https://img.shields.io/travis/feross/buffer/master.svg
-[travis-url]: https://travis-ci.org/feross/buffer
-[npm-image]: https://img.shields.io/npm/v/buffer.svg
-[npm-url]: https://npmjs.org/package/buffer
-[downloads-image]: https://img.shields.io/npm/dm/buffer.svg
-[downloads-url]: https://npmjs.org/package/buffer
-[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg
-[standard-url]: https://standardjs.com
-
-#### The buffer module from [node.js](https://nodejs.org/), for the browser.
-
-[![saucelabs][saucelabs-image]][saucelabs-url]
-
-[saucelabs-image]: https://saucelabs.com/browser-matrix/buffer.svg
-[saucelabs-url]: https://saucelabs.com/u/buffer
-
-With [browserify](http://browserify.org), simply `require('buffer')` or use the `Buffer` global and you will get this module.
-
-The goal is to provide an API that is 100% identical to
-[node's Buffer API](https://nodejs.org/api/buffer.html). Read the
-[official docs](https://nodejs.org/api/buffer.html) for the full list of properties,
-instance methods, and class methods that are supported.
-
-## features
-
-- Manipulate binary data like a boss, in all browsers!
-- Super fast. Backed by Typed Arrays (`Uint8Array`/`ArrayBuffer`, not `Object`)
-- Extremely small bundle size (**6.75KB minified + gzipped**, 51.9KB with comments)
-- Excellent browser support (Chrome, Firefox, Edge, Safari 9+, IE 11, iOS 9+, Android, etc.)
-- Preserves Node API exactly, with one minor difference (see below)
-- Square-bracket `buf[4]` notation works!
-- Does not modify any browser prototypes or put anything on `window`
-- Comprehensive test suite (including all buffer tests from node.js core)
-
-## install
-
-To use this module directly (without browserify), install it:
-
-```bash
-npm install buffer
-```
-
-This module was previously called **native-buffer-browserify**, but please use **buffer**
-from now on.
-
-If you do not use a bundler, you can use the [standalone script](https://bundle.run/buffer).
-
-## usage
-
-The module's API is identical to node's `Buffer` API. Read the
-[official docs](https://nodejs.org/api/buffer.html) for the full list of properties,
-instance methods, and class methods that are supported.
-
-As mentioned above, `require('buffer')` or use the `Buffer` global with
-[browserify](http://browserify.org) and this module will automatically be included
-in your bundle. Almost any npm module will work in the browser, even if it assumes that
-the node `Buffer` API will be available.
-
-To depend on this module explicitly (without browserify), require it like this:
-
-```js
-var Buffer = require('buffer/').Buffer  // note: the trailing slash is important!
-```
-
-To require this module explicitly, use `require('buffer/')` which tells the node.js module
-lookup algorithm (also used by browserify) to use the **npm module** named `buffer`
-instead of the **node.js core** module named `buffer`!
-
-
-## how does it work?
-
-The Buffer constructor returns instances of `Uint8Array` that have their prototype
-changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of `Uint8Array`,
-so the returned instances will have all the node `Buffer` methods and the
-`Uint8Array` methods. Square bracket notation works as expected -- it returns a
-single octet.
-
-The `Uint8Array` prototype remains unmodified.
-
-
-## tracking the latest node api
-
-This module tracks the Buffer API in the latest (unstable) version of node.js. The Buffer
-API is considered **stable** in the
-[node stability index](https://nodejs.org/docs/latest/api/documentation.html#documentation_stability_index),
-so it is unlikely that there will ever be breaking changes.
-Nonetheless, when/if the Buffer API changes in node, this module's API will change
-accordingly.
-
-## related packages
-
-- [`buffer-reverse`](https://www.npmjs.com/package/buffer-reverse) - Reverse a buffer
-- [`buffer-xor`](https://www.npmjs.com/package/buffer-xor) - Bitwise xor a buffer
-- [`is-buffer`](https://www.npmjs.com/package/is-buffer) - Determine if an object is a Buffer without including the whole `Buffer` package
-
-## conversion packages
-
-### convert typed array to buffer
-
-Use [`typedarray-to-buffer`](https://www.npmjs.com/package/typedarray-to-buffer) to convert any kind of typed array to a `Buffer`. Does not perform a copy, so it's super fast.
-
-### convert buffer to typed array
-
-`Buffer` is a subclass of `Uint8Array` (which is a typed array). So there is no need to explicitly convert to typed array. Just use the buffer as a `Uint8Array`.
-
-### convert blob to buffer
-
-Use [`blob-to-buffer`](https://www.npmjs.com/package/blob-to-buffer) to convert a `Blob` to a `Buffer`.
-
-### convert buffer to blob
-
-To convert a `Buffer` to a `Blob`, use the `Blob` constructor:
-
-```js
-var blob = new Blob([ buffer ])
-```
-
-Optionally, specify a mimetype:
-
-```js
-var blob = new Blob([ buffer ], { type: 'text/html' })
-```
-
-### convert arraybuffer to buffer
-
-To convert an `ArrayBuffer` to a `Buffer`, use the `Buffer.from` function. Does not perform a copy, so it's super fast.
-
-```js
-var buffer = Buffer.from(arrayBuffer)
-```
-
-### convert buffer to arraybuffer
-
-To convert a `Buffer` to an `ArrayBuffer`, use the `.buffer` property (which is present on all `Uint8Array` objects):
-
-```js
-var arrayBuffer = buffer.buffer.slice(
-  buffer.byteOffset, buffer.byteOffset + buffer.byteLength
-)
-```
-
-Alternatively, use the [`to-arraybuffer`](https://www.npmjs.com/package/to-arraybuffer) module.
-
-## performance
-
-See perf tests in `/perf`.
-
-`BrowserBuffer` is the browser `buffer` module (this repo). `Uint8Array` is included as a
-sanity check (since `BrowserBuffer` uses `Uint8Array` under the hood, `Uint8Array` will
-always be at least a bit faster). Finally, `NodeBuffer` is the node.js buffer module,
-which is included to compare against.
-
-NOTE: Performance has improved since these benchmarks were taken. PR welcome to update the README.
-
-### Chrome 38
-
-| Method | Operations | Accuracy | Sampled | Fastest |
-|:-------|:-----------|:---------|:--------|:-------:|
-| BrowserBuffer#bracket-notation | 11,457,464 ops/sec | ±0.86% | 66 | ✓ |
-| Uint8Array#bracket-notation | 10,824,332 ops/sec | ±0.74% | 65 | |
-| | | | |
-| BrowserBuffer#concat | 450,532 ops/sec | ±0.76% | 68 | |
-| Uint8Array#concat | 1,368,911 ops/sec | ±1.50% | 62 | ✓ |
-| | | | |
-| BrowserBuffer#copy(16000) | 903,001 ops/sec | ±0.96% | 67 | |
-| Uint8Array#copy(16000) | 1,422,441 ops/sec | ±1.04% | 66 | ✓ |
-| | | | |
-| BrowserBuffer#copy(16) | 11,431,358 ops/sec | ±0.46% | 69 | |
-| Uint8Array#copy(16) | 13,944,163 ops/sec | ±1.12% | 68 | ✓ |
-| | | | |
-| BrowserBuffer#new(16000) | 106,329 ops/sec | ±6.70% | 44 | |
-| Uint8Array#new(16000) | 131,001 ops/sec | ±2.85% | 31 | ✓ |
-| | | | |
-| BrowserBuffer#new(16) | 1,554,491 ops/sec | ±1.60% | 65 | |
-| Uint8Array#new(16) | 6,623,930 ops/sec | ±1.66% | 65 | ✓ |
-| | | | |
-| BrowserBuffer#readDoubleBE | 112,830 ops/sec | ±0.51% | 69 | ✓ |
-| DataView#getFloat64 | 93,500 ops/sec | ±0.57% | 68 | |
-| | | | |
-| BrowserBuffer#readFloatBE | 146,678 ops/sec | ±0.95% | 68 | ✓ |
-| DataView#getFloat32 | 99,311 ops/sec | ±0.41% | 67 | |
-| | | | |
-| BrowserBuffer#readUInt32LE | 843,214 ops/sec | ±0.70% | 69 | ✓ |
-| DataView#getUint32 | 103,024 ops/sec | ±0.64% | 67 | |
-| | | | |
-| BrowserBuffer#slice | 1,013,941 ops/sec | ±0.75% | 67 | |
-| Uint8Array#subarray | 1,903,928 ops/sec | ±0.53% | 67 | ✓ |
-| | | | |
-| BrowserBuffer#writeFloatBE | 61,387 ops/sec | ±0.90% | 67 | |
-| DataView#setFloat32 | 141,249 ops/sec | ±0.40% | 66 | ✓ |
-
-
-### Firefox 33
-
-| Method | Operations | Accuracy | Sampled | Fastest |
-|:-------|:-----------|:---------|:--------|:-------:|
-| BrowserBuffer#bracket-notation | 20,800,421 ops/sec | ±1.84% | 60 | |
-| Uint8Array#bracket-notation | 20,826,235 ops/sec | ±2.02% | 61 | ✓ |
-| | | | |
-| BrowserBuffer#concat | 153,076 ops/sec | ±2.32% | 61 | |
-| Uint8Array#concat | 1,255,674 ops/sec | ±8.65% | 52 | ✓ |
-| | | | |
-| BrowserBuffer#copy(16000) | 1,105,312 ops/sec | ±1.16% | 63 | |
-| Uint8Array#copy(16000) | 1,615,911 ops/sec | ±0.55% | 66 | ✓ |
-| | | | |
-| BrowserBuffer#copy(16) | 16,357,599 ops/sec | ±0.73% | 68 | |
-| Uint8Array#copy(16) | 31,436,281 ops/sec | ±1.05% | 68 | ✓ |
-| | | | |
-| BrowserBuffer#new(16000) | 52,995 ops/sec | ±6.01% | 35 | |
-| Uint8Array#new(16000) | 87,686 ops/sec | ±5.68% | 45 | ✓ |
-| | | | |
-| BrowserBuffer#new(16) | 252,031 ops/sec | ±1.61% | 66 | |
-| Uint8Array#new(16) | 8,477,026 ops/sec | ±0.49% | 68 | ✓ |
-| | | | |
-| BrowserBuffer#readDoubleBE | 99,871 ops/sec | ±0.41% | 69 | |
-| DataView#getFloat64 | 285,663 ops/sec | ±0.70% | 68 | ✓ |
-| | | | |
-| BrowserBuffer#readFloatBE | 115,540 ops/sec | ±0.42% | 69 | |
-| DataView#getFloat32 | 288,722 ops/sec | ±0.82% | 68 | ✓ |
-| | | | |
-| BrowserBuffer#readUInt32LE | 633,926 ops/sec | ±1.08% | 67 | ✓ |
-| DataView#getUint32 | 294,808 ops/sec | ±0.79% | 64 | |
-| | | | |
-| BrowserBuffer#slice | 349,425 ops/sec | ±0.46% | 69 | |
-| Uint8Array#subarray | 5,965,819 ops/sec | ±0.60% | 65 | ✓ |
-| | | | |
-| BrowserBuffer#writeFloatBE | 59,980 ops/sec | ±0.41% | 67 | |
-| DataView#setFloat32 | 317,634 ops/sec | ±0.63% | 68 | ✓ |
-
-### Safari 8
-
-| Method | Operations | Accuracy | Sampled | Fastest |
-|:-------|:-----------|:---------|:--------|:-------:|
-| BrowserBuffer#bracket-notation | 10,279,729 ops/sec | ±2.25% | 56 | ✓ |
-| Uint8Array#bracket-notation | 10,030,767 ops/sec | ±2.23% | 59 | |
-| | | | |
-| BrowserBuffer#concat | 144,138 ops/sec | ±1.38% | 65 | |
-| Uint8Array#concat | 4,950,764 ops/sec | ±1.70% | 63 | ✓ |
-| | | | |
-| BrowserBuffer#copy(16000) | 1,058,548 ops/sec | ±1.51% | 64 | |
-| Uint8Array#copy(16000) | 1,409,666 ops/sec | ±1.17% | 65 | ✓ |
-| | | | |
-| BrowserBuffer#copy(16) | 6,282,529 ops/sec | ±1.88% | 58 | |
-| Uint8Array#copy(16) | 11,907,128 ops/sec | ±2.87% | 58 | ✓ |
-| | | | |
-| BrowserBuffer#new(16000) | 101,663 ops/sec | ±3.89% | 57 | |
-| Uint8Array#new(16000) | 22,050,818 ops/sec | ±6.51% | 46 | ✓ |
-| | | | |
-| BrowserBuffer#new(16) | 176,072 ops/sec | ±2.13% | 64 | |
-| Uint8Array#new(16) | 24,385,731 ops/sec | ±5.01% | 51 | ✓ |
-| | | | |
-| BrowserBuffer#readDoubleBE | 41,341 ops/sec | ±1.06% | 67 | |
-| DataView#getFloat64 | 322,280 ops/sec | ±0.84% | 68 | ✓ |
-| | | | |
-| BrowserBuffer#readFloatBE | 46,141 ops/sec | ±1.06% | 65 | |
-| DataView#getFloat32 | 337,025 ops/sec | ±0.43% | 69 | ✓ |
-| | | | |
-| BrowserBuffer#readUInt32LE | 151,551 ops/sec | ±1.02% | 66 | |
-| DataView#getUint32 | 308,278 ops/sec | ±0.94% | 67 | ✓ |
-| | | | |
-| BrowserBuffer#slice | 197,365 ops/sec | ±0.95% | 66 | |
-| Uint8Array#subarray | 9,558,024 ops/sec | ±3.08% | 58 | ✓ |
-| | | | |
-| BrowserBuffer#writeFloatBE | 17,518 ops/sec | ±1.03% | 63 | |
-| DataView#setFloat32 | 319,751 ops/sec | ±0.48% | 68 | ✓ |
-
-
-### Node 0.11.14
-
-| Method | Operations | Accuracy | Sampled | Fastest |
-|:-------|:-----------|:---------|:--------|:-------:|
-| BrowserBuffer#bracket-notation | 10,489,828 ops/sec | ±3.25% | 90 | |
-| Uint8Array#bracket-notation | 10,534,884 ops/sec | ±0.81% | 92 | ✓ |
-| NodeBuffer#bracket-notation | 10,389,910 ops/sec | ±0.97% | 87 | |
-| | | | |
-| BrowserBuffer#concat | 487,830 ops/sec | ±2.58% | 88 | |
-| Uint8Array#concat | 1,814,327 ops/sec | ±1.28% | 88 | ✓ |
-| NodeBuffer#concat | 1,636,523 ops/sec | ±1.88% | 73 | |
-| | | | |
-| BrowserBuffer#copy(16000) | 1,073,665 ops/sec | ±0.77% | 90 | |
-| Uint8Array#copy(16000) | 1,348,517 ops/sec | ±0.84% | 89 | ✓ |
-| NodeBuffer#copy(16000) | 1,289,533 ops/sec | ±0.82% | 93 | |
-| | | | |
-| BrowserBuffer#copy(16) | 12,782,706 ops/sec | ±0.74% | 85 | |
-| Uint8Array#copy(16) | 14,180,427 ops/sec | ±0.93% | 92 | ✓ |
-| NodeBuffer#copy(16) | 11,083,134 ops/sec | ±1.06% | 89 | |
-| | | | |
-| BrowserBuffer#new(16000) | 141,678 ops/sec | ±3.30% | 67 | |
-| Uint8Array#new(16000) | 161,491 ops/sec | ±2.96% | 60 | |
-| NodeBuffer#new(16000) | 292,699 ops/sec | ±3.20% | 55 | ✓ |
-| | | | |
-| BrowserBuffer#new(16) | 1,655,466 ops/sec | ±2.41% | 82 | |
-| Uint8Array#new(16) | 14,399,926 ops/sec | ±0.91% | 94 | ✓ |
-| NodeBuffer#new(16) | 3,894,696 ops/sec | ±0.88% | 92 | |
-| | | | |
-| BrowserBuffer#readDoubleBE | 109,582 ops/sec | ±0.75% | 93 | ✓ |
-| DataView#getFloat64 | 91,235 ops/sec | ±0.81% | 90 | |
-| NodeBuffer#readDoubleBE | 88,593 ops/sec | ±0.96% | 81 | |
-| | | | |
-| BrowserBuffer#readFloatBE | 139,854 ops/sec | ±1.03% | 85 | ✓ |
-| DataView#getFloat32 | 98,744 ops/sec | ±0.80% | 89 | |
-| NodeBuffer#readFloatBE | 92,769 ops/sec | ±0.94% | 93 | |
-| | | | |
-| BrowserBuffer#readUInt32LE | 710,861 ops/sec | ±0.82% | 92 | |
-| DataView#getUint32 | 117,893 ops/sec | ±0.84% | 91 | |
-| NodeBuffer#readUInt32LE | 851,412 ops/sec | ±0.72% | 93 | ✓ |
-| | | | |
-| BrowserBuffer#slice | 1,673,877 ops/sec | ±0.73% | 94 | |
-| Uint8Array#subarray | 6,919,243 ops/sec | ±0.67% | 90 | ✓ |
-| NodeBuffer#slice | 4,617,604 ops/sec | ±0.79% | 93 | |
-| | | | |
-| BrowserBuffer#writeFloatBE | 66,011 ops/sec | ±0.75% | 93 | |
-| DataView#setFloat32 | 127,760 ops/sec | ±0.72% | 93 | ✓ |
-| NodeBuffer#writeFloatBE | 103,352 ops/sec | ±0.83% | 93 | |
-
-### iojs 1.8.1
-
-| Method | Operations | Accuracy | Sampled | Fastest |
-|:-------|:-----------|:---------|:--------|:-------:|
-| BrowserBuffer#bracket-notation | 10,990,488 ops/sec | ±1.11% | 91 | |
-| Uint8Array#bracket-notation | 11,268,757 ops/sec | ±0.65% | 97 | |
-| NodeBuffer#bracket-notation | 11,353,260 ops/sec | ±0.83% | 94 | ✓ |
-| | | | |
-| BrowserBuffer#concat | 378,954 ops/sec | ±0.74% | 94 | |
-| Uint8Array#concat | 1,358,288 ops/sec | ±0.97% | 87 | |
-| NodeBuffer#concat | 1,934,050 ops/sec | ±1.11% | 78 | ✓ |
-| | | | |
-| BrowserBuffer#copy(16000) | 894,538 ops/sec | ±0.56% | 84 | |
-| Uint8Array#copy(16000) | 1,442,656 ops/sec | ±0.71% | 96 | |
-| NodeBuffer#copy(16000) | 1,457,898 ops/sec | ±0.53% | 92 | ✓ |
-| | | | |
-| BrowserBuffer#copy(16) | 12,870,457 ops/sec | ±0.67% | 95 | |
-| Uint8Array#copy(16) | 16,643,989 ops/sec | ±0.61% | 93 | ✓ |
-| NodeBuffer#copy(16) | 14,885,848 ops/sec | ±0.74% | 94 | |
-| | | | |
-| BrowserBuffer#new(16000) | 109,264 ops/sec | ±4.21% | 63 | |
-| Uint8Array#new(16000) | 138,916 ops/sec | ±1.87% | 61 | |
-| NodeBuffer#new(16000) | 281,449 ops/sec | ±3.58% | 51 | ✓ |
-| | | | |
-| BrowserBuffer#new(16) | 1,362,935 ops/sec | ±0.56% | 99 | |
-| Uint8Array#new(16) | 6,193,090 ops/sec | ±0.64% | 95 | ✓ |
-| NodeBuffer#new(16) | 4,745,425 ops/sec | ±1.56% | 90 | |
-| | | | |
-| BrowserBuffer#readDoubleBE | 118,127 ops/sec | ±0.59% | 93 | ✓ |
-| DataView#getFloat64 | 107,332 ops/sec | ±0.65% | 91 | |
-| NodeBuffer#readDoubleBE | 116,274 ops/sec | ±0.94% | 95 | |
-| | | | |
-| BrowserBuffer#readFloatBE | 150,326 ops/sec | ±0.58% | 95 | ✓ |
-| DataView#getFloat32 | 110,541 ops/sec | ±0.57% | 98 | |
-| NodeBuffer#readFloatBE | 121,599 ops/sec | ±0.60% | 87 | |
-| | | | |
-| BrowserBuffer#readUInt32LE | 814,147 ops/sec | ±0.62% | 93 | |
-| DataView#getUint32 | 137,592 ops/sec | ±0.64% | 90 | |
-| NodeBuffer#readUInt32LE | 931,650 ops/sec | ±0.71% | 96 | ✓ |
-| | | | |
-| BrowserBuffer#slice | 878,590 ops/sec | ±0.68% | 93 | |
-| Uint8Array#subarray | 2,843,308 ops/sec | ±1.02% | 90 | |
-| NodeBuffer#slice | 4,998,316 ops/sec | ±0.68% | 90 | ✓ |
-| | | | |
-| BrowserBuffer#writeFloatBE | 65,927 ops/sec | ±0.74% | 93 | |
-| DataView#setFloat32 | 139,823 ops/sec | ±0.97% | 89 | ✓ |
-| NodeBuffer#writeFloatBE | 135,763 ops/sec | ±0.65% | 96 | |
-| | | | |
-
-## Testing the project
-
-First, install the project:
-
-    npm install
-
-Then, to run tests in Node.js, run:
-
-    npm run test-node
-
-To test locally in a browser, you can run:
-
-    npm run test-browser-es5-local # For ES5 browsers that don't support ES6
-    npm run test-browser-es6-local # For ES6 compliant browsers
-
-This will print out a URL that you can then open in a browser to run the tests, using [airtap](https://www.npmjs.com/package/airtap).
-
-To run automated browser tests using Saucelabs, ensure that your `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables are set, then run:
-
-    npm test
-
-This is what's run in Travis, to check against various browsers. The list of browsers is kept in the `bin/airtap-es5.yml` and `bin/airtap-es6.yml` files.
-
-## JavaScript Standard Style
-
-This module uses [JavaScript Standard Style](https://github.com/feross/standard).
-
-[![JavaScript Style Guide](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)
-
-To test that the code conforms to the style, `npm install` and run:
-
-    ./node_modules/.bin/standard
-
-## credit
-
-This was originally forked from [buffer-browserify](https://github.com/toots/buffer-browserify).
-
-## Security Policies and Procedures
-
-The `buffer` team and community take all security bugs in `buffer` seriously. Please see our [security policies and procedures](https://github.com/feross/security) document to learn how to report issues.
-
-## license
-
-MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org), and other contributors. Originally forked from an MIT-licensed module by Romain Beauxis.
diff --git a/device_home/node_modules/bytes/History.md b/device_home/node_modules/bytes/History.md
deleted file mode 100644 (file)
index cf6a5bb..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-3.1.0 / 2019-01-22
-==================
-
-  * Add petabyte (`pb`) support
-
-3.0.0 / 2017-08-31
-==================
-
-  * Change "kB" to "KB" in format output
-  * Remove support for Node.js 0.6
-  * Remove support for ComponentJS
-
-2.5.0 / 2017-03-24
-==================
-
-  * Add option "unit"
-
-2.4.0 / 2016-06-01
-==================
-
-  * Add option "unitSeparator"
-
-2.3.0 / 2016-02-15
-==================
-
-  * Drop partial bytes on all parsed units
-  * Fix non-finite numbers to `.format` to return `null`
-  * Fix parsing byte string that looks like hex
-  * perf: hoist regular expressions
-
-2.2.0 / 2015-11-13
-==================
-
-  * add option "decimalPlaces"
-  * add option "fixedDecimals"
-
-2.1.0 / 2015-05-21
-==================
-
-  * add `.format` export
-  * add `.parse` export
-
-2.0.2 / 2015-05-20
-==================
-
-  * remove map recreation
-  * remove unnecessary object construction
-
-2.0.1 / 2015-05-07
-==================
-
-  * fix browserify require
-  * remove node.extend dependency
-
-2.0.0 / 2015-04-12
-==================
-
-  * add option "case"
-  * add option "thousandsSeparator"
-  * return "null" on invalid parse input
-  * support proper round-trip: bytes(bytes(num)) === num
-  * units no longer case sensitive when parsing
-
-1.0.0 / 2014-05-05
-==================
-
- * add negative support. fixes #6
-
-0.3.0 / 2014-03-19
-==================
-
- * added terabyte support
-
-0.2.1 / 2013-04-01
-==================
-
-  * add .component
-
-0.2.0 / 2012-10-28
-==================
-
-  * bytes(200).should.eql('200b')
-
-0.1.0 / 2012-07-04
-==================
-
-  * add bytes to string conversion [yields]
diff --git a/device_home/node_modules/bytes/Readme.md b/device_home/node_modules/bytes/Readme.md
deleted file mode 100644 (file)
index 6ad1ec6..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-# Bytes utility
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa.
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```bash
-$ npm install bytes
-```
-
-## Usage
-
-```js
-var bytes = require('bytes');
-```
-
-#### bytes.format(number value, [options]): string|null
-
-Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is
- rounded.
-
-**Arguments**
-
-| Name    | Type     | Description        |
-|---------|----------|--------------------|
-| value   | `number` | Value in bytes     |
-| options | `Object` | Conversion options |
-
-**Options**
-
-| Property          | Type   | Description                                                                             |
-|-------------------|--------|-----------------------------------------------------------------------------------------|
-| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. |
-| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` |
-| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `.`... Default value to `''`. |
-| unit | `string`|`null` | The unit in which the result will be returned (B/KB/MB/GB/TB). Default value to `''` (which means auto detect). |
-| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. |
-
-**Returns**
-
-| Name    | Type             | Description                                     |
-|---------|------------------|-------------------------------------------------|
-| results | `string`|`null` | Return null upon error. String value otherwise. |
-
-**Example**
-
-```js
-bytes(1024);
-// output: '1KB'
-
-bytes(1000);
-// output: '1000B'
-
-bytes(1000, {thousandsSeparator: ' '});
-// output: '1 000B'
-
-bytes(1024 * 1.7, {decimalPlaces: 0});
-// output: '2KB'
-
-bytes(1024, {unitSeparator: ' '});
-// output: '1 KB'
-
-```
-
-#### bytes.parse(string|number value): number|null
-
-Parse the string value into an integer in bytes. If no unit is given, or `value`
-is a number, it is assumed the value is in bytes.
-
-Supported units and abbreviations are as follows and are case-insensitive:
-
-  * `b` for bytes
-  * `kb` for kilobytes
-  * `mb` for megabytes
-  * `gb` for gigabytes
-  * `tb` for terabytes
-  * `pb` for petabytes
-
-The units are in powers of two, not ten. This means 1kb = 1024b according to this parser.
-
-**Arguments**
-
-| Name          | Type   | Description        |
-|---------------|--------|--------------------|
-| value   | `string`|`number` | String to parse, or number in bytes.   |
-
-**Returns**
-
-| Name    | Type        | Description             |
-|---------|-------------|-------------------------|
-| results | `number`|`null` | Return null upon error. Value in bytes otherwise. |
-
-**Example**
-
-```js
-bytes('1KB');
-// output: 1024
-
-bytes('1024');
-// output: 1024
-
-bytes(1024);
-// output: 1KB
-```
-
-## License 
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/visionmedia/bytes.js/master
-[coveralls-url]: https://coveralls.io/r/visionmedia/bytes.js?branch=master
-[downloads-image]: https://badgen.net/npm/dm/bytes
-[downloads-url]: https://npmjs.org/package/bytes
-[npm-image]: https://badgen.net/npm/node/bytes
-[npm-url]: https://npmjs.org/package/bytes
-[travis-image]: https://badgen.net/travis/visionmedia/bytes.js/master
-[travis-url]: https://travis-ci.org/visionmedia/bytes.js
diff --git a/device_home/node_modules/camelcase/readme.md b/device_home/node_modules/camelcase/readme.md
deleted file mode 100644 (file)
index fde2726..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-# camelcase [![Build Status](https://travis-ci.org/sindresorhus/camelcase.svg?branch=master)](https://travis-ci.org/sindresorhus/camelcase)
-
-> Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar`
-
----
-
-<div align="center">
-       <b>
-               <a href="https://tidelift.com/subscription/pkg/npm-camelcase?utm_source=npm-camelcase&utm_medium=referral&utm_campaign=readme">Get professional support for 'camelcase' with a Tidelift subscription</a>
-       </b>
-       <br>
-       <sub>
-               Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
-       </sub>
-</div>
-
----
-
-## Install
-
-```
-$ npm install camelcase
-```
-
-
-## Usage
-
-```js
-const camelCase = require('camelcase');
-
-camelCase('foo-bar');
-//=> 'fooBar'
-
-camelCase('foo_bar');
-//=> 'fooBar'
-
-camelCase('Foo-Bar');
-//=> 'fooBar'
-
-camelCase('Foo-Bar', {pascalCase: true});
-//=> 'FooBar'
-
-camelCase('--foo.bar', {pascalCase: false});
-//=> 'fooBar'
-
-camelCase('foo bar');
-//=> 'fooBar'
-
-console.log(process.argv[3]);
-//=> '--foo-bar'
-camelCase(process.argv[3]);
-//=> 'fooBar'
-
-camelCase(['foo', 'bar']);
-//=> 'fooBar'
-
-camelCase(['__foo__', '--bar'], {pascalCase: true});
-//=> 'FooBar'
-```
-
-
-## API
-
-### camelCase(input, [options])
-
-#### input
-
-Type: `string` `string[]`
-
-String to convert to camel case.
-
-#### options
-
-Type: `Object`
-
-##### pascalCase
-
-Type: `boolean`<br>
-Default: `false`
-
-Uppercase the first character: `foo-bar` → `FooBar`
-
-
-## Security
-
-To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
-
-
-## Related
-
-- [decamelize](https://github.com/sindresorhus/decamelize) - The inverse of this module
-- [uppercamelcase](https://github.com/SamVerschueren/uppercamelcase) - Like this module, but to PascalCase instead of camelCase
-- [titleize](https://github.com/sindresorhus/titleize) - Capitalize every word in string
-- [humanize-string](https://github.com/sindresorhus/humanize-string) - Convert a camelized/dasherized/underscored string into a humanized one
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/chalk/readme.md b/device_home/node_modules/chalk/readme.md
deleted file mode 100644 (file)
index d298e2c..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-<h1 align="center">
-       <br>
-       <br>
-       <img width="320" src="media/logo.svg" alt="Chalk">
-       <br>
-       <br>
-       <br>
-</h1>
-
-> Terminal string styling done right
-
-[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) [![Mentioned in Awesome Node.js](https://awesome.re/mentioned-badge.svg)](https://github.com/sindresorhus/awesome-nodejs)
-
-### [See what's new in Chalk 2](https://github.com/chalk/chalk/releases/tag/v2.0.0)
-
-<img src="https://cdn.rawgit.com/chalk/ansi-styles/8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg" alt="" width="900">
-
-
-## Highlights
-
-- Expressive API
-- Highly performant
-- Ability to nest styles
-- [256/Truecolor color support](#256-and-truecolor-color-support)
-- Auto-detects color support
-- Doesn't extend `String.prototype`
-- Clean and focused
-- Actively maintained
-- [Used by ~23,000 packages](https://www.npmjs.com/browse/depended/chalk) as of December 31, 2017
-
-
-## Install
-
-```console
-$ npm install chalk
-```
-
-<a href="https://www.patreon.com/sindresorhus">
-       <img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" width="160">
-</a>
-
-
-## Usage
-
-```js
-const chalk = require('chalk');
-
-console.log(chalk.blue('Hello world!'));
-```
-
-Chalk comes with an easy to use composable API where you just chain and nest the styles you want.
-
-```js
-const chalk = require('chalk');
-const log = console.log;
-
-// Combine styled and normal strings
-log(chalk.blue('Hello') + ' World' + chalk.red('!'));
-
-// Compose multiple styles using the chainable API
-log(chalk.blue.bgRed.bold('Hello world!'));
-
-// Pass in multiple arguments
-log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));
-
-// Nest styles
-log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));
-
-// Nest styles of the same type even (color, underline, background)
-log(chalk.green(
-       'I am a green line ' +
-       chalk.blue.underline.bold('with a blue substring') +
-       ' that becomes green again!'
-));
-
-// ES2015 template literal
-log(`
-CPU: ${chalk.red('90%')}
-RAM: ${chalk.green('40%')}
-DISK: ${chalk.yellow('70%')}
-`);
-
-// ES2015 tagged template literal
-log(chalk`
-CPU: {red ${cpu.totalPercent}%}
-RAM: {green ${ram.used / ram.total * 100}%}
-DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%}
-`);
-
-// Use RGB colors in terminal emulators that support it.
-log(chalk.keyword('orange')('Yay for orange colored text!'));
-log(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));
-log(chalk.hex('#DEADED').bold('Bold gray!'));
-```
-
-Easily define your own themes:
-
-```js
-const chalk = require('chalk');
-
-const error = chalk.bold.red;
-const warning = chalk.keyword('orange');
-
-console.log(error('Error!'));
-console.log(warning('Warning!'));
-```
-
-Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args):
-
-```js
-const name = 'Sindre';
-console.log(chalk.green('Hello %s'), name);
-//=> 'Hello Sindre'
-```
-
-
-## API
-
-### chalk.`<style>[.<style>...](string, [string...])`
-
-Example: `chalk.red.bold.underline('Hello', 'world');`
-
-Chain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.
-
-Multiple arguments will be separated by space.
-
-### chalk.enabled
-
-Color support is automatically detected, as is the level (see `chalk.level`). However, if you'd like to simply enable/disable Chalk, you can do so via the `.enabled` property.
-
-Chalk is enabled by default unless explicitly disabled via the constructor or `chalk.level` is `0`.
-
-If you need to change this in a reusable module, create a new instance:
-
-```js
-const ctx = new chalk.constructor({enabled: false});
-```
-
-### chalk.level
-
-Color support is automatically detected, but you can override it by setting the `level` property. You should however only do this in your own code as it applies globally to all Chalk consumers.
-
-If you need to change this in a reusable module, create a new instance:
-
-```js
-const ctx = new chalk.constructor({level: 0});
-```
-
-Levels are as follows:
-
-0. All colors disabled
-1. Basic color support (16 colors)
-2. 256 color support
-3. Truecolor support (16 million colors)
-
-### chalk.supportsColor
-
-Detect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.
-
-Can be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, add the environment variable `FORCE_COLOR=1` to forcefully enable color or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.
-
-Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.
-
-
-## Styles
-
-### Modifiers
-
-- `reset`
-- `bold`
-- `dim`
-- `italic` *(Not widely supported)*
-- `underline`
-- `inverse`
-- `hidden`
-- `strikethrough` *(Not widely supported)*
-- `visible` (Text is emitted only if enabled)
-
-### Colors
-
-- `black`
-- `red`
-- `green`
-- `yellow`
-- `blue` *(On Windows the bright version is used since normal blue is illegible)*
-- `magenta`
-- `cyan`
-- `white`
-- `gray` ("bright black")
-- `redBright`
-- `greenBright`
-- `yellowBright`
-- `blueBright`
-- `magentaBright`
-- `cyanBright`
-- `whiteBright`
-
-### Background colors
-
-- `bgBlack`
-- `bgRed`
-- `bgGreen`
-- `bgYellow`
-- `bgBlue`
-- `bgMagenta`
-- `bgCyan`
-- `bgWhite`
-- `bgBlackBright`
-- `bgRedBright`
-- `bgGreenBright`
-- `bgYellowBright`
-- `bgBlueBright`
-- `bgMagentaBright`
-- `bgCyanBright`
-- `bgWhiteBright`
-
-
-## Tagged template literal
-
-Chalk can be used as a [tagged template literal](http://exploringjs.com/es6/ch_template-literals.html#_tagged-template-literals).
-
-```js
-const chalk = require('chalk');
-
-const miles = 18;
-const calculateFeet = miles => miles * 5280;
-
-console.log(chalk`
-  There are {bold 5280 feet} in a mile.
-  In {bold ${miles} miles}, there are {green.bold ${calculateFeet(miles)} feet}.
-`);
-```
-
-Blocks are delimited by an opening curly brace (`{`), a style, some content, and a closing curly brace (`}`).
-
-Template styles are chained exactly like normal Chalk styles. The following two statements are equivalent:
-
-```js
-console.log(chalk.bold.rgb(10, 100, 200)('Hello!'));
-console.log(chalk`{bold.rgb(10,100,200) Hello!}`);
-```
-
-Note that function styles (`rgb()`, `hsl()`, `keyword()`, etc.) may not contain spaces between parameters.
-
-All interpolated values (`` chalk`${foo}` ``) are converted to strings via the `.toString()` method. All curly braces (`{` and `}`) in interpolated value strings are escaped.
-
-
-## 256 and Truecolor color support
-
-Chalk supports 256 colors and [Truecolor](https://gist.github.com/XVilka/8346728) (16 million colors) on supported terminal apps.
-
-Colors are downsampled from 16 million RGB values to an ANSI color format that is supported by the terminal emulator (or by specifying `{level: n}` as a Chalk option). For example, Chalk configured to run at level 1 (basic color support) will downsample an RGB value of #FF0000 (red) to 31 (ANSI escape for red).
-
-Examples:
-
-- `chalk.hex('#DEADED').underline('Hello, world!')`
-- `chalk.keyword('orange')('Some orange text')`
-- `chalk.rgb(15, 100, 204).inverse('Hello!')`
-
-Background versions of these models are prefixed with `bg` and the first level of the module capitalized (e.g. `keyword` for foreground colors and `bgKeyword` for background colors).
-
-- `chalk.bgHex('#DEADED').underline('Hello, world!')`
-- `chalk.bgKeyword('orange')('Some orange text')`
-- `chalk.bgRgb(15, 100, 204).inverse('Hello!')`
-
-The following color models can be used:
-
-- [`rgb`](https://en.wikipedia.org/wiki/RGB_color_model) - Example: `chalk.rgb(255, 136, 0).bold('Orange!')`
-- [`hex`](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) - Example: `chalk.hex('#FF8800').bold('Orange!')`
-- [`keyword`](https://www.w3.org/wiki/CSS/Properties/color/keywords) (CSS keywords) - Example: `chalk.keyword('orange').bold('Orange!')`
-- [`hsl`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsl(32, 100, 50).bold('Orange!')`
-- [`hsv`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsv(32, 100, 100).bold('Orange!')`
-- [`hwb`](https://en.wikipedia.org/wiki/HWB_color_model)  - Example: `chalk.hwb(32, 0, 50).bold('Orange!')`
-- `ansi16`
-- `ansi256`
-
-
-## Windows
-
-If you're on Windows, do yourself a favor and use [`cmder`](http://cmder.net/) instead of `cmd.exe`.
-
-
-## Origin story
-
-[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68) and the package is unmaintained. Although there are other packages, they either do too much or not enough. Chalk is a clean and focused alternative.
-
-
-## Related
-
-- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module
-- [ansi-styles](https://github.com/chalk/ansi-styles) - ANSI escape codes for styling strings in the terminal
-- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color
-- [strip-ansi](https://github.com/chalk/strip-ansi) - Strip ANSI escape codes
-- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Strip ANSI escape codes from a stream
-- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
-- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
-- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes
-- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes
-- [color-convert](https://github.com/qix-/color-convert) - Converts colors between different models
-- [chalk-animation](https://github.com/bokub/chalk-animation) - Animate strings in the terminal
-- [gradient-string](https://github.com/bokub/gradient-string) - Apply color gradients to strings
-- [chalk-pipe](https://github.com/LitoMore/chalk-pipe) - Create chalk style schemes with simpler style strings
-- [terminal-link](https://github.com/sindresorhus/terminal-link) - Create clickable links in the terminal
-
-
-## Maintainers
-
-- [Sindre Sorhus](https://github.com/sindresorhus)
-- [Josh Junon](https://github.com/qix-)
-
-
-## License
-
-MIT
diff --git a/device_home/node_modules/cliui/CHANGELOG.md b/device_home/node_modules/cliui/CHANGELOG.md
deleted file mode 100644 (file)
index 37f259a..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-# [5.0.0](https://github.com/yargs/cliui/compare/v4.1.0...v5.0.0) (2019-04-10)
-
-
-### Bug Fixes
-
-* Update wrap-ansi to fix compatibility with latest versions of chalk. ([#60](https://github.com/yargs/cliui/issues/60)) ([7bf79ae](https://github.com/yargs/cliui/commit/7bf79ae))
-
-
-### BREAKING CHANGES
-
-* Drop support for node < 6.
-
-
-
-<a name="4.1.0"></a>
-# [4.1.0](https://github.com/yargs/cliui/compare/v4.0.0...v4.1.0) (2018-04-23)
-
-
-### Features
-
-* add resetOutput method ([#57](https://github.com/yargs/cliui/issues/57)) ([7246902](https://github.com/yargs/cliui/commit/7246902))
-
-
-
-<a name="4.0.0"></a>
-# [4.0.0](https://github.com/yargs/cliui/compare/v3.2.0...v4.0.0) (2017-12-18)
-
-
-### Bug Fixes
-
-* downgrades strip-ansi to version 3.0.1 ([#54](https://github.com/yargs/cliui/issues/54)) ([5764c46](https://github.com/yargs/cliui/commit/5764c46))
-* set env variable FORCE_COLOR. ([#56](https://github.com/yargs/cliui/issues/56)) ([7350e36](https://github.com/yargs/cliui/commit/7350e36))
-
-
-### Chores
-
-* drop support for node < 4 ([#53](https://github.com/yargs/cliui/issues/53)) ([b105376](https://github.com/yargs/cliui/commit/b105376))
-
-
-### Features
-
-* add fallback for window width ([#45](https://github.com/yargs/cliui/issues/45)) ([d064922](https://github.com/yargs/cliui/commit/d064922))
-
-
-### BREAKING CHANGES
-
-* officially drop support for Node < 4
-
-
-
-<a name="3.2.0"></a>
-# [3.2.0](https://github.com/yargs/cliui/compare/v3.1.2...v3.2.0) (2016-04-11)
-
-
-### Bug Fixes
-
-* reduces tarball size ([acc6c33](https://github.com/yargs/cliui/commit/acc6c33))
-
-### Features
-
-* adds standard-version for release management ([ff84e32](https://github.com/yargs/cliui/commit/ff84e32))
diff --git a/device_home/node_modules/cliui/README.md b/device_home/node_modules/cliui/README.md
deleted file mode 100644 (file)
index deacfa0..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-# cliui
-
-[![Build Status](https://travis-ci.org/yargs/cliui.svg)](https://travis-ci.org/yargs/cliui)
-[![Coverage Status](https://coveralls.io/repos/yargs/cliui/badge.svg?branch=)](https://coveralls.io/r/yargs/cliui?branch=)
-[![NPM version](https://img.shields.io/npm/v/cliui.svg)](https://www.npmjs.com/package/cliui)
-[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version)
-
-easily create complex multi-column command-line-interfaces.
-
-## Example
-
-```js
-var ui = require('cliui')()
-
-ui.div('Usage: $0 [command] [options]')
-
-ui.div({
-  text: 'Options:',
-  padding: [2, 0, 2, 0]
-})
-
-ui.div(
-  {
-    text: "-f, --file",
-    width: 20,
-    padding: [0, 4, 0, 4]
-  },
-  {
-    text: "the file to load." +
-      chalk.green("(if this description is long it wraps).")
-    ,
-    width: 20
-  },
-  {
-    text: chalk.red("[required]"),
-    align: 'right'
-  }
-)
-
-console.log(ui.toString())
-```
-
-<img width="500" src="screenshot.png">
-
-## Layout DSL
-
-cliui exposes a simple layout DSL:
-
-If you create a single `ui.div`, passing a string rather than an
-object:
-
-* `\n`: characters will be interpreted as new rows.
-* `\t`: characters will be interpreted as new columns.
-* `\s`: characters will be interpreted as padding.
-
-**as an example...**
-
-```js
-var ui = require('./')({
-  width: 60
-})
-
-ui.div(
-  'Usage: node ./bin/foo.js\n' +
-  '  <regex>\t  provide a regex\n' +
-  '  <glob>\t  provide a glob\t [required]'
-)
-
-console.log(ui.toString())
-```
-
-**will output:**
-
-```shell
-Usage: node ./bin/foo.js
-  <regex>  provide a regex
-  <glob>   provide a glob          [required]
-```
-
-## Methods
-
-```js
-cliui = require('cliui')
-```
-
-### cliui({width: integer})
-
-Specify the maximum width of the UI being generated.
-If no width is provided, cliui will try to get the current window's width and use it, and if that doesn't work, width will be set to `80`.
-
-### cliui({wrap: boolean})
-
-Enable or disable the wrapping of text in a column.
-
-### cliui.div(column, column, column)
-
-Create a row with any number of columns, a column
-can either be a string, or an object with the following
-options:
-
-* **text:** some text to place in the column.
-* **width:** the width of a column.
-* **align:** alignment, `right` or `center`.
-* **padding:** `[top, right, bottom, left]`.
-* **border:** should a border be placed around the div?
-
-### cliui.span(column, column, column)
-
-Similar to `div`, except the next row will be appended without
-a new line being created.
-
-### cliui.resetOutput()
-
-Resets the UI elements of the current cliui instance, maintaining the values
-set for `width` and `wrap`.
diff --git a/device_home/node_modules/color-convert/CHANGELOG.md b/device_home/node_modules/color-convert/CHANGELOG.md
deleted file mode 100644 (file)
index 0a7bce4..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# 1.0.0 - 2016-01-07
-
-- Removed: unused speed test
-- Added: Automatic routing between previously unsupported conversions
-([#27](https://github.com/Qix-/color-convert/pull/27))
-- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions
-([#27](https://github.com/Qix-/color-convert/pull/27))
-- Removed: `convert()` class
-([#27](https://github.com/Qix-/color-convert/pull/27))
-- Changed: all functions to lookup dictionary
-([#27](https://github.com/Qix-/color-convert/pull/27))
-- Changed: `ansi` to `ansi256`
-([#27](https://github.com/Qix-/color-convert/pull/27))
-- Fixed: argument grouping for functions requiring only one argument
-([#27](https://github.com/Qix-/color-convert/pull/27))
-
-# 0.6.0 - 2015-07-23
-
-- Added: methods to handle
-[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors:
-  - rgb2ansi16
-  - rgb2ansi
-  - hsl2ansi16
-  - hsl2ansi
-  - hsv2ansi16
-  - hsv2ansi
-  - hwb2ansi16
-  - hwb2ansi
-  - cmyk2ansi16
-  - cmyk2ansi
-  - keyword2ansi16
-  - keyword2ansi
-  - ansi162rgb
-  - ansi162hsl
-  - ansi162hsv
-  - ansi162hwb
-  - ansi162cmyk
-  - ansi162keyword
-  - ansi2rgb
-  - ansi2hsl
-  - ansi2hsv
-  - ansi2hwb
-  - ansi2cmyk
-  - ansi2keyword
-([#18](https://github.com/harthur/color-convert/pull/18))
-
-# 0.5.3 - 2015-06-02
-
-- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]`
-([#15](https://github.com/harthur/color-convert/issues/15))
-
----
-
-Check out commit logs for older releases
diff --git a/device_home/node_modules/color-convert/README.md b/device_home/node_modules/color-convert/README.md
deleted file mode 100644 (file)
index d4b08fc..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-# color-convert
-
-[![Build Status](https://travis-ci.org/Qix-/color-convert.svg?branch=master)](https://travis-ci.org/Qix-/color-convert)
-
-Color-convert is a color conversion library for JavaScript and node.
-It converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s (will round to closest):
-
-```js
-var convert = require('color-convert');
-
-convert.rgb.hsl(140, 200, 100);             // [96, 48, 59]
-convert.keyword.rgb('blue');                // [0, 0, 255]
-
-var rgbChannels = convert.rgb.channels;     // 3
-var cmykChannels = convert.cmyk.channels;   // 4
-var ansiChannels = convert.ansi16.channels; // 1
-```
-
-# Install
-
-```console
-$ npm install color-convert
-```
-
-# API
-
-Simply get the property of the _from_ and _to_ conversion that you're looking for.
-
-All functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function.
-
-All 'from' functions have a hidden property called `.channels` that indicates the number of channels the function expects (not including alpha).
-
-```js
-var convert = require('color-convert');
-
-// Hex to LAB
-convert.hex.lab('DEADBF');         // [ 76, 21, -2 ]
-convert.hex.lab.raw('DEADBF');     // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ]
-
-// RGB to CMYK
-convert.rgb.cmyk(167, 255, 4);     // [ 35, 0, 98, 0 ]
-convert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ]
-```
-
-### Arrays
-All functions that accept multiple arguments also support passing an array.
-
-Note that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.)
-
-```js
-var convert = require('color-convert');
-
-convert.rgb.hex(123, 45, 67);      // '7B2D43'
-convert.rgb.hex([123, 45, 67]);    // '7B2D43'
-```
-
-## Routing
-
-Conversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex).
-
-Keep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of "direct" (single-step) conversions, see [conversions.js](conversions.js).
-
-# Contribute
-
-If there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request.
-
-# License
-Copyright &copy; 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE).
diff --git a/device_home/node_modules/color-name/README.md b/device_home/node_modules/color-name/README.md
deleted file mode 100644 (file)
index 932b979..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors.\r
-\r
-[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/)\r
-\r
-\r
-```js\r
-var colors = require('color-name');\r
-colors.red //[255,0,0]\r
-```\r
-\r
-<a href="LICENSE"><img src="https://upload.wikimedia.org/wikipedia/commons/0/0c/MIT_logo.svg" width="120"/></a>\r
diff --git a/device_home/node_modules/component-bind/History.md b/device_home/node_modules/component-bind/History.md
deleted file mode 100644 (file)
index 2795fdb..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-1.0.0 / 2014-05-27
-==================
-
-  * index: use slice ref (#7, @viatropos)
-  * package: rename package to "component-bind"
-  * package: add "repository" field (#6, @repoify)
-  * package: add "component" section
-
-0.0.1 / 2010-01-03
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/component-bind/Readme.md b/device_home/node_modules/component-bind/Readme.md
deleted file mode 100644 (file)
index 6a8febc..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-# bind
-
-  Function binding utility.
-
-## Installation
-
-```
-$ component install component/bind
-```
-
-## API
-
-   - [bind(obj, fn)](#bindobj-fn)
-   - [bind(obj, fn, ...)](#bindobj-fn-)
-   - [bind(obj, name)](#bindobj-name)
-<a name=""></a>
-<a name="bindobj-fn"></a>
-### bind(obj, fn)
-should bind the function to the given object.
-
-```js
-var tobi = { name: 'tobi' };
-
-function name() {
-  return this.name;
-}
-
-var fn = bind(tobi, name);
-fn().should.equal('tobi');
-```
-
-<a name="bindobj-fn-"></a>
-### bind(obj, fn, ...)
-should curry the remaining arguments.
-
-```js
-function add(a, b) {
-  return a + b;
-}
-
-bind(null, add)(1, 2).should.equal(3);
-bind(null, add, 1)(2).should.equal(3);
-bind(null, add, 1, 2)().should.equal(3);
-```
-
-<a name="bindobj-name"></a>
-### bind(obj, name)
-should bind the method of the given name.
-
-```js
-var tobi = { name: 'tobi' };
-
-tobi.getName = function() {
-  return this.name;
-};
-
-var fn = bind(tobi, 'getName');
-fn().should.equal('tobi');
-```
-
-## License 
-
-  MIT
\ No newline at end of file
diff --git a/device_home/node_modules/component-emitter/History.md b/device_home/node_modules/component-emitter/History.md
deleted file mode 100644 (file)
index 30d07d6..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-\r
-1.3.0 / 2018-04-15\r
-==================\r
-\r
- * removed bower support\r
- * expose emitter on `exports`\r
- * prevent de-optimization from using `arguments`\r
-\r
-1.2.1 / 2016-04-18\r
-==================\r
-\r
- * enable client side use\r
-\r
-1.2.0 / 2014-02-12\r
-==================\r
-\r
- * prefix events with `$` to support object prototype method names\r
-\r
-1.1.3 / 2014-06-20\r
-==================\r
-\r
- * republish for npm\r
- * add LICENSE file\r
-\r
-1.1.2 / 2014-02-10\r
-==================\r
-\r
-  * package: rename to "component-emitter"\r
-  * package: update "main" and "component" fields\r
-  * Add license to Readme (same format as the other components)\r
-  * created .npmignore\r
-  * travis stuff\r
-\r
-1.1.1 / 2013-12-01\r
-==================\r
-\r
-  * fix .once adding .on to the listener\r
-  * docs: Emitter#off()\r
-  * component: add `.repo` prop\r
-\r
-1.1.0 / 2013-10-20\r
-==================\r
-\r
- * add `.addEventListener()` and `.removeEventListener()` aliases\r
-\r
-1.0.1 / 2013-06-27\r
-==================\r
-\r
- * add support for legacy ie\r
-\r
-1.0.0 / 2013-02-26\r
-==================\r
-\r
-  * add `.off()` support for removing all listeners\r
-\r
-0.0.6 / 2012-10-08\r
-==================\r
-\r
-  * add `this._callbacks` initialization to prevent funky gotcha\r
-\r
-0.0.5 / 2012-09-07\r
-==================\r
-\r
-  * fix `Emitter.call(this)` usage\r
-\r
-0.0.3 / 2012-07-11\r
-==================\r
-\r
-  * add `.listeners()`\r
-  * rename `.has()` to `.hasListeners()`\r
-\r
-0.0.2 / 2012-06-28\r
-==================\r
-\r
-  * fix `.off()` with `.once()`-registered callbacks\r
diff --git a/device_home/node_modules/component-emitter/Readme.md b/device_home/node_modules/component-emitter/Readme.md
deleted file mode 100644 (file)
index 0466411..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-# Emitter [![Build Status](https://travis-ci.org/component/emitter.png)](https://travis-ci.org/component/emitter)\r
-\r
-  Event emitter component.\r
-\r
-## Installation\r
-\r
-```\r
-$ component install component/emitter\r
-```\r
-\r
-## API\r
-\r
-### Emitter(obj)\r
-\r
-  The `Emitter` may also be used as a mixin. For example\r
-  a "plain" object may become an emitter, or you may\r
-  extend an existing prototype.\r
-\r
-  As an `Emitter` instance:\r
-\r
-```js\r
-var Emitter = require('emitter');\r
-var emitter = new Emitter;\r
-emitter.emit('something');\r
-```\r
-\r
-  As a mixin:\r
-\r
-```js\r
-var Emitter = require('emitter');\r
-var user = { name: 'tobi' };\r
-Emitter(user);\r
-\r
-user.emit('im a user');\r
-```\r
-\r
-  As a prototype mixin:\r
-\r
-```js\r
-var Emitter = require('emitter');\r
-Emitter(User.prototype);\r
-```\r
-\r
-### Emitter#on(event, fn)\r
-\r
-  Register an `event` handler `fn`.\r
-\r
-### Emitter#once(event, fn)\r
-\r
-  Register a single-shot `event` handler `fn`,\r
-  removed immediately after it is invoked the\r
-  first time.\r
-\r
-### Emitter#off(event, fn)\r
-\r
-  * Pass `event` and `fn` to remove a listener.\r
-  * Pass `event` to remove all listeners on that event.\r
-  * Pass nothing to remove all listeners on all events.\r
-\r
-### Emitter#emit(event, ...)\r
-\r
-  Emit an `event` with variable option args.\r
-\r
-### Emitter#listeners(event)\r
-\r
-  Return an array of callbacks, or an empty array.\r
-\r
-### Emitter#hasListeners(event)\r
-\r
-  Check if this emitter has `event` handlers.\r
-\r
-## License\r
-\r
-MIT\r
diff --git a/device_home/node_modules/component-inherit/History.md b/device_home/node_modules/component-inherit/History.md
deleted file mode 100644 (file)
index 22d87e1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-0.0.2 / 2012-09-03 
-==================
-
-  * fix typo in package.json
diff --git a/device_home/node_modules/component-inherit/Readme.md b/device_home/node_modules/component-inherit/Readme.md
deleted file mode 100644 (file)
index f03ab27..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# inherit
-
-  Prototype inheritance utility.
-
-## Installation
-
-```
-$ component install component/inherit
-```
-
-## Example
-
-```js
-var inherit = require('inherit');
-
-function Human() {}
-function Woman() {}
-
-inherit(Woman, Human);
-```
-
-## License
-
-  MIT
diff --git a/device_home/node_modules/component-inherit/test/inherit.js b/device_home/node_modules/component-inherit/test/inherit.js
deleted file mode 100644 (file)
index 44beefe..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var inherit=require("..");describe("inherit(a, b)",(function(){it("should inherit b's prototype",(function(){function n(){}function e(){}e.prototype.species="unknown",inherit(n,e);var i=new n;i.species.should.equal("unknown"),i.constructor.should.equal(n)}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/concat-map/example/map.js b/device_home/node_modules/concat-map/example/map.js
deleted file mode 100755 (executable)
index 02e8e26..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var concatMap=require("../"),xs=[1,2,3,4,5,6],ys=concatMap(xs,(function(c){return c%2?[c-.1,c,c+.1]:[]}));console.dir(ys);
\ No newline at end of file
diff --git a/device_home/node_modules/concat-map/test/map.js b/device_home/node_modules/concat-map/test/map.js
deleted file mode 100755 (executable)
index 86f6b84..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var concatMap=require("../"),test=require("tape");test("empty or not",(function(n){var a=[],t=concatMap([1,2,3,4,5,6],(function(n,t){return a.push(t),n%2?[n-.1,n,n+.1]:[]}));n.same(t,[.9,1,1.1,2.9,3,3.1,4.9,5,5.1]),n.same(a,[0,1,2,3,4,5]),n.end()})),test("always something",(function(n){var a=concatMap(["a","b","c","d"],(function(n){return"b"===n?["B","B","B"]:[n]}));n.same(a,["a","B","B","B","c","d"]),n.end()})),test("scalars",(function(n){var a=concatMap(["a","b","c","d"],(function(n){return"b"===n?["B","B","B"]:n}));n.same(a,["a","B","B","B","c","d"]),n.end()})),test("undefs",(function(n){var a=concatMap(["a","b","c","d"],(function(){}));n.same(a,[void 0,void 0,void 0,void 0]),n.end()}));
\ No newline at end of file
diff --git a/device_home/node_modules/content-disposition/HISTORY.md b/device_home/node_modules/content-disposition/HISTORY.md
deleted file mode 100644 (file)
index 63a3d08..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-0.5.3 / 2018-12-17
-==================
-
-  * Use `safe-buffer` for improved Buffer API
-
-0.5.2 / 2016-12-08
-==================
-
-  * Fix `parse` to accept any linear whitespace character
-
-0.5.1 / 2016-01-17
-==================
-
-  * perf: enable strict mode
-
-0.5.0 / 2014-10-11
-==================
-
-  * Add `parse` function
-
-0.4.0 / 2014-09-21
-==================
-
-  * Expand non-Unicode `filename` to the full ISO-8859-1 charset
-
-0.3.0 / 2014-09-20
-==================
-
-  * Add `fallback` option
-  * Add `type` option
-
-0.2.0 / 2014-09-19
-==================
-
-  * Reduce ambiguity of file names with hex escape in buggy browsers
-
-0.1.2 / 2014-09-19
-==================
-
-  * Fix periodic invalid Unicode filename header
-
-0.1.1 / 2014-09-19
-==================
-
-  * Fix invalid characters appearing in `filename*` parameter
-
-0.1.0 / 2014-09-18
-==================
-
-  * Make the `filename` argument optional
-
-0.0.0 / 2014-09-18
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/content-disposition/README.md b/device_home/node_modules/content-disposition/README.md
deleted file mode 100644 (file)
index eebef13..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-# content-disposition
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Create and parse HTTP `Content-Disposition` header
-
-## Installation
-
-```sh
-$ npm install content-disposition
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var contentDisposition = require('content-disposition')
-```
-
-### contentDisposition(filename, options)
-
-Create an attachment `Content-Disposition` header value using the given file name,
-if supplied. The `filename` is optional and if no file name is desired, but you
-want to specify `options`, set `filename` to `undefined`.
-
-<!-- eslint-disable no-undef -->
-
-```js
-res.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf'))
-```
-
-**note** HTTP headers are of the ISO-8859-1 character set. If you are writing this
-header through a means different from `setHeader` in Node.js, you'll want to specify
-the `'binary'` encoding in Node.js.
-
-#### Options
-
-`contentDisposition` accepts these properties in the options object.
-
-##### fallback
-
-If the `filename` option is outside ISO-8859-1, then the file name is actually
-stored in a supplemental field for clients that support Unicode file names and
-a ISO-8859-1 version of the file name is automatically generated.
-
-This specifies the ISO-8859-1 file name to override the automatic generation or
-disables the generation all together, defaults to `true`.
-
-  - A string will specify the ISO-8859-1 file name to use in place of automatic
-    generation.
-  - `false` will disable including a ISO-8859-1 file name and only include the
-    Unicode version (unless the file name is already ISO-8859-1).
-  - `true` will enable automatic generation if the file name is outside ISO-8859-1.
-
-If the `filename` option is ISO-8859-1 and this option is specified and has a
-different value, then the `filename` option is encoded in the extended field
-and this set as the fallback field, even though they are both ISO-8859-1.
-
-##### type
-
-Specifies the disposition type, defaults to `"attachment"`. This can also be
-`"inline"`, or any other value (all values except inline are treated like
-`attachment`, but can convey additional information if both parties agree to
-it). The type is normalized to lower-case.
-
-### contentDisposition.parse(string)
-
-<!-- eslint-disable no-undef, no-unused-vars -->
-
-```js
-var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt')
-```
-
-Parse a `Content-Disposition` header string. This automatically handles extended
-("Unicode") parameters by decoding them and providing them under the standard
-parameter name. This will return an object with the following properties (examples
-are shown for the string `'attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt'`):
-
- - `type`: The disposition type (always lower case). Example: `'attachment'`
-
- - `parameters`: An object of the parameters in the disposition (name of parameter
-   always lower case and extended versions replace non-extended versions). Example:
-   `{filename: "€ rates.txt"}`
-
-## Examples
-
-### Send a file for download
-
-```js
-var contentDisposition = require('content-disposition')
-var destroy = require('destroy')
-var fs = require('fs')
-var http = require('http')
-var onFinished = require('on-finished')
-
-var filePath = '/path/to/public/plans.pdf'
-
-http.createServer(function onRequest (req, res) {
-  // set headers
-  res.setHeader('Content-Type', 'application/pdf')
-  res.setHeader('Content-Disposition', contentDisposition(filePath))
-
-  // send file
-  var stream = fs.createReadStream(filePath)
-  stream.pipe(res)
-  onFinished(res, function () {
-    destroy(stream)
-  })
-})
-```
-
-## Testing
-
-```sh
-$ npm test
-```
-
-## References
-
-- [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][rfc-2616]
-- [RFC 5987: Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters][rfc-5987]
-- [RFC 6266: Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)][rfc-6266]
-- [Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987][tc-2231]
-
-[rfc-2616]: https://tools.ietf.org/html/rfc2616
-[rfc-5987]: https://tools.ietf.org/html/rfc5987
-[rfc-6266]: https://tools.ietf.org/html/rfc6266
-[tc-2231]: http://greenbytes.de/tech/tc2231/
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/content-disposition.svg
-[npm-url]: https://npmjs.org/package/content-disposition
-[node-version-image]: https://img.shields.io/node/v/content-disposition.svg
-[node-version-url]: https://nodejs.org/en/download
-[travis-image]: https://img.shields.io/travis/jshttp/content-disposition.svg
-[travis-url]: https://travis-ci.org/jshttp/content-disposition
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/content-disposition?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg
-[downloads-url]: https://npmjs.org/package/content-disposition
diff --git a/device_home/node_modules/content-type/HISTORY.md b/device_home/node_modules/content-type/HISTORY.md
deleted file mode 100644 (file)
index 8f5cb70..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-1.0.4 / 2017-09-11
-==================
-
-  * perf: skip parameter parsing when no parameters
-
-1.0.3 / 2017-09-10
-==================
-
-  * perf: remove argument reassignment
-
-1.0.2 / 2016-05-09
-==================
-
-  * perf: enable strict mode
-
-1.0.1 / 2015-02-13
-==================
-
-  * Improve missing `Content-Type` header error message
-
-1.0.0 / 2015-02-01
-==================
-
-  * Initial implementation, derived from `media-typer@0.3.0`
diff --git a/device_home/node_modules/content-type/README.md b/device_home/node_modules/content-type/README.md
deleted file mode 100644 (file)
index 3ed6741..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-# content-type
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Create and parse HTTP Content-Type header according to RFC 7231
-
-## Installation
-
-```sh
-$ npm install content-type
-```
-
-## API
-
-```js
-var contentType = require('content-type')
-```
-
-### contentType.parse(string)
-
-```js
-var obj = contentType.parse('image/svg+xml; charset=utf-8')
-```
-
-Parse a content type string. This will return an object with the following
-properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):
-
- - `type`: The media type (the type and subtype, always lower case).
-   Example: `'image/svg+xml'`
-
- - `parameters`: An object of the parameters in the media type (name of parameter
-   always lower case). Example: `{charset: 'utf-8'}`
-
-Throws a `TypeError` if the string is missing or invalid.
-
-### contentType.parse(req)
-
-```js
-var obj = contentType.parse(req)
-```
-
-Parse the `content-type` header from the given `req`. Short-cut for
-`contentType.parse(req.headers['content-type'])`.
-
-Throws a `TypeError` if the `Content-Type` header is missing or invalid.
-
-### contentType.parse(res)
-
-```js
-var obj = contentType.parse(res)
-```
-
-Parse the `content-type` header set on the given `res`. Short-cut for
-`contentType.parse(res.getHeader('content-type'))`.
-
-Throws a `TypeError` if the `Content-Type` header is missing or invalid.
-
-### contentType.format(obj)
-
-```js
-var str = contentType.format({type: 'image/svg+xml'})
-```
-
-Format an object into a content type string. This will return a string of the
-content type for the given object with the following properties (examples are
-shown that produce the string `'image/svg+xml; charset=utf-8'`):
-
- - `type`: The media type (will be lower-cased). Example: `'image/svg+xml'`
-
- - `parameters`: An object of the parameters in the media type (name of the
-   parameter will be lower-cased). Example: `{charset: 'utf-8'}`
-
-Throws a `TypeError` if the object contains an invalid type or parameter names.
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/content-type.svg
-[npm-url]: https://npmjs.org/package/content-type
-[node-version-image]: https://img.shields.io/node/v/content-type.svg
-[node-version-url]: http://nodejs.org/download/
-[travis-image]: https://img.shields.io/travis/jshttp/content-type/master.svg
-[travis-url]: https://travis-ci.org/jshttp/content-type
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-type/master.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/content-type
-[downloads-image]: https://img.shields.io/npm/dm/content-type.svg
-[downloads-url]: https://npmjs.org/package/content-type
diff --git a/device_home/node_modules/cookie-signature/History.md b/device_home/node_modules/cookie-signature/History.md
deleted file mode 100644 (file)
index 78513cc..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-1.0.6 / 2015-02-03
-==================
-
-* use `npm test` instead of `make test` to run tests
-* clearer assertion messages when checking input
-
-
-1.0.5 / 2014-09-05
-==================
-
-* add license to package.json
-
-1.0.4 / 2014-06-25
-==================
-
- * corrected avoidance of timing attacks (thanks @tenbits!)
-
-1.0.3 / 2014-01-28
-==================
-
- * [incorrect] fix for timing attacks
-
-1.0.2 / 2014-01-28
-==================
-
- * fix missing repository warning
- * fix typo in test
-
-1.0.1 / 2013-04-15
-==================
-
-  * Revert "Changed underlying HMAC algo. to sha512."
-  * Revert "Fix for timing attacks on MAC verification."
-
-0.0.1 / 2010-01-03
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/cookie-signature/Readme.md b/device_home/node_modules/cookie-signature/Readme.md
deleted file mode 100644 (file)
index 2559e84..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-# cookie-signature
-
-  Sign and unsign cookies.
-
-## Example
-
-```js
-var cookie = require('cookie-signature');
-
-var val = cookie.sign('hello', 'tobiiscool');
-val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI');
-
-var val = cookie.sign('hello', 'tobiiscool');
-cookie.unsign(val, 'tobiiscool').should.equal('hello');
-cookie.unsign(val, 'luna').should.be.false;
-```
-
-## License 
-
-(The MIT License)
-
-Copyright (c) 2012 LearnBoost &lt;tj@learnboost.com&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/device_home/node_modules/cookie/HISTORY.md b/device_home/node_modules/cookie/HISTORY.md
deleted file mode 100644 (file)
index da2bf24..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-0.4.0 / 2019-05-15
-==================
-
-  * Add `SameSite=None` support
-
-0.3.1 / 2016-05-26
-==================
-
-  * Fix `sameSite: true` to work with draft-7 clients
-    - `true` now sends `SameSite=Strict` instead of `SameSite`
-
-0.3.0 / 2016-05-26
-==================
-
-  * Add `sameSite` option
-    - Replaces `firstPartyOnly` option, never implemented by browsers
-  * Improve error message when `encode` is not a function
-  * Improve error message when `expires` is not a `Date`
-
-0.2.4 / 2016-05-20
-==================
-
-  * perf: enable strict mode
-  * perf: use for loop in parse
-  * perf: use string concatination for serialization
-
-0.2.3 / 2015-10-25
-==================
-
-  * Fix cookie `Max-Age` to never be a floating point number
-
-0.2.2 / 2015-09-17
-==================
-
-  * Fix regression when setting empty cookie value
-    - Ease the new restriction, which is just basic header-level validation
-  * Fix typo in invalid value errors
-
-0.2.1 / 2015-09-17
-==================
-
-  * Throw on invalid values provided to `serialize`
-    - Ensures the resulting string is a valid HTTP header value
-
-0.2.0 / 2015-08-13
-==================
-
-  * Add `firstPartyOnly` option
-  * Throw better error for invalid argument to parse
-  * perf: hoist regular expression
-
-0.1.5 / 2015-09-17
-==================
-
-  * Fix regression when setting empty cookie value
-    - Ease the new restriction, which is just basic header-level validation
-  * Fix typo in invalid value errors
-
-0.1.4 / 2015-09-17
-==================
-
-  * Throw better error for invalid argument to parse
-  * Throw on invalid values provided to `serialize`
-    - Ensures the resulting string is a valid HTTP header value
-
-0.1.3 / 2015-05-19
-==================
-
-  * Reduce the scope of try-catch deopt
-  * Remove argument reassignments
-
-0.1.2 / 2014-04-16
-==================
-
-  * Remove unnecessary files from npm package
-
-0.1.1 / 2014-02-23
-==================
-
-  * Fix bad parse when cookie value contained a comma
-  * Fix support for `maxAge` of `0`
-
-0.1.0 / 2013-05-01
-==================
-
-  * Add `decode` option
-  * Add `encode` option
-
-0.0.6 / 2013-04-08
-==================
-
-  * Ignore cookie parts missing `=`
-
-0.0.5 / 2012-10-29
-==================
-
-  * Return raw cookie value if value unescape errors
-
-0.0.4 / 2012-06-21
-==================
-
-  * Use encode/decodeURIComponent for cookie encoding/decoding
-    - Improve server/client interoperability
-
-0.0.3 / 2012-06-06
-==================
-
-  * Only escape special characters per the cookie RFC
-
-0.0.2 / 2012-06-01
-==================
-
-  * Fix `maxAge` option to not throw error
-
-0.0.1 / 2012-05-28
-==================
-
-  * Add more tests
-
-0.0.0 / 2012-05-28
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/cookie/README.md b/device_home/node_modules/cookie/README.md
deleted file mode 100644 (file)
index 857fb77..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-# cookie
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Basic HTTP cookie parser and serializer for HTTP servers.
-
-## Installation
-
-```sh
-$ npm install cookie
-```
-
-## API
-
-```js
-var cookie = require('cookie');
-```
-
-### cookie.parse(str, options)
-
-Parse an HTTP `Cookie` header string and returning an object of all cookie name-value pairs.
-The `str` argument is the string representing a `Cookie` header value and `options` is an
-optional object containing additional parsing options.
-
-```js
-var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');
-// { foo: 'bar', equation: 'E=mc^2' }
-```
-
-#### Options
-
-`cookie.parse` accepts these properties in the options object.
-
-##### decode
-
-Specifies a function that will be used to decode a cookie's value. Since the value of a cookie
-has a limited character set (and must be a simple string), this function can be used to decode
-a previously-encoded cookie value into a JavaScript string or other object.
-
-The default function is the global `decodeURIComponent`, which will decode any URL-encoded
-sequences into their byte representations.
-
-**note** if an error is thrown from this function, the original, non-decoded cookie value will
-be returned as the cookie's value.
-
-### cookie.serialize(name, value, options)
-
-Serialize a cookie name-value pair into a `Set-Cookie` header string. The `name` argument is the
-name for the cookie, the `value` argument is the value to set the cookie to, and the `options`
-argument is an optional object containing additional serialization options.
-
-```js
-var setCookie = cookie.serialize('foo', 'bar');
-// foo=bar
-```
-
-#### Options
-
-`cookie.serialize` accepts these properties in the options object.
-
-##### domain
-
-Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6265-5.2.3]. By default, no
-domain is set, and most clients will consider the cookie to apply to only the current domain.
-
-##### encode
-
-Specifies a function that will be used to encode a cookie's value. Since value of a cookie
-has a limited character set (and must be a simple string), this function can be used to encode
-a value into a string suited for a cookie's value.
-
-The default function is the global `encodeURIComponent`, which will encode a JavaScript string
-into UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range.
-
-##### expires
-
-Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6265-5.2.1].
-By default, no expiration is set, and most clients will consider this a "non-persistent cookie" and
-will delete it on a condition like exiting a web browser application.
-
-**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and
-`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,
-so if both are set, they should point to the same date and time.
-
-##### httpOnly
-
-Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6265-5.2.6]. When truthy,
-the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set.
-
-**note** be careful when setting this to `true`, as compliant clients will not allow client-side
-JavaScript to see the cookie in `document.cookie`.
-
-##### maxAge
-
-Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6265-5.2.2].
-The given number will be converted to an integer by rounding down. By default, no maximum age is set.
-
-**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and
-`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,
-so if both are set, they should point to the same date and time.
-
-##### path
-
-Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6265-5.2.4]. By default, the path
-is considered the ["default path"][rfc-6265-5.1.4].
-
-##### sameSite
-
-Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][rfc-6265bis-03-4.1.2.7].
-
-  - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
-  - `false` will not set the `SameSite` attribute.
-  - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement.
-  - `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie.
-  - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
-
-More information about the different enforcement levels can be found in
-[the specification][rfc-6265bis-03-4.1.2.7].
-
-**note** This is an attribute that has not yet been fully standardized, and may change in the future.
-This also means many clients may ignore this attribute until they understand it.
-
-##### secure
-
-Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6265-5.2.5]. When truthy,
-the `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set.
-
-**note** be careful when setting this to `true`, as compliant clients will not send the cookie back to
-the server in the future if the browser does not have an HTTPS connection.
-
-## Example
-
-The following example uses this module in conjunction with the Node.js core HTTP server
-to prompt a user for their name and display it back on future visits.
-
-```js
-var cookie = require('cookie');
-var escapeHtml = require('escape-html');
-var http = require('http');
-var url = require('url');
-
-function onRequest(req, res) {
-  // Parse the query string
-  var query = url.parse(req.url, true, true).query;
-
-  if (query && query.name) {
-    // Set a new cookie with the name
-    res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {
-      httpOnly: true,
-      maxAge: 60 * 60 * 24 * 7 // 1 week
-    }));
-
-    // Redirect back after setting cookie
-    res.statusCode = 302;
-    res.setHeader('Location', req.headers.referer || '/');
-    res.end();
-    return;
-  }
-
-  // Parse the cookies on the request
-  var cookies = cookie.parse(req.headers.cookie || '');
-
-  // Get the visitor name set in the cookie
-  var name = cookies.name;
-
-  res.setHeader('Content-Type', 'text/html; charset=UTF-8');
-
-  if (name) {
-    res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');
-  } else {
-    res.write('<p>Hello, new visitor!</p>');
-  }
-
-  res.write('<form method="GET">');
-  res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');
-  res.end('</form>');
-}
-
-http.createServer(onRequest).listen(3000);
-```
-
-## Testing
-
-```sh
-$ npm test
-```
-
-## Benchmark
-
-```
-$ npm run bench
-
-> cookie@0.3.1 bench cookie
-> node benchmark/index.js
-
-  http_parser@2.8.0
-  node@6.14.2
-  v8@5.1.281.111
-  uv@1.16.1
-  zlib@1.2.11
-  ares@1.10.1-DEV
-  icu@58.2
-  modules@48
-  napi@3
-  openssl@1.0.2o
-
-> node benchmark/parse.js
-
-  cookie.parse
-
-  6 tests completed.
-
-  simple      x 1,200,691 ops/sec ±1.12% (189 runs sampled)
-  decode      x 1,012,994 ops/sec ±0.97% (186 runs sampled)
-  unquote     x 1,074,174 ops/sec ±2.43% (186 runs sampled)
-  duplicates  x   438,424 ops/sec ±2.17% (184 runs sampled)
-  10 cookies  x   147,154 ops/sec ±1.01% (186 runs sampled)
-  100 cookies x    14,274 ops/sec ±1.07% (187 runs sampled)
-```
-
-## References
-
-- [RFC 6265: HTTP State Management Mechanism][rfc-6265]
-- [Same-site Cookies][rfc-6265bis-03-4.1.2.7]
-
-[rfc-6265bis-03-4.1.2.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7
-[rfc-6265]: https://tools.ietf.org/html/rfc6265
-[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4
-[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1
-[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2
-[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3
-[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4
-[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5
-[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6
-[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master
-[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master
-[node-version-image]: https://badgen.net/npm/node/cookie
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/cookie
-[npm-url]: https://npmjs.org/package/cookie
-[npm-version-image]: https://badgen.net/npm/v/cookie
-[travis-image]: https://badgen.net/travis/jshttp/cookie/master
-[travis-url]: https://travis-ci.org/jshttp/cookie
diff --git a/device_home/node_modules/debug/CHANGELOG.md b/device_home/node_modules/debug/CHANGELOG.md
deleted file mode 100755 (executable)
index eadaa18..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-
-2.6.9 / 2017-09-22
-==================
-
-  * remove ReDoS regexp in %o formatter (#504)
-
-2.6.8 / 2017-05-18
-==================
-
-  * Fix: Check for undefined on browser globals (#462, @marbemac)
-
-2.6.7 / 2017-05-16
-==================
-
-  * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom)
-  * Fix: Inline extend function in node implementation (#452, @dougwilson)
-  * Docs: Fix typo (#455, @msasad)
-
-2.6.5 / 2017-04-27
-==================
-  
-  * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek)
-  * Misc: clean up browser reference checks (#447, @thebigredgeek)
-  * Misc: add npm-debug.log to .gitignore (@thebigredgeek)
-
-
-2.6.4 / 2017-04-20
-==================
-
-  * Fix: bug that would occure if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo)
-  * Chore: ignore bower.json in npm installations. (#437, @joaovieira)
-  * Misc: update "ms" to v0.7.3 (@tootallnate)
-
-2.6.3 / 2017-03-13
-==================
-
-  * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts)
-  * Docs: Changelog fix (@thebigredgeek)
-
-2.6.2 / 2017-03-10
-==================
-
-  * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin)
-  * Docs: Add backers and sponsors from Open Collective (#422, @piamancini)
-  * Docs: Add Slackin invite badge (@tootallnate)
-
-2.6.1 / 2017-02-10
-==================
-
-  * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
-  * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
-  * Fix: IE8 "Expected identifier" error (#414, @vgoma)
-  * Fix: Namespaces would not disable once enabled (#409, @musikov)
-
-2.6.0 / 2016-12-28
-==================
-
-  * Fix: added better null pointer checks for browser useColors (@thebigredgeek)
-  * Improvement: removed explicit `window.debug` export (#404, @tootallnate)
-  * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
-
-2.5.2 / 2016-12-25
-==================
-
-  * Fix: reference error on window within webworkers (#393, @KlausTrainer)
-  * Docs: fixed README typo (#391, @lurch)
-  * Docs: added notice about v3 api discussion (@thebigredgeek)
-
-2.5.1 / 2016-12-20
-==================
-
-  * Fix: babel-core compatibility
-
-2.5.0 / 2016-12-20
-==================
-
-  * Fix: wrong reference in bower file (@thebigredgeek)
-  * Fix: webworker compatibility (@thebigredgeek)
-  * Fix: output formatting issue (#388, @kribblo)
-  * Fix: babel-loader compatibility (#383, @escwald)
-  * Misc: removed built asset from repo and publications (@thebigredgeek)
-  * Misc: moved source files to /src (#378, @yamikuronue)
-  * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
-  * Test: coveralls integration (#378, @yamikuronue)
-  * Docs: simplified language in the opening paragraph (#373, @yamikuronue)
-
-2.4.5 / 2016-12-17
-==================
-
-  * Fix: `navigator` undefined in Rhino (#376, @jochenberger)
-  * Fix: custom log function (#379, @hsiliev)
-  * Improvement: bit of cleanup + linting fixes (@thebigredgeek)
-  * Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
-  * Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
-
-2.4.4 / 2016-12-14
-==================
-
-  * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
-
-2.4.3 / 2016-12-14
-==================
-
-  * Fix: navigation.userAgent error for react native (#364, @escwald)
-
-2.4.2 / 2016-12-14
-==================
-
-  * Fix: browser colors (#367, @tootallnate)
-  * Misc: travis ci integration (@thebigredgeek)
-  * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
-
-2.4.1 / 2016-12-13
-==================
-
-  * Fix: typo that broke the package (#356)
-
-2.4.0 / 2016-12-13
-==================
-
-  * Fix: bower.json references unbuilt src entry point (#342, @justmatt)
-  * Fix: revert "handle regex special characters" (@tootallnate)
-  * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
-  * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
-  * Improvement: allow colors in workers (#335, @botverse)
-  * Improvement: use same color for same namespace. (#338, @lchenay)
-
-2.3.3 / 2016-11-09
-==================
-
-  * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
-  * Fix: Returning `localStorage` saved values (#331, Levi Thomason)
-  * Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
-
-2.3.2 / 2016-11-09
-==================
-
-  * Fix: be super-safe in index.js as well (@TooTallNate)
-  * Fix: should check whether process exists (Tom Newby)
-
-2.3.1 / 2016-11-09
-==================
-
-  * Fix: Added electron compatibility (#324, @paulcbetts)
-  * Improvement: Added performance optimizations (@tootallnate)
-  * Readme: Corrected PowerShell environment variable example (#252, @gimre)
-  * Misc: Removed yarn lock file from source control (#321, @fengmk2)
-
-2.3.0 / 2016-11-07
-==================
-
-  * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
-  * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
-  * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
-  * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
-  * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
-  * Package: Update "ms" to 0.7.2 (#315, @DevSide)
-  * Package: removed superfluous version property from bower.json (#207 @kkirsche)
-  * Readme: fix USE_COLORS to DEBUG_COLORS
-  * Readme: Doc fixes for format string sugar (#269, @mlucool)
-  * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
-  * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
-  * Readme: better docs for browser support (#224, @matthewmueller)
-  * Tooling: Added yarn integration for development (#317, @thebigredgeek)
-  * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
-  * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
-  * Misc: Updated contributors (@thebigredgeek)
-
-2.2.0 / 2015-05-09
-==================
-
-  * package: update "ms" to v0.7.1 (#202, @dougwilson)
-  * README: add logging to file example (#193, @DanielOchoa)
-  * README: fixed a typo (#191, @amir-s)
-  * browser: expose `storage` (#190, @stephenmathieson)
-  * Makefile: add a `distclean` target (#189, @stephenmathieson)
-
-2.1.3 / 2015-03-13
-==================
-
-  * Updated stdout/stderr example (#186)
-  * Updated example/stdout.js to match debug current behaviour
-  * Renamed example/stderr.js to stdout.js
-  * Update Readme.md (#184)
-  * replace high intensity foreground color for bold (#182, #183)
-
-2.1.2 / 2015-03-01
-==================
-
-  * dist: recompile
-  * update "ms" to v0.7.0
-  * package: update "browserify" to v9.0.3
-  * component: fix "ms.js" repo location
-  * changed bower package name
-  * updated documentation about using debug in a browser
-  * fix: security error on safari (#167, #168, @yields)
-
-2.1.1 / 2014-12-29
-==================
-
-  * browser: use `typeof` to check for `console` existence
-  * browser: check for `console.log` truthiness (fix IE 8/9)
-  * browser: add support for Chrome apps
-  * Readme: added Windows usage remarks
-  * Add `bower.json` to properly support bower install
-
-2.1.0 / 2014-10-15
-==================
-
-  * node: implement `DEBUG_FD` env variable support
-  * package: update "browserify" to v6.1.0
-  * package: add "license" field to package.json (#135, @panuhorsmalahti)
-
-2.0.0 / 2014-09-01
-==================
-
-  * package: update "browserify" to v5.11.0
-  * node: use stderr rather than stdout for logging (#29, @stephenmathieson)
-
-1.0.4 / 2014-07-15
-==================
-
-  * dist: recompile
-  * example: remove `console.info()` log usage
-  * example: add "Content-Type" UTF-8 header to browser example
-  * browser: place %c marker after the space character
-  * browser: reset the "content" color via `color: inherit`
-  * browser: add colors support for Firefox >= v31
-  * debug: prefer an instance `log()` function over the global one (#119)
-  * Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
-
-1.0.3 / 2014-07-09
-==================
-
-  * Add support for multiple wildcards in namespaces (#122, @seegno)
-  * browser: fix lint
-
-1.0.2 / 2014-06-10
-==================
-
-  * browser: update color palette (#113, @gscottolson)
-  * common: make console logging function configurable (#108, @timoxley)
-  * node: fix %o colors on old node <= 0.8.x
-  * Makefile: find node path using shell/which (#109, @timoxley)
-
-1.0.1 / 2014-06-06
-==================
-
-  * browser: use `removeItem()` to clear localStorage
-  * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
-  * package: add "contributors" section
-  * node: fix comment typo
-  * README: list authors
-
-1.0.0 / 2014-06-04
-==================
-
-  * make ms diff be global, not be scope
-  * debug: ignore empty strings in enable()
-  * node: make DEBUG_COLORS able to disable coloring
-  * *: export the `colors` array
-  * npmignore: don't publish the `dist` dir
-  * Makefile: refactor to use browserify
-  * package: add "browserify" as a dev dependency
-  * Readme: add Web Inspector Colors section
-  * node: reset terminal color for the debug content
-  * node: map "%o" to `util.inspect()`
-  * browser: map "%j" to `JSON.stringify()`
-  * debug: add custom "formatters"
-  * debug: use "ms" module for humanizing the diff
-  * Readme: add "bash" syntax highlighting
-  * browser: add Firebug color support
-  * browser: add colors for WebKit browsers
-  * node: apply log to `console`
-  * rewrite: abstract common logic for Node & browsers
-  * add .jshintrc file
-
-0.8.1 / 2014-04-14
-==================
-
-  * package: re-add the "component" section
-
-0.8.0 / 2014-03-30
-==================
-
-  * add `enable()` method for nodejs. Closes #27
-  * change from stderr to stdout
-  * remove unnecessary index.js file
-
-0.7.4 / 2013-11-13
-==================
-
-  * remove "browserify" key from package.json (fixes something in browserify)
-
-0.7.3 / 2013-10-30
-==================
-
-  * fix: catch localStorage security error when cookies are blocked (Chrome)
-  * add debug(err) support. Closes #46
-  * add .browser prop to package.json. Closes #42
-
-0.7.2 / 2013-02-06
-==================
-
-  * fix package.json
-  * fix: Mobile Safari (private mode) is broken with debug
-  * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
-
-0.7.1 / 2013-02-05
-==================
-
-  * add repository URL to package.json
-  * add DEBUG_COLORED to force colored output
-  * add browserify support
-  * fix component. Closes #24
-
-0.7.0 / 2012-05-04
-==================
-
-  * Added .component to package.json
-  * Added debug.component.js build
-
-0.6.0 / 2012-03-16
-==================
-
-  * Added support for "-" prefix in DEBUG [Vinay Pulim]
-  * Added `.enabled` flag to the node version [TooTallNate]
-
-0.5.0 / 2012-02-02
-==================
-
-  * Added: humanize diffs. Closes #8
-  * Added `debug.disable()` to the CS variant
-  * Removed padding. Closes #10
-  * Fixed: persist client-side variant again. Closes #9
-
-0.4.0 / 2012-02-01
-==================
-
-  * Added browser variant support for older browsers [TooTallNate]
-  * Added `debug.enable('project:*')` to browser variant [TooTallNate]
-  * Added padding to diff (moved it to the right)
-
-0.3.0 / 2012-01-26
-==================
-
-  * Added millisecond diff when isatty, otherwise UTC string
-
-0.2.0 / 2012-01-22
-==================
-
-  * Added wildcard support
-
-0.1.0 / 2011-12-02
-==================
-
-  * Added: remove colors unless stderr isatty [TooTallNate]
-
-0.0.1 / 2010-01-03
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/debug/README.md b/device_home/node_modules/debug/README.md
deleted file mode 100755 (executable)
index f67be6b..0000000
+++ /dev/null
@@ -1,312 +0,0 @@
-# debug
-[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug)  [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master)  [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) 
-[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors)
-
-
-
-A tiny node.js debugging utility modelled after node core's debugging technique.
-
-**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)**
-
-## Installation
-
-```bash
-$ npm install debug
-```
-
-## Usage
-
-`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.
-
-Example _app.js_:
-
-```js
-var debug = require('debug')('http')
-  , http = require('http')
-  , name = 'My App';
-
-// fake app
-
-debug('booting %s', name);
-
-http.createServer(function(req, res){
-  debug(req.method + ' ' + req.url);
-  res.end('hello\n');
-}).listen(3000, function(){
-  debug('listening');
-});
-
-// fake worker of some kind
-
-require('./worker');
-```
-
-Example _worker.js_:
-
-```js
-var debug = require('debug')('worker');
-
-setInterval(function(){
-  debug('doing some work');
-}, 1000);
-```
-
- The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:
-
-  ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)
-
-  ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)
-
-#### Windows note
-
- On Windows the environment variable is set using the `set` command.
-
- ```cmd
- set DEBUG=*,-not_this
- ```
-
- Note that PowerShell uses different syntax to set environment variables.
-
- ```cmd
- $env:DEBUG = "*,-not_this"
-  ```
-
-Then, run the program to be debugged as usual.
-
-## Millisecond diff
-
-  When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
-
-  ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)
-
-  When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:
-
-  ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)
-
-## Conventions
-
-  If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".
-
-## Wildcards
-
-  The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
-
-  You can also exclude specific debuggers by prefixing them with a "-" character.  For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:".
-
-## Environment Variables
-
-  When running through Node.js, you can set a few environment variables that will
-  change the behavior of the debug logging:
-
-| Name      | Purpose                                         |
-|-----------|-------------------------------------------------|
-| `DEBUG`   | Enables/disables specific debugging namespaces. |
-| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |
-| `DEBUG_DEPTH` | Object inspection depth. |
-| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |
-
-
-  __Note:__ The environment variables beginning with `DEBUG_` end up being
-  converted into an Options object that gets used with `%o`/`%O` formatters.
-  See the Node.js documentation for
-  [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)
-  for the complete list.
-
-## Formatters
-
-
-  Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters:
-
-| Formatter | Representation |
-|-----------|----------------|
-| `%O`      | Pretty-print an Object on multiple lines. |
-| `%o`      | Pretty-print an Object all on a single line. |
-| `%s`      | String. |
-| `%d`      | Number (both integer and float). |
-| `%j`      | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |
-| `%%`      | Single percent sign ('%'). This does not consume an argument. |
-
-### Custom formatters
-
-  You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like:
-
-```js
-const createDebug = require('debug')
-createDebug.formatters.h = (v) => {
-  return v.toString('hex')
-}
-
-// …elsewhere
-const debug = createDebug('foo')
-debug('this is hex: %h', new Buffer('hello world'))
-//   foo this is hex: 68656c6c6f20776f726c6421 +0ms
-```
-
-## Browser support
-  You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),
-  or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),
-  if you don't want to build it yourself.
-
-  Debug's enable state is currently persisted by `localStorage`.
-  Consider the situation shown below where you have `worker:a` and `worker:b`,
-  and wish to debug both. You can enable this using `localStorage.debug`:
-
-```js
-localStorage.debug = 'worker:*'
-```
-
-And then refresh the page.
-
-```js
-a = debug('worker:a');
-b = debug('worker:b');
-
-setInterval(function(){
-  a('doing some work');
-}, 1000);
-
-setInterval(function(){
-  b('doing some work');
-}, 1200);
-```
-
-#### Web Inspector Colors
-
-  Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
-  option. These are WebKit web inspectors, Firefox ([since version
-  31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
-  and the Firebug plugin for Firefox (any version).
-
-  Colored output looks something like:
-
-  ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png)
-
-
-## Output streams
-
-  By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:
-
-Example _stdout.js_:
-
-```js
-var debug = require('debug');
-var error = debug('app:error');
-
-// by default stderr is used
-error('goes to stderr!');
-
-var log = debug('app:log');
-// set this namespace to log via console.log
-log.log = console.log.bind(console); // don't forget to bind to console!
-log('goes to stdout');
-error('still goes to stderr!');
-
-// set all output to go via console.info
-// overrides all per-namespace log settings
-debug.log = console.info.bind(console);
-error('now goes to stdout via console.info');
-log('still goes to stdout, but via console.info now');
-```
-
-
-## Authors
-
- - TJ Holowaychuk
- - Nathan Rajlich
- - Andrew Rhyne
-## Backers
-
-Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)]
-
-<a href="https://opencollective.com/debug/backer/0/website" target="_blank"><img src="https://opencollective.com/debug/backer/0/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/1/website" target="_blank"><img src="https://opencollective.com/debug/backer/1/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/2/website" target="_blank"><img src="https://opencollective.com/debug/backer/2/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/3/website" target="_blank"><img src="https://opencollective.com/debug/backer/3/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/4/website" target="_blank"><img src="https://opencollective.com/debug/backer/4/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/5/website" target="_blank"><img src="https://opencollective.com/debug/backer/5/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/6/website" target="_blank"><img src="https://opencollective.com/debug/backer/6/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/7/website" target="_blank"><img src="https://opencollective.com/debug/backer/7/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/8/website" target="_blank"><img src="https://opencollective.com/debug/backer/8/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/9/website" target="_blank"><img src="https://opencollective.com/debug/backer/9/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/10/website" target="_blank"><img src="https://opencollective.com/debug/backer/10/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/11/website" target="_blank"><img src="https://opencollective.com/debug/backer/11/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/12/website" target="_blank"><img src="https://opencollective.com/debug/backer/12/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/13/website" target="_blank"><img src="https://opencollective.com/debug/backer/13/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/14/website" target="_blank"><img src="https://opencollective.com/debug/backer/14/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/15/website" target="_blank"><img src="https://opencollective.com/debug/backer/15/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/16/website" target="_blank"><img src="https://opencollective.com/debug/backer/16/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/17/website" target="_blank"><img src="https://opencollective.com/debug/backer/17/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/18/website" target="_blank"><img src="https://opencollective.com/debug/backer/18/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/19/website" target="_blank"><img src="https://opencollective.com/debug/backer/19/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/20/website" target="_blank"><img src="https://opencollective.com/debug/backer/20/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/21/website" target="_blank"><img src="https://opencollective.com/debug/backer/21/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/22/website" target="_blank"><img src="https://opencollective.com/debug/backer/22/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/23/website" target="_blank"><img src="https://opencollective.com/debug/backer/23/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/24/website" target="_blank"><img src="https://opencollective.com/debug/backer/24/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/25/website" target="_blank"><img src="https://opencollective.com/debug/backer/25/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/26/website" target="_blank"><img src="https://opencollective.com/debug/backer/26/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/27/website" target="_blank"><img src="https://opencollective.com/debug/backer/27/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/28/website" target="_blank"><img src="https://opencollective.com/debug/backer/28/avatar.svg"></a>
-<a href="https://opencollective.com/debug/backer/29/website" target="_blank"><img src="https://opencollective.com/debug/backer/29/avatar.svg"></a>
-
-
-## Sponsors
-
-Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)]
-
-<a href="https://opencollective.com/debug/sponsor/0/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/0/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/1/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/1/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/2/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/2/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/3/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/3/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/4/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/4/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/5/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/5/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/6/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/6/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/7/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/7/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/8/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/8/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/9/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/9/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/10/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/10/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/11/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/11/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/12/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/12/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/13/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/13/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/14/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/14/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/15/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/15/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/16/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/16/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/17/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/17/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/18/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/18/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/19/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/19/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/20/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/20/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/21/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/21/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/22/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/22/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/23/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/23/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/24/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/24/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/25/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/25/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/26/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/26/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/27/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/27/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/28/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/28/avatar.svg"></a>
-<a href="https://opencollective.com/debug/sponsor/29/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/29/avatar.svg"></a>
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2014-2016 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/device_home/node_modules/decamelize/readme.md b/device_home/node_modules/decamelize/readme.md
deleted file mode 100644 (file)
index 624c7ee..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-# decamelize [![Build Status](https://travis-ci.org/sindresorhus/decamelize.svg?branch=master)](https://travis-ci.org/sindresorhus/decamelize)
-
-> Convert a camelized string into a lowercased one with a custom separator<br>
-> Example: `unicornRainbow` → `unicorn_rainbow`
-
-
-## Install
-
-```
-$ npm install --save decamelize
-```
-
-
-## Usage
-
-```js
-const decamelize = require('decamelize');
-
-decamelize('unicornRainbow');
-//=> 'unicorn_rainbow'
-
-decamelize('unicornRainbow', '-');
-//=> 'unicorn-rainbow'
-```
-
-
-## API
-
-### decamelize(input, [separator])
-
-#### input
-
-Type: `string`
-
-#### separator
-
-Type: `string`<br>
-Default: `_`
-
-
-## Related
-
-See [`camelcase`](https://github.com/sindresorhus/camelcase) for the inverse.
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/depd/History.md b/device_home/node_modules/depd/History.md
deleted file mode 100644 (file)
index 507ecb8..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-1.1.2 / 2018-01-11
-==================
-
-  * perf: remove argument reassignment
-  * Support Node.js 0.6 to 9.x
-
-1.1.1 / 2017-07-27
-==================
-
-  * Remove unnecessary `Buffer` loading
-  * Support Node.js 0.6 to 8.x
-
-1.1.0 / 2015-09-14
-==================
-
-  * Enable strict mode in more places
-  * Support io.js 3.x
-  * Support io.js 2.x
-  * Support web browser loading
-    - Requires bundler like Browserify or webpack
-
-1.0.1 / 2015-04-07
-==================
-
-  * Fix `TypeError`s when under `'use strict'` code
-  * Fix useless type name on auto-generated messages
-  * Support io.js 1.x
-  * Support Node.js 0.12
-
-1.0.0 / 2014-09-17
-==================
-
-  * No changes
-
-0.4.5 / 2014-09-09
-==================
-
-  * Improve call speed to functions using the function wrapper
-  * Support Node.js 0.6
-
-0.4.4 / 2014-07-27
-==================
-
-  * Work-around v8 generating empty stack traces
-
-0.4.3 / 2014-07-26
-==================
-
-  * Fix exception when global `Error.stackTraceLimit` is too low
-
-0.4.2 / 2014-07-19
-==================
-
-  * Correct call site for wrapped functions and properties
-
-0.4.1 / 2014-07-19
-==================
-
-  * Improve automatic message generation for function properties
-
-0.4.0 / 2014-07-19
-==================
-
-  * Add `TRACE_DEPRECATION` environment variable
-  * Remove non-standard grey color from color output
-  * Support `--no-deprecation` argument
-  * Support `--trace-deprecation` argument
-  * Support `deprecate.property(fn, prop, message)`
-
-0.3.0 / 2014-06-16
-==================
-
-  * Add `NO_DEPRECATION` environment variable
-
-0.2.0 / 2014-06-15
-==================
-
-  * Add `deprecate.property(obj, prop, message)`
-  * Remove `supports-color` dependency for node.js 0.8
-
-0.1.0 / 2014-06-15
-==================
-
-  * Add `deprecate.function(fn, message)`
-  * Add `process.on('deprecation', fn)` emitter
-  * Automatically generate message when omitted from `deprecate()`
-
-0.0.1 / 2014-06-15
-==================
-
-  * Fix warning for dynamic calls at singe call site
-
-0.0.0 / 2014-06-15
-==================
-
-  * Initial implementation
diff --git a/device_home/node_modules/depd/Readme.md b/device_home/node_modules/depd/Readme.md
deleted file mode 100644 (file)
index 7790670..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-# depd
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-image]][node-url]
-[![Linux Build][travis-image]][travis-url]
-[![Windows Build][appveyor-image]][appveyor-url]
-[![Coverage Status][coveralls-image]][coveralls-url]
-
-Deprecate all the things
-
-> With great modules comes great responsibility; mark things deprecated!
-
-## Install
-
-This module is installed directly using `npm`:
-
-```sh
-$ npm install depd
-```
-
-This module can also be bundled with systems like
-[Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/),
-though by default this module will alter it's API to no longer display or
-track deprecations.
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var deprecate = require('depd')('my-module')
-```
-
-This library allows you to display deprecation messages to your users.
-This library goes above and beyond with deprecation warnings by
-introspection of the call stack (but only the bits that it is interested
-in).
-
-Instead of just warning on the first invocation of a deprecated
-function and never again, this module will warn on the first invocation
-of a deprecated function per unique call site, making it ideal to alert
-users of all deprecated uses across the code base, rather than just
-whatever happens to execute first.
-
-The deprecation warnings from this module also include the file and line
-information for the call into the module that the deprecated function was
-in.
-
-**NOTE** this library has a similar interface to the `debug` module, and
-this module uses the calling file to get the boundary for the call stacks,
-so you should always create a new `deprecate` object in each file and not
-within some central file.
-
-### depd(namespace)
-
-Create a new deprecate function that uses the given namespace name in the
-messages and will display the call site prior to the stack entering the
-file this function was called from. It is highly suggested you use the
-name of your module as the namespace.
-
-### deprecate(message)
-
-Call this function from deprecated code to display a deprecation message.
-This message will appear once per unique caller site. Caller site is the
-first call site in the stack in a different file from the caller of this
-function.
-
-If the message is omitted, a message is generated for you based on the site
-of the `deprecate()` call and will display the name of the function called,
-similar to the name displayed in a stack trace.
-
-### deprecate.function(fn, message)
-
-Call this function to wrap a given function in a deprecation message on any
-call to the function. An optional message can be supplied to provide a custom
-message.
-
-### deprecate.property(obj, prop, message)
-
-Call this function to wrap a given property on object in a deprecation message
-on any accessing or setting of the property. An optional message can be supplied
-to provide a custom message.
-
-The method must be called on the object where the property belongs (not
-inherited from the prototype).
-
-If the property is a data descriptor, it will be converted to an accessor
-descriptor in order to display the deprecation message.
-
-### process.on('deprecation', fn)
-
-This module will allow easy capturing of deprecation errors by emitting the
-errors as the type "deprecation" on the global `process`. If there are no
-listeners for this type, the errors are written to STDERR as normal, but if
-there are any listeners, nothing will be written to STDERR and instead only
-emitted. From there, you can write the errors in a different format or to a
-logging source.
-
-The error represents the deprecation and is emitted only once with the same
-rules as writing to STDERR. The error has the following properties:
-
-  - `message` - This is the message given by the library
-  - `name` - This is always `'DeprecationError'`
-  - `namespace` - This is the namespace the deprecation came from
-  - `stack` - This is the stack of the call to the deprecated thing
-
-Example `error.stack` output:
-
-```
-DeprecationError: my-cool-module deprecated oldfunction
-    at Object.<anonymous> ([eval]-wrapper:6:22)
-    at Module._compile (module.js:456:26)
-    at evalScript (node.js:532:25)
-    at startup (node.js:80:7)
-    at node.js:902:3
-```
-
-### process.env.NO_DEPRECATION
-
-As a user of modules that are deprecated, the environment variable `NO_DEPRECATION`
-is provided as a quick solution to silencing deprecation warnings from being
-output. The format of this is similar to that of `DEBUG`:
-
-```sh
-$ NO_DEPRECATION=my-module,othermod node app.js
-```
-
-This will suppress deprecations from being output for "my-module" and "othermod".
-The value is a list of comma-separated namespaces. To suppress every warning
-across all namespaces, use the value `*` for a namespace.
-
-Providing the argument `--no-deprecation` to the `node` executable will suppress
-all deprecations (only available in Node.js 0.8 or higher).
-
-**NOTE** This will not suppress the deperecations given to any "deprecation"
-event listeners, just the output to STDERR.
-
-### process.env.TRACE_DEPRECATION
-
-As a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION`
-is provided as a solution to getting more detailed location information in deprecation
-warnings by including the entire stack trace. The format of this is the same as
-`NO_DEPRECATION`:
-
-```sh
-$ TRACE_DEPRECATION=my-module,othermod node app.js
-```
-
-This will include stack traces for deprecations being output for "my-module" and
-"othermod". The value is a list of comma-separated namespaces. To trace every
-warning across all namespaces, use the value `*` for a namespace.
-
-Providing the argument `--trace-deprecation` to the `node` executable will trace
-all deprecations (only available in Node.js 0.8 or higher).
-
-**NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`.
-
-## Display
-
-![message](files/message.png)
-
-When a user calls a function in your library that you mark deprecated, they
-will see the following written to STDERR (in the given colors, similar colors
-and layout to the `debug` module):
-
-```
-bright cyan    bright yellow
-|              |          reset       cyan
-|              |          |           |
-▼              ▼          ▼           ▼
-my-cool-module deprecated oldfunction [eval]-wrapper:6:22
-▲              ▲          ▲           ▲
-|              |          |           |
-namespace      |          |           location of mycoolmod.oldfunction() call
-               |          deprecation message
-               the word "deprecated"
-```
-
-If the user redirects their STDERR to a file or somewhere that does not support
-colors, they see (similar layout to the `debug` module):
-
-```
-Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22
-▲                             ▲              ▲          ▲              ▲
-|                             |              |          |              |
-timestamp of message          namespace      |          |             location of mycoolmod.oldfunction() call
-                                             |          deprecation message
-                                             the word "deprecated"
-```
-
-## Examples
-
-### Deprecating all calls to a function
-
-This will display a deprecated message about "oldfunction" being deprecated
-from "my-module" on STDERR.
-
-```js
-var deprecate = require('depd')('my-cool-module')
-
-// message automatically derived from function name
-// Object.oldfunction
-exports.oldfunction = deprecate.function(function oldfunction () {
-  // all calls to function are deprecated
-})
-
-// specific message
-exports.oldfunction = deprecate.function(function () {
-  // all calls to function are deprecated
-}, 'oldfunction')
-```
-
-### Conditionally deprecating a function call
-
-This will display a deprecated message about "weirdfunction" being deprecated
-from "my-module" on STDERR when called with less than 2 arguments.
-
-```js
-var deprecate = require('depd')('my-cool-module')
-
-exports.weirdfunction = function () {
-  if (arguments.length < 2) {
-    // calls with 0 or 1 args are deprecated
-    deprecate('weirdfunction args < 2')
-  }
-}
-```
-
-When calling `deprecate` as a function, the warning is counted per call site
-within your own module, so you can display different deprecations depending
-on different situations and the users will still get all the warnings:
-
-```js
-var deprecate = require('depd')('my-cool-module')
-
-exports.weirdfunction = function () {
-  if (arguments.length < 2) {
-    // calls with 0 or 1 args are deprecated
-    deprecate('weirdfunction args < 2')
-  } else if (typeof arguments[0] !== 'string') {
-    // calls with non-string first argument are deprecated
-    deprecate('weirdfunction non-string first arg')
-  }
-}
-```
-
-### Deprecating property access
-
-This will display a deprecated message about "oldprop" being deprecated
-from "my-module" on STDERR when accessed. A deprecation will be displayed
-when setting the value and when getting the value.
-
-```js
-var deprecate = require('depd')('my-cool-module')
-
-exports.oldprop = 'something'
-
-// message automatically derives from property name
-deprecate.property(exports, 'oldprop')
-
-// explicit message
-deprecate.property(exports, 'oldprop', 'oldprop >= 0.10')
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-version-image]: https://img.shields.io/npm/v/depd.svg
-[npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg
-[npm-url]: https://npmjs.org/package/depd
-[travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd/master.svg?label=linux
-[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd
-[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/nodejs-depd/master.svg?label=windows
-[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd
-[coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd/master.svg
-[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master
-[node-image]: https://img.shields.io/node/v/depd.svg
-[node-url]: https://nodejs.org/en/download/
diff --git a/device_home/node_modules/destroy/README.md b/device_home/node_modules/destroy/README.md
deleted file mode 100644 (file)
index 6474bc3..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# Destroy
-
-[![NPM version][npm-image]][npm-url]
-[![Build status][travis-image]][travis-url]
-[![Test coverage][coveralls-image]][coveralls-url]
-[![License][license-image]][license-url]
-[![Downloads][downloads-image]][downloads-url]
-[![Gittip][gittip-image]][gittip-url]
-
-Destroy a stream.
-
-This module is meant to ensure a stream gets destroyed, handling different APIs
-and Node.js bugs.
-
-## API
-
-```js
-var destroy = require('destroy')
-```
-
-### destroy(stream)
-
-Destroy the given stream. In most cases, this is identical to a simple
-`stream.destroy()` call. The rules are as follows for a given stream:
-
-  1. If the `stream` is an instance of `ReadStream`, then call `stream.destroy()`
-     and add a listener to the `open` event to call `stream.close()` if it is
-     fired. This is for a Node.js bug that will leak a file descriptor if
-     `.destroy()` is called before `open`.
-  2. If the `stream` is not an instance of `Stream`, then nothing happens.
-  3. If the `stream` has a `.destroy()` method, then call it.
-
-The function returns the `stream` passed in as the argument.
-
-## Example
-
-```js
-var destroy = require('destroy')
-
-var fs = require('fs')
-var stream = fs.createReadStream('package.json')
-
-// ... and later
-destroy(stream)
-```
-
-[npm-image]: https://img.shields.io/npm/v/destroy.svg?style=flat-square
-[npm-url]: https://npmjs.org/package/destroy
-[github-tag]: http://img.shields.io/github/tag/stream-utils/destroy.svg?style=flat-square
-[github-url]: https://github.com/stream-utils/destroy/tags
-[travis-image]: https://img.shields.io/travis/stream-utils/destroy.svg?style=flat-square
-[travis-url]: https://travis-ci.org/stream-utils/destroy
-[coveralls-image]: https://img.shields.io/coveralls/stream-utils/destroy.svg?style=flat-square
-[coveralls-url]: https://coveralls.io/r/stream-utils/destroy?branch=master
-[license-image]: http://img.shields.io/npm/l/destroy.svg?style=flat-square
-[license-url]: LICENSE.md
-[downloads-image]: http://img.shields.io/npm/dm/destroy.svg?style=flat-square
-[downloads-url]: https://npmjs.org/package/destroy
-[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square
-[gittip-url]: https://www.gittip.com/jonathanong/
diff --git a/device_home/node_modules/dijkstrajs/CONTRIBUTING.md b/device_home/node_modules/dijkstrajs/CONTRIBUTING.md
deleted file mode 100644 (file)
index 5f25961..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Contributing
-============
-
-1. Fork it
-2. Create your feature branch (`git checkout -b my-new-feature`)
-3. Commit your changes (`git commit -am 'Add some feature'`)
-4. Push to the branch (`git push origin my-new-feature`)
-5. Create new Pull Request
diff --git a/device_home/node_modules/dijkstrajs/LICENSE.md b/device_home/node_modules/dijkstrajs/LICENSE.md
deleted file mode 100644 (file)
index b662d80..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-```
-Dijkstra path-finding functions. Adapted from the Dijkstar Python project.
-
-Copyright (C) 2008
-  Wyatt Baldwin <self@wyattbaldwin.com>
-  All rights reserved
-
-Licensed under the MIT license.
-
-  http://www.opensource.org/licenses/mit-license.php
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-```
diff --git a/device_home/node_modules/dijkstrajs/README.md b/device_home/node_modules/dijkstrajs/README.md
deleted file mode 100644 (file)
index 69b74a0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# dijkstrajs.js
-
-[![NPM](https://nodei.co/npm/dijkstrajs.png)](https://nodei.co/npm/dijkstrajs/)
-
-[![Build Status](https://api.travis-ci.org/tcort/dijkstrajs.png?branch=master)](http://travis-ci.org/tcort/dijkstrajs)
-
-dijkstrajs is a simple JavaScript implementation of Dijkstra's single-source shortest-paths algorithm.
-
-The code was originally written by Wyatt Baldwin and turned into a node module by Thomas Cort.
-
-## Requirements
-
-* [nodejs](http://nodejs.org/)
-
-## Installation
-
-    npm install dijkstrajs
-
-## Examples
-
-See `test/dijkstra.test.js` in the sources for some example code.
-
diff --git a/device_home/node_modules/dijkstrajs/test/dijkstra.test.js b/device_home/node_modules/dijkstrajs/test/dijkstra.test.js
deleted file mode 100644 (file)
index 5a6817a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";var expect=require("expect.js"),dijkstra=require("../dijkstra.js"),find_path=dijkstra.find_path;describe("dijkstra.js",(function(){describe(".find_path()",(function(){it("should find the path between two points, all edges have weight 1",(function(){var e=find_path({a:{b:10,d:1},b:{a:1,c:1,e:1},c:{b:1,f:1},d:{a:1,e:1,g:1},e:{b:1,d:1,f:1,h:1},f:{c:1,e:1,i:1},g:{d:1,h:1},h:{e:1,g:1,i:1},i:{f:1,h:1}},"a","i");expect(e).to.eql(["a","d","e","f","i"])})),it("should find the path between two points, weighted edges",(function(){var e={a:{b:10,c:100,d:1},b:{c:10},d:{b:1,e:1},e:{f:1},f:{c:1},g:{b:1}},t=find_path(e,"a","c");expect(t).to.eql(["a","d","e","f","c"]),t=find_path(e,"d","b"),expect(t).to.eql(["d","b"])})),it("should throw on unreachable destination",(function(){var e={a:{b:10,c:100,d:1},b:{c:10},d:{b:1,e:1},e:{f:1},f:{c:1},g:{b:1}};expect((function(){find_path(e,"c","a")})).to.throwException(),expect((function(){find_path(e,"a","g")})).to.throwException()})),it("should throw on non-existent destination",(function(){var e={a:{b:10,c:100,d:1},b:{c:10},d:{b:1,e:1},e:{f:1},f:{c:1},g:{b:1}};expect((function(){find_path(e,"a","z")})).to.throwException()}))})),describe(".single_source_shortest_paths()",(function(){it("should find all paths from a node",(function(){var e=dijkstra.single_source_shortest_paths({a:{b:10,c:100,d:1},b:{c:10},d:{b:1,e:1},e:{f:1},f:{c:1},g:{b:1}},"a");expect(e).to.eql({d:"a",b:"d",e:"d",f:"e",c:"f"})}))}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/ee-first/README.md b/device_home/node_modules/ee-first/README.md
deleted file mode 100644 (file)
index cbd2478..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-# EE First
-
-[![NPM version][npm-image]][npm-url]
-[![Build status][travis-image]][travis-url]
-[![Test coverage][coveralls-image]][coveralls-url]
-[![License][license-image]][license-url]
-[![Downloads][downloads-image]][downloads-url]
-[![Gittip][gittip-image]][gittip-url]
-
-Get the first event in a set of event emitters and event pairs,
-then clean up after itself.
-
-## Install
-
-```sh
-$ npm install ee-first
-```
-
-## API
-
-```js
-var first = require('ee-first')
-```
-
-### first(arr, listener)
-
-Invoke `listener` on the first event from the list specified in `arr`. `arr` is
-an array of arrays, with each array in the format `[ee, ...event]`. `listener`
-will be called only once, the first time any of the given events are emitted. If
-`error` is one of the listened events, then if that fires first, the `listener`
-will be given the `err` argument.
-
-The `listener` is invoked as `listener(err, ee, event, args)`, where `err` is the
-first argument emitted from an `error` event, if applicable; `ee` is the event
-emitter that fired; `event` is the string event name that fired; and `args` is an
-array of the arguments that were emitted on the event.
-
-```js
-var ee1 = new EventEmitter()
-var ee2 = new EventEmitter()
-
-first([
-  [ee1, 'close', 'end', 'error'],
-  [ee2, 'error']
-], function (err, ee, event, args) {
-  // listener invoked
-})
-```
-
-#### .cancel()
-
-The group of listeners can be cancelled before being invoked and have all the event
-listeners removed from the underlying event emitters.
-
-```js
-var thunk = first([
-  [ee1, 'close', 'end', 'error'],
-  [ee2, 'error']
-], function (err, ee, event, args) {
-  // listener invoked
-})
-
-// cancel and clean up
-thunk.cancel()
-```
-
-[npm-image]: https://img.shields.io/npm/v/ee-first.svg?style=flat-square
-[npm-url]: https://npmjs.org/package/ee-first
-[github-tag]: http://img.shields.io/github/tag/jonathanong/ee-first.svg?style=flat-square
-[github-url]: https://github.com/jonathanong/ee-first/tags
-[travis-image]: https://img.shields.io/travis/jonathanong/ee-first.svg?style=flat-square
-[travis-url]: https://travis-ci.org/jonathanong/ee-first
-[coveralls-image]: https://img.shields.io/coveralls/jonathanong/ee-first.svg?style=flat-square
-[coveralls-url]: https://coveralls.io/r/jonathanong/ee-first?branch=master
-[license-image]: http://img.shields.io/npm/l/ee-first.svg?style=flat-square
-[license-url]: LICENSE.md
-[downloads-image]: http://img.shields.io/npm/dm/ee-first.svg?style=flat-square
-[downloads-url]: https://npmjs.org/package/ee-first
-[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square
-[gittip-url]: https://www.gittip.com/jonathanong/
diff --git a/device_home/node_modules/ejs/README.md b/device_home/node_modules/ejs/README.md
deleted file mode 100755 (executable)
index 009809c..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-Embedded JavaScript templates<br/>
-[![Build Status](https://img.shields.io/travis/mde/ejs/master.svg?style=flat)](https://travis-ci.org/mde/ejs)
-[![Developing Dependencies](https://img.shields.io/david/dev/mde/ejs.svg?style=flat)](https://david-dm.org/mde/ejs?type=dev)
-[![Known Vulnerabilities](https://snyk.io/test/npm/ejs/badge.svg?style=flat)](https://snyk.io/test/npm/ejs)
-=============================
-
-## Installation
-
-```bash
-$ npm install ejs
-```
-
-## Features
-
-  * Control flow with `<% %>`
-  * Escaped output with `<%= %>` (escape function configurable)
-  * Unescaped raw output with `<%- %>`
-  * Newline-trim mode ('newline slurping') with `-%>` ending tag
-  * Whitespace-trim mode (slurp all whitespace) for control flow with `<%_ _%>`
-  * Custom delimiters (e.g. `[? ?]` instead of `<% %>`)
-  * Includes
-  * Client-side support
-  * Static caching of intermediate JavaScript
-  * Static caching of templates
-  * Complies with the [Express](http://expressjs.com) view system
-
-## Example
-
-```ejs
-<% if (user) { %>
-  <h2><%= user.name %></h2>
-<% } %>
-```
-
-Try EJS online at: https://ionicabizau.github.io/ejs-playground/.
-
-## Basic usage
-
-```javascript
-let template = ejs.compile(str, options);
-template(data);
-// => Rendered HTML string
-
-ejs.render(str, data, options);
-// => Rendered HTML string
-
-ejs.renderFile(filename, data, options, function(err, str){
-    // str => Rendered HTML string
-});
-```
-
-It is also possible to use `ejs.render(dataAndOptions);` where you pass
-everything in a single object. In that case, you'll end up with local variables
-for all the passed options. However, be aware that your code could break if we
-add an option with the same name as one of your data object's properties.
-Therefore, we do not recommend using this shortcut.
-
-### Options
-
-  - `cache`                 Compiled functions are cached, requires `filename`
-  - `filename`              The name of the file being rendered. Not required if you
-    are using `renderFile()`. Used by `cache` to key caches, and for includes.
-  - `root`                  Set project root for includes with an absolute path (e.g, /file.ejs).
-    Can be array to try to resolve include from multiple directories.
-  - `views`                 An array of paths to use when resolving includes with relative paths.
-  - `context`               Function execution context
-  - `compileDebug`          When `false` no debug instrumentation is compiled
-  - `client`                When `true`, compiles a function that can be rendered
-    in the browser without needing to load the EJS Runtime
-    ([ejs.min.js](https://github.com/mde/ejs/releases/latest)).
-  - `delimiter`             Character to use for inner delimiter, by default '%'
-  - `openDelimiter`         Character to use for opening delimiter, by default '<'
-  - `closeDelimiter`        Character to use for closing delimiter, by default '>'
-  - `debug`                 Outputs generated function body
-  - `strict`                When set to `true`, generated function is in strict mode
-  - `_with`                 Whether or not to use `with() {}` constructs. If `false`
-    then the locals will be stored in the `locals` object. Set to `false` in strict mode.
-  - `destructuredLocals`    An array of local variables that are always destructured from
-    the locals object, available even in strict mode.
-  - `localsName`            Name to use for the object storing local variables when not using
-    `with` Defaults to `locals`
-  - `rmWhitespace`          Remove all safe-to-remove whitespace, including leading
-    and trailing whitespace. It also enables a safer version of `-%>` line
-    slurping for all scriptlet tags (it does not strip new lines of tags in
-    the middle of a line).
-  - `escape`                The escaping function used with `<%=` construct. It is
-    used in rendering and is `.toString()`ed in the generation of client functions.
-    (By default escapes XML).
-  - `outputFunctionName`    Set to a string (e.g., 'echo' or 'print') for a function to print
-    output inside scriptlet tags.
-  - `async`                 When `true`, EJS will use an async function for rendering. (Depends
-    on async/await support in the JS runtime.
-  - `includer`              Custom function to handle EJS includes, receives `(originalPath, parsedPath)`
-    parameters, where `originalPath` is the path in include as-is and `parsedPath` is the
-    previously resolved path. Should return an object `{ filename, template }`,
-    you may return only one of the properties, where `filename` is the final parsed path and `template`
-    is the included content.
-
-This project uses [JSDoc](http://usejsdoc.org/). For the full public API
-documentation, clone the repository and run `jake doc`. This will run JSDoc
-with the proper options and output the documentation to `out/`. If you want
-the both the public & private API docs, run `jake devdoc` instead.
-
-### Tags
-
-  - `<%`              'Scriptlet' tag, for control-flow, no output
-  - `<%_`             'Whitespace Slurping' Scriptlet tag, strips all whitespace before it
-  - `<%=`             Outputs the value into the template (escaped)
-  - `<%-`             Outputs the unescaped value into the template
-  - `<%#`             Comment tag, no execution, no output
-  - `<%%`             Outputs a literal '<%'
-  - `%%>`             Outputs a literal '%>'
-  - `%>`              Plain ending tag
-  - `-%>`             Trim-mode ('newline slurp') tag, trims following newline
-  - `_%>`             'Whitespace Slurping' ending tag, removes all whitespace after it
-
-For the full syntax documentation, please see [docs/syntax.md](https://github.com/mde/ejs/blob/master/docs/syntax.md).
-
-### Includes
-
-Includes either have to be an absolute path, or, if not, are assumed as
-relative to the template with the `include` call. For example if you are
-including `./views/user/show.ejs` from `./views/users.ejs` you would
-use `<%- include('user/show') %>`.
-
-You must specify the `filename` option for the template with the `include`
-call unless you are using `renderFile()`.
-
-You'll likely want to use the raw output tag (`<%-`) with your include to avoid
-double-escaping the HTML output.
-
-```ejs
-<ul>
-  <% users.forEach(function(user){ %>
-    <%- include('user/show', {user: user}) %>
-  <% }); %>
-</ul>
-```
-
-Includes are inserted at runtime, so you can use variables for the path in the
-`include` call (for example `<%- include(somePath) %>`). Variables in your
-top-level data object are available to all your includes, but local variables
-need to be passed down.
-
-NOTE: Include preprocessor directives (`<% include user/show %>`) are
-not supported in v3.0+.
-
-## Custom delimiters
-
-Custom delimiters can be applied on a per-template basis, or globally:
-
-```javascript
-let ejs = require('ejs'),
-    users = ['geddy', 'neil', 'alex'];
-
-// Just one template
-ejs.render('<p>[?= users.join(" | "); ?]</p>', {users: users}, {delimiter: '?', openDelimiter: '[', closeDelimiter: ']'});
-// => '<p>geddy | neil | alex</p>'
-
-// Or globally
-ejs.delimiter = '?';
-ejs.openDelimiter = '[';
-ejs.closeDelimiter = ']';
-ejs.render('<p>[?= users.join(" | "); ?]</p>', {users: users});
-// => '<p>geddy | neil | alex</p>'
-```
-
-### Caching
-
-EJS ships with a basic in-process cache for caching the intermediate JavaScript
-functions used to render templates. It's easy to plug in LRU caching using
-Node's `lru-cache` library:
-
-```javascript
-let ejs = require('ejs'),
-    LRU = require('lru-cache');
-ejs.cache = LRU(100); // LRU cache with 100-item limit
-```
-
-If you want to clear the EJS cache, call `ejs.clearCache`. If you're using the
-LRU cache and need a different limit, simple reset `ejs.cache` to a new instance
-of the LRU.
-
-### Custom file loader
-
-The default file loader is `fs.readFileSync`, if you want to customize it, you can set ejs.fileLoader.
-
-```javascript
-let ejs = require('ejs');
-let myFileLoad = function (filePath) {
-  return 'myFileLoad: ' + fs.readFileSync(filePath);
-};
-
-ejs.fileLoader = myFileLoad;
-```
-
-With this feature, you can preprocess the template before reading it.
-
-### Layouts
-
-EJS does not specifically support blocks, but layouts can be implemented by
-including headers and footers, like so:
-
-
-```ejs
-<%- include('header') -%>
-<h1>
-  Title
-</h1>
-<p>
-  My page
-</p>
-<%- include('footer') -%>
-```
-
-## Client-side support
-
-Go to the [Latest Release](https://github.com/mde/ejs/releases/latest), download
-`./ejs.js` or `./ejs.min.js`. Alternately, you can compile it yourself by cloning
-the repository and running `jake build` (or `$(npm bin)/jake build` if jake is
-not installed globally).
-
-Include one of these files on your page, and `ejs` should be available globally.
-
-### Example
-
-```html
-<div id="output"></div>
-<script src="ejs.min.js"></script>
-<script>
-  let people = ['geddy', 'neil', 'alex'],
-      html = ejs.render('<%= people.join(", "); %>', {people: people});
-  // With jQuery:
-  $('#output').html(html);
-  // Vanilla JS:
-  document.getElementById('output').innerHTML = html;
-</script>
-```
-
-### Caveats
-
-Most of EJS will work as expected; however, there are a few things to note:
-
-1. Obviously, since you do not have access to the filesystem, `ejs.renderFile()` won't work.
-2. For the same reason, `include`s do not work unless you use an `include callback`. Here is an example:
-  ```javascript
-  let str = "Hello <%= include('file', {person: 'John'}); %>",
-      fn = ejs.compile(str, {client: true});
-
-  fn(data, null, function(path, d){ // include callback
-    // path -> 'file'
-    // d -> {person: 'John'}
-    // Put your code here
-    // Return the contents of file as a string
-  }); // returns rendered string
-  ```
-
-See the [examples folder](https://github.com/mde/ejs/tree/master/examples) for more details.
-
-## CLI
-
-EJS ships with a full-featured CLI. Options are similar to those used in JavaScript code:
-
-  - `-o / --output-file FILE`            Write the rendered output to FILE rather than stdout.
-  - `-f / --data-file FILE`              Must be JSON-formatted. Use parsed input from FILE as data for rendering.
-  - `-i / --data-input STRING`           Must be JSON-formatted and URI-encoded. Use parsed input from STRING as data for rendering.
-  - `-m / --delimiter CHARACTER`         Use CHARACTER with angle brackets for open/close (defaults to %).
-  - `-p / --open-delimiter CHARACTER`    Use CHARACTER instead of left angle bracket to open.
-  - `-c / --close-delimiter CHARACTER`   Use CHARACTER instead of right angle bracket to close.
-  - `-s / --strict`                      When set to `true`, generated function is in strict mode
-  - `-n / --no-with`                     Use 'locals' object for vars rather than using `with` (implies --strict).
-  - `-l / --locals-name`                 Name to use for the object storing local variables when not using `with`.
-  - `-w / --rm-whitespace`               Remove all safe-to-remove whitespace, including leading and trailing whitespace.
-  - `-d / --debug`                       Outputs generated function body
-  - `-h / --help`                        Display this help message.
-  - `-V/v / --version`                   Display the EJS version.
-
-Here are some examples of usage:
-
-```shell
-$ ejs -p [ -c ] ./template_file.ejs -o ./output.html
-$ ejs ./test/fixtures/user.ejs name=Lerxst
-$ ejs -n -l _ ./some_template.ejs -f ./data_file.json
-```
-
-### Data input
-
-There is a variety of ways to pass the CLI data for rendering.
-
-Stdin:
-
-```shell
-$ ./test/fixtures/user_data.json | ejs ./test/fixtures/user.ejs
-$ ejs ./test/fixtures/user.ejs < test/fixtures/user_data.json
-```
-
-A data file:
-
-```shell
-$ ejs ./test/fixtures/user.ejs -f ./user_data.json
-```
-
-A command-line option (must be URI-encoded):
-
-```shell
-./bin/cli.js -i %7B%22name%22%3A%20%22foo%22%7D ./test/fixtures/user.ejs
-```
-
-Or, passing values directly at the end of the invocation:
-
-```shell
-./bin/cli.js -m $ ./test/fixtures/user.ejs name=foo
-```
-
-### Output
-
-The CLI by default send output to stdout, but you can use the `-o` or `--output-file`
-flag to specify a target file to send the output to.
-
-## IDE Integration with Syntax Highlighting
-
-VSCode:Javascript EJS by *DigitalBrainstem*
-
-## Related projects
-
-There are a number of implementations of EJS:
-
- * TJ's implementation, the v1 of this library: https://github.com/tj/ejs
- * EJS Embedded JavaScript Framework on Google Code: https://code.google.com/p/embeddedjavascript/
- * Sam Stephenson's Ruby implementation: https://rubygems.org/gems/ejs
- * Erubis, an ERB implementation which also runs JavaScript: http://www.kuwata-lab.com/erubis/users-guide.04.html#lang-javascript
- * DigitalBrainstem EJS Language support: https://github.com/Digitalbrainstem/ejs-grammar
-
-## License
-
-Licensed under the Apache License, Version 2.0
-(<http://www.apache.org/licenses/LICENSE-2.0>)
-
-- - -
-EJS Embedded JavaScript templates copyright 2112
-mde@fleegix.org.
diff --git a/device_home/node_modules/emoji-regex/README.md b/device_home/node_modules/emoji-regex/README.md
deleted file mode 100644 (file)
index 37cf14e..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex)
-
-_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard.
-
-This repository contains a script that generates this regular expression based on [the data from Unicode Technical Report #51](https://github.com/mathiasbynens/unicode-tr51). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard.
-
-## Installation
-
-Via [npm](https://www.npmjs.com/):
-
-```bash
-npm install emoji-regex
-```
-
-In [Node.js](https://nodejs.org/):
-
-```js
-const emojiRegex = require('emoji-regex');
-// Note: because the regular expression has the global flag set, this module
-// exports a function that returns the regex rather than exporting the regular
-// expression itself, to make it impossible to (accidentally) mutate the
-// original regular expression.
-
-const text = `
-\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation)
-\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji
-\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base)
-\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier
-`;
-
-const regex = emojiRegex();
-let match;
-while (match = regex.exec(text)) {
-  const emoji = match[0];
-  console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`);
-}
-```
-
-Console output:
-
-```
-Matched sequence ⌚ — code points: 1
-Matched sequence ⌚ — code points: 1
-Matched sequence ↔️ — code points: 2
-Matched sequence ↔️ — code points: 2
-Matched sequence 👩 — code points: 1
-Matched sequence 👩 — code points: 1
-Matched sequence 👩🏿 — code points: 2
-Matched sequence 👩🏿 — code points: 2
-```
-
-To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex:
-
-```js
-const emojiRegex = require('emoji-regex/text.js');
-```
-
-Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes:
-
-```js
-const emojiRegex = require('emoji-regex/es2015/index.js');
-const emojiRegexText = require('emoji-regex/es2015/text.js');
-```
-
-## Author
-
-| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
-|---|
-| [Mathias Bynens](https://mathiasbynens.be/) |
-
-## License
-
-_emoji-regex_ is available under the [MIT](https://mths.be/mit) license.
diff --git a/device_home/node_modules/encodeurl/HISTORY.md b/device_home/node_modules/encodeurl/HISTORY.md
deleted file mode 100644 (file)
index 41313b2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-1.0.2 / 2018-01-21
-==================
-
-  * Fix encoding `%` as last character
-
-1.0.1 / 2016-06-09
-==================
-
-  * Fix encoding unpaired surrogates at start/end of string
-
-1.0.0 / 2016-06-08
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/encodeurl/README.md b/device_home/node_modules/encodeurl/README.md
deleted file mode 100644 (file)
index 127c5a0..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-# encodeurl
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Encode a URL to a percent-encoded form, excluding already-encoded sequences
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install encodeurl
-```
-
-## API
-
-```js
-var encodeUrl = require('encodeurl')
-```
-
-### encodeUrl(url)
-
-Encode a URL to a percent-encoded form, excluding already-encoded sequences.
-
-This function will take an already-encoded URL and encode all the non-URL
-code points (as UTF-8 byte sequences). This function will not encode the
-"%" character unless it is not part of a valid sequence (`%20` will be
-left as-is, but `%foo` will be encoded as `%25foo`).
-
-This encode is meant to be "safe" and does not throw errors. It will try as
-hard as it can to properly encode the given URL, including replacing any raw,
-unpaired surrogate pairs with the Unicode replacement character prior to
-encoding.
-
-This function is _similar_ to the intrinsic function `encodeURI`, except it
-will not encode the `%` character if that is part of a valid sequence, will
-not encode `[` and `]` (for IPv6 hostnames) and will replace raw, unpaired
-surrogate pairs with the Unicode replacement character (instead of throwing).
-
-## Examples
-
-### Encode a URL containing user-controled data
-
-```js
-var encodeUrl = require('encodeurl')
-var escapeHtml = require('escape-html')
-
-http.createServer(function onRequest (req, res) {
-  // get encoded form of inbound url
-  var url = encodeUrl(req.url)
-
-  // create html message
-  var body = '<p>Location ' + escapeHtml(url) + ' not found</p>'
-
-  // send a 404
-  res.statusCode = 404
-  res.setHeader('Content-Type', 'text/html; charset=UTF-8')
-  res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8')))
-  res.end(body, 'utf-8')
-})
-```
-
-### Encode a URL for use in a header field
-
-```js
-var encodeUrl = require('encodeurl')
-var escapeHtml = require('escape-html')
-var url = require('url')
-
-http.createServer(function onRequest (req, res) {
-  // parse inbound url
-  var href = url.parse(req)
-
-  // set new host for redirect
-  href.host = 'localhost'
-  href.protocol = 'https:'
-  href.slashes = true
-
-  // create location header
-  var location = encodeUrl(url.format(href))
-
-  // create html message
-  var body = '<p>Redirecting to new site: ' + escapeHtml(location) + '</p>'
-
-  // send a 301
-  res.statusCode = 301
-  res.setHeader('Content-Type', 'text/html; charset=UTF-8')
-  res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8')))
-  res.setHeader('Location', location)
-  res.end(body, 'utf-8')
-})
-```
-
-## Testing
-
-```sh
-$ npm test
-$ npm run lint
-```
-
-## References
-
-- [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax][rfc-3986]
-- [WHATWG URL Living Standard][whatwg-url]
-
-[rfc-3986]: https://tools.ietf.org/html/rfc3986
-[whatwg-url]: https://url.spec.whatwg.org/
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/encodeurl.svg
-[npm-url]: https://npmjs.org/package/encodeurl
-[node-version-image]: https://img.shields.io/node/v/encodeurl.svg
-[node-version-url]: https://nodejs.org/en/download
-[travis-image]: https://img.shields.io/travis/pillarjs/encodeurl.svg
-[travis-url]: https://travis-ci.org/pillarjs/encodeurl
-[coveralls-image]: https://img.shields.io/coveralls/pillarjs/encodeurl.svg
-[coveralls-url]: https://coveralls.io/r/pillarjs/encodeurl?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/encodeurl.svg
-[downloads-url]: https://npmjs.org/package/encodeurl
diff --git a/device_home/node_modules/engine.io-client/CHANGELOG.md b/device_home/node_modules/engine.io-client/CHANGELOG.md
deleted file mode 100644 (file)
index 747e1bb..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-## [3.5.1](https://github.com/socketio/engine.io-client/compare/3.5.0...3.5.1) (2021-03-02)
-
-
-### Bug Fixes
-
-* replace default nulls in SSL options with undefineds ([d0c551c](https://github.com/socketio/engine.io-client/commit/d0c551cca1e37301e8b28843c8f6e7ad5cf561d3))
-
-
-# [3.5.0](https://github.com/socketio/engine.io-client/compare/3.4.4...3.5.0) (2020-12-30)
-
-
-### Bug Fixes
-
-* check the type of the initial packet ([8750356](https://github.com/socketio/engine.io-client/commit/8750356dba5409ba0e1d3a27da6d214118702b3e))
-
-
-
-## [3.4.4](https://github.com/socketio/engine.io-client/compare/3.4.3...3.4.4) (2020-09-30)
-
-
-
-## [3.4.3](https://github.com/socketio/engine.io-client/compare/3.4.2...3.4.3) (2020-06-04)
-
-
-### Bug Fixes
-
-* **react-native:** restrict the list of options for the WebSocket object ([e5bc106](https://github.com/socketio/engine.io-client/commit/e5bc1063cc90a7b6262146c7b5338ffff1ff9e5b))
-
-
-
-## [3.4.2](https://github.com/socketio/engine.io-client/compare/3.4.1...3.4.2) (2020-05-13)
-
-
-
-## [3.4.1](https://github.com/socketio/engine.io-client/compare/3.4.0...3.4.1) (2020-04-17)
-
-
-### Bug Fixes
-
-* use globalThis polyfill instead of self/global ([357f01d](https://github.com/socketio/engine.io-client/commit/357f01d90448d8565b650377bc7cabb351d991bd))
-
-
-
diff --git a/device_home/node_modules/engine.io-client/README.md b/device_home/node_modules/engine.io-client/README.md
deleted file mode 100644 (file)
index 436f317..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-
-# Engine.IO client
-
-[![Build Status](https://github.com/socketio/engine.io-client/workflows/CI/badge.svg)](https://github.com/socketio/engine.io-client/actions)
-[![NPM version](https://badge.fury.io/js/engine.io-client.svg)](http://badge.fury.io/js/engine.io-client)
-
-This is the client for [Engine.IO](http://github.com/socketio/engine.io),
-the implementation of transport-based cross-browser/cross-device
-bi-directional communication layer for [Socket.IO](http://github.com/socketio/socket.io).
-
-## How to use
-
-### Standalone
-
-You can find an `engine.io.js` file in this repository, which is a
-standalone build you can use as follows:
-
-```html
-<script src="/path/to/engine.io.js"></script>
-<script>
-  // eio = Socket
-  var socket = eio('ws://localhost');
-  socket.on('open', function(){
-    socket.on('message', function(data){});
-    socket.on('close', function(){});
-  });
-</script>
-```
-
-### With browserify
-
-Engine.IO is a commonjs module, which means you can include it by using
-`require` on the browser and package using [browserify](http://browserify.org/):
-
-1. install the client package
-
-    ```bash
-    $ npm install engine.io-client
-    ```
-
-1. write your app code
-
-    ```js
-    var socket = require('engine.io-client')('ws://localhost');
-    socket.on('open', function(){
-      socket.on('message', function(data){});
-      socket.on('close', function(){});
-    });
-    ```
-
-1. build your app bundle
-
-    ```bash
-    $ browserify app.js > bundle.js
-    ```
-
-1. include on your page
-
-    ```html
-    <script src="/path/to/bundle.js"></script>
-    ```
-
-### Sending and receiving binary
-
-```html
-<script src="/path/to/engine.io.js"></script>
-<script>
-  var socket = new eio.Socket('ws://localhost/');
-  socket.binaryType = 'blob';
-  socket.on('open', function () {
-    socket.send(new Int8Array(5));
-    socket.on('message', function(blob){});
-    socket.on('close', function(){ });
-  });
-</script>
-```
-
-### Node.JS
-
-Add `engine.io-client` to your `package.json` and then:
-
-```js
-var socket = require('engine.io-client')('ws://localhost');
-socket.on('open', function(){
-  socket.on('message', function(data){});
-  socket.on('close', function(){});
-});
-```
-
-### Node.js with certificates
-```js
-var opts = {
-  key: fs.readFileSync('test/fixtures/client.key'),
-  cert: fs.readFileSync('test/fixtures/client.crt'),
-  ca: fs.readFileSync('test/fixtures/ca.crt')
-};
-
-var socket = require('engine.io-client')('ws://localhost', opts);
-socket.on('open', function(){
-  socket.on('message', function(data){});
-  socket.on('close', function(){});
-});
-```
-
-### Node.js with extraHeaders
-```js
-var opts = {
-  extraHeaders: {
-    'X-Custom-Header-For-My-Project': 'my-secret-access-token',
-    'Cookie': 'user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly'
-  }
-};
-
-var socket = require('engine.io-client')('ws://localhost', opts);
-socket.on('open', function(){
-  socket.on('message', function(data){});
-  socket.on('close', function(){});
-});
-```
-
-## Features
-
-- Lightweight
-- Runs on browser and node.js seamlessly
-- Transports are independent of `Engine`
-  - Easy to debug
-  - Easy to unit test
-- Runs inside HTML5 WebWorker
-- Can send and receive binary data
-  - Receives as ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer
-    in Node
-  - When XHR2 or WebSockets are used, binary is emitted directly. Otherwise
-    binary is encoded into base64 strings, and decoded when binary types are
-    supported.
-  - With browsers that don't support ArrayBuffer, an object { base64: true,
-    data: dataAsBase64String } is emitted on the `message` event.
-
-## API
-
-### Socket
-
-The client class. Mixes in [Emitter](http://github.com/component/emitter).
-Exposed as `eio` in the browser standalone build.
-
-#### Properties
-
-- `protocol` _(Number)_: protocol revision number
-- `binaryType` _(String)_ : can be set to 'arraybuffer' or 'blob' in browsers,
-  and `buffer` or `arraybuffer` in Node. Blob is only used in browser if it's
-  supported.
-
-#### Events
-
-- `open`
-  - Fired upon successful connection.
-- `message`
-  - Fired when data is received from the server.
-  - **Arguments**
-    - `String` | `ArrayBuffer`: utf-8 encoded data or ArrayBuffer containing
-      binary data
-- `close`
-  - Fired upon disconnection. In compliance with the WebSocket API spec, this event may be
-    fired even if the `open` event does not occur (i.e. due to connection error or `close()`).
-- `error`
-  - Fired when an error occurs.
-- `flush`
-  - Fired upon completing a buffer flush
-- `drain`
-  - Fired after `drain` event of transport if writeBuffer is empty
-- `upgradeError`
-  - Fired if an error occurs with a transport we're trying to upgrade to.
-- `upgrade`
-  - Fired upon upgrade success, after the new transport is set
-- `ping`
-  - Fired upon _flushing_ a ping packet (ie: actual packet write out)
-- `pong`
-  - Fired upon receiving a pong packet.
-
-#### Methods
-
-- **constructor**
-    - Initializes the client
-    - **Parameters**
-      - `String` uri
-      - `Object`: optional, options object
-    - **Options**
-      - `agent` (`http.Agent`): `http.Agent` to use, defaults to `false` (NodeJS only)
-      - `upgrade` (`Boolean`): defaults to true, whether the client should try
-      to upgrade the transport from long-polling to something better.
-      - `forceJSONP` (`Boolean`): forces JSONP for polling transport.
-      - `jsonp` (`Boolean`): determines whether to use JSONP when
-        necessary for polling. If disabled (by settings to false) an error will
-        be emitted (saying "No transports available") if no other transports
-        are available. If another transport is available for opening a
-        connection (e.g. WebSocket) that transport
-        will be used instead.
-      - `forceBase64` (`Boolean`): forces base 64 encoding for polling transport even when XHR2 responseType is available and WebSocket even if the used standard supports binary.
-      - `enablesXDR` (`Boolean`): enables XDomainRequest for IE8 to avoid loading bar flashing with click sound. default to `false` because XDomainRequest has a flaw of not sending cookie.
-      - `withCredentials` (`Boolean`): defaults to `true`, whether to include credentials (cookies, authorization headers, TLS client certificates, etc.) with cross-origin XHR polling requests.
-      - `timestampRequests` (`Boolean`): whether to add the timestamp with each
-        transport request. Note: polling requests are always stamped unless this
-        option is explicitly set to `false` (`false`)
-      - `timestampParam` (`String`): timestamp parameter (`t`)
-      - `policyPort` (`Number`): port the policy server listens on (`843`)
-      - `path` (`String`): path to connect to, default is `/engine.io`
-      - `transports` (`Array`): a list of transports to try (in order).
-      Defaults to `['polling', 'websocket']`. `Engine`
-      always attempts to connect directly with the first one, provided the
-      feature detection test for it passes.
-      - `transportOptions` (`Object`): hash of options, indexed by transport name, overriding the common options for the given transport
-      - `rememberUpgrade` (`Boolean`): defaults to false.
-        If true and if the previous websocket connection to the server succeeded,
-        the connection attempt will bypass the normal upgrade process and will initially
-        try websocket. A connection attempt following a transport error will use the
-        normal upgrade process. It is recommended you turn this on only when using
-        SSL/TLS connections, or if you know that your network does not block websockets.
-      - `pfx` (`String`|`Buffer`): Certificate, Private key and CA certificates to use for SSL. Can be used in Node.js client environment to manually specify certificate information.
-      - `key` (`String`): Private key to use for SSL. Can be used in Node.js client environment to manually specify certificate information.
-      - `passphrase` (`String`): A string of passphrase for the private key or pfx. Can be used in Node.js client environment to manually specify certificate information.
-      - `cert` (`String`): Public x509 certificate to use. Can be used in Node.js client environment to manually specify certificate information.
-      - `ca` (`String`|`Array`): An authority certificate or array of authority certificates to check the remote host against.. Can be used in Node.js client environment to manually specify certificate information.
-      - `ciphers` (`String`): A string describing the ciphers to use or exclude. Consult the [cipher format list](http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT) for details on the format. Can be used in Node.js client environment to manually specify certificate information.
-      - `rejectUnauthorized` (`Boolean`): If true, the server certificate is verified against the list of supplied CAs. An 'error' event is emitted if verification fails. Verification happens at the connection level, before the HTTP request is sent. Can be used in Node.js client environment to manually specify certificate information.
-      - `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension
-        (see [ws module](https://github.com/einaros/ws) api docs). Set to `false` to disable. (`true`)
-        - `threshold` (`Number`): data is compressed only if the byte size is above this value. This option is ignored on the browser. (`1024`)
-      - `extraHeaders` (`Object`): Headers that will be passed for each request to the server (via xhr-polling and via websockets). These values then can be used during handshake or for special proxies. Can only be used in Node.js client environment.
-      - `onlyBinaryUpgrades` (`Boolean`): whether transport upgrades should be restricted to transports supporting binary data (`false`)
-      - `forceNode` (`Boolean`): Uses NodeJS implementation for websockets - even if there is a native Browser-Websocket available, which is preferred by default over the NodeJS implementation. (This is useful when using hybrid platforms like nw.js or electron) (`false`, NodeJS only)
-      - `localAddress` (`String`): the local IP address to connect to
-    - **Polling-only options**
-      - `requestTimeout` (`Number`): Timeout for xhr-polling requests in milliseconds (`0`)
-    - **Websocket-only options**
-      - `protocols` (`Array`): a list of subprotocols (see [MDN reference](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#Subprotocols))
-- `send`
-    - Sends a message to the server
-    - **Parameters**
-      - `String` | `ArrayBuffer` | `ArrayBufferView` | `Blob`: data to send
-      - `Object`: optional, options object
-      - `Function`: optional, callback upon `drain`
-    - **Options**
-      - `compress` (`Boolean`): whether to compress sending data. This option is ignored and forced to be `true` on the browser. (`true`)
-- `close`
-    - Disconnects the client.
-
-### Transport
-
-The transport class. Private. _Inherits from EventEmitter_.
-
-#### Events
-
-- `poll`: emitted by polling transports upon starting a new request
-- `pollComplete`: emitted by polling transports upon completing a request
-- `drain`: emitted by polling transports upon a buffer drain
-
-## Tests
-
-`engine.io-client` is used to test
-[engine](http://github.com/socketio/engine.io). Running the `engine.io`
-test suite ensures the client works and vice-versa.
-
-Browser tests are run using [zuul](https://github.com/defunctzombie/zuul). You can
-run the tests locally using the following command.
-
-```
-./node_modules/.bin/zuul --local 8080 -- test/index.js
-```
-
-Additionally, `engine.io-client` has a standalone test suite you can run
-with `make test` which will run node.js and browser tests. You must have zuul setup with
-a saucelabs account.
-
-## Support
-
-The support channels for `engine.io-client` are the same as `socket.io`:
-  - irc.freenode.net **#socket.io**
-  - [Google Groups](http://groups.google.com/group/socket_io)
-  - [Website](http://socket.io)
-
-## Development
-
-To contribute patches, run tests or benchmarks, make sure to clone the
-repository:
-
-```bash
-git clone git://github.com/socketio/engine.io-client.git
-```
-
-Then:
-
-```bash
-cd engine.io-client
-npm install
-```
-
-See the `Tests` section above for how to run tests before submitting any patches.
-
-## License
-
-MIT - Copyright (c) 2014 Automattic, Inc.
diff --git a/device_home/node_modules/engine.io-parser/CHANGELOG.md b/device_home/node_modules/engine.io-parser/CHANGELOG.md
deleted file mode 100644 (file)
index a442aeb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-## [2.2.1](https://github.com/socketio/engine.io-parser/compare/2.2.0...2.2.1) (2020-09-30)
diff --git a/device_home/node_modules/engine.io-parser/Readme.md b/device_home/node_modules/engine.io-parser/Readme.md
deleted file mode 100644 (file)
index 97326bb..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-
-# engine.io-parser
-
-[![Build Status](https://secure.travis-ci.org/socketio/engine.io-parser.svg?branch=master)](https://travis-ci.org/socketio/engine.io-parser)
-[![NPM version](https://badge.fury.io/js/engine.io-parser.svg)](https://npmjs.com/package/engine.io-parser)
-
-This is the JavaScript parser for the engine.io protocol encoding,
-shared by both
-[engine.io-client](https://github.com/socketio/engine.io-client) and
-[engine.io](https://github.com/socketio/engine.io).
-
-## How to use
-
-### Standalone
-
-The parser can encode/decode packets, payloads, and payloads as binary
-with the following methods: `encodePacket`, `decodePacket`, `encodePayload`,
-`decodePayload`, `encodePayloadAsBinary`, `decodePayloadAsBinary`.
-
-The browser-side parser also includes `encodePayloadAsArrayBuffer` and `encodePayloadAsBlob`.
-
-Example:
-
-```js
-var parser = require('engine.io-parser');
-
-var data = new Buffer(5);
-for (var i = 0; i < data.length; i++) { data[i] = i; }
-
-parser.encodePacket({ type: 'message', data: data }, function(encoded) {
-  var decodedData = parser.decodePacket(encoded); // { type: 'message', data: data }
-});
-```
-
-### With browserify
-
-Engine.IO Parser is a commonjs module, which means you can include it by using
-`require` on the browser and package using [browserify](http://browserify.org/):
-
-1. install the parser package
-
-    ```shell
-    npm install engine.io-parser
-    ```
-
-1. write your app code
-
-    ```js
-    var parser = require('engine.io-parser');
-
-    var testBuffer = new Int8Array(10);
-    for (var i = 0; i < testBuffer.length; i++) testBuffer[i] = i;
-
-    var packets = [{ type: 'message', data: testBuffer.buffer }, { type: 'message', data: 'hello' }];
-
-    parser.encodePayload(packets, function(encoded) {
-      parser.decodePayload(encoded,
-        function(packet, index, total) {
-          var isLast = index + 1 == total;
-          if (!isLast) {
-            var buffer = new Int8Array(packet.data); // testBuffer
-          } else {
-            var message = packet.data; // 'hello'
-          }
-        });
-    });
-    ```
-
-1. build your app bundle
-
-    ```bash
-    $ browserify app.js > bundle.js
-    ```
-
-1. include on your page
-
-    ```html
-    <script src="/path/to/bundle.js"></script>
-    ```
-
-## Features
-
-- Runs on browser and node.js seamlessly
-- Runs inside HTML5 WebWorker
-- Can encode and decode packets
-  - Encodes from/to ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer in Node
-
-## API
-
-Note: `cb(type)` means the type is a callback function that contains a parameter of type `type` when called.
-
-### Node
-
-- `encodePacket`
-    - Encodes a packet.
-    - **Parameters**
-      - `Object`: the packet to encode, has `type` and `data`.
-        - `data`: can be a `String`, `Number`, `Buffer`, `ArrayBuffer`
-      - `Boolean`: optional, binary support
-      - `Function`: callback, returns the encoded packet (`cb(String)`)
-- `decodePacket`
-    - Decodes a packet. Data also available as an ArrayBuffer if requested.
-    - Returns data as `String` or (`Blob` on browser, `ArrayBuffer` on Node)
-    - **Parameters**
-      - `String` | `ArrayBuffer`: the packet to decode, has `type` and `data`
-      - `String`: optional, the binary type
-
-- `encodeBase64Packet`
-    - Encodes a packet with binary data in a base64 string (`String`)
-    - **Parameters**
-      - `Object`: the packet to encode, has `type` and `data`
-      - `Function`: callback, returns the base64 encoded message (`cb(String)`)
-- `decodeBase64Packet`
-    - Decodes a packet encoded in a base64 string.
-    - **Parameters**
-      - `String`: the base64 encoded message
-      - `String`: optional, the binary type
-
-- `encodePayload`
-    - Encodes multiple messages (payload).
-    - If any contents are binary, they will be encoded as base64 strings. Base64
-      encoded strings are marked with a b before the length specifier
-    - **Parameters**
-      - `Array`: an array of packets
-      - `Boolean`: optional, binary support
-      - `Function`: callback, returns the encoded payload (`cb(String)`)
-- `decodePayload`
-    - Decodes data when a payload is maybe expected. Possible binary contents are
-      decoded from their base64 representation.
-    - **Parameters**
-      - `String`: the payload
-      - `String`: optional, the binary type
-      - `Function`: callback, returns (cb(`Object`: packet, `Number`:packet index, `Number`:packet total))
-
-- `encodePayloadAsBinary`
-    - Encodes multiple messages (payload) as binary.
-    - **Parameters**
-      - `Array`: an array of packets
-      - `Function`: callback, returns the encoded payload (`cb(Buffer)`)
-- `decodePayloadAsBinary`
-    - Decodes data when a payload is maybe expected. Strings are decoded by
-      interpreting each byte as a key code for entries marked to start with 0. See
-      description of encodePayloadAsBinary.
-    - **Parameters**
-      - `Buffer`: the buffer
-      - `String`: optional, the binary type
-      - `Function`: callback, returns the decoded packet (`cb(Object)`)
-
-### Browser
-
-- `encodePayloadAsArrayBuffer`
-    - Encodes multiple messages (payload) as binary.
-    - **Parameters**
-      - `Array`: an array of packets
-      - `Function`: callback, returns the encoded payload (`cb(ArrayBuffer)`)
-- `encodePayloadAsBlob`
-    - Encodes multiple messages (payload) as blob.
-    - **Parameters**
-      - `Array`: an array of packets
-      - `Function`: callback, returns the encoded payload (`cb(Blob)`)
-
-## Tests
-
-Standalone tests can be run with `make test` which will run both node.js and browser tests.
-
-Browser tests are run using [zuul](https://github.com/defunctzombie/zuul).
-(You must have zuul setup with a saucelabs account.)
-
-You can run the tests locally using the following command:
-
-```
-./node_modules/.bin/zuul --local 8080 -- test/index.js
-```
-
-## Support
-
-The support channels for `engine.io-parser` are the same as `socket.io`:
-  - irc.freenode.net **#socket.io**
-  - [Google Groups](http://groups.google.com/group/socket_io)
-  - [Website](http://socket.io)
-
-## Development
-
-To contribute patches, run tests or benchmarks, make sure to clone the
-repository:
-
-```bash
-git clone git://github.com/LearnBoost/engine.io-parser.git
-```
-
-Then:
-
-```bash
-cd engine.io-parser
-npm install
-```
-
-See the `Tests` section above for how to run tests before submitting any patches.
-
-## License
-
-MIT
diff --git a/device_home/node_modules/engine.io/CHANGELOG.md b/device_home/node_modules/engine.io/CHANGELOG.md
deleted file mode 100644 (file)
index 8b2261f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# [3.5.0](https://github.com/socketio/engine.io/compare/3.4.2...3.5.0) (2020-12-30)
-
-
-### Features
-
-* add support for all cookie options ([19cc582](https://github.com/socketio/engine.io/commit/19cc58264a06dca47ed401fbaca32dcdb80a903b)), closes [/github.com/jshttp/cookie#options-1](https://github.com//github.com/jshttp/cookie/issues/options-1)
-* disable perMessageDeflate by default ([5ad2736](https://github.com/socketio/engine.io/commit/5ad273601eb66c7b318542f87026837bf9dddd21))
-
-
-
-## [3.4.2](https://github.com/socketio/engine.io/compare/3.4.1...3.4.2) (2020-06-04)
-
-
-### Bug Fixes
-
-* remove explicit require of uws ([85e544a](https://github.com/socketio/engine.io/commit/85e544afd95a5890761a613263a5eba0c9a18a93))
-
-
-
-## [3.4.1](https://github.com/socketio/engine.io/compare/3.4.0...3.4.1) (2020-04-17)
-
-
-### Bug Fixes
-
-* ignore errors when forcefully closing the socket ([da851ec](https://github.com/socketio/engine.io/commit/da851ec4ec89d96df2ee5c711f328b5d795423e9))
-* use SameSite=Strict by default ([001ca62](https://github.com/socketio/engine.io/commit/001ca62cc4a8f511f3b2fbd9e4493ad274a6a0e5))
-
-
-
diff --git a/device_home/node_modules/engine.io/README.md b/device_home/node_modules/engine.io/README.md
deleted file mode 100644 (file)
index 8009d68..0000000
+++ /dev/null
@@ -1,564 +0,0 @@
-
-# Engine.IO: the realtime engine
-
-[![Build Status](https://github.com/socketio/engine.io/workflows/CI/badge.svg)](https://github.com/socketio/engine.io/actions)
-[![NPM version](https://badge.fury.io/js/engine.io.svg)](http://badge.fury.io/js/engine.io)
-
-`Engine.IO` is the implementation of transport-based
-cross-browser/cross-device bi-directional communication layer for
-[Socket.IO](http://github.com/socketio/socket.io).
-
-## How to use
-
-### Server
-
-#### (A) Listening on a port
-
-```js
-var engine = require('engine.io');
-var server = engine.listen(80);
-
-server.on('connection', function(socket){
-  socket.send('utf 8 string');
-  socket.send(Buffer.from([0, 1, 2, 3, 4, 5])); // binary data
-});
-```
-
-#### (B) Intercepting requests for a http.Server
-
-```js
-var engine = require('engine.io');
-var http = require('http').createServer().listen(3000);
-var server = engine.attach(http);
-
-server.on('connection', function (socket) {
-  socket.on('message', function(data){ });
-  socket.on('close', function(){ });
-});
-```
-
-#### (C) Passing in requests
-
-```js
-var engine = require('engine.io');
-var server = new engine.Server();
-
-server.on('connection', function(socket){
-  socket.send('hi');
-});
-
-// …
-httpServer.on('upgrade', function(req, socket, head){
-  server.handleUpgrade(req, socket, head);
-});
-httpServer.on('request', function(req, res){
-  server.handleRequest(req, res);
-});
-```
-
-### Client
-
-```html
-<script src="/path/to/engine.io.js"></script>
-<script>
-  var socket = new eio.Socket('ws://localhost/');
-  socket.on('open', function(){
-    socket.on('message', function(data){});
-    socket.on('close', function(){});
-  });
-</script>
-```
-
-For more information on the client refer to the
-[engine-client](http://github.com/learnboost/engine.io-client) repository.
-
-## What features does it have?
-
-- **Maximum reliability**. Connections are established even in the presence of:
-  - proxies and load balancers.
-  - personal firewall and antivirus software.
-  - for more information refer to **Goals** and **Architecture** sections
-- **Minimal client size** aided by:
-  - lazy loading of flash transports.
-  - lack of redundant transports.
-- **Scalable**
-  - load balancer friendly
-- **Future proof**
-- **100% Node.JS core style**
-  - No API sugar (left for higher level projects)
-  - Written in readable vanilla JavaScript
-
-## API
-
-### Server
-
-<hr><br>
-
-#### Top-level
-
-These are exposed by `require('engine.io')`:
-
-##### Events
-
-- `flush`
-    - Called when a socket buffer is being flushed.
-    - **Arguments**
-      - `Socket`: socket being flushed
-      - `Array`: write buffer
-- `drain`
-    - Called when a socket buffer is drained
-    - **Arguments**
-      - `Socket`: socket being flushed
-
-##### Properties
-
-- `protocol` _(Number)_: protocol revision number
-- `Server`: Server class constructor
-- `Socket`: Socket class constructor
-- `Transport` _(Function)_: transport constructor
-- `transports` _(Object)_: map of available transports
-
-##### Methods
-
-- `()`
-    - Returns a new `Server` instance. If the first argument is an `http.Server` then the
-      new `Server` instance will be attached to it. Otherwise, the arguments are passed
-      directly to the `Server` constructor.
-    - **Parameters**
-      - `http.Server`: optional, server to attach to.
-      - `Object`: optional, options object (see `Server#constructor` api docs below)
-
-  The following are identical ways to instantiate a server and then attach it.
-
-```js
-var httpServer; // previously created with `http.createServer();` from node.js api.
-
-// create a server first, and then attach
-var eioServer = require('engine.io').Server();
-eioServer.attach(httpServer);
-
-// or call the module as a function to get `Server`
-var eioServer = require('engine.io')();
-eioServer.attach(httpServer);
-
-// immediately attach
-var eioServer = require('engine.io')(httpServer);
-
-// with custom options
-var eioServer = require('engine.io')(httpServer, {
-  maxHttpBufferSize: 1e3
-});
-```
-
-- `listen`
-    - Creates an `http.Server` which listens on the given port and attaches WS
-      to it. It returns `501 Not Implemented` for regular http requests.
-    - **Parameters**
-      - `Number`: port to listen on.
-      - `Object`: optional, options object
-      - `Function`: callback for `listen`.
-    - **Options**
-      - All options from `Server.attach` method, documented below.
-      - **Additionally** See Server `constructor` below for options you can pass for creating the new Server
-    - **Returns** `Server`
-
-```js
-var engine = require('engine.io');
-var server = engine.listen(3000, {
-  pingTimeout: 2000,
-  pingInterval: 10000
-});
-
-server.on('connection', /* ... */);
-```
-
-- `attach`
-    - Captures `upgrade` requests for a `http.Server`. In other words, makes
-      a regular http.Server WebSocket-compatible.
-    - **Parameters**
-      - `http.Server`: server to attach to.
-      - `Object`: optional, options object
-    - **Options**
-      - All options from `Server.attach` method, documented below.
-      - **Additionally** See Server `constructor` below for options you can pass for creating the new Server
-    - **Returns** `Server` a new Server instance.
-
-```js
-var engine = require('engine.io');
-var httpServer = require('http').createServer().listen(3000);
-var server = engine.attach(httpServer, {
-  wsEngine: 'uws' // requires having uws as dependency
-});
-
-server.on('connection', /* ... */);
-```
-
-#### Server
-
-The main server/manager. _Inherits from EventEmitter_.
-
-##### Events
-
-- `connection`
-    - Fired when a new connection is established.
-    - **Arguments**
-      - `Socket`: a Socket object
-
-##### Properties
-
-**Important**: if you plan to use Engine.IO in a scalable way, please
-keep in mind the properties below will only reflect the clients connected
-to a single process.
-
-- `clients` _(Object)_: hash of connected clients by id.
-- `clientsCount` _(Number)_: number of connected clients.
-
-##### Methods
-
-- **constructor**
-    - Initializes the server
-    - **Parameters**
-      - `Object`: optional, options object
-    - **Options**
-      - `pingTimeout` (`Number`): how many ms without a pong packet to
-        consider the connection closed (`5000`)
-      - `pingInterval` (`Number`): how many ms before sending a new ping
-        packet (`25000`)
-      - `upgradeTimeout` (`Number`): how many ms before an uncompleted transport upgrade is cancelled (`10000`)
-      - `maxHttpBufferSize` (`Number`): how many bytes or characters a message
-        can be, before closing the session (to avoid DoS). Default
-        value is `10E7`.
-      - `allowRequest` (`Function`): A function that receives a given handshake
-        or upgrade request as its first parameter, and can decide whether to
-        continue or not. The second argument is a function that needs to be
-        called with the decided information: `fn(err, success)`, where
-        `success` is a boolean value where false means that the request is
-        rejected, and err is an error code.
-      - `transports` (`<Array> String`): transports to allow connections
-        to (`['polling', 'websocket']`)
-      - `allowUpgrades` (`Boolean`): whether to allow transport upgrades
-        (`true`)
-      - `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension
-        (see [ws module](https://github.com/einaros/ws) api docs). Set to `true` to enable. (`false`)
-        - `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
-      - `httpCompression` (`Object|Boolean`): parameters of the http compression for the polling transports
-        (see [zlib](http://nodejs.org/api/zlib.html#zlib_options) api docs). Set to `false` to disable. (`true`)
-        - `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
-      - `cookie` (`String|Boolean`): name of the HTTP cookie that
-        contains the client sid to send as part of handshake response
-        headers. Set to `false` to not send one. (`io`)
-      - `cookiePath` (`String|Boolean`): path of the above `cookie`
-        option. If false, no path will be sent, which means browsers will only send the cookie on the engine.io attached path (`/engine.io`).
-        Set false to not save io cookie on all requests. (`/`)
-      - `cookieHttpOnly` (`Boolean`): If `true` HttpOnly io cookie cannot be accessed by client-side APIs, such as JavaScript. (`true`) _This option has no effect if `cookie` or `cookiePath` is set to `false`._
-      - `wsEngine` (`String`): what WebSocket server implementation to use. Specified module must conform to the `ws` interface (see [ws module api docs](https://github.com/websockets/ws/blob/master/doc/ws.md)). Default value is `ws`. An alternative c++ addon is also available by installing `uws` module.
-      - `initialPacket` (`Object`): an optional packet which will be concatenated to the handshake packet emitted by Engine.IO.
-- `close`
-    - Closes all clients
-    - **Returns** `Server` for chaining
-- `handleRequest`
-    - Called internally when a `Engine` request is intercepted.
-    - **Parameters**
-      - `http.IncomingMessage`: a node request object
-      - `http.ServerResponse`: a node response object
-    - **Returns** `Server` for chaining
-- `handleUpgrade`
-    - Called internally when a `Engine` ws upgrade is intercepted.
-    - **Parameters** (same as `upgrade` event)
-      - `http.IncomingMessage`: a node request object
-      - `net.Stream`: TCP socket for the request
-      - `Buffer`: legacy tail bytes
-    - **Returns** `Server` for chaining
-- `attach`
-    - Attach this Server instance to an `http.Server`
-    - Captures `upgrade` requests for a `http.Server`. In other words, makes
-      a regular http.Server WebSocket-compatible.
-    - **Parameters**
-      - `http.Server`: server to attach to.
-      - `Object`: optional, options object
-    - **Options**
-      - `path` (`String`): name of the path to capture (`/engine.io`).
-      - `destroyUpgrade` (`Boolean`): destroy unhandled upgrade requests (`true`)
-      - `destroyUpgradeTimeout` (`Number`): milliseconds after which unhandled requests are ended (`1000`)
-      - `handlePreflightRequest` (`Boolean|Function`): whether to let engine.io handle the OPTIONS requests. You can also pass a custom function to handle the requests (`true`)
-- `generateId`
-    - Generate a socket id.
-    - Overwrite this method to generate your custom socket id.
-    - **Parameters**
-      - `http.IncomingMessage`: a node request object
-  - **Returns** A socket id for connected client.
-
-<hr><br>
-
-#### Socket
-
-A representation of a client. _Inherits from EventEmitter_.
-
-##### Events
-
-- `close`
-    - Fired when the client is disconnected.
-    - **Arguments**
-      - `String`: reason for closing
-      - `Object`: description object (optional)
-- `message`
-    - Fired when the client sends a message.
-    - **Arguments**
-      - `String` or `Buffer`: Unicode string or Buffer with binary contents
-- `error`
-    - Fired when an error occurs.
-    - **Arguments**
-      - `Error`: error object
-- `flush`
-    - Called when the write buffer is being flushed.
-    - **Arguments**
-      - `Array`: write buffer
-- `drain`
-    - Called when the write buffer is drained
-- `packet`
-    - Called when a socket received a packet (`message`, `ping`)
-    - **Arguments**
-      - `type`: packet type
-      - `data`: packet data (if type is message)
-- `packetCreate`
-    - Called before a socket sends a packet (`message`, `pong`)
-    - **Arguments**
-      - `type`: packet type
-      - `data`: packet data (if type is message)
-
-##### Properties
-
-- `id` _(String)_: unique identifier
-- `server` _(Server)_: engine parent reference
-- `request` _(http.IncomingMessage)_: request that originated the Socket
-- `upgraded` _(Boolean)_: whether the transport has been upgraded
-- `readyState` _(String)_: opening|open|closing|closed
-- `transport` _(Transport)_: transport reference
-
-##### Methods
-
-- `send`:
-    - Sends a message, performing `message = toString(arguments[0])` unless
-      sending binary data, which is sent as is.
-    - **Parameters**
-      - `String` | `Buffer` | `ArrayBuffer` | `ArrayBufferView`: a string or any object implementing `toString()`, with outgoing data, or a Buffer or ArrayBuffer with binary data. Also any ArrayBufferView can be sent as is.
-      - `Object`: optional, options object
-      - `Function`: optional, a callback executed when the message gets flushed out by the transport
-    - **Options**
-      - `compress` (`Boolean`): whether to compress sending data. This option might be ignored and forced to be `true` when using polling. (`true`)
-    - **Returns** `Socket` for chaining
-- `close`
-    - Disconnects the client
-    - **Returns** `Socket` for chaining
-
-### Client
-
-<hr><br>
-
-Exposed in the `eio` global namespace (in the browser), or by
-`require('engine.io-client')` (in Node.JS).
-
-For the client API refer to the
-[engine-client](http://github.com/learnboost/engine.io-client) repository.
-
-## Debug / logging
-
-Engine.IO is powered by [debug](http://github.com/visionmedia/debug).
-In order to see all the debug output, run your app with the environment variable
-`DEBUG` including the desired scope.
-
-To see the output from all of Engine.IO's debugging scopes you can use:
-
-```
-DEBUG=engine* node myapp
-```
-
-## Transports
-
-- `polling`: XHR / JSONP polling transport.
-- `websocket`: WebSocket transport.
-
-## Plugins
-
-- [engine.io-conflation](https://github.com/EugenDueck/engine.io-conflation): Makes **conflation and aggregation** of messages straightforward.
-
-## Support
-
-The support channels for `engine.io` are the same as `socket.io`:
-  - irc.freenode.net **#socket.io**
-  - [Google Groups](http://groups.google.com/group/socket_io)
-  - [Website](http://socket.io)
-
-## Development
-
-To contribute patches, run tests or benchmarks, make sure to clone the
-repository:
-
-```
-git clone git://github.com/LearnBoost/engine.io.git
-```
-
-Then:
-
-```
-cd engine.io
-npm install
-```
-
-## Tests
-
-Tests run with `npm test`. It runs the server tests that are aided by
-the usage of `engine.io-client`.
-
-Make sure `npm install` is run first.
-
-## Goals
-
-The main goal of `Engine` is ensuring the most reliable realtime communication.
-Unlike the previous Socket.IO core, it always establishes a long-polling
-connection first, then tries to upgrade to better transports that are "tested" on
-the side.
-
-During the lifetime of the Socket.IO projects, we've found countless drawbacks
-to relying on `HTML5 WebSocket` or `Flash Socket` as the first connection
-mechanisms.
-
-Both are clearly the _right way_ of establishing a bidirectional communication,
-with HTML5 WebSocket being the way of the future. However, to answer most business
-needs, alternative traditional HTTP 1.1 mechanisms are just as good as delivering
-the same solution.
-
-WebSocket based connections have two fundamental benefits:
-
-1. **Better server performance**
-  - _A: Load balancers_<br>
-      Load balancing a long polling connection poses a serious architectural nightmare
-      since requests can come from any number of open sockets by the user agent, but
-      they all need to be routed to the process and computer that owns the `Engine`
-      connection. This negatively impacts RAM and CPU usage.
-  - _B: Network traffic_<br>
-      WebSocket is designed around the premise that each message frame has to be
-      surrounded by the least amount of data. In HTTP 1.1 transports, each message
-      frame is surrounded by HTTP headers and chunked encoding frames. If you try to
-      send the message _"Hello world"_ with xhr-polling, the message ultimately
-      becomes larger than if you were to send it with WebSocket.
-  - _C: Lightweight parser_<br>
-      As an effect of **B**, the server has to do a lot more work to parse the network
-      data and figure out the message when traditional HTTP requests are used
-      (as in long polling). This means that another advantage of WebSocket is
-      less server CPU usage.
-
-2. **Better user experience**
-
-    Due to the reasons stated in point **1**, the most important effect of being able
-    to establish a WebSocket connection is raw data transfer speed, which translates
-    in _some_ cases in better user experience.
-
-    Applications with heavy realtime interaction (such as games) will benefit greatly,
-    whereas applications like realtime chat (Gmail/Facebook), newsfeeds (Facebook) or
-    timelines (Twitter) will have negligible user experience improvements.
-
-Having said this, attempting to establish a WebSocket connection directly so far has
-proven problematic:
-
-1. **Proxies**<br>
-    Many corporate proxies block WebSocket traffic.
-
-2. **Personal firewall and antivirus software**<br>
-    As a result of our research, we've found that at least 3 personal security
-    applications block WebSocket traffic.
-
-3. **Cloud application platforms**<br>
-    Platforms like Heroku or No.de have had trouble keeping up with the fast-paced
-    nature of the evolution of the WebSocket protocol. Applications therefore end up
-    inevitably using long polling, but the seamless installation experience of
-    Socket.IO we strive for (_"require() it and it just works"_) disappears.
-
-Some of these problems have solutions. In the case of proxies and personal programs,
-however, the solutions many times involve upgrading software. Experience has shown
-that relying on client software upgrades to deliver a business solution is
-fruitless: the very existence of this project has to do with a fragmented panorama
-of user agent distribution, with clients connecting with latest versions of the most
-modern user agents (Chrome, Firefox and Safari), but others with versions as low as
-IE 5.5.
-
-From the user perspective, an unsuccessful WebSocket connection can translate in
-up to at least 10 seconds of waiting for the realtime application to begin
-exchanging data. This **perceptively** hurts user experience.
-
-To summarize, **Engine** focuses on reliability and user experience first, marginal
-potential UX improvements and increased server performance second. `Engine` is the
-result of all the lessons learned with WebSocket in the wild.
-
-## Architecture
-
-The main premise of `Engine`, and the core of its existence, is the ability to
-swap transports on the fly. A connection starts as xhr-polling, but it can
-switch to WebSocket.
-
-The central problem this poses is: how do we switch transports without losing
-messages?
-
-`Engine` only switches from polling to another transport in between polling
-cycles. Since the server closes the connection after a certain timeout when
-there's no activity, and the polling transport implementation buffers messages
-in between connections, this ensures no message loss and optimal performance.
-
-Another benefit of this design is that we workaround almost all the limitations
-of **Flash Socket**, such as slow connection times, increased file size (we can
-safely lazy load it without hurting user experience), etc.
-
-## FAQ
-
-### Can I use engine without Socket.IO ?
-
-Absolutely. Although the recommended framework for building realtime applications
-is Socket.IO, since it provides fundamental features for real-world applications
-such as multiplexing, reconnection support, etc.
-
-`Engine` is to Socket.IO what Connect is to Express. An essential piece for building
-realtime frameworks, but something you _probably_ won't be using for building
-actual applications.
-
-### Does the server serve the client?
-
-No. The main reason is that `Engine` is meant to be bundled with frameworks.
-Socket.IO includes `Engine`, therefore serving two clients is not necessary. If
-you use Socket.IO, including
-
-```html
-<script src="/socket.io/socket.io.js">
-```
-
-has you covered.
-
-### Can I implement `Engine` in other languages?
-
-Absolutely. The [engine.io-protocol](https://github.com/LearnBoost/engine.io-protocol)
-repository contains the most up to date description of the specification
-at all times, and the parser implementation in JavaScript.
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2014 Guillermo Rauch &lt;guillermo@learnboost.com&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/device_home/node_modules/engine.io/node_modules/base64id/CHANGELOG.md b/device_home/node_modules/engine.io/node_modules/base64id/CHANGELOG.md
deleted file mode 100644 (file)
index b2b8332..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# [2.0.0](https://github.com/faeldt/base64id/compare/1.0.0...2.0.0) (2019-05-27)
-
-
-### Code Refactoring
-
-* **buffer:** replace deprecated Buffer constructor usage ([#11](https://github.com/faeldt/base64id/issues/11)) ([ccfba54](https://github.com/faeldt/base64id/commit/ccfba54))
-
-
-### BREAKING CHANGES
-
-* **buffer:** drop support for Node.js ≤ 4.4.x and 5.0.0 - 5.9.x
-
-See: https://nodejs.org/en/docs/guides/buffer-constructor-deprecation/
-
-
-
diff --git a/device_home/node_modules/engine.io/node_modules/base64id/README.md b/device_home/node_modules/engine.io/node_modules/base64id/README.md
deleted file mode 100644 (file)
index 17689e6..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-base64id
-========
-
-Node.js module that generates a base64 id.
-
-Uses crypto.randomBytes when available, falls back to unsafe methods for node.js <= 0.4.
-
-To increase performance, random bytes are buffered to minimize the number of synchronous calls to crypto.randomBytes.
-
-## Installation
-
-   $ npm install base64id
-
-## Usage
-
-   var base64id = require('base64id');
-
-   var id = base64id.generateId();
diff --git a/device_home/node_modules/escape-html/Readme.md b/device_home/node_modules/escape-html/Readme.md
deleted file mode 100644 (file)
index 653d9ea..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-# escape-html
-
-  Escape string for use in HTML
-
-## Example
-
-```js
-var escape = require('escape-html');
-var html = escape('foo & bar');
-// -> foo &amp; bar
-```
-
-## Benchmark
-
-```
-$ npm run-script bench
-
-> escape-html@1.0.3 bench nodejs-escape-html
-> node benchmark/index.js
-
-
-  http_parser@1.0
-  node@0.10.33
-  v8@3.14.5.9
-  ares@1.9.0-DEV
-  uv@0.10.29
-  zlib@1.2.3
-  modules@11
-  openssl@1.0.1j
-
-  1 test completed.
-  2 tests completed.
-  3 tests completed.
-
-  no special characters    x 19,435,271 ops/sec ±0.85% (187 runs sampled)
-  single special character x  6,132,421 ops/sec ±0.67% (194 runs sampled)
-  many special characters  x  3,175,826 ops/sec ±0.65% (193 runs sampled)
-```
-
-## License
-
-  MIT
\ No newline at end of file
diff --git a/device_home/node_modules/escape-string-regexp/readme.md b/device_home/node_modules/escape-string-regexp/readme.md
deleted file mode 100755 (executable)
index 87ac82d..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# escape-string-regexp [![Build Status](https://travis-ci.org/sindresorhus/escape-string-regexp.svg?branch=master)](https://travis-ci.org/sindresorhus/escape-string-regexp)
-
-> Escape RegExp special characters
-
-
-## Install
-
-```
-$ npm install --save escape-string-regexp
-```
-
-
-## Usage
-
-```js
-const escapeStringRegexp = require('escape-string-regexp');
-
-const escapedString = escapeStringRegexp('how much $ for a unicorn?');
-//=> 'how much \$ for a unicorn\?'
-
-new RegExp(escapedString);
-```
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/device_home/node_modules/etag/HISTORY.md b/device_home/node_modules/etag/HISTORY.md
deleted file mode 100644 (file)
index 222b293..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-1.8.1 / 2017-09-12
-==================
-
-  * perf: replace regular expression with substring
-
-1.8.0 / 2017-02-18
-==================
-
-  * Use SHA1 instead of MD5 for ETag hashing
-    - Improves performance for larger entities
-    - Works with FIPS 140-2 OpenSSL configuration
-
-1.7.0 / 2015-06-08
-==================
-
-  * Always include entity length in ETags for hash length extensions
-  * Generate non-Stats ETags using MD5 only (no longer CRC32)
-  * Improve stat performance by removing hashing
-  * Remove base64 padding in ETags to shorten
-  * Use MD5 instead of MD4 in weak ETags over 1KB
-
-1.6.0 / 2015-05-10
-==================
-
-  * Improve support for JXcore
-  * Remove requirement of `atime` in the stats object
-  * Support "fake" stats objects in environments without `fs`
-
-1.5.1 / 2014-11-19
-==================
-
-  * deps: crc@3.2.1
-    - Minor fixes
-
-1.5.0 / 2014-10-14
-==================
-
-  * Improve string performance
-  * Slightly improve speed for weak ETags over 1KB
-
-1.4.0 / 2014-09-21
-==================
-
-  * Support "fake" stats objects
-  * Support Node.js 0.6
-
-1.3.1 / 2014-09-14
-==================
-
-  * Use the (new and improved) `crc` for crc32
-
-1.3.0 / 2014-08-29
-==================
-
-  * Default strings to strong ETags
-  * Improve speed for weak ETags over 1KB
-
-1.2.1 / 2014-08-29
-==================
-
-  * Use the (much faster) `buffer-crc32` for crc32
-
-1.2.0 / 2014-08-24
-==================
-
-  * Add support for file stat objects
-
-1.1.0 / 2014-08-24
-==================
-
-  * Add fast-path for empty entity
-  * Add weak ETag generation
-  * Shrink size of generated ETags
-
-1.0.1 / 2014-08-24
-==================
-
-  * Fix behavior of string containing Unicode
-
-1.0.0 / 2014-05-18
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/etag/README.md b/device_home/node_modules/etag/README.md
deleted file mode 100644 (file)
index 09c2169..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-# etag
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Create simple HTTP ETags
-
-This module generates HTTP ETags (as defined in RFC 7232) for use in
-HTTP responses.
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install etag
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var etag = require('etag')
-```
-
-### etag(entity, [options])
-
-Generate a strong ETag for the given entity. This should be the complete
-body of the entity. Strings, `Buffer`s, and `fs.Stats` are accepted. By
-default, a strong ETag is generated except for `fs.Stats`, which will
-generate a weak ETag (this can be overwritten by `options.weak`).
-
-<!-- eslint-disable no-undef -->
-
-```js
-res.setHeader('ETag', etag(body))
-```
-
-#### Options
-
-`etag` accepts these properties in the options object.
-
-##### weak
-
-Specifies if the generated ETag will include the weak validator mark (that
-is, the leading `W/`). The actual entity tag is the same. The default value
-is `false`, unless the `entity` is `fs.Stats`, in which case it is `true`.
-
-## Testing
-
-```sh
-$ npm test
-```
-
-## Benchmark
-
-```bash
-$ npm run-script bench
-
-> etag@1.8.1 bench nodejs-etag
-> node benchmark/index.js
-
-  http_parser@2.7.0
-  node@6.11.1
-  v8@5.1.281.103
-  uv@1.11.0
-  zlib@1.2.11
-  ares@1.10.1-DEV
-  icu@58.2
-  modules@48
-  openssl@1.0.2k
-
-> node benchmark/body0-100b.js
-
-  100B body
-
-  4 tests completed.
-
-  buffer - strong x 258,647 ops/sec ±1.07% (180 runs sampled)
-  buffer - weak   x 263,812 ops/sec ±0.61% (184 runs sampled)
-  string - strong x 259,955 ops/sec ±1.19% (185 runs sampled)
-  string - weak   x 264,356 ops/sec ±1.09% (184 runs sampled)
-
-> node benchmark/body1-1kb.js
-
-  1KB body
-
-  4 tests completed.
-
-  buffer - strong x 189,018 ops/sec ±1.12% (182 runs sampled)
-  buffer - weak   x 190,586 ops/sec ±0.81% (186 runs sampled)
-  string - strong x 144,272 ops/sec ±0.96% (188 runs sampled)
-  string - weak   x 145,380 ops/sec ±1.43% (187 runs sampled)
-
-> node benchmark/body2-5kb.js
-
-  5KB body
-
-  4 tests completed.
-
-  buffer - strong x 92,435 ops/sec ±0.42% (188 runs sampled)
-  buffer - weak   x 92,373 ops/sec ±0.58% (189 runs sampled)
-  string - strong x 48,850 ops/sec ±0.56% (186 runs sampled)
-  string - weak   x 49,380 ops/sec ±0.56% (190 runs sampled)
-
-> node benchmark/body3-10kb.js
-
-  10KB body
-
-  4 tests completed.
-
-  buffer - strong x 55,989 ops/sec ±0.93% (188 runs sampled)
-  buffer - weak   x 56,148 ops/sec ±0.55% (190 runs sampled)
-  string - strong x 27,345 ops/sec ±0.43% (188 runs sampled)
-  string - weak   x 27,496 ops/sec ±0.45% (190 runs sampled)
-
-> node benchmark/body4-100kb.js
-
-  100KB body
-
-  4 tests completed.
-
-  buffer - strong x 7,083 ops/sec ±0.22% (190 runs sampled)
-  buffer - weak   x 7,115 ops/sec ±0.26% (191 runs sampled)
-  string - strong x 3,068 ops/sec ±0.34% (190 runs sampled)
-  string - weak   x 3,096 ops/sec ±0.35% (190 runs sampled)
-
-> node benchmark/stats.js
-
-  stat
-
-  4 tests completed.
-
-  real - strong x 871,642 ops/sec ±0.34% (189 runs sampled)
-  real - weak   x 867,613 ops/sec ±0.39% (190 runs sampled)
-  fake - strong x 401,051 ops/sec ±0.40% (189 runs sampled)
-  fake - weak   x 400,100 ops/sec ±0.47% (188 runs sampled)
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/etag.svg
-[npm-url]: https://npmjs.org/package/etag
-[node-version-image]: https://img.shields.io/node/v/etag.svg
-[node-version-url]: https://nodejs.org/en/download/
-[travis-image]: https://img.shields.io/travis/jshttp/etag/master.svg
-[travis-url]: https://travis-ci.org/jshttp/etag
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/etag/master.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/etag?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/etag.svg
-[downloads-url]: https://npmjs.org/package/etag
diff --git a/device_home/node_modules/express-session/HISTORY.md b/device_home/node_modules/express-session/HISTORY.md
deleted file mode 100755 (executable)
index c5a97fd..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-1.17.1 / 2020-04-16
-===================
-
-  * Fix internal method wrapping error on failed reloads
-
-1.17.0 / 2019-10-10
-===================
-
-  * deps: cookie@0.4.0
-    - Add `SameSite=None` support
-  * deps: safe-buffer@5.2.0
-
-1.16.2 / 2019-06-12
-===================
-
-  * Fix restoring `cookie.originalMaxAge` when store returns `Date`
-  * deps: parseurl@~1.3.3
-
-1.16.1 / 2019-04-11
-===================
-
-  * Fix error passing `data` option to `Cookie` constructor
-  * Fix uncaught error from bad session data
-
-1.16.0 / 2019-04-10
-===================
-
-  * Catch invalid `cookie.maxAge` value earlier
-  * Deprecate setting `cookie.maxAge` to a `Date` object
-  * Fix issue where `resave: false` may not save altered sessions
-  * Remove `utils-merge` dependency
-  * Use `safe-buffer` for improved Buffer API
-  * Use `Set-Cookie` as cookie header name for compatibility
-  * deps: depd@~2.0.0
-    - Replace internal `eval` usage with `Function` constructor
-    - Use instance methods on `process` to check for listeners
-    - perf: remove argument reassignment
-  * deps: on-headers@~1.0.2
-    - Fix `res.writeHead` patch missing return value
-
-1.15.6 / 2017-09-26
-===================
-
-  * deps: debug@2.6.9
-  * deps: parseurl@~1.3.2
-    - perf: reduce overhead for full URLs
-    - perf: unroll the "fast-path" `RegExp`
-  * deps: uid-safe@~2.1.5
-    - perf: remove only trailing `=`
-  * deps: utils-merge@1.0.1
-
-1.15.5 / 2017-08-02
-===================
-
-  * Fix `TypeError` when `req.url` is an empty string
-  * deps: depd@~1.1.1
-    - Remove unnecessary `Buffer` loading
-
-1.15.4 / 2017-07-18
-===================
-
-  * deps: debug@2.6.8
-
-1.15.3 / 2017-05-17
-===================
-
-  * deps: debug@2.6.7
-    - deps: ms@2.0.0
-
-1.15.2 / 2017-03-26
-===================
-
-  * deps: debug@2.6.3
-    - Fix `DEBUG_MAX_ARRAY_LENGTH`
-  * deps: uid-safe@~2.1.4
-    - Remove `base64-url` dependency
-
-1.15.1 / 2017-02-10
-===================
-
-  * deps: debug@2.6.1
-    - Fix deprecation messages in WebStorm and other editors
-    - Undeprecate `DEBUG_FD` set to `1` or `2`
-
-1.15.0 / 2017-01-22
-===================
-
-  * Fix detecting modified session when session contains "cookie" property
-  * Fix resaving already-saved reloaded session at end of request
-  * deps: crc@3.4.4
-    - perf: use `Buffer.from` when available
-  * deps: debug@2.6.0
-    - Allow colors in workers
-    - Deprecated `DEBUG_FD` environment variable
-    - Use same color for same namespace
-    - Fix error when running under React Native
-    - deps: ms@0.7.2
-  * perf: remove unreachable branch in set-cookie method
-
-1.14.2 / 2016-10-30
-===================
-
-  * deps: crc@3.4.1
-    - Fix deprecation warning in Node.js 7.x
-  * deps: uid-safe@~2.1.3
-    - deps: base64-url@1.3.3
-
-1.14.1 / 2016-08-24
-===================
-
-  * Fix not always resetting session max age before session save
-  * Fix the cookie `sameSite` option to actually alter the `Set-Cookie`
-  * deps: uid-safe@~2.1.2
-    - deps: base64-url@1.3.2
-
-1.14.0 / 2016-07-01
-===================
-
-  * Correctly inherit from `EventEmitter` class in `Store` base class
-  * Fix issue where `Set-Cookie` `Expires` was not always updated
-  * Methods are no longer enumerable on `req.session` object
-  * deps: cookie@0.3.1
-    - Add `sameSite` option
-    - Improve error message when `encode` is not a function
-    - Improve error message when `expires` is not a `Date`
-    - perf: enable strict mode
-    - perf: use for loop in parse
-    - perf: use string concatination for serialization
-  * deps: parseurl@~1.3.1
-    - perf: enable strict mode
-  * deps: uid-safe@~2.1.1
-    - Use `random-bytes` for byte source
-    - deps: base64-url@1.2.2
-  * perf: enable strict mode
-  * perf: remove argument reassignment
-
-1.13.0 / 2016-01-10
-===================
-
-  * Fix `rolling: true` to not set cookie when no session exists
-    - Better `saveUninitialized: false` + `rolling: true` behavior
-  * deps: crc@3.4.0
-
-1.12.1 / 2015-10-29
-===================
-
-  * deps: cookie@0.2.3
-    - Fix cookie `Max-Age` to never be a floating point number
-
-1.12.0 / 2015-10-25
-===================
-
-  * Support the value `'auto'` in the `cookie.secure` option
-  * deps: cookie@0.2.2
-    - Throw on invalid values provided to `serialize`
-  * deps: depd@~1.1.0
-    - Enable strict mode in more places
-    - Support web browser loading
-  * deps: on-headers@~1.0.1
-    - perf: enable strict mode
-
-1.11.3 / 2015-05-22
-===================
-
-  * deps: cookie@0.1.3
-    - Slight optimizations
-  * deps: crc@3.3.0
-
-1.11.2 / 2015-05-10
-===================
-
-  * deps: debug@~2.2.0
-    - deps: ms@0.7.1
-  * deps: uid-safe@~2.0.0
-
-1.11.1 / 2015-04-08
-===================
-
-  * Fix mutating `options.secret` value
-
-1.11.0 / 2015-04-07
-===================
-
-  * Support an array in `secret` option for key rotation
-  * deps: depd@~1.0.1
-
-1.10.4 / 2015-03-15
-===================
-
-  * deps: debug@~2.1.3
-    - Fix high intensity foreground color for bold
-    - deps: ms@0.7.0
-
-1.10.3 / 2015-02-16
-===================
-
-  * deps: cookie-signature@1.0.6
-  * deps: uid-safe@1.1.0
-    - Use `crypto.randomBytes`, if available
-    - deps: base64-url@1.2.1
-
-1.10.2 / 2015-01-31
-===================
-
-  * deps: uid-safe@1.0.3
-    - Fix error branch that would throw
-    - deps: base64-url@1.2.0
-
-1.10.1 / 2015-01-08
-===================
-
-  * deps: uid-safe@1.0.2
-    - Remove dependency on `mz`
-
-1.10.0 / 2015-01-05
-===================
-
-  * Add `store.touch` interface for session stores
-  * Fix `MemoryStore` expiration with `resave: false`
-  * deps: debug@~2.1.1
-
-1.9.3 / 2014-12-02
-==================
-
-  * Fix error when `req.sessionID` contains a non-string value
-
-1.9.2 / 2014-11-22
-==================
-
-  * deps: crc@3.2.1
-    - Minor fixes
-
-1.9.1 / 2014-10-22
-==================
-
-  * Remove unnecessary empty write call
-    - Fixes Node.js 0.11.14 behavior change
-    - Helps work-around Node.js 0.10.1 zlib bug
-
-1.9.0 / 2014-09-16
-==================
-
-  * deps: debug@~2.1.0
-    - Implement `DEBUG_FD` env variable support
-  * deps: depd@~1.0.0
-
-1.8.2 / 2014-09-15
-==================
-
-  * Use `crc` instead of `buffer-crc32` for speed
-  * deps: depd@0.4.5
-
-1.8.1 / 2014-09-08
-==================
-
-  * Keep `req.session.save` non-enumerable
-  * Prevent session prototype methods from being overwritten
-
-1.8.0 / 2014-09-07
-==================
-
-  * Do not resave already-saved session at end of request
-  * deps: cookie-signature@1.0.5
-  * deps: debug@~2.0.0
-
-1.7.6 / 2014-08-18
-==================
-
-  * Fix exception on `res.end(null)` calls
-
-1.7.5 / 2014-08-10
-==================
-
-  * Fix parsing original URL
-  * deps: on-headers@~1.0.0
-  * deps: parseurl@~1.3.0
-
-1.7.4 / 2014-08-05
-==================
-
-  * Fix response end delay for non-chunked responses
-
-1.7.3 / 2014-08-05
-==================
-
-  * Fix `res.end` patch to call correct upstream `res.write`
-
-1.7.2 / 2014-07-27
-==================
-
-  * deps: depd@0.4.4
-    - Work-around v8 generating empty stack traces
-
-1.7.1 / 2014-07-26
-==================
-
-  * deps: depd@0.4.3
-    - Fix exception when global `Error.stackTraceLimit` is too low
-
-1.7.0 / 2014-07-22
-==================
-
-  * Improve session-ending error handling
-    - Errors are passed to `next(err)` instead of `console.error`
-  * deps: debug@1.0.4
-  * deps: depd@0.4.2
-    - Add `TRACE_DEPRECATION` environment variable
-    - Remove non-standard grey color from color output
-    - Support `--no-deprecation` argument
-    - Support `--trace-deprecation` argument
-
-1.6.5 / 2014-07-11
-==================
-
-  * Do not require `req.originalUrl`
-  * deps: debug@1.0.3
-    - Add support for multiple wildcards in namespaces
-
-1.6.4 / 2014-07-07
-==================
-
-  * Fix blank responses for stores with synchronous operations
-
-1.6.3 / 2014-07-04
-==================
-
-  * Fix resave deprecation message
-
-1.6.2 / 2014-07-04
-==================
-
-  * Fix confusing option deprecation messages
-
-1.6.1 / 2014-06-28
-==================
-
-  * Fix saveUninitialized deprecation message
-
-1.6.0 / 2014-06-28
-==================
-
-  * Add deprecation message to undefined `resave` option
-  * Add deprecation message to undefined `saveUninitialized` option
-  * Fix `res.end` patch to return correct value
-  * Fix `res.end` patch to handle multiple `res.end` calls
-  * Reject cookies with missing signatures
-
-1.5.2 / 2014-06-26
-==================
-
-  * deps: cookie-signature@1.0.4
-    - fix for timing attacks
-
-1.5.1 / 2014-06-21
-==================
-
-  * Move hard-to-track-down `req.secret` deprecation message
-
-1.5.0 / 2014-06-19
-==================
-
-  * Debug name is now "express-session"
-  * Deprecate integration with `cookie-parser` middleware
-  * Deprecate looking for secret in `req.secret`
-  * Directly read cookies; `cookie-parser` no longer required
-  * Directly set cookies; `res.cookie` no longer required
-  * Generate session IDs with `uid-safe`, faster and even less collisions
-
-1.4.0 / 2014-06-17
-==================
-
-  * Add `genid` option to generate custom session IDs
-  * Add `saveUninitialized` option to control saving uninitialized sessions
-  * Add `unset` option to control unsetting `req.session`
-  * Generate session IDs with `rand-token` by default; reduce collisions
-  * deps: buffer-crc32@0.2.3
-
-1.3.1 / 2014-06-14
-==================
-
-  * Add description in package for npmjs.org listing
-
-1.3.0 / 2014-06-14
-==================
-
-  * Integrate with express "trust proxy" by default
-  * deps: debug@1.0.2
-
-1.2.1 / 2014-05-27
-==================
-
-  * Fix `resave` such that `resave: true` works
-
-1.2.0 / 2014-05-19
-==================
-
-  * Add `resave` option to control saving unmodified sessions
-
-1.1.0 / 2014-05-12
-==================
-
-  * Add `name` option; replacement for `key` option
-  * Use `setImmediate` in MemoryStore for node.js >= 0.10
-
-1.0.4 / 2014-04-27
-==================
-
-  * deps: debug@0.8.1
-
-1.0.3 / 2014-04-19
-==================
-
-  *  Use `res.cookie()` instead of `res.setHeader()`
-  * deps: cookie@0.1.2
-
-1.0.2 / 2014-02-23
-==================
-
-  * Add missing dependency to `package.json`
-
-1.0.1 / 2014-02-15
-==================
-
-  * Add missing dependencies to `package.json`
-
-1.0.0 / 2014-02-15
-==================
-
-  * Genesis from `connect`
diff --git a/device_home/node_modules/express-session/README.md b/device_home/node_modules/express-session/README.md
deleted file mode 100755 (executable)
index fe5076d..0000000
+++ /dev/null
@@ -1,862 +0,0 @@
-# express-session
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install express-session
-```
-
-## API
-
-```js
-var session = require('express-session')
-```
-
-### session(options)
-
-Create a session middleware with the given `options`.
-
-**Note** Session data is _not_ saved in the cookie itself, just the session ID.
-Session data is stored server-side.
-
-**Note** Since version 1.5.0, the [`cookie-parser` middleware](https://www.npmjs.com/package/cookie-parser)
-no longer needs to be used for this module to work. This module now directly reads
-and writes cookies on `req`/`res`. Using `cookie-parser` may result in issues
-if the `secret` is not the same between this module and `cookie-parser`.
-
-**Warning** The default server-side session storage, `MemoryStore`, is _purposely_
-not designed for a production environment. It will leak memory under most
-conditions, does not scale past a single process, and is meant for debugging and
-developing.
-
-For a list of stores, see [compatible session stores](#compatible-session-stores).
-
-#### Options
-
-`express-session` accepts these properties in the options object.
-
-##### cookie
-
-Settings object for the session ID cookie. The default value is
-`{ path: '/', httpOnly: true, secure: false, maxAge: null }`.
-
-The following are options that can be set in this object.
-
-##### cookie.domain
-
-Specifies the value for the `Domain` `Set-Cookie` attribute. By default, no domain
-is set, and most clients will consider the cookie to apply to only the current
-domain.
-
-##### cookie.expires
-
-Specifies the `Date` object to be the value for the `Expires` `Set-Cookie` attribute.
-By default, no expiration is set, and most clients will consider this a
-"non-persistent cookie" and will delete it on a condition like exiting a web browser
-application.
-
-**Note** If both `expires` and `maxAge` are set in the options, then the last one
-defined in the object is what is used.
-
-**Note** The `expires` option should not be set directly; instead only use the `maxAge`
-option.
-
-##### cookie.httpOnly
-
-Specifies the `boolean` value for the `HttpOnly` `Set-Cookie` attribute. When truthy,
-the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly`
-attribute is set.
-
-**Note** be careful when setting this to `true`, as compliant clients will not allow
-client-side JavaScript to see the cookie in `document.cookie`.
-
-##### cookie.maxAge
-
-Specifies the `number` (in milliseconds) to use when calculating the `Expires`
-`Set-Cookie` attribute. This is done by taking the current server time and adding
-`maxAge` milliseconds to the value to calculate an `Expires` datetime. By default,
-no maximum age is set.
-
-**Note** If both `expires` and `maxAge` are set in the options, then the last one
-defined in the object is what is used.
-
-##### cookie.path
-
-Specifies the value for the `Path` `Set-Cookie`. By default, this is set to `'/'`, which
-is the root path of the domain.
-
-##### cookie.sameSite
-
-Specifies the `boolean` or `string` to be the value for the `SameSite` `Set-Cookie` attribute.
-
-  - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
-  - `false` will not set the `SameSite` attribute.
-  - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement.
-  - `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie.
-  - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
-
-More information about the different enforcement levels can be found in
-[the specification][rfc-6265bis-03-4.1.2.7].
-
-**Note** This is an attribute that has not yet been fully standardized, and may change in
-the future. This also means many clients may ignore this attribute until they understand it.
-
-##### cookie.secure
-
-Specifies the `boolean` value for the `Secure` `Set-Cookie` attribute. When truthy,
-the `Secure` attribute is set, otherwise it is not. By default, the `Secure`
-attribute is not set.
-
-**Note** be careful when setting this to `true`, as compliant clients will not send
-the cookie back to the server in the future if the browser does not have an HTTPS
-connection.
-
-Please note that `secure: true` is a **recommended** option. However, it requires
-an https-enabled website, i.e., HTTPS is necessary for secure cookies. If `secure`
-is set, and you access your site over HTTP, the cookie will not be set. If you
-have your node.js behind a proxy and are using `secure: true`, you need to set
-"trust proxy" in express:
-
-```js
-var app = express()
-app.set('trust proxy', 1) // trust first proxy
-app.use(session({
-  secret: 'keyboard cat',
-  resave: false,
-  saveUninitialized: true,
-  cookie: { secure: true }
-}))
-```
-
-For using secure cookies in production, but allowing for testing in development,
-the following is an example of enabling this setup based on `NODE_ENV` in express:
-
-```js
-var app = express()
-var sess = {
-  secret: 'keyboard cat',
-  cookie: {}
-}
-
-if (app.get('env') === 'production') {
-  app.set('trust proxy', 1) // trust first proxy
-  sess.cookie.secure = true // serve secure cookies
-}
-
-app.use(session(sess))
-```
-
-The `cookie.secure` option can also be set to the special value `'auto'` to have
-this setting automatically match the determined security of the connection. Be
-careful when using this setting if the site is available both as HTTP and HTTPS,
-as once the cookie is set on HTTPS, it will no longer be visible over HTTP. This
-is useful when the Express `"trust proxy"` setting is properly setup to simplify
-development vs production configuration.
-
-##### genid
-
-Function to call to generate a new session ID. Provide a function that returns
-a string that will be used as a session ID. The function is given `req` as the
-first argument if you want to use some value attached to `req` when generating
-the ID.
-
-The default value is a function which uses the `uid-safe` library to generate IDs.
-
-**NOTE** be careful to generate unique IDs so your sessions do not conflict.
-
-```js
-app.use(session({
-  genid: function(req) {
-    return genuuid() // use UUIDs for session IDs
-  },
-  secret: 'keyboard cat'
-}))
-```
-
-##### name
-
-The name of the session ID cookie to set in the response (and read from in the
-request).
-
-The default value is `'connect.sid'`.
-
-**Note** if you have multiple apps running on the same hostname (this is just
-the name, i.e. `localhost` or `127.0.0.1`; different schemes and ports do not
-name a different hostname), then you need to separate the session cookies from
-each other. The simplest method is to simply set different `name`s per app.
-
-##### proxy
-
-Trust the reverse proxy when setting secure cookies (via the "X-Forwarded-Proto"
-header).
-
-The default value is `undefined`.
-
-  - `true` The "X-Forwarded-Proto" header will be used.
-  - `false` All headers are ignored and the connection is considered secure only
-    if there is a direct TLS/SSL connection.
-  - `undefined` Uses the "trust proxy" setting from express
-
-##### resave
-
-Forces the session to be saved back to the session store, even if the session
-was never modified during the request. Depending on your store this may be
-necessary, but it can also create race conditions where a client makes two
-parallel requests to your server and changes made to the session in one
-request may get overwritten when the other request ends, even if it made no
-changes (this behavior also depends on what store you're using).
-
-The default value is `true`, but using the default has been deprecated,
-as the default will change in the future. Please research into this setting
-and choose what is appropriate to your use-case. Typically, you'll want
-`false`.
-
-How do I know if this is necessary for my store? The best way to know is to
-check with your store if it implements the `touch` method. If it does, then
-you can safely set `resave: false`. If it does not implement the `touch`
-method and your store sets an expiration date on stored sessions, then you
-likely need `resave: true`.
-
-##### rolling
-
-Force the session identifier cookie to be set on every response. The expiration
-is reset to the original [`maxAge`](#cookiemaxage), resetting the expiration
-countdown.
-
-The default value is `false`.
-
-With this enabled, the session identifier cookie will expire in
-[`maxAge`](#cookiemaxage) since the last response was sent instead of in
-[`maxAge`](#cookiemaxage) since the session was last modified by the server.
-
-This is typically used in conjuction with short, non-session-length
-[`maxAge`](#cookiemaxage) values to provide a quick timeout of the session data
-with reduced potentional of it occurring during on going server interactions.
-
-**Note** When this option is set to `true` but the `saveUninitialized` option is
-set to `false`, the cookie will not be set on a response with an uninitialized
-session. This option only modifies the behavior when an existing session was
-loaded for the request.
-
-##### saveUninitialized
-
-Forces a session that is "uninitialized" to be saved to the store. A session is
-uninitialized when it is new but not modified. Choosing `false` is useful for
-implementing login sessions, reducing server storage usage, or complying with
-laws that require permission before setting a cookie. Choosing `false` will also
-help with race conditions where a client makes multiple parallel requests
-without a session.
-
-The default value is `true`, but using the default has been deprecated, as the
-default will change in the future. Please research into this setting and
-choose what is appropriate to your use-case.
-
-**Note** if you are using Session in conjunction with PassportJS, Passport
-will add an empty Passport object to the session for use after a user is
-authenticated, which will be treated as a modification to the session, causing
-it to be saved. *This has been fixed in PassportJS 0.3.0*
-
-##### secret
-
-**Required option**
-
-This is the secret used to sign the session ID cookie. This can be either a string
-for a single secret, or an array of multiple secrets. If an array of secrets is
-provided, only the first element will be used to sign the session ID cookie, while
-all the elements will be considered when verifying the signature in requests.
-
-##### store
-
-The session store instance, defaults to a new `MemoryStore` instance.
-
-##### unset
-
-Control the result of unsetting `req.session` (through `delete`, setting to `null`,
-etc.).
-
-The default value is `'keep'`.
-
-  - `'destroy'` The session will be destroyed (deleted) when the response ends.
-  - `'keep'` The session in the store will be kept, but modifications made during
-    the request are ignored and not saved.
-
-### req.session
-
-To store or access session data, simply use the request property `req.session`,
-which is (generally) serialized as JSON by the store, so nested objects
-are typically fine. For example below is a user-specific view counter:
-
-```js
-// Use the session middleware
-app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))
-
-// Access the session as req.session
-app.get('/', function(req, res, next) {
-  if (req.session.views) {
-    req.session.views++
-    res.setHeader('Content-Type', 'text/html')
-    res.write('<p>views: ' + req.session.views + '</p>')
-    res.write('<p>expires in: ' + (req.session.cookie.maxAge / 1000) + 's</p>')
-    res.end()
-  } else {
-    req.session.views = 1
-    res.end('welcome to the session demo. refresh!')
-  }
-})
-```
-
-#### Session.regenerate(callback)
-
-To regenerate the session simply invoke the method. Once complete,
-a new SID and `Session` instance will be initialized at `req.session`
-and the `callback` will be invoked.
-
-```js
-req.session.regenerate(function(err) {
-  // will have a new session here
-})
-```
-
-#### Session.destroy(callback)
-
-Destroys the session and will unset the `req.session` property.
-Once complete, the `callback` will be invoked.
-
-```js
-req.session.destroy(function(err) {
-  // cannot access session here
-})
-```
-
-#### Session.reload(callback)
-
-Reloads the session data from the store and re-populates the
-`req.session` object. Once complete, the `callback` will be invoked.
-
-```js
-req.session.reload(function(err) {
-  // session updated
-})
-```
-
-#### Session.save(callback)
-
-Save the session back to the store, replacing the contents on the store with the
-contents in memory (though a store may do something else--consult the store's
-documentation for exact behavior).
-
-This method is automatically called at the end of the HTTP response if the
-session data has been altered (though this behavior can be altered with various
-options in the middleware constructor). Because of this, typically this method
-does not need to be called.
-
-There are some cases where it is useful to call this method, for example,
-redirects, long-lived requests or in WebSockets.
-
-```js
-req.session.save(function(err) {
-  // session saved
-})
-```
-
-#### Session.touch()
-
-Updates the `.maxAge` property. Typically this is
-not necessary to call, as the session middleware does this for you.
-
-### req.session.id
-
-Each session has a unique ID associated with it. This property is an
-alias of [`req.sessionID`](#reqsessionid-1) and cannot be modified.
-It has been added to make the session ID accessible from the `session`
-object.
-
-### req.session.cookie
-
-Each session has a unique cookie object accompany it. This allows
-you to alter the session cookie per visitor. For example we can
-set `req.session.cookie.expires` to `false` to enable the cookie
-to remain for only the duration of the user-agent.
-
-#### Cookie.maxAge
-
-Alternatively `req.session.cookie.maxAge` will return the time
-remaining in milliseconds, which we may also re-assign a new value
-to adjust the `.expires` property appropriately. The following
-are essentially equivalent
-
-```js
-var hour = 3600000
-req.session.cookie.expires = new Date(Date.now() + hour)
-req.session.cookie.maxAge = hour
-```
-
-For example when `maxAge` is set to `60000` (one minute), and 30 seconds
-has elapsed it will return `30000` until the current request has completed,
-at which time `req.session.touch()` is called to reset
-`req.session.cookie.maxAge` to its original value.
-
-```js
-req.session.cookie.maxAge // => 30000
-```
-
-#### Cookie.originalMaxAge
-
-The `req.session.cookie.originalMaxAge` property returns the original
-`maxAge` (time-to-live), in milliseconds, of the session cookie.
-
-### req.sessionID
-
-To get the ID of the loaded session, access the request property
-`req.sessionID`. This is simply a read-only value set when a session
-is loaded/created.
-
-## Session Store Implementation
-
-Every session store _must_ be an `EventEmitter` and implement specific
-methods. The following methods are the list of **required**, **recommended**,
-and **optional**.
-
-  * Required methods are ones that this module will always call on the store.
-  * Recommended methods are ones that this module will call on the store if
-    available.
-  * Optional methods are ones this module does not call at all, but helps
-    present uniform stores to users.
-
-For an example implementation view the [connect-redis](http://github.com/visionmedia/connect-redis) repo.
-
-### store.all(callback)
-
-**Optional**
-
-This optional method is used to get all sessions in the store as an array. The
-`callback` should be called as `callback(error, sessions)`.
-
-### store.destroy(sid, callback)
-
-**Required**
-
-This required method is used to destroy/delete a session from the store given
-a session ID (`sid`). The `callback` should be called as `callback(error)` once
-the session is destroyed.
-
-### store.clear(callback)
-
-**Optional**
-
-This optional method is used to delete all sessions from the store. The
-`callback` should be called as `callback(error)` once the store is cleared.
-
-### store.length(callback)
-
-**Optional**
-
-This optional method is used to get the count of all sessions in the store.
-The `callback` should be called as `callback(error, len)`.
-
-### store.get(sid, callback)
-
-**Required**
-
-This required method is used to get a session from the store given a session
-ID (`sid`). The `callback` should be called as `callback(error, session)`.
-
-The `session` argument should be a session if found, otherwise `null` or
-`undefined` if the session was not found (and there was no error). A special
-case is made when `error.code === 'ENOENT'` to act like `callback(null, null)`.
-
-### store.set(sid, session, callback)
-
-**Required**
-
-This required method is used to upsert a session into the store given a
-session ID (`sid`) and session (`session`) object. The callback should be
-called as `callback(error)` once the session has been set in the store.
-
-### store.touch(sid, session, callback)
-
-**Recommended**
-
-This recommended method is used to "touch" a given session given a
-session ID (`sid`) and session (`session`) object. The `callback` should be
-called as `callback(error)` once the session has been touched.
-
-This is primarily used when the store will automatically delete idle sessions
-and this method is used to signal to the store the given session is active,
-potentially resetting the idle timer.
-
-## Compatible Session Stores
-
-The following modules implement a session store that is compatible with this
-module. Please make a PR to add additional modules :)
-
-[![★][aerospike-session-store-image] aerospike-session-store][aerospike-session-store-url] A session store using [Aerospike](http://www.aerospike.com/).
-
-[aerospike-session-store-url]: https://www.npmjs.com/package/aerospike-session-store
-[aerospike-session-store-image]: https://badgen.net/github/stars/aerospike/aerospike-session-store-expressjs?label=%E2%98%85
-
-[![★][cassandra-store-image] cassandra-store][cassandra-store-url] An Apache Cassandra-based session store.
-
-[cassandra-store-url]: https://www.npmjs.com/package/cassandra-store
-[cassandra-store-image]: https://badgen.net/github/stars/webcc/cassandra-store?label=%E2%98%85
-
-[![★][cluster-store-image] cluster-store][cluster-store-url] A wrapper for using in-process / embedded
-stores - such as SQLite (via knex), leveldb, files, or memory - with node cluster (desirable for Raspberry Pi 2
-and other multi-core embedded devices).
-
-[cluster-store-url]: https://www.npmjs.com/package/cluster-store
-[cluster-store-image]: https://badgen.net/github/stars/coolaj86/cluster-store?label=%E2%98%85
-
-[![★][connect-arango-image] connect-arango][connect-arango-url] An ArangoDB-based session store.
-
-[connect-arango-url]: https://www.npmjs.com/package/connect-arango
-[connect-arango-image]: https://badgen.net/github/stars/AlexanderArvidsson/connect-arango?label=%E2%98%85
-
-[![★][connect-azuretables-image] connect-azuretables][connect-azuretables-url] An [Azure Table Storage](https://azure.microsoft.com/en-gb/services/storage/tables/)-based session store.
-
-[connect-azuretables-url]: https://www.npmjs.com/package/connect-azuretables
-[connect-azuretables-image]: https://badgen.net/github/stars/mike-goodwin/connect-azuretables?label=%E2%98%85
-
-[![★][connect-cloudant-store-image] connect-cloudant-store][connect-cloudant-store-url] An [IBM Cloudant](https://cloudant.com/)-based session store.
-
-[connect-cloudant-store-url]: https://www.npmjs.com/package/connect-cloudant-store
-[connect-cloudant-store-image]: https://badgen.net/github/stars/adriantanasa/connect-cloudant-store?label=%E2%98%85
-
-[![★][connect-couchbase-image] connect-couchbase][connect-couchbase-url] A [couchbase](http://www.couchbase.com/)-based session store.
-
-[connect-couchbase-url]: https://www.npmjs.com/package/connect-couchbase
-[connect-couchbase-image]: https://badgen.net/github/stars/christophermina/connect-couchbase?label=%E2%98%85
-
-[![★][connect-datacache-image] connect-datacache][connect-datacache-url] An [IBM Bluemix Data Cache](http://www.ibm.com/cloud-computing/bluemix/)-based session store.
-
-[connect-datacache-url]: https://www.npmjs.com/package/connect-datacache
-[connect-datacache-image]: https://badgen.net/github/stars/adriantanasa/connect-datacache?label=%E2%98%85
-
-[![★][@google-cloud/connect-datastore-image] @google-cloud/connect-datastore][@google-cloud/connect-datastore-url] A [Google Cloud Datastore](https://cloud.google.com/datastore/docs/concepts/overview)-based session store.
-
-[@google-cloud/connect-datastore-url]: https://www.npmjs.com/package/@google-cloud/connect-datastore
-[@google-cloud/connect-datastore-image]: https://badgen.net/github/stars/GoogleCloudPlatform/cloud-datastore-session-node?label=%E2%98%85
-
-[![★][connect-db2-image] connect-db2][connect-db2-url] An IBM DB2-based session store built using [ibm_db](https://www.npmjs.com/package/ibm_db) module.
-
-[connect-db2-url]: https://www.npmjs.com/package/connect-db2
-[connect-db2-image]: https://badgen.net/github/stars/wallali/connect-db2?label=%E2%98%85
-
-[![★][connect-dynamodb-image] connect-dynamodb][connect-dynamodb-url] A DynamoDB-based session store.
-
-[connect-dynamodb-url]: https://www.npmjs.com/package/connect-dynamodb
-[connect-dynamodb-image]: https://badgen.net/github/stars/ca98am79/connect-dynamodb?label=%E2%98%85
-
-[![★][@google-cloud/connect-firestore-image] @google-cloud/connect-firestore][@google-cloud/connect-firestore-url] A [Google Cloud Firestore](https://cloud.google.com/firestore/docs/overview)-based session store.
-
-[@google-cloud/connect-firestore-url]: https://www.npmjs.com/package/@google-cloud/connect-firestore
-[@google-cloud/connect-firestore-image]: https://badgen.net/github/stars/googleapis/nodejs-firestore-session?label=%E2%98%85
-
-[![★][connect-hazelcast-image] connect-hazelcast][connect-hazelcast-url] Hazelcast session store for Connect and Express.
-
-[connect-hazelcast-url]: https://www.npmjs.com/package/connect-hazelcast
-[connect-hazelcast-image]: https://badgen.net/github/stars/huseyinbabal/connect-hazelcast?label=%E2%98%85
-
-[![★][connect-loki-image] connect-loki][connect-loki-url] A Loki.js-based session store.
-
-[connect-loki-url]: https://www.npmjs.com/package/connect-loki
-[connect-loki-image]: https://badgen.net/github/stars/Requarks/connect-loki?label=%E2%98%85
-
-[![★][connect-memcached-image] connect-memcached][connect-memcached-url] A memcached-based session store.
-
-[connect-memcached-url]: https://www.npmjs.com/package/connect-memcached
-[connect-memcached-image]: https://badgen.net/github/stars/balor/connect-memcached?label=%E2%98%85
-
-[![★][connect-memjs-image] connect-memjs][connect-memjs-url] A memcached-based session store using
-[memjs](https://www.npmjs.com/package/memjs) as the memcached client.
-
-[connect-memjs-url]: https://www.npmjs.com/package/connect-memjs
-[connect-memjs-image]: https://badgen.net/github/stars/liamdon/connect-memjs?label=%E2%98%85
-
-[![★][connect-ml-image] connect-ml][connect-ml-url] A MarkLogic Server-based session store.
-
-[connect-ml-url]: https://www.npmjs.com/package/connect-ml
-[connect-ml-image]: https://badgen.net/github/stars/bluetorch/connect-ml?label=%E2%98%85
-
-[![★][connect-monetdb-image] connect-monetdb][connect-monetdb-url] A MonetDB-based session store.
-
-[connect-monetdb-url]: https://www.npmjs.com/package/connect-monetdb
-[connect-monetdb-image]: https://badgen.net/github/stars/MonetDB/npm-connect-monetdb?label=%E2%98%85
-
-[![★][connect-mongo-image] connect-mongo][connect-mongo-url] A MongoDB-based session store.
-
-[connect-mongo-url]: https://www.npmjs.com/package/connect-mongo
-[connect-mongo-image]: https://badgen.net/github/stars/kcbanner/connect-mongo?label=%E2%98%85
-
-[![★][connect-mongodb-session-image] connect-mongodb-session][connect-mongodb-session-url] Lightweight MongoDB-based session store built and maintained by MongoDB.
-
-[connect-mongodb-session-url]: https://www.npmjs.com/package/connect-mongodb-session
-[connect-mongodb-session-image]: https://badgen.net/github/stars/mongodb-js/connect-mongodb-session?label=%E2%98%85
-
-[![★][connect-mssql-image] connect-mssql][connect-mssql-url] A SQL Server-based session store.
-
-[connect-mssql-url]: https://www.npmjs.com/package/connect-mssql
-[connect-mssql-image]: https://badgen.net/github/stars/patriksimek/connect-mssql?label=%E2%98%85
-
-[![★][connect-pg-simple-image] connect-pg-simple][connect-pg-simple-url] A PostgreSQL-based session store.
-
-[connect-pg-simple-url]: https://www.npmjs.com/package/connect-pg-simple
-[connect-pg-simple-image]: https://badgen.net/github/stars/voxpelli/node-connect-pg-simple?label=%E2%98%85
-
-[![★][connect-redis-image] connect-redis][connect-redis-url] A Redis-based session store.
-
-[connect-redis-url]: https://www.npmjs.com/package/connect-redis
-[connect-redis-image]: https://badgen.net/github/stars/tj/connect-redis?label=%E2%98%85
-
-[![★][connect-session-firebase-image] connect-session-firebase][connect-session-firebase-url] A session store based on the [Firebase Realtime Database](https://firebase.google.com/docs/database/)
-
-[connect-session-firebase-url]: https://www.npmjs.com/package/connect-session-firebase
-[connect-session-firebase-image]: https://badgen.net/github/stars/benweier/connect-session-firebase?label=%E2%98%85
-
-[![★][connect-session-knex-image] connect-session-knex][connect-session-knex-url] A session store using
-[Knex.js](http://knexjs.org/), which is a SQL query builder for PostgreSQL, MySQL, MariaDB, SQLite3, and Oracle.
-
-[connect-session-knex-url]: https://www.npmjs.com/package/connect-session-knex
-[connect-session-knex-image]: https://badgen.net/github/stars/llambda/connect-session-knex?label=%E2%98%85
-
-[![★][connect-session-sequelize-image] connect-session-sequelize][connect-session-sequelize-url] A session store using
-[Sequelize.js](http://sequelizejs.com/), which is a Node.js / io.js ORM for PostgreSQL, MySQL, SQLite and MSSQL.
-
-[connect-session-sequelize-url]: https://www.npmjs.com/package/connect-session-sequelize
-[connect-session-sequelize-image]: https://badgen.net/github/stars/mweibel/connect-session-sequelize?label=%E2%98%85
-
-[![★][connect-sqlite3-image] connect-sqlite3][connect-sqlite3-url] A [SQLite3](https://github.com/mapbox/node-sqlite3) session store modeled after the TJ's `connect-redis` store.
-
-[connect-sqlite3-url]: https://www.npmjs.com/package/connect-sqlite3
-[connect-sqlite3-image]: https://badgen.net/github/stars/rawberg/connect-sqlite3?label=%E2%98%85
-
-[![★][connect-typeorm-image] connect-typeorm][connect-typeorm-url] A [TypeORM](https://github.com/typeorm/typeorm)-based session store.
-
-[connect-typeorm-url]: https://www.npmjs.com/package/connect-typeorm
-[connect-typeorm-image]: https://badgen.net/github/stars/makepost/connect-typeorm?label=%E2%98%85
-
-[![★][couchdb-expression-image] couchdb-expression][couchdb-expression-url] A [CouchDB](https://couchdb.apache.org/)-based session store.
-
-[couchdb-expression-url]: https://www.npmjs.com/package/couchdb-expression
-[couchdb-expression-image]: https://badgen.net/github/stars/tkshnwesper/couchdb-expression?label=%E2%98%85
-
-[![★][documentdb-session-image] documentdb-session][documentdb-session-url] A session store for Microsoft Azure's [DocumentDB](https://azure.microsoft.com/en-us/services/documentdb/) NoSQL database service.
-
-[documentdb-session-url]: https://www.npmjs.com/package/documentdb-session
-[documentdb-session-image]: https://badgen.net/github/stars/dwhieb/documentdb-session?label=%E2%98%85
-
-[![★][dynamodb-store-image] dynamodb-store][dynamodb-store-url] A DynamoDB-based session store.
-
-[dynamodb-store-url]: https://www.npmjs.com/package/dynamodb-store
-[dynamodb-store-image]: https://badgen.net/github/stars/rafaelrpinto/dynamodb-store?label=%E2%98%85
-
-[![★][express-etcd-image] express-etcd][express-etcd-url] An [etcd](https://github.com/stianeikeland/node-etcd) based session store.
-
-[express-etcd-url]: https://www.npmjs.com/package/express-etcd
-[express-etcd-image]: https://badgen.net/github/stars/gildean/express-etcd?label=%E2%98%85
-
-[![★][express-mysql-session-image] express-mysql-session][express-mysql-session-url] A session store using native
-[MySQL](https://www.mysql.com/) via the [node-mysql](https://github.com/felixge/node-mysql) module.
-
-[express-mysql-session-url]: https://www.npmjs.com/package/express-mysql-session
-[express-mysql-session-image]: https://badgen.net/github/stars/chill117/express-mysql-session?label=%E2%98%85
-
-[![★][express-nedb-session-image] express-nedb-session][express-nedb-session-url] A NeDB-based session store.
-
-[express-nedb-session-url]: https://www.npmjs.com/package/express-nedb-session
-[express-nedb-session-image]: https://badgen.net/github/stars/louischatriot/express-nedb-session?label=%E2%98%85
-
-[![★][express-oracle-session-image] express-oracle-session][express-oracle-session-url] A session store using native
-[oracle](https://www.oracle.com/) via the [node-oracledb](https://www.npmjs.com/package/oracledb) module.
-
-[express-oracle-session-url]: https://www.npmjs.com/package/express-oracle-session
-[express-oracle-session-image]: https://badgen.net/github/stars/slumber86/express-oracle-session?label=%E2%98%85
-
-[![★][express-session-cache-manager-image] express-session-cache-manager][express-session-cache-manager-url]
-A store that implements [cache-manager](https://www.npmjs.com/package/cache-manager), which supports
-a [variety of storage types](https://www.npmjs.com/package/cache-manager#store-engines).
-
-[express-session-cache-manager-url]: https://www.npmjs.com/package/express-session-cache-manager
-[express-session-cache-manager-image]: https://badgen.net/github/stars/theogravity/express-session-cache-manager?label=%E2%98%85
-
-[![★][express-session-etcd3-image] express-session-etcd3][express-session-etcd3-url] An [etcd3](https://github.com/mixer/etcd3) based session store.
-
-[express-session-etcd3-url]: https://www.npmjs.com/package/express-session-etcd3
-[express-session-etcd3-image]: https://badgen.net/github/stars/willgm/express-session-etcd3?label=%E2%98%85
-
-[![★][express-session-level-image] express-session-level][express-session-level-url] A [LevelDB](https://github.com/Level/levelup) based session store.
-
-[express-session-level-url]: https://www.npmjs.com/package/express-session-level
-[express-session-level-image]: https://badgen.net/github/stars/tgohn/express-session-level?label=%E2%98%85
-
-[![★][express-session-rsdb-image] express-session-rsdb][express-session-rsdb-url] Session store based on Rocket-Store: A very simple, super fast and yet powerfull, flat file database.
-
-[express-session-rsdb-url]: https://www.npmjs.com/package/express-session-rsdb
-[express-session-rsdb-image]: https://badgen.net/github/stars/paragi/express-session-rsdb?label=%E2%98%85
-
-[![★][express-sessions-image] express-sessions][express-sessions-url] A session store supporting both MongoDB and Redis.
-
-[express-sessions-url]: https://www.npmjs.com/package/express-sessions
-[express-sessions-image]: https://badgen.net/github/stars/konteck/express-sessions?label=%E2%98%85
-
-[![★][firestore-store-image] firestore-store][firestore-store-url] A [Firestore](https://github.com/hendrysadrak/firestore-store)-based session store.
-
-[firestore-store-url]: https://www.npmjs.com/package/firestore-store
-[firestore-store-image]: https://badgen.net/github/stars/hendrysadrak/firestore-store?label=%E2%98%85
-
-[![★][fortune-session-image] fortune-session][fortune-session-url] A [Fortune.js](https://github.com/fortunejs/fortune)
-based session store. Supports all backends supported by Fortune (MongoDB, Redis, Postgres, NeDB).
-
-[fortune-session-url]: https://www.npmjs.com/package/fortune-session
-[fortune-session-image]: https://badgen.net/github/stars/aliceklipper/fortune-session?label=%E2%98%85
-
-[![★][hazelcast-store-image] hazelcast-store][hazelcast-store-url] A Hazelcast-based session store built on the [Hazelcast Node Client](https://www.npmjs.com/package/hazelcast-client).
-
-[hazelcast-store-url]: https://www.npmjs.com/package/hazelcast-store
-[hazelcast-store-image]: https://badgen.net/github/stars/jackspaniel/hazelcast-store?label=%E2%98%85
-
-[![★][level-session-store-image] level-session-store][level-session-store-url] A LevelDB-based session store.
-
-[level-session-store-url]: https://www.npmjs.com/package/level-session-store
-[level-session-store-image]: https://badgen.net/github/stars/toddself/level-session-store?label=%E2%98%85
-
-[![★][lowdb-session-store-image] lowdb-session-store][lowdb-session-store-url] A [lowdb](https://www.npmjs.com/package/lowdb)-based session store.
-
-[lowdb-session-store-url]: https://www.npmjs.com/package/lowdb-session-store
-[lowdb-session-store-image]: https://badgen.net/github/stars/fhellwig/lowdb-session-store?label=%E2%98%85
-
-[![★][medea-session-store-image] medea-session-store][medea-session-store-url] A Medea-based session store.
-
-[medea-session-store-url]: https://www.npmjs.com/package/medea-session-store
-[medea-session-store-image]: https://badgen.net/github/stars/BenjaminVadant/medea-session-store?label=%E2%98%85
-
-[![★][memorystore-image] memorystore][memorystore-url] A memory session store made for production.
-
-[memorystore-url]: https://www.npmjs.com/package/memorystore
-[memorystore-image]: https://badgen.net/github/stars/roccomuso/memorystore?label=%E2%98%85
-
-[![★][mssql-session-store-image] mssql-session-store][mssql-session-store-url] A SQL Server-based session store.
-
-[mssql-session-store-url]: https://www.npmjs.com/package/mssql-session-store
-[mssql-session-store-image]: https://badgen.net/github/stars/jwathen/mssql-session-store?label=%E2%98%85
-
-[![★][nedb-session-store-image] nedb-session-store][nedb-session-store-url] An alternate NeDB-based (either in-memory or file-persisted) session store.
-
-[nedb-session-store-url]: https://www.npmjs.com/package/nedb-session-store
-[nedb-session-store-image]: https://badgen.net/github/stars/JamesMGreene/nedb-session-store?label=%E2%98%85
-
-[![★][restsession-image] restsession][restsession-url] Store sessions utilizing a RESTful API
-
-[restsession-url]: https://www.npmjs.com/package/restsession
-[restsession-image]: https://badgen.net/github/stars/jankal/restsession?label=%E2%98%85
-
-[![★][sequelstore-connect-image] sequelstore-connect][sequelstore-connect-url] A session store using [Sequelize.js](http://sequelizejs.com/).
-
-[sequelstore-connect-url]: https://www.npmjs.com/package/sequelstore-connect
-[sequelstore-connect-image]: https://badgen.net/github/stars/MattMcFarland/sequelstore-connect?label=%E2%98%85
-
-[![★][session-file-store-image] session-file-store][session-file-store-url] A file system-based session store.
-
-[session-file-store-url]: https://www.npmjs.com/package/session-file-store
-[session-file-store-image]: https://badgen.net/github/stars/valery-barysok/session-file-store?label=%E2%98%85
-
-[![★][session-pouchdb-store-image] session-pouchdb-store][session-pouchdb-store-url] Session store for PouchDB / CouchDB. Accepts embedded, custom, or remote PouchDB instance and realtime synchronization.
-
-[session-pouchdb-store-url]: https://www.npmjs.com/package/session-pouchdb-store
-[session-pouchdb-store-image]: https://badgen.net/github/stars/solzimer/session-pouchdb-store?label=%E2%98%85
-
-[![★][session-rethinkdb-image] session-rethinkdb][session-rethinkdb-url] A [RethinkDB](http://rethinkdb.com/)-based session store.
-
-[session-rethinkdb-url]: https://www.npmjs.com/package/session-rethinkdb
-[session-rethinkdb-image]: https://badgen.net/github/stars/llambda/session-rethinkdb?label=%E2%98%85
-
-[![★][sessionstore-image] sessionstore][sessionstore-url] A session store that works with various databases.
-
-[sessionstore-url]: https://www.npmjs.com/package/sessionstore
-[sessionstore-image]: https://badgen.net/github/stars/adrai/sessionstore?label=%E2%98%85
-
-[![★][tch-nedb-session-image] tch-nedb-session][tch-nedb-session-url] A file system session store based on NeDB.
-
-[tch-nedb-session-url]: https://www.npmjs.com/package/tch-nedb-session
-[tch-nedb-session-image]: https://badgen.net/github/stars/tomaschyly/NeDBSession?label=%E2%98%85
-
-## Example
-
-A simple example using `express-session` to store page views for a user.
-
-```js
-var express = require('express')
-var parseurl = require('parseurl')
-var session = require('express-session')
-
-var app = express()
-
-app.use(session({
-  secret: 'keyboard cat',
-  resave: false,
-  saveUninitialized: true
-}))
-
-app.use(function (req, res, next) {
-  if (!req.session.views) {
-    req.session.views = {}
-  }
-
-  // get the url pathname
-  var pathname = parseurl(req).pathname
-
-  // count the views
-  req.session.views[pathname] = (req.session.views[pathname] || 0) + 1
-
-  next()
-})
-
-app.get('/foo', function (req, res, next) {
-  res.send('you viewed this page ' + req.session.views['/foo'] + ' times')
-})
-
-app.get('/bar', function (req, res, next) {
-  res.send('you viewed this page ' + req.session.views['/bar'] + ' times')
-})
-```
-
-## Debugging
-
-This module uses the [debug](https://www.npmjs.com/package/debug) module
-internally to log information about session operations.
-
-To see all the internal logs, set the `DEBUG` environment variable to
-`express-session` when launching your app (`npm start`, in this example):
-
-```sh
-$ DEBUG=express-session npm start
-```
-
-On Windows, use the corresponding command;
-
-```sh
-> set DEBUG=express-session & npm start
-```
-
-## License
-
-[MIT](LICENSE)
-
-[rfc-6265bis-03-4.1.2.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7
-[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/session/master
-[coveralls-url]: https://coveralls.io/r/expressjs/session?branch=master
-[node-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/express-session
-[npm-url]: https://npmjs.org/package/express-session
-[npm-version-image]: https://badgen.net/npm/v/express-session
-[travis-image]: https://badgen.net/travis/expressjs/session/master
-[travis-url]: https://travis-ci.org/expressjs/session
diff --git a/device_home/node_modules/express/History.md b/device_home/node_modules/express/History.md
deleted file mode 100644 (file)
index 6e62a6d..0000000
+++ /dev/null
@@ -1,3477 +0,0 @@
-4.17.1 / 2019-05-25
-===================
-
-  * Revert "Improve error message for `null`/`undefined` to `res.status`"
-
-4.17.0 / 2019-05-16
-===================
-
-  * Add `express.raw` to parse bodies into `Buffer`
-  * Add `express.text` to parse bodies into string
-  * Improve error message for non-strings to `res.sendFile`
-  * Improve error message for `null`/`undefined` to `res.status`
-  * Support multiple hosts in `X-Forwarded-Host`
-  * deps: accepts@~1.3.7
-  * deps: body-parser@1.19.0
-    - Add encoding MIK
-    - Add petabyte (`pb`) support
-    - Fix parsing array brackets after index
-    - deps: bytes@3.1.0
-    - deps: http-errors@1.7.2
-    - deps: iconv-lite@0.4.24
-    - deps: qs@6.7.0
-    - deps: raw-body@2.4.0
-    - deps: type-is@~1.6.17
-  * deps: content-disposition@0.5.3
-  * deps: cookie@0.4.0
-    - Add `SameSite=None` support
-  * deps: finalhandler@~1.1.2
-    - Set stricter `Content-Security-Policy` header
-    - deps: parseurl@~1.3.3
-    - deps: statuses@~1.5.0
-  * deps: parseurl@~1.3.3
-  * deps: proxy-addr@~2.0.5
-    - deps: ipaddr.js@1.9.0
-  * deps: qs@6.7.0
-    - Fix parsing array brackets after index
-  * deps: range-parser@~1.2.1
-  * deps: send@0.17.1
-    - Set stricter CSP header in redirect & error responses
-    - deps: http-errors@~1.7.2
-    - deps: mime@1.6.0
-    - deps: ms@2.1.1
-    - deps: range-parser@~1.2.1
-    - deps: statuses@~1.5.0
-    - perf: remove redundant `path.normalize` call
-  * deps: serve-static@1.14.1
-    - Set stricter CSP header in redirect response
-    - deps: parseurl@~1.3.3
-    - deps: send@0.17.1
-  * deps: setprototypeof@1.1.1
-  * deps: statuses@~1.5.0
-    - Add `103 Early Hints`
-  * deps: type-is@~1.6.18
-    - deps: mime-types@~2.1.24
-    - perf: prevent internal `throw` on invalid type
-
-4.16.4 / 2018-10-10
-===================
-
-  * Fix issue where `"Request aborted"` may be logged in `res.sendfile`
-  * Fix JSDoc for `Router` constructor
-  * deps: body-parser@1.18.3
-    - Fix deprecation warnings on Node.js 10+
-    - Fix stack trace for strict json parse error
-    - deps: depd@~1.1.2
-    - deps: http-errors@~1.6.3
-    - deps: iconv-lite@0.4.23
-    - deps: qs@6.5.2
-    - deps: raw-body@2.3.3
-    - deps: type-is@~1.6.16
-  * deps: proxy-addr@~2.0.4
-    - deps: ipaddr.js@1.8.0
-  * deps: qs@6.5.2
-  * deps: safe-buffer@5.1.2
-
-4.16.3 / 2018-03-12
-===================
-
-  * deps: accepts@~1.3.5
-    - deps: mime-types@~2.1.18
-  * deps: depd@~1.1.2
-    - perf: remove argument reassignment
-  * deps: encodeurl@~1.0.2
-    - Fix encoding `%` as last character
-  * deps: finalhandler@1.1.1
-    - Fix 404 output for bad / missing pathnames
-    - deps: encodeurl@~1.0.2
-    - deps: statuses@~1.4.0
-  * deps: proxy-addr@~2.0.3
-    - deps: ipaddr.js@1.6.0
-  * deps: send@0.16.2
-    - Fix incorrect end tag in default error & redirects
-    - deps: depd@~1.1.2
-    - deps: encodeurl@~1.0.2
-    - deps: statuses@~1.4.0
-  * deps: serve-static@1.13.2
-    - Fix incorrect end tag in redirects
-    - deps: encodeurl@~1.0.2
-    - deps: send@0.16.2
-  * deps: statuses@~1.4.0
-  * deps: type-is@~1.6.16
-    - deps: mime-types@~2.1.18
-
-4.16.2 / 2017-10-09
-===================
-
-  * Fix `TypeError` in `res.send` when given `Buffer` and `ETag` header set
-  * perf: skip parsing of entire `X-Forwarded-Proto` header
-
-4.16.1 / 2017-09-29
-===================
-
-  * deps: send@0.16.1
-  * deps: serve-static@1.13.1
-    - Fix regression when `root` is incorrectly set to a file
-    - deps: send@0.16.1
-
-4.16.0 / 2017-09-28
-===================
-
-  * Add `"json escape"` setting for `res.json` and `res.jsonp`
-  * Add `express.json` and `express.urlencoded` to parse bodies
-  * Add `options` argument to `res.download`
-  * Improve error message when autoloading invalid view engine
-  * Improve error messages when non-function provided as middleware
-  * Skip `Buffer` encoding when not generating ETag for small response
-  * Use `safe-buffer` for improved Buffer API
-  * deps: accepts@~1.3.4
-    - deps: mime-types@~2.1.16
-  * deps: content-type@~1.0.4
-    - perf: remove argument reassignment
-    - perf: skip parameter parsing when no parameters
-  * deps: etag@~1.8.1
-    - perf: replace regular expression with substring
-  * deps: finalhandler@1.1.0
-    - Use `res.headersSent` when available
-  * deps: parseurl@~1.3.2
-    - perf: reduce overhead for full URLs
-    - perf: unroll the "fast-path" `RegExp`
-  * deps: proxy-addr@~2.0.2
-    - Fix trimming leading / trailing OWS in `X-Forwarded-For`
-    - deps: forwarded@~0.1.2
-    - deps: ipaddr.js@1.5.2
-    - perf: reduce overhead when no `X-Forwarded-For` header
-  * deps: qs@6.5.1
-    - Fix parsing & compacting very deep objects
-  * deps: send@0.16.0
-    - Add 70 new types for file extensions
-    - Add `immutable` option
-    - Fix missing `</html>` in default error & redirects
-    - Set charset as "UTF-8" for .js and .json
-    - Use instance methods on steam to check for listeners
-    - deps: mime@1.4.1
-    - perf: improve path validation speed
-  * deps: serve-static@1.13.0
-    - Add 70 new types for file extensions
-    - Add `immutable` option
-    - Set charset as "UTF-8" for .js and .json
-    - deps: send@0.16.0
-  * deps: setprototypeof@1.1.0
-  * deps: utils-merge@1.0.1
-  * deps: vary@~1.1.2
-    - perf: improve header token parsing speed
-  * perf: re-use options object when generating ETags
-  * perf: remove dead `.charset` set in `res.jsonp`
-
-4.15.5 / 2017-09-24
-===================
-
-  * deps: debug@2.6.9
-  * deps: finalhandler@~1.0.6
-    - deps: debug@2.6.9
-    - deps: parseurl@~1.3.2
-  * deps: fresh@0.5.2
-    - Fix handling of modified headers with invalid dates
-    - perf: improve ETag match loop
-    - perf: improve `If-None-Match` token parsing
-  * deps: send@0.15.6
-    - Fix handling of modified headers with invalid dates
-    - deps: debug@2.6.9
-    - deps: etag@~1.8.1
-    - deps: fresh@0.5.2
-    - perf: improve `If-Match` token parsing
-  * deps: serve-static@1.12.6
-    - deps: parseurl@~1.3.2
-    - deps: send@0.15.6
-    - perf: improve slash collapsing
-
-4.15.4 / 2017-08-06
-===================
-
-  * deps: debug@2.6.8
-  * deps: depd@~1.1.1
-    - Remove unnecessary `Buffer` loading
-  * deps: finalhandler@~1.0.4
-    - deps: debug@2.6.8
-  * deps: proxy-addr@~1.1.5
-    - Fix array argument being altered
-    - deps: ipaddr.js@1.4.0
-  * deps: qs@6.5.0
-  * deps: send@0.15.4
-    - deps: debug@2.6.8
-    - deps: depd@~1.1.1
-    - deps: http-errors@~1.6.2
-  * deps: serve-static@1.12.4
-    - deps: send@0.15.4
-
-4.15.3 / 2017-05-16
-===================
-
-  * Fix error when `res.set` cannot add charset to `Content-Type`
-  * deps: debug@2.6.7
-    - Fix `DEBUG_MAX_ARRAY_LENGTH`
-    - deps: ms@2.0.0
-  * deps: finalhandler@~1.0.3
-    - Fix missing `</html>` in HTML document
-    - deps: debug@2.6.7
-  * deps: proxy-addr@~1.1.4
-    - deps: ipaddr.js@1.3.0
-  * deps: send@0.15.3
-    - deps: debug@2.6.7
-    - deps: ms@2.0.0
-  * deps: serve-static@1.12.3
-    - deps: send@0.15.3
-  * deps: type-is@~1.6.15
-    - deps: mime-types@~2.1.15
-  * deps: vary@~1.1.1
-    - perf: hoist regular expression
-
-4.15.2 / 2017-03-06
-===================
-
-  * deps: qs@6.4.0
-    - Fix regression parsing keys starting with `[`
-
-4.15.1 / 2017-03-05
-===================
-
-  * deps: send@0.15.1
-    - Fix issue when `Date.parse` does not return `NaN` on invalid date
-    - Fix strict violation in broken environments
-  * deps: serve-static@1.12.1
-    - Fix issue when `Date.parse` does not return `NaN` on invalid date
-    - deps: send@0.15.1
-
-4.15.0 / 2017-03-01
-===================
-
-  * Add debug message when loading view engine
-  * Add `next("router")` to exit from router
-  * Fix case where `router.use` skipped requests routes did not
-  * Remove usage of `res._headers` private field
-    - Improves compatibility with Node.js 8 nightly
-  * Skip routing when `req.url` is not set
-  * Use `%o` in path debug to tell types apart
-  * Use `Object.create` to setup request & response prototypes
-  * Use `setprototypeof` module to replace `__proto__` setting
-  * Use `statuses` instead of `http` module for status messages
-  * deps: debug@2.6.1
-    - Allow colors in workers
-    - Deprecated `DEBUG_FD` environment variable set to `3` or higher
-    - Fix error when running under React Native
-    - Use same color for same namespace
-    - deps: ms@0.7.2
-  * deps: etag@~1.8.0
-    - Use SHA1 instead of MD5 for ETag hashing
-    - Works with FIPS 140-2 OpenSSL configuration
-  * deps: finalhandler@~1.0.0
-    - Fix exception when `err` cannot be converted to a string
-    - Fully URL-encode the pathname in the 404
-    - Only include the pathname in the 404 message
-    - Send complete HTML document
-    - Set `Content-Security-Policy: default-src 'self'` header
-    - deps: debug@2.6.1
-  * deps: fresh@0.5.0
-    - Fix false detection of `no-cache` request directive
-    - Fix incorrect result when `If-None-Match` has both `*` and ETags
-    - Fix weak `ETag` matching to match spec
-    - perf: delay reading header values until needed
-    - perf: enable strict mode
-    - perf: hoist regular expressions
-    - perf: remove duplicate conditional
-    - perf: remove unnecessary boolean coercions
-    - perf: skip checking modified time if ETag check failed
-    - perf: skip parsing `If-None-Match` when no `ETag` header
-    - perf: use `Date.parse` instead of `new Date`
-  * deps: qs@6.3.1
-    - Fix array parsing from skipping empty values
-    - Fix compacting nested arrays
-  * deps: send@0.15.0
-    - Fix false detection of `no-cache` request directive
-    - Fix incorrect result when `If-None-Match` has both `*` and ETags
-    - Fix weak `ETag` matching to match spec
-    - Remove usage of `res._headers` private field
-    - Support `If-Match` and `If-Unmodified-Since` headers
-    - Use `res.getHeaderNames()` when available
-    - Use `res.headersSent` when available
-    - deps: debug@2.6.1
-    - deps: etag@~1.8.0
-    - deps: fresh@0.5.0
-    - deps: http-errors@~1.6.1
-  * deps: serve-static@1.12.0
-    - Fix false detection of `no-cache` request directive
-    - Fix incorrect result when `If-None-Match` has both `*` and ETags
-    - Fix weak `ETag` matching to match spec
-    - Remove usage of `res._headers` private field
-    - Send complete HTML document in redirect response
-    - Set default CSP header in redirect response
-    - Support `If-Match` and `If-Unmodified-Since` headers
-    - Use `res.getHeaderNames()` when available
-    - Use `res.headersSent` when available
-    - deps: send@0.15.0
-  * perf: add fast match path for `*` route
-  * perf: improve `req.ips` performance
-
-4.14.1 / 2017-01-28
-===================
-
-  * deps: content-disposition@0.5.2
-  * deps: finalhandler@0.5.1
-    - Fix exception when `err.headers` is not an object
-    - deps: statuses@~1.3.1
-    - perf: hoist regular expressions
-    - perf: remove duplicate validation path
-  * deps: proxy-addr@~1.1.3
-    - deps: ipaddr.js@1.2.0
-  * deps: send@0.14.2
-    - deps: http-errors@~1.5.1
-    - deps: ms@0.7.2
-    - deps: statuses@~1.3.1
-  * deps: serve-static@~1.11.2
-    - deps: send@0.14.2
-  * deps: type-is@~1.6.14
-    - deps: mime-types@~2.1.13
-
-4.14.0 / 2016-06-16
-===================
-
-  * Add `acceptRanges` option to `res.sendFile`/`res.sendfile`
-  * Add `cacheControl` option to `res.sendFile`/`res.sendfile`
-  * Add `options` argument to `req.range`
-    - Includes the `combine` option
-  * Encode URL in `res.location`/`res.redirect` if not already encoded
-  * Fix some redirect handling in `res.sendFile`/`res.sendfile`
-  * Fix Windows absolute path check using forward slashes
-  * Improve error with invalid arguments to `req.get()`
-  * Improve performance for `res.json`/`res.jsonp` in most cases
-  * Improve `Range` header handling in `res.sendFile`/`res.sendfile`
-  * deps: accepts@~1.3.3
-    - Fix including type extensions in parameters in `Accept` parsing
-    - Fix parsing `Accept` parameters with quoted equals
-    - Fix parsing `Accept` parameters with quoted semicolons
-    - Many performance improvements
-    - deps: mime-types@~2.1.11
-    - deps: negotiator@0.6.1
-  * deps: content-type@~1.0.2
-    - perf: enable strict mode
-  * deps: cookie@0.3.1
-    - Add `sameSite` option
-    - Fix cookie `Max-Age` to never be a floating point number
-    - Improve error message when `encode` is not a function
-    - Improve error message when `expires` is not a `Date`
-    - Throw better error for invalid argument to parse
-    - Throw on invalid values provided to `serialize`
-    - perf: enable strict mode
-    - perf: hoist regular expression
-    - perf: use for loop in parse
-    - perf: use string concatenation for serialization
-  * deps: finalhandler@0.5.0
-    - Change invalid or non-numeric status code to 500
-    - Overwrite status message to match set status code
-    - Prefer `err.statusCode` if `err.status` is invalid
-    - Set response headers from `err.headers` object
-    - Use `statuses` instead of `http` module for status messages
-  * deps: proxy-addr@~1.1.2
-    - Fix accepting various invalid netmasks
-    - Fix IPv6-mapped IPv4 validation edge cases
-    - IPv4 netmasks must be contiguous
-    - IPv6 addresses cannot be used as a netmask
-    - deps: ipaddr.js@1.1.1
-  * deps: qs@6.2.0
-    - Add `decoder` option in `parse` function
-  * deps: range-parser@~1.2.0
-    - Add `combine` option to combine overlapping ranges
-    - Fix incorrectly returning -1 when there is at least one valid range
-    - perf: remove internal function
-  * deps: send@0.14.1
-    - Add `acceptRanges` option
-    - Add `cacheControl` option
-    - Attempt to combine multiple ranges into single range
-    - Correctly inherit from `Stream` class
-    - Fix `Content-Range` header in 416 responses when using `start`/`end` options
-    - Fix `Content-Range` header missing from default 416 responses
-    - Fix redirect error when `path` contains raw non-URL characters
-    - Fix redirect when `path` starts with multiple forward slashes
-    - Ignore non-byte `Range` headers
-    - deps: http-errors@~1.5.0
-    - deps: range-parser@~1.2.0
-    - deps: statuses@~1.3.0
-    - perf: remove argument reassignment
-  * deps: serve-static@~1.11.1
-    - Add `acceptRanges` option
-    - Add `cacheControl` option
-    - Attempt to combine multiple ranges into single range
-    - Fix redirect error when `req.url` contains raw non-URL characters
-    - Ignore non-byte `Range` headers
-    - Use status code 301 for redirects
-    - deps: send@0.14.1
-  * deps: type-is@~1.6.13
-    - Fix type error when given invalid type to match against
-    - deps: mime-types@~2.1.11
-  * deps: vary@~1.1.0
-    - Only accept valid field names in the `field` argument
-  * perf: use strict equality when possible
-
-4.13.4 / 2016-01-21
-===================
-
-  * deps: content-disposition@0.5.1
-    - perf: enable strict mode
-  * deps: cookie@0.1.5
-    - Throw on invalid values provided to `serialize`
-  * deps: depd@~1.1.0
-    - Support web browser loading
-    - perf: enable strict mode
-  * deps: escape-html@~1.0.3
-    - perf: enable strict mode
-    - perf: optimize string replacement
-    - perf: use faster string coercion
-  * deps: finalhandler@0.4.1
-    - deps: escape-html@~1.0.3
-  * deps: merge-descriptors@1.0.1
-    - perf: enable strict mode
-  * deps: methods@~1.1.2
-    - perf: enable strict mode
-  * deps: parseurl@~1.3.1
-    - perf: enable strict mode
-  * deps: proxy-addr@~1.0.10
-    - deps: ipaddr.js@1.0.5
-    - perf: enable strict mode
-  * deps: range-parser@~1.0.3
-    - perf: enable strict mode
-  * deps: send@0.13.1
-    - deps: depd@~1.1.0
-    - deps: destroy@~1.0.4
-    - deps: escape-html@~1.0.3
-    - deps: range-parser@~1.0.3
-  * deps: serve-static@~1.10.2
-    - deps: escape-html@~1.0.3
-    - deps: parseurl@~1.3.0
-    - deps: send@0.13.1
-
-4.13.3 / 2015-08-02
-===================
-
-  * Fix infinite loop condition using `mergeParams: true`
-  * Fix inner numeric indices incorrectly altering parent `req.params`
-
-4.13.2 / 2015-07-31
-===================
-
-  * deps: accepts@~1.2.12
-    - deps: mime-types@~2.1.4
-  * deps: array-flatten@1.1.1
-    - perf: enable strict mode
-  * deps: path-to-regexp@0.1.7
-    - Fix regression with escaped round brackets and matching groups
-  * deps: type-is@~1.6.6
-    - deps: mime-types@~2.1.4
-
-4.13.1 / 2015-07-05
-===================
-
-  * deps: accepts@~1.2.10
-    - deps: mime-types@~2.1.2
-  * deps: qs@4.0.0
-    - Fix dropping parameters like `hasOwnProperty`
-    - Fix various parsing edge cases
-  * deps: type-is@~1.6.4
-    - deps: mime-types@~2.1.2
-    - perf: enable strict mode
-    - perf: remove argument reassignment
-
-4.13.0 / 2015-06-20
-===================
-
-  * Add settings to debug output
-  * Fix `res.format` error when only `default` provided
-  * Fix issue where `next('route')` in `app.param` would incorrectly skip values
-  * Fix hiding platform issues with `decodeURIComponent`
-    - Only `URIError`s are a 400
-  * Fix using `*` before params in routes
-  * Fix using capture groups before params in routes
-  * Simplify `res.cookie` to call `res.append`
-  * Use `array-flatten` module for flattening arrays
-  * deps: accepts@~1.2.9
-    - deps: mime-types@~2.1.1
-    - perf: avoid argument reassignment & argument slice
-    - perf: avoid negotiator recursive construction
-    - perf: enable strict mode
-    - perf: remove unnecessary bitwise operator
-  * deps: cookie@0.1.3
-    - perf: deduce the scope of try-catch deopt
-    - perf: remove argument reassignments
-  * deps: escape-html@1.0.2
-  * deps: etag@~1.7.0
-    - Always include entity length in ETags for hash length extensions
-    - Generate non-Stats ETags using MD5 only (no longer CRC32)
-    - Improve stat performance by removing hashing
-    - Improve support for JXcore
-    - Remove base64 padding in ETags to shorten
-    - Support "fake" stats objects in environments without fs
-    - Use MD5 instead of MD4 in weak ETags over 1KB
-  * deps: finalhandler@0.4.0
-    - Fix a false-positive when unpiping in Node.js 0.8
-    - Support `statusCode` property on `Error` objects
-    - Use `unpipe` module for unpiping requests
-    - deps: escape-html@1.0.2
-    - deps: on-finished@~2.3.0
-    - perf: enable strict mode
-    - perf: remove argument reassignment
-  * deps: fresh@0.3.0
-    - Add weak `ETag` matching support
-  * deps: on-finished@~2.3.0
-    - Add defined behavior for HTTP `CONNECT` requests
-    - Add defined behavior for HTTP `Upgrade` requests
-    - deps: ee-first@1.1.1
-  * deps: path-to-regexp@0.1.6
-  * deps: send@0.13.0
-    - Allow Node.js HTTP server to set `Date` response header
-    - Fix incorrectly removing `Content-Location` on 304 response
-    - Improve the default redirect response headers
-    - Send appropriate headers on default error response
-    - Use `http-errors` for standard emitted errors
-    - Use `statuses` instead of `http` module for status messages
-    - deps: escape-html@1.0.2
-    - deps: etag@~1.7.0
-    - deps: fresh@0.3.0
-    - deps: on-finished@~2.3.0
-    - perf: enable strict mode
-    - perf: remove unnecessary array allocations
-  * deps: serve-static@~1.10.0
-    - Add `fallthrough` option
-    - Fix reading options from options prototype
-    - Improve the default redirect response headers
-    - Malformed URLs now `next()` instead of 400
-    - deps: escape-html@1.0.2
-    - deps: send@0.13.0
-    - perf: enable strict mode
-    - perf: remove argument reassignment
-  * deps: type-is@~1.6.3
-    - deps: mime-types@~2.1.1
-    - perf: reduce try block size
-    - perf: remove bitwise operations
-  * perf: enable strict mode
-  * perf: isolate `app.render` try block
-  * perf: remove argument reassignments in application
-  * perf: remove argument reassignments in request prototype
-  * perf: remove argument reassignments in response prototype
-  * perf: remove argument reassignments in routing
-  * perf: remove argument reassignments in `View`
-  * perf: skip attempting to decode zero length string
-  * perf: use saved reference to `http.STATUS_CODES`
-
-4.12.4 / 2015-05-17
-===================
-
-  * deps: accepts@~1.2.7
-    - deps: mime-types@~2.0.11
-    - deps: negotiator@0.5.3
-  * deps: debug@~2.2.0
-    - deps: ms@0.7.1
-  * deps: depd@~1.0.1
-  * deps: etag@~1.6.0
-    - Improve support for JXcore
-    - Support "fake" stats objects in environments without `fs`
-  * deps: finalhandler@0.3.6
-    - deps: debug@~2.2.0
-    - deps: on-finished@~2.2.1
-  * deps: on-finished@~2.2.1
-    - Fix `isFinished(req)` when data buffered
-  * deps: proxy-addr@~1.0.8
-    - deps: ipaddr.js@1.0.1
-  * deps: qs@2.4.2
-   - Fix allowing parameters like `constructor`
-  * deps: send@0.12.3
-    - deps: debug@~2.2.0
-    - deps: depd@~1.0.1
-    - deps: etag@~1.6.0
-    - deps: ms@0.7.1
-    - deps: on-finished@~2.2.1
-  * deps: serve-static@~1.9.3
-    - deps: send@0.12.3
-  * deps: type-is@~1.6.2
-    - deps: mime-types@~2.0.11
-
-4.12.3 / 2015-03-17
-===================
-
-  * deps: accepts@~1.2.5
-    - deps: mime-types@~2.0.10
-  * deps: debug@~2.1.3
-    - Fix high intensity foreground color for bold
-    - deps: ms@0.7.0
-  * deps: finalhandler@0.3.4
-    - deps: debug@~2.1.3
-  * deps: proxy-addr@~1.0.7
-    - deps: ipaddr.js@0.1.9
-  * deps: qs@2.4.1
-    - Fix error when parameter `hasOwnProperty` is present
-  * deps: send@0.12.2
-    - Throw errors early for invalid `extensions` or `index` options
-    - deps: debug@~2.1.3
-  * deps: serve-static@~1.9.2
-    - deps: send@0.12.2
-  * deps: type-is@~1.6.1
-    - deps: mime-types@~2.0.10
-
-4.12.2 / 2015-03-02
-===================
-
-  * Fix regression where `"Request aborted"` is logged using `res.sendFile`
-
-4.12.1 / 2015-03-01
-===================
-
-  * Fix constructing application with non-configurable prototype properties
-  * Fix `ECONNRESET` errors from `res.sendFile` usage
-  * Fix `req.host` when using "trust proxy" hops count
-  * Fix `req.protocol`/`req.secure` when using "trust proxy" hops count
-  * Fix wrong `code` on aborted connections from `res.sendFile`
-  * deps: merge-descriptors@1.0.0
-
-4.12.0 / 2015-02-23
-===================
-
-  * Fix `"trust proxy"` setting to inherit when app is mounted
-  * Generate `ETag`s for all request responses
-    - No longer restricted to only responses for `GET` and `HEAD` requests
-  * Use `content-type` to parse `Content-Type` headers
-  * deps: accepts@~1.2.4
-    - Fix preference sorting to be stable for long acceptable lists
-    - deps: mime-types@~2.0.9
-    - deps: negotiator@0.5.1
-  * deps: cookie-signature@1.0.6
-  * deps: send@0.12.1
-    - Always read the stat size from the file
-    - Fix mutating passed-in `options`
-    - deps: mime@1.3.4
-  * deps: serve-static@~1.9.1
-    - deps: send@0.12.1
-  * deps: type-is@~1.6.0
-    - fix argument reassignment
-    - fix false-positives in `hasBody` `Transfer-Encoding` check
-    - support wildcard for both type and subtype (`*/*`)
-    - deps: mime-types@~2.0.9
-
-4.11.2 / 2015-02-01
-===================
-
-  * Fix `res.redirect` double-calling `res.end` for `HEAD` requests
-  * deps: accepts@~1.2.3
-    - deps: mime-types@~2.0.8
-  * deps: proxy-addr@~1.0.6
-    - deps: ipaddr.js@0.1.8
-  * deps: type-is@~1.5.6
-    - deps: mime-types@~2.0.8
-
-4.11.1 / 2015-01-20
-===================
-
-  * deps: send@0.11.1
-    - Fix root path disclosure
-  * deps: serve-static@~1.8.1
-    - Fix redirect loop in Node.js 0.11.14
-    - Fix root path disclosure
-    - deps: send@0.11.1
-
-4.11.0 / 2015-01-13
-===================
-
-  * Add `res.append(field, val)` to append headers
-  * Deprecate leading `:` in `name` for `app.param(name, fn)`
-  * Deprecate `req.param()` -- use `req.params`, `req.body`, or `req.query` instead
-  * Deprecate `app.param(fn)`
-  * Fix `OPTIONS` responses to include the `HEAD` method properly
-  * Fix `res.sendFile` not always detecting aborted connection
-  * Match routes iteratively to prevent stack overflows
-  * deps: accepts@~1.2.2
-    - deps: mime-types@~2.0.7
-    - deps: negotiator@0.5.0
-  * deps: send@0.11.0
-    - deps: debug@~2.1.1
-    - deps: etag@~1.5.1
-    - deps: ms@0.7.0
-    - deps: on-finished@~2.2.0
-  * deps: serve-static@~1.8.0
-    - deps: send@0.11.0
-
-4.10.8 / 2015-01-13
-===================
-
-  * Fix crash from error within `OPTIONS` response handler
-  * deps: proxy-addr@~1.0.5
-    - deps: ipaddr.js@0.1.6
-
-4.10.7 / 2015-01-04
-===================
-
-  * Fix `Allow` header for `OPTIONS` to not contain duplicate methods
-  * Fix incorrect "Request aborted" for `res.sendFile` when `HEAD` or 304
-  * deps: debug@~2.1.1
-  * deps: finalhandler@0.3.3
-    - deps: debug@~2.1.1
-    - deps: on-finished@~2.2.0
-  * deps: methods@~1.1.1
-  * deps: on-finished@~2.2.0
-  * deps: serve-static@~1.7.2
-    - Fix potential open redirect when mounted at root
-  * deps: type-is@~1.5.5
-    - deps: mime-types@~2.0.7
-
-4.10.6 / 2014-12-12
-===================
-
-  * Fix exception in `req.fresh`/`req.stale` without response headers
-
-4.10.5 / 2014-12-10
-===================
-
-  * Fix `res.send` double-calling `res.end` for `HEAD` requests
-  * deps: accepts@~1.1.4
-    - deps: mime-types@~2.0.4
-  * deps: type-is@~1.5.4
-    - deps: mime-types@~2.0.4
-
-4.10.4 / 2014-11-24
-===================
-
-  * Fix `res.sendfile` logging standard write errors
-
-4.10.3 / 2014-11-23
-===================
-
-  * Fix `res.sendFile` logging standard write errors
-  * deps: etag@~1.5.1
-  * deps: proxy-addr@~1.0.4
-    - deps: ipaddr.js@0.1.5
-  * deps: qs@2.3.3
-    - Fix `arrayLimit` behavior
-
-4.10.2 / 2014-11-09
-===================
-
-  * Correctly invoke async router callback asynchronously
-  * deps: accepts@~1.1.3
-    - deps: mime-types@~2.0.3
-  * deps: type-is@~1.5.3
-    - deps: mime-types@~2.0.3
-
-4.10.1 / 2014-10-28
-===================
-
-  * Fix handling of URLs containing `://` in the path
-  * deps: qs@2.3.2
-    - Fix parsing of mixed objects and values
-
-4.10.0 / 2014-10-23
-===================
-
-  * Add support for `app.set('views', array)`
-    - Views are looked up in sequence in array of directories
-  * Fix `res.send(status)` to mention `res.sendStatus(status)`
-  * Fix handling of invalid empty URLs
-  * Use `content-disposition` module for `res.attachment`/`res.download`
-    - Sends standards-compliant `Content-Disposition` header
-    - Full Unicode support
-  * Use `path.resolve` in view lookup
-  * deps: debug@~2.1.0
-    - Implement `DEBUG_FD` env variable support
-  * deps: depd@~1.0.0
-  * deps: etag@~1.5.0
-    - Improve string performance
-    - Slightly improve speed for weak ETags over 1KB
-  * deps: finalhandler@0.3.2
-    - Terminate in progress response only on error
-    - Use `on-finished` to determine request status
-    - deps: debug@~2.1.0
-    - deps: on-finished@~2.1.1
-  * deps: on-finished@~2.1.1
-    - Fix handling of pipelined requests
-  * deps: qs@2.3.0
-    - Fix parsing of mixed implicit and explicit arrays
-  * deps: send@0.10.1
-    - deps: debug@~2.1.0
-    - deps: depd@~1.0.0
-    - deps: etag@~1.5.0
-    - deps: on-finished@~2.1.1
-  * deps: serve-static@~1.7.1
-    - deps: send@0.10.1
-
-4.9.8 / 2014-10-17
-==================
-
-  * Fix `res.redirect` body when redirect status specified
-  * deps: accepts@~1.1.2
-    - Fix error when media type has invalid parameter
-    - deps: negotiator@0.4.9
-
-4.9.7 / 2014-10-10
-==================
-
-  * Fix using same param name in array of paths
-
-4.9.6 / 2014-10-08
-==================
-
-  * deps: accepts@~1.1.1
-    - deps: mime-types@~2.0.2
-    - deps: negotiator@0.4.8
-  * deps: serve-static@~1.6.4
-    - Fix redirect loop when index file serving disabled
-  * deps: type-is@~1.5.2
-    - deps: mime-types@~2.0.2
-
-4.9.5 / 2014-09-24
-==================
-
-  * deps: etag@~1.4.0
-  * deps: proxy-addr@~1.0.3
-    - Use `forwarded` npm module
-  * deps: send@0.9.3
-    - deps: etag@~1.4.0
-  * deps: serve-static@~1.6.3
-    - deps: send@0.9.3
-
-4.9.4 / 2014-09-19
-==================
-
-  * deps: qs@2.2.4
-    - Fix issue with object keys starting with numbers truncated
-
-4.9.3 / 2014-09-18
-==================
-
-  * deps: proxy-addr@~1.0.2
-    - Fix a global leak when multiple subnets are trusted
-    - deps: ipaddr.js@0.1.3
-
-4.9.2 / 2014-09-17
-==================
-
-  * Fix regression for empty string `path` in `app.use`
-  * Fix `router.use` to accept array of middleware without path
-  * Improve error message for bad `app.use` arguments
-
-4.9.1 / 2014-09-16
-==================
-
-  * Fix `app.use` to accept array of middleware without path
-  * deps: depd@0.4.5
-  * deps: etag@~1.3.1
-  * deps: send@0.9.2
-    - deps: depd@0.4.5
-    - deps: etag@~1.3.1
-    - deps: range-parser@~1.0.2
-  * deps: serve-static@~1.6.2
-    - deps: send@0.9.2
-
-4.9.0 / 2014-09-08
-==================
-
-  * Add `res.sendStatus`
-  * Invoke callback for sendfile when client aborts
-    - Applies to `res.sendFile`, `res.sendfile`, and `res.download`
-    - `err` will be populated with request aborted error
-  * Support IP address host in `req.subdomains`
-  * Use `etag` to generate `ETag` headers
-  * deps: accepts@~1.1.0
-    - update `mime-types`
-  * deps: cookie-signature@1.0.5
-  * deps: debug@~2.0.0
-  * deps: finalhandler@0.2.0
-    - Set `X-Content-Type-Options: nosniff` header
-    - deps: debug@~2.0.0
-  * deps: fresh@0.2.4
-  * deps: media-typer@0.3.0
-    - Throw error when parameter format invalid on parse
-  * deps: qs@2.2.3
-    - Fix issue where first empty value in array is discarded
-  * deps: range-parser@~1.0.2
-  * deps: send@0.9.1
-    - Add `lastModified` option
-    - Use `etag` to generate `ETag` header
-    - deps: debug@~2.0.0
-    - deps: fresh@0.2.4
-  * deps: serve-static@~1.6.1
-    - Add `lastModified` option
-    - deps: send@0.9.1
-  * deps: type-is@~1.5.1
-    - fix `hasbody` to be true for `content-length: 0`
-    - deps: media-typer@0.3.0
-    - deps: mime-types@~2.0.1
-  * deps: vary@~1.0.0
-    - Accept valid `Vary` header string as `field`
-
-4.8.8 / 2014-09-04
-==================
-
-  * deps: send@0.8.5
-    - Fix a path traversal issue when using `root`
-    - Fix malicious path detection for empty string path
-  * deps: serve-static@~1.5.4
-    - deps: send@0.8.5
-
-4.8.7 / 2014-08-29
-==================
-
-  * deps: qs@2.2.2
-    - Remove unnecessary cloning
-
-4.8.6 / 2014-08-27
-==================
-
-  * deps: qs@2.2.0
-    - Array parsing fix
-    - Performance improvements
-
-4.8.5 / 2014-08-18
-==================
-
-  * deps: send@0.8.3
-    - deps: destroy@1.0.3
-    - deps: on-finished@2.1.0
-  * deps: serve-static@~1.5.3
-    - deps: send@0.8.3
-
-4.8.4 / 2014-08-14
-==================
-
-  * deps: qs@1.2.2
-  * deps: send@0.8.2
-    - Work around `fd` leak in Node.js 0.10 for `fs.ReadStream`
-  * deps: serve-static@~1.5.2
-    - deps: send@0.8.2
-
-4.8.3 / 2014-08-10
-==================
-
-  * deps: parseurl@~1.3.0
-  * deps: qs@1.2.1
-  * deps: serve-static@~1.5.1
-    - Fix parsing of weird `req.originalUrl` values
-    - deps: parseurl@~1.3.0
-    - deps: utils-merge@1.0.0
-
-4.8.2 / 2014-08-07
-==================
-
-  * deps: qs@1.2.0
-    - Fix parsing array of objects
-
-4.8.1 / 2014-08-06
-==================
-
-  * fix incorrect deprecation warnings on `res.download`
-  * deps: qs@1.1.0
-    - Accept urlencoded square brackets
-    - Accept empty values in implicit array notation
-
-4.8.0 / 2014-08-05
-==================
-
-  * add `res.sendFile`
-    - accepts a file system path instead of a URL
-    - requires an absolute path or `root` option specified
-  * deprecate `res.sendfile` -- use `res.sendFile` instead
-  * support mounted app as any argument to `app.use()`
-  * deps: qs@1.0.2
-    - Complete rewrite
-    - Limits array length to 20
-    - Limits object depth to 5
-    - Limits parameters to 1,000
-  * deps: send@0.8.1
-    - Add `extensions` option
-  * deps: serve-static@~1.5.0
-    - Add `extensions` option
-    - deps: send@0.8.1
-
-4.7.4 / 2014-08-04
-==================
-
-  * fix `res.sendfile` regression for serving directory index files
-  * deps: send@0.7.4
-    - Fix incorrect 403 on Windows and Node.js 0.11
-    - Fix serving index files without root dir
-  * deps: serve-static@~1.4.4
-    - deps: send@0.7.4
-
-4.7.3 / 2014-08-04
-==================
-
-  * deps: send@0.7.3
-    - Fix incorrect 403 on Windows and Node.js 0.11
-  * deps: serve-static@~1.4.3
-    - Fix incorrect 403 on Windows and Node.js 0.11
-    - deps: send@0.7.3
-
-4.7.2 / 2014-07-27
-==================
-
-  * deps: depd@0.4.4
-    - Work-around v8 generating empty stack traces
-  * deps: send@0.7.2
-    - deps: depd@0.4.4
-  * deps: serve-static@~1.4.2
-
-4.7.1 / 2014-07-26
-==================
-
-  * deps: depd@0.4.3
-    - Fix exception when global `Error.stackTraceLimit` is too low
-  * deps: send@0.7.1
-    - deps: depd@0.4.3
-  * deps: serve-static@~1.4.1
-
-4.7.0 / 2014-07-25
-==================
-
-  * fix `req.protocol` for proxy-direct connections
-  * configurable query parser with `app.set('query parser', parser)`
-    - `app.set('query parser', 'extended')` parse with "qs" module
-    - `app.set('query parser', 'simple')` parse with "querystring" core module
-    - `app.set('query parser', false)` disable query string parsing
-    - `app.set('query parser', true)` enable simple parsing
-  * deprecate `res.json(status, obj)` -- use `res.status(status).json(obj)` instead
-  * deprecate `res.jsonp(status, obj)` -- use `res.status(status).jsonp(obj)` instead
-  * deprecate `res.send(status, body)` -- use `res.status(status).send(body)` instead
-  * deps: debug@1.0.4
-  * deps: depd@0.4.2
-    - Add `TRACE_DEPRECATION` environment variable
-    - Remove non-standard grey color from color output
-    - Support `--no-deprecation` argument
-    - Support `--trace-deprecation` argument
-  * deps: finalhandler@0.1.0
-    - Respond after request fully read
-    - deps: debug@1.0.4
-  * deps: parseurl@~1.2.0
-    - Cache URLs based on original value
-    - Remove no-longer-needed URL mis-parse work-around
-    - Simplify the "fast-path" `RegExp`
-  * deps: send@0.7.0
-    - Add `dotfiles` option
-    - Cap `maxAge` value to 1 year
-    - deps: debug@1.0.4
-    - deps: depd@0.4.2
-  * deps: serve-static@~1.4.0
-    - deps: parseurl@~1.2.0
-    - deps: send@0.7.0
-  * perf: prevent multiple `Buffer` creation in `res.send`
-
-4.6.1 / 2014-07-12
-==================
-
-  * fix `subapp.mountpath` regression for `app.use(subapp)`
-
-4.6.0 / 2014-07-11
-==================
-
-  * accept multiple callbacks to `app.use()`
-  * add explicit "Rosetta Flash JSONP abuse" protection
-    - previous versions are not vulnerable; this is just explicit protection
-  * catch errors in multiple `req.param(name, fn)` handlers
-  * deprecate `res.redirect(url, status)` -- use `res.redirect(status, url)` instead
-  * fix `res.send(status, num)` to send `num` as json (not error)
-  * remove unnecessary escaping when `res.jsonp` returns JSON response
-  * support non-string `path` in `app.use(path, fn)`
-    - supports array of paths
-    - supports `RegExp`
-  * router: fix optimization on router exit
-  * router: refactor location of `try` blocks
-  * router: speed up standard `app.use(fn)`
-  * deps: debug@1.0.3
-    - Add support for multiple wildcards in namespaces
-  * deps: finalhandler@0.0.3
-    - deps: debug@1.0.3
-  * deps: methods@1.1.0
-    - add `CONNECT`
-  * deps: parseurl@~1.1.3
-    - faster parsing of href-only URLs
-  * deps: path-to-regexp@0.1.3
-  * deps: send@0.6.0
-    - deps: debug@1.0.3
-  * deps: serve-static@~1.3.2
-    - deps: parseurl@~1.1.3
-    - deps: send@0.6.0
-  * perf: fix arguments reassign deopt in some `res` methods
-
-4.5.1 / 2014-07-06
-==================
-
- * fix routing regression when altering `req.method`
-
-4.5.0 / 2014-07-04
-==================
-
- * add deprecation message to non-plural `req.accepts*`
- * add deprecation message to `res.send(body, status)`
- * add deprecation message to `res.vary()`
- * add `headers` option to `res.sendfile`
-   - use to set headers on successful file transfer
- * add `mergeParams` option to `Router`
-   - merges `req.params` from parent routes
- * add `req.hostname` -- correct name for what `req.host` returns
- * deprecate things with `depd` module
- * deprecate `req.host` -- use `req.hostname` instead
- * fix behavior when handling request without routes
- * fix handling when `route.all` is only route
- * invoke `router.param()` only when route matches
- * restore `req.params` after invoking router
- * use `finalhandler` for final response handling
- * use `media-typer` to alter content-type charset
- * deps: accepts@~1.0.7
- * deps: send@0.5.0
-   - Accept string for `maxage` (converted by `ms`)
-   - Include link in default redirect response
- * deps: serve-static@~1.3.0
-   - Accept string for `maxAge` (converted by `ms`)
-   - Add `setHeaders` option
-   - Include HTML link in redirect response
-   - deps: send@0.5.0
- * deps: type-is@~1.3.2
-
-4.4.5 / 2014-06-26
-==================
-
- * deps: cookie-signature@1.0.4
-   - fix for timing attacks
-
-4.4.4 / 2014-06-20
-==================
-
- * fix `res.attachment` Unicode filenames in Safari
- * fix "trim prefix" debug message in `express:router`
- * deps: accepts@~1.0.5
- * deps: buffer-crc32@0.2.3
-
-4.4.3 / 2014-06-11
-==================
-
- * fix persistence of modified `req.params[name]` from `app.param()`
- * deps: accepts@1.0.3
-   - deps: negotiator@0.4.6
- * deps: debug@1.0.2
- * deps: send@0.4.3
-   - Do not throw uncatchable error on file open race condition
-   - Use `escape-html` for HTML escaping
-   - deps: debug@1.0.2
-   - deps: finished@1.2.2
-   - deps: fresh@0.2.2
- * deps: serve-static@1.2.3
-   - Do not throw uncatchable error on file open race condition
-   - deps: send@0.4.3
-
-4.4.2 / 2014-06-09
-==================
-
- * fix catching errors from top-level handlers
- * use `vary` module for `res.vary`
- * deps: debug@1.0.1
- * deps: proxy-addr@1.0.1
- * deps: send@0.4.2
-   - fix "event emitter leak" warnings
-   - deps: debug@1.0.1
-   - deps: finished@1.2.1
- * deps: serve-static@1.2.2
-   - fix "event emitter leak" warnings
-   - deps: send@0.4.2
- * deps: type-is@1.2.1
-
-4.4.1 / 2014-06-02
-==================
-
- * deps: methods@1.0.1
- * deps: send@0.4.1
-   - Send `max-age` in `Cache-Control` in correct format
- * deps: serve-static@1.2.1
-   - use `escape-html` for escaping
-   - deps: send@0.4.1
-
-4.4.0 / 2014-05-30
-==================
-
- * custom etag control with `app.set('etag', val)`
-   - `app.set('etag', function(body, encoding){ return '"etag"' })` custom etag generation
-   - `app.set('etag', 'weak')` weak tag
-   - `app.set('etag', 'strong')` strong etag
-   - `app.set('etag', false)` turn off
-   - `app.set('etag', true)` standard etag
- * mark `res.send` ETag as weak and reduce collisions
- * update accepts to 1.0.2
-   - Fix interpretation when header not in request
- * update send to 0.4.0
-   - Calculate ETag with md5 for reduced collisions
-   - Ignore stream errors after request ends
-   - deps: debug@0.8.1
- * update serve-static to 1.2.0
-   - Calculate ETag with md5 for reduced collisions
-   - Ignore stream errors after request ends
-   - deps: send@0.4.0
-
-4.3.2 / 2014-05-28
-==================
-
- * fix handling of errors from `router.param()` callbacks
-
-4.3.1 / 2014-05-23
-==================
-
- * revert "fix behavior of multiple `app.VERB` for the same path"
-   - this caused a regression in the order of route execution
-
-4.3.0 / 2014-05-21
-==================
-
- * add `req.baseUrl` to access the path stripped from `req.url` in routes
- * fix behavior of multiple `app.VERB` for the same path
- * fix issue routing requests among sub routers
- * invoke `router.param()` only when necessary instead of every match
- * proper proxy trust with `app.set('trust proxy', trust)`
-   - `app.set('trust proxy', 1)` trust first hop
-   - `app.set('trust proxy', 'loopback')` trust loopback addresses
-   - `app.set('trust proxy', '10.0.0.1')` trust single IP
-   - `app.set('trust proxy', '10.0.0.1/16')` trust subnet
-   - `app.set('trust proxy', '10.0.0.1, 10.0.0.2')` trust list
-   - `app.set('trust proxy', false)` turn off
-   - `app.set('trust proxy', true)` trust everything
- * set proper `charset` in `Content-Type` for `res.send`
- * update type-is to 1.2.0
-   - support suffix matching
-
-4.2.0 / 2014-05-11
-==================
-
- * deprecate `app.del()` -- use `app.delete()` instead
- * deprecate `res.json(obj, status)` -- use `res.json(status, obj)` instead
-   - the edge-case `res.json(status, num)` requires `res.status(status).json(num)`
- * deprecate `res.jsonp(obj, status)` -- use `res.jsonp(status, obj)` instead
-   - the edge-case `res.jsonp(status, num)` requires `res.status(status).jsonp(num)`
- * fix `req.next` when inside router instance
- * include `ETag` header in `HEAD` requests
- * keep previous `Content-Type` for `res.jsonp`
- * support PURGE method
-   - add `app.purge`
-   - add `router.purge`
-   - include PURGE in `app.all`
- * update debug to 0.8.0
-   - add `enable()` method
-   - change from stderr to stdout
- * update methods to 1.0.0
-   - add PURGE
-
-4.1.2 / 2014-05-08
-==================
-
- * fix `req.host` for IPv6 literals
- * fix `res.jsonp` error if callback param is object
-
-4.1.1 / 2014-04-27
-==================
-
- * fix package.json to reflect supported node version
-
-4.1.0 / 2014-04-24
-==================
-
- * pass options from `res.sendfile` to `send`
- * preserve casing of headers in `res.header` and `res.set`
- * support unicode file names in `res.attachment` and `res.download`
- * update accepts to 1.0.1
-   - deps: negotiator@0.4.0
- * update cookie to 0.1.2
-   - Fix for maxAge == 0
-   - made compat with expires field
- * update send to 0.3.0
-   - Accept API options in options object
-   - Coerce option types
-   - Control whether to generate etags
-   - Default directory access to 403 when index disabled
-   - Fix sending files with dots without root set
-   - Include file path in etag
-   - Make "Can't set headers after they are sent." catchable
-   - Send full entity-body for multi range requests
-   - Set etags to "weak"
-   - Support "If-Range" header
-   - Support multiple index paths
-   - deps: mime@1.2.11
- * update serve-static to 1.1.0
-   - Accept options directly to `send` module
-   - Resolve relative paths at middleware setup
-   - Use parseurl to parse the URL from request
-   - deps: send@0.3.0
- * update type-is to 1.1.0
-   - add non-array values support
-   - add `multipart` as a shorthand
-
-4.0.0 / 2014-04-09
-==================
-
- * remove:
-   - node 0.8 support
-   - connect and connect's patches except for charset handling
-   - express(1) - moved to [express-generator](https://github.com/expressjs/generator)
-   - `express.createServer()` - it has been deprecated for a long time. Use `express()`
-   - `app.configure` - use logic in your own app code
-   - `app.router` - is removed
-   - `req.auth` - use `basic-auth` instead
-   - `req.accepted*` - use `req.accepts*()` instead
-   - `res.location` - relative URL resolution is removed
-   - `res.charset` - include the charset in the content type when using `res.set()`
-   - all bundled middleware except `static`
- * change:
-   - `app.route` -> `app.mountpath` when mounting an express app in another express app
-   - `json spaces` no longer enabled by default in development
-   - `req.accepts*` -> `req.accepts*s` - i.e. `req.acceptsEncoding` -> `req.acceptsEncodings`
-   - `req.params` is now an object instead of an array
-   - `res.locals` is no longer a function. It is a plain js object. Treat it as such.
-   - `res.headerSent` -> `res.headersSent` to match node.js ServerResponse object
- * refactor:
-   - `req.accepts*` with [accepts](https://github.com/expressjs/accepts)
-   - `req.is` with [type-is](https://github.com/expressjs/type-is)
-   - [path-to-regexp](https://github.com/component/path-to-regexp)
- * add:
-   - `app.router()` - returns the app Router instance
-   - `app.route()` - Proxy to the app's `Router#route()` method to create a new route
-   - Router & Route - public API
-
-3.21.2 / 2015-07-31
-===================
-
-  * deps: connect@2.30.2
-    - deps: body-parser@~1.13.3
-    - deps: compression@~1.5.2
-    - deps: errorhandler@~1.4.2
-    - deps: method-override@~2.3.5
-    - deps: serve-index@~1.7.2
-    - deps: type-is@~1.6.6
-    - deps: vhost@~3.0.1
-  * deps: vary@~1.0.1
-    - Fix setting empty header from empty `field`
-    - perf: enable strict mode
-    - perf: remove argument reassignments
-
-3.21.1 / 2015-07-05
-===================
-
-  * deps: basic-auth@~1.0.3
-  * deps: connect@2.30.1
-    - deps: body-parser@~1.13.2
-    - deps: compression@~1.5.1
-    - deps: errorhandler@~1.4.1
-    - deps: morgan@~1.6.1
-    - deps: pause@0.1.0
-    - deps: qs@4.0.0
-    - deps: serve-index@~1.7.1
-    - deps: type-is@~1.6.4
-
-3.21.0 / 2015-06-18
-===================
-
-  * deps: basic-auth@1.0.2
-    - perf: enable strict mode
-    - perf: hoist regular expression
-    - perf: parse with regular expressions
-    - perf: remove argument reassignment
-  * deps: connect@2.30.0
-    - deps: body-parser@~1.13.1
-    - deps: bytes@2.1.0
-    - deps: compression@~1.5.0
-    - deps: cookie@0.1.3
-    - deps: cookie-parser@~1.3.5
-    - deps: csurf@~1.8.3
-    - deps: errorhandler@~1.4.0
-    - deps: express-session@~1.11.3
-    - deps: finalhandler@0.4.0
-    - deps: fresh@0.3.0
-    - deps: morgan@~1.6.0
-    - deps: serve-favicon@~2.3.0
-    - deps: serve-index@~1.7.0
-    - deps: serve-static@~1.10.0
-    - deps: type-is@~1.6.3
-  * deps: cookie@0.1.3
-    - perf: deduce the scope of try-catch deopt
-    - perf: remove argument reassignments
-  * deps: escape-html@1.0.2
-  * deps: etag@~1.7.0
-    - Always include entity length in ETags for hash length extensions
-    - Generate non-Stats ETags using MD5 only (no longer CRC32)
-    - Improve stat performance by removing hashing
-    - Improve support for JXcore
-    - Remove base64 padding in ETags to shorten
-    - Support "fake" stats objects in environments without fs
-    - Use MD5 instead of MD4 in weak ETags over 1KB
-  * deps: fresh@0.3.0
-    - Add weak `ETag` matching support
-  * deps: mkdirp@0.5.1
-    - Work in global strict mode
-  * deps: send@0.13.0
-    - Allow Node.js HTTP server to set `Date` response header
-    - Fix incorrectly removing `Content-Location` on 304 response
-    - Improve the default redirect response headers
-    - Send appropriate headers on default error response
-    - Use `http-errors` for standard emitted errors
-    - Use `statuses` instead of `http` module for status messages
-    - deps: escape-html@1.0.2
-    - deps: etag@~1.7.0
-    - deps: fresh@0.3.0
-    - deps: on-finished@~2.3.0
-    - perf: enable strict mode
-    - perf: remove unnecessary array allocations
-
-3.20.3 / 2015-05-17
-===================
-
-  * deps: connect@2.29.2
-    - deps: body-parser@~1.12.4
-    - deps: compression@~1.4.4
-    - deps: connect-timeout@~1.6.2
-    - deps: debug@~2.2.0
-    - deps: depd@~1.0.1
-    - deps: errorhandler@~1.3.6
-    - deps: finalhandler@0.3.6
-    - deps: method-override@~2.3.3
-    - deps: morgan@~1.5.3
-    - deps: qs@2.4.2
-    - deps: response-time@~2.3.1
-    - deps: serve-favicon@~2.2.1
-    - deps: serve-index@~1.6.4
-    - deps: serve-static@~1.9.3
-    - deps: type-is@~1.6.2
-  * deps: debug@~2.2.0
-    - deps: ms@0.7.1
-  * deps: depd@~1.0.1
-  * deps: proxy-addr@~1.0.8
-    - deps: ipaddr.js@1.0.1
-  * deps: send@0.12.3
-    - deps: debug@~2.2.0
-    - deps: depd@~1.0.1
-    - deps: etag@~1.6.0
-    - deps: ms@0.7.1
-    - deps: on-finished@~2.2.1
-
-3.20.2 / 2015-03-16
-===================
-
-  * deps: connect@2.29.1
-    - deps: body-parser@~1.12.2
-    - deps: compression@~1.4.3
-    - deps: connect-timeout@~1.6.1
-    - deps: debug@~2.1.3
-    - deps: errorhandler@~1.3.5
-    - deps: express-session@~1.10.4
-    - deps: finalhandler@0.3.4
-    - deps: method-override@~2.3.2
-    - deps: morgan@~1.5.2
-    - deps: qs@2.4.1
-    - deps: serve-index@~1.6.3
-    - deps: serve-static@~1.9.2
-    - deps: type-is@~1.6.1
-  * deps: debug@~2.1.3
-    - Fix high intensity foreground color for bold
-    - deps: ms@0.7.0
-  * deps: merge-descriptors@1.0.0
-  * deps: proxy-addr@~1.0.7
-    - deps: ipaddr.js@0.1.9
-  * deps: send@0.12.2
-    - Throw errors early for invalid `extensions` or `index` options
-    - deps: debug@~2.1.3
-
-3.20.1 / 2015-02-28
-===================
-
-  * Fix `req.host` when using "trust proxy" hops count
-  * Fix `req.protocol`/`req.secure` when using "trust proxy" hops count
-
-3.20.0 / 2015-02-18
-===================
-
-  * Fix `"trust proxy"` setting to inherit when app is mounted
-  * Generate `ETag`s for all request responses
-    - No longer restricted to only responses for `GET` and `HEAD` requests
-  * Use `content-type` to parse `Content-Type` headers
-  * deps: connect@2.29.0
-    - Use `content-type` to parse `Content-Type` headers
-    - deps: body-parser@~1.12.0
-    - deps: compression@~1.4.1
-    - deps: connect-timeout@~1.6.0
-    - deps: cookie-parser@~1.3.4
-    - deps: cookie-signature@1.0.6
-    - deps: csurf@~1.7.0
-    - deps: errorhandler@~1.3.4
-    - deps: express-session@~1.10.3
-    - deps: http-errors@~1.3.1
-    - deps: response-time@~2.3.0
-    - deps: serve-index@~1.6.2
-    - deps: serve-static@~1.9.1
-    - deps: type-is@~1.6.0
-  * deps: cookie-signature@1.0.6
-  * deps: send@0.12.1
-    - Always read the stat size from the file
-    - Fix mutating passed-in `options`
-    - deps: mime@1.3.4
-
-3.19.2 / 2015-02-01
-===================
-
-  * deps: connect@2.28.3
-    - deps: compression@~1.3.1
-    - deps: csurf@~1.6.6
-    - deps: errorhandler@~1.3.3
-    - deps: express-session@~1.10.2
-    - deps: serve-index@~1.6.1
-    - deps: type-is@~1.5.6
-  * deps: proxy-addr@~1.0.6
-    - deps: ipaddr.js@0.1.8
-
-3.19.1 / 2015-01-20
-===================
-
-  * deps: connect@2.28.2
-    - deps: body-parser@~1.10.2
-    - deps: serve-static@~1.8.1
-  * deps: send@0.11.1
-    - Fix root path disclosure
-
-3.19.0 / 2015-01-09
-===================
-
-  * Fix `OPTIONS` responses to include the `HEAD` method property
-  * Use `readline` for prompt in `express(1)`
-  * deps: commander@2.6.0
-  * deps: connect@2.28.1
-    - deps: body-parser@~1.10.1
-    - deps: compression@~1.3.0
-    - deps: connect-timeout@~1.5.0
-    - deps: csurf@~1.6.4
-    - deps: debug@~2.1.1
-    - deps: errorhandler@~1.3.2
-    - deps: express-session@~1.10.1
-    - deps: finalhandler@0.3.3
-    - deps: method-override@~2.3.1
-    - deps: morgan@~1.5.1
-    - deps: serve-favicon@~2.2.0
-    - deps: serve-index@~1.6.0
-    - deps: serve-static@~1.8.0
-    - deps: type-is@~1.5.5
-  * deps: debug@~2.1.1
-  * deps: methods@~1.1.1
-  * deps: proxy-addr@~1.0.5
-    - deps: ipaddr.js@0.1.6
-  * deps: send@0.11.0
-    - deps: debug@~2.1.1
-    - deps: etag@~1.5.1
-    - deps: ms@0.7.0
-    - deps: on-finished@~2.2.0
-
-3.18.6 / 2014-12-12
-===================
-
-  * Fix exception in `req.fresh`/`req.stale` without response headers
-
-3.18.5 / 2014-12-11
-===================
-
-  * deps: connect@2.27.6
-    - deps: compression@~1.2.2
-    - deps: express-session@~1.9.3
-    - deps: http-errors@~1.2.8
-    - deps: serve-index@~1.5.3
-    - deps: type-is@~1.5.4
-
-3.18.4 / 2014-11-23
-===================
-
-  * deps: connect@2.27.4
-    - deps: body-parser@~1.9.3
-    - deps: compression@~1.2.1
-    - deps: errorhandler@~1.2.3
-    - deps: express-session@~1.9.2
-    - deps: qs@2.3.3
-    - deps: serve-favicon@~2.1.7
-    - deps: serve-static@~1.5.1
-    - deps: type-is@~1.5.3
-  * deps: etag@~1.5.1
-  * deps: proxy-addr@~1.0.4
-    - deps: ipaddr.js@0.1.5
-
-3.18.3 / 2014-11-09
-===================
-
-  * deps: connect@2.27.3
-    - Correctly invoke async callback asynchronously
-    - deps: csurf@~1.6.3
-
-3.18.2 / 2014-10-28
-===================
-
-  * deps: connect@2.27.2
-    - Fix handling of URLs containing `://` in the path
-    - deps: body-parser@~1.9.2
-    - deps: qs@2.3.2
-
-3.18.1 / 2014-10-22
-===================
-
-  * Fix internal `utils.merge` deprecation warnings
-  * deps: connect@2.27.1
-    - deps: body-parser@~1.9.1
-    - deps: express-session@~1.9.1
-    - deps: finalhandler@0.3.2
-    - deps: morgan@~1.4.1
-    - deps: qs@2.3.0
-    - deps: serve-static@~1.7.1
-  * deps: send@0.10.1
-    - deps: on-finished@~2.1.1
-
-3.18.0 / 2014-10-17
-===================
-
-  * Use `content-disposition` module for `res.attachment`/`res.download`
-    - Sends standards-compliant `Content-Disposition` header
-    - Full Unicode support
-  * Use `etag` module to generate `ETag` headers
-  * deps: connect@2.27.0
-    - Use `http-errors` module for creating errors
-    - Use `utils-merge` module for merging objects
-    - deps: body-parser@~1.9.0
-    - deps: compression@~1.2.0
-    - deps: connect-timeout@~1.4.0
-    - deps: debug@~2.1.0
-    - deps: depd@~1.0.0
-    - deps: express-session@~1.9.0
-    - deps: finalhandler@0.3.1
-    - deps: method-override@~2.3.0
-    - deps: morgan@~1.4.0
-    - deps: response-time@~2.2.0
-    - deps: serve-favicon@~2.1.6
-    - deps: serve-index@~1.5.0
-    - deps: serve-static@~1.7.0
-  * deps: debug@~2.1.0
-    - Implement `DEBUG_FD` env variable support
-  * deps: depd@~1.0.0
-  * deps: send@0.10.0
-    - deps: debug@~2.1.0
-    - deps: depd@~1.0.0
-    - deps: etag@~1.5.0
-
-3.17.8 / 2014-10-15
-===================
-
-  * deps: connect@2.26.6
-    - deps: compression@~1.1.2
-    - deps: csurf@~1.6.2
-    - deps: errorhandler@~1.2.2
-
-3.17.7 / 2014-10-08
-===================
-
-  * deps: connect@2.26.5
-    - Fix accepting non-object arguments to `logger`
-    - deps: serve-static@~1.6.4
-
-3.17.6 / 2014-10-02
-===================
-
-  * deps: connect@2.26.4
-    - deps: morgan@~1.3.2
-    - deps: type-is@~1.5.2
-
-3.17.5 / 2014-09-24
-===================
-
-  * deps: connect@2.26.3
-    - deps: body-parser@~1.8.4
-    - deps: serve-favicon@~2.1.5
-    - deps: serve-static@~1.6.3
-  * deps: proxy-addr@~1.0.3
-    - Use `forwarded` npm module
-  * deps: send@0.9.3
-    - deps: etag@~1.4.0
-
-3.17.4 / 2014-09-19
-===================
-
-  * deps: connect@2.26.2
-    - deps: body-parser@~1.8.3
-    - deps: qs@2.2.4
-
-3.17.3 / 2014-09-18
-===================
-
-  * deps: proxy-addr@~1.0.2
-    - Fix a global leak when multiple subnets are trusted
-    - deps: ipaddr.js@0.1.3
-
-3.17.2 / 2014-09-15
-===================
-
-  * Use `crc` instead of `buffer-crc32` for speed
-  * deps: connect@2.26.1
-    - deps: body-parser@~1.8.2
-    - deps: depd@0.4.5
-    - deps: express-session@~1.8.2
-    - deps: morgan@~1.3.1
-    - deps: serve-favicon@~2.1.3
-    - deps: serve-static@~1.6.2
-  * deps: depd@0.4.5
-  * deps: send@0.9.2
-    - deps: depd@0.4.5
-    - deps: etag@~1.3.1
-    - deps: range-parser@~1.0.2
-
-3.17.1 / 2014-09-08
-===================
-
-  * Fix error in `req.subdomains` on empty host
-
-3.17.0 / 2014-09-08
-===================
-
-  * Support `X-Forwarded-Host` in `req.subdomains`
-  * Support IP address host in `req.subdomains`
-  * deps: connect@2.26.0
-    - deps: body-parser@~1.8.1
-    - deps: compression@~1.1.0
-    - deps: connect-timeout@~1.3.0
-    - deps: cookie-parser@~1.3.3
-    - deps: cookie-signature@1.0.5
-    - deps: csurf@~1.6.1
-    - deps: debug@~2.0.0
-    - deps: errorhandler@~1.2.0
-    - deps: express-session@~1.8.1
-    - deps: finalhandler@0.2.0
-    - deps: fresh@0.2.4
-    - deps: media-typer@0.3.0
-    - deps: method-override@~2.2.0
-    - deps: morgan@~1.3.0
-    - deps: qs@2.2.3
-    - deps: serve-favicon@~2.1.3
-    - deps: serve-index@~1.2.1
-    - deps: serve-static@~1.6.1
-    - deps: type-is@~1.5.1
-    - deps: vhost@~3.0.0
-  * deps: cookie-signature@1.0.5
-  * deps: debug@~2.0.0
-  * deps: fresh@0.2.4
-  * deps: media-typer@0.3.0
-    - Throw error when parameter format invalid on parse
-  * deps: range-parser@~1.0.2
-  * deps: send@0.9.1
-    - Add `lastModified` option
-    - Use `etag` to generate `ETag` header
-    - deps: debug@~2.0.0
-    - deps: fresh@0.2.4
-  * deps: vary@~1.0.0
-    - Accept valid `Vary` header string as `field`
-
-3.16.10 / 2014-09-04
-====================
-
-  * deps: connect@2.25.10
-    - deps: serve-static@~1.5.4
-  * deps: send@0.8.5
-    - Fix a path traversal issue when using `root`
-    - Fix malicious path detection for empty string path
-
-3.16.9 / 2014-08-29
-===================
-
-  * deps: connect@2.25.9
-    - deps: body-parser@~1.6.7
-    - deps: qs@2.2.2
-
-3.16.8 / 2014-08-27
-===================
-
-  * deps: connect@2.25.8
-    - deps: body-parser@~1.6.6
-    - deps: csurf@~1.4.1
-    - deps: qs@2.2.0
-
-3.16.7 / 2014-08-18
-===================
-
-  * deps: connect@2.25.7
-    - deps: body-parser@~1.6.5
-    - deps: express-session@~1.7.6
-    - deps: morgan@~1.2.3
-    - deps: serve-static@~1.5.3
-  * deps: send@0.8.3
-    - deps: destroy@1.0.3
-    - deps: on-finished@2.1.0
-
-3.16.6 / 2014-08-14
-===================
-
-  * deps: connect@2.25.6
-    - deps: body-parser@~1.6.4
-    - deps: qs@1.2.2
-    - deps: serve-static@~1.5.2
-  * deps: send@0.8.2
-    - Work around `fd` leak in Node.js 0.10 for `fs.ReadStream`
-
-3.16.5 / 2014-08-11
-===================
-
-  * deps: connect@2.25.5
-    - Fix backwards compatibility in `logger`
-
-3.16.4 / 2014-08-10
-===================
-
-  * Fix original URL parsing in `res.location`
-  * deps: connect@2.25.4
-    - Fix `query` middleware breaking with argument
-    - deps: body-parser@~1.6.3
-    - deps: compression@~1.0.11
-    - deps: connect-timeout@~1.2.2
-    - deps: express-session@~1.7.5
-    - deps: method-override@~2.1.3
-    - deps: on-headers@~1.0.0
-    - deps: parseurl@~1.3.0
-    - deps: qs@1.2.1
-    - deps: response-time@~2.0.1
-    - deps: serve-index@~1.1.6
-    - deps: serve-static@~1.5.1
-  * deps: parseurl@~1.3.0
-
-3.16.3 / 2014-08-07
-===================
-
-  * deps: connect@2.25.3
-    - deps: multiparty@3.3.2
-
-3.16.2 / 2014-08-07
-===================
-
-  * deps: connect@2.25.2
-    - deps: body-parser@~1.6.2
-    - deps: qs@1.2.0
-
-3.16.1 / 2014-08-06
-===================
-
-  * deps: connect@2.25.1
-    - deps: body-parser@~1.6.1
-    - deps: qs@1.1.0
-
-3.16.0 / 2014-08-05
-===================
-
-  * deps: connect@2.25.0
-    - deps: body-parser@~1.6.0
-    - deps: compression@~1.0.10
-    - deps: csurf@~1.4.0
-    - deps: express-session@~1.7.4
-    - deps: qs@1.0.2
-    - deps: serve-static@~1.5.0
-  * deps: send@0.8.1
-    - Add `extensions` option
-
-3.15.3 / 2014-08-04
-===================
-
-  * fix `res.sendfile` regression for serving directory index files
-  * deps: connect@2.24.3
-    - deps: serve-index@~1.1.5
-    - deps: serve-static@~1.4.4
-  * deps: send@0.7.4
-    - Fix incorrect 403 on Windows and Node.js 0.11
-    - Fix serving index files without root dir
-
-3.15.2 / 2014-07-27
-===================
-
-  * deps: connect@2.24.2
-    - deps: body-parser@~1.5.2
-    - deps: depd@0.4.4
-    - deps: express-session@~1.7.2
-    - deps: morgan@~1.2.2
-    - deps: serve-static@~1.4.2
-  * deps: depd@0.4.4
-    - Work-around v8 generating empty stack traces
-  * deps: send@0.7.2
-    - deps: depd@0.4.4
-
-3.15.1 / 2014-07-26
-===================
-
-  * deps: connect@2.24.1
-    - deps: body-parser@~1.5.1
-    - deps: depd@0.4.3
-    - deps: express-session@~1.7.1
-    - deps: morgan@~1.2.1
-    - deps: serve-index@~1.1.4
-    - deps: serve-static@~1.4.1
-  * deps: depd@0.4.3
-    - Fix exception when global `Error.stackTraceLimit` is too low
-  * deps: send@0.7.1
-    - deps: depd@0.4.3
-
-3.15.0 / 2014-07-22
-===================
-
-  * Fix `req.protocol` for proxy-direct connections
-  * Pass options from `res.sendfile` to `send`
-  * deps: connect@2.24.0
-    - deps: body-parser@~1.5.0
-    - deps: compression@~1.0.9
-    - deps: connect-timeout@~1.2.1
-    - deps: debug@1.0.4
-    - deps: depd@0.4.2
-    - deps: express-session@~1.7.0
-    - deps: finalhandler@0.1.0
-    - deps: method-override@~2.1.2
-    - deps: morgan@~1.2.0
-    - deps: multiparty@3.3.1
-    - deps: parseurl@~1.2.0
-    - deps: serve-static@~1.4.0
-  * deps: debug@1.0.4
-  * deps: depd@0.4.2
-    - Add `TRACE_DEPRECATION` environment variable
-    - Remove non-standard grey color from color output
-    - Support `--no-deprecation` argument
-    - Support `--trace-deprecation` argument
-  * deps: parseurl@~1.2.0
-    - Cache URLs based on original value
-    - Remove no-longer-needed URL mis-parse work-around
-    - Simplify the "fast-path" `RegExp`
-  * deps: send@0.7.0
-    - Add `dotfiles` option
-    - Cap `maxAge` value to 1 year
-    - deps: debug@1.0.4
-    - deps: depd@0.4.2
-
-3.14.0 / 2014-07-11
-===================
-
- * add explicit "Rosetta Flash JSONP abuse" protection
-   - previous versions are not vulnerable; this is just explicit protection
- * deprecate `res.redirect(url, status)` -- use `res.redirect(status, url)` instead
- * fix `res.send(status, num)` to send `num` as json (not error)
- * remove unnecessary escaping when `res.jsonp` returns JSON response
- * deps: basic-auth@1.0.0
-   - support empty password
-   - support empty username
- * deps: connect@2.23.0
-   - deps: debug@1.0.3
-   - deps: express-session@~1.6.4
-   - deps: method-override@~2.1.0
-   - deps: parseurl@~1.1.3
-   - deps: serve-static@~1.3.1
-  * deps: debug@1.0.3
-    - Add support for multiple wildcards in namespaces
-  * deps: methods@1.1.0
-    - add `CONNECT`
-  * deps: parseurl@~1.1.3
-    - faster parsing of href-only URLs
-
-3.13.0 / 2014-07-03
-===================
-
- * add deprecation message to `app.configure`
- * add deprecation message to `req.auth`
- * use `basic-auth` to parse `Authorization` header
- * deps: connect@2.22.0
-   - deps: csurf@~1.3.0
-   - deps: express-session@~1.6.1
-   - deps: multiparty@3.3.0
-   - deps: serve-static@~1.3.0
- * deps: send@0.5.0
-   - Accept string for `maxage` (converted by `ms`)
-   - Include link in default redirect response
-
-3.12.1 / 2014-06-26
-===================
-
- * deps: connect@2.21.1
-   - deps: cookie-parser@1.3.2
-   - deps: cookie-signature@1.0.4
-   - deps: express-session@~1.5.2
-   - deps: type-is@~1.3.2
- * deps: cookie-signature@1.0.4
-   - fix for timing attacks
-
-3.12.0 / 2014-06-21
-===================
-
- * use `media-typer` to alter content-type charset
- * deps: connect@2.21.0
-   - deprecate `connect(middleware)` -- use `app.use(middleware)` instead
-   - deprecate `connect.createServer()` -- use `connect()` instead
-   - fix `res.setHeader()` patch to work with with get -> append -> set pattern
-   - deps: compression@~1.0.8
-   - deps: errorhandler@~1.1.1
-   - deps: express-session@~1.5.0
-   - deps: serve-index@~1.1.3
-
-3.11.0 / 2014-06-19
-===================
-
- * deprecate things with `depd` module
- * deps: buffer-crc32@0.2.3
- * deps: connect@2.20.2
-   - deprecate `verify` option to `json` -- use `body-parser` npm module instead
-   - deprecate `verify` option to `urlencoded` -- use `body-parser` npm module instead
-   - deprecate things with `depd` module
-   - use `finalhandler` for final response handling
-   - use `media-typer` to parse `content-type` for charset
-   - deps: body-parser@1.4.3
-   - deps: connect-timeout@1.1.1
-   - deps: cookie-parser@1.3.1
-   - deps: csurf@1.2.2
-   - deps: errorhandler@1.1.0
-   - deps: express-session@1.4.0
-   - deps: multiparty@3.2.9
-   - deps: serve-index@1.1.2
-   - deps: type-is@1.3.1
-   - deps: vhost@2.0.0
-
-3.10.5 / 2014-06-11
-===================
-
- * deps: connect@2.19.6
-   - deps: body-parser@1.3.1
-   - deps: compression@1.0.7
-   - deps: debug@1.0.2
-   - deps: serve-index@1.1.1
-   - deps: serve-static@1.2.3
- * deps: debug@1.0.2
- * deps: send@0.4.3
-   - Do not throw uncatchable error on file open race condition
-   - Use `escape-html` for HTML escaping
-   - deps: debug@1.0.2
-   - deps: finished@1.2.2
-   - deps: fresh@0.2.2
-
-3.10.4 / 2014-06-09
-===================
-
- * deps: connect@2.19.5
-   - fix "event emitter leak" warnings
-   - deps: csurf@1.2.1
-   - deps: debug@1.0.1
-   - deps: serve-static@1.2.2
-   - deps: type-is@1.2.1
- * deps: debug@1.0.1
- * deps: send@0.4.2
-   - fix "event emitter leak" warnings
-   - deps: finished@1.2.1
-   - deps: debug@1.0.1
-
-3.10.3 / 2014-06-05
-===================
-
- * use `vary` module for `res.vary`
- * deps: connect@2.19.4
-   - deps: errorhandler@1.0.2
-   - deps: method-override@2.0.2
-   - deps: serve-favicon@2.0.1
- * deps: debug@1.0.0
-
-3.10.2 / 2014-06-03
-===================
-
- * deps: connect@2.19.3
-   - deps: compression@1.0.6
-
-3.10.1 / 2014-06-03
-===================
-
- * deps: connect@2.19.2
-   - deps: compression@1.0.4
- * deps: proxy-addr@1.0.1
-
-3.10.0 / 2014-06-02
-===================
-
- * deps: connect@2.19.1
-   - deprecate `methodOverride()` -- use `method-override` npm module instead
-   - deps: body-parser@1.3.0
-   - deps: method-override@2.0.1
-   - deps: multiparty@3.2.8
-   - deps: response-time@2.0.0
-   - deps: serve-static@1.2.1
- * deps: methods@1.0.1
- * deps: send@0.4.1
-   - Send `max-age` in `Cache-Control` in correct format
-
-3.9.0 / 2014-05-30
-==================
-
- * custom etag control with `app.set('etag', val)`
-   - `app.set('etag', function(body, encoding){ return '"etag"' })` custom etag generation
-   - `app.set('etag', 'weak')` weak tag
-   - `app.set('etag', 'strong')` strong etag
-   - `app.set('etag', false)` turn off
-   - `app.set('etag', true)` standard etag
- * Include ETag in HEAD requests
- * mark `res.send` ETag as weak and reduce collisions
- * update connect to 2.18.0
-   - deps: compression@1.0.3
-   - deps: serve-index@1.1.0
-   - deps: serve-static@1.2.0
- * update send to 0.4.0
-   - Calculate ETag with md5 for reduced collisions
-   - Ignore stream errors after request ends
-   - deps: debug@0.8.1
-
-3.8.1 / 2014-05-27
-==================
-
- * update connect to 2.17.3
-   - deps: body-parser@1.2.2
-   - deps: express-session@1.2.1
-   - deps: method-override@1.0.2
-
-3.8.0 / 2014-05-21
-==================
-
- * keep previous `Content-Type` for `res.jsonp`
- * set proper `charset` in `Content-Type` for `res.send`
- * update connect to 2.17.1
-   - fix `res.charset` appending charset when `content-type` has one
-   - deps: express-session@1.2.0
-   - deps: morgan@1.1.1
-   - deps: serve-index@1.0.3
-
-3.7.0 / 2014-05-18
-==================
-
- * proper proxy trust with `app.set('trust proxy', trust)`
-   - `app.set('trust proxy', 1)` trust first hop
-   - `app.set('trust proxy', 'loopback')` trust loopback addresses
-   - `app.set('trust proxy', '10.0.0.1')` trust single IP
-   - `app.set('trust proxy', '10.0.0.1/16')` trust subnet
-   - `app.set('trust proxy', '10.0.0.1, 10.0.0.2')` trust list
-   - `app.set('trust proxy', false)` turn off
-   - `app.set('trust proxy', true)` trust everything
- * update connect to 2.16.2
-   - deprecate `res.headerSent` -- use `res.headersSent`
-   - deprecate `res.on("header")` -- use on-headers module instead
-   - fix edge-case in `res.appendHeader` that would append in wrong order
-   - json: use body-parser
-   - urlencoded: use body-parser
-   - dep: bytes@1.0.0
-   - dep: cookie-parser@1.1.0
-   - dep: csurf@1.2.0
-   - dep: express-session@1.1.0
-   - dep: method-override@1.0.1
-
-3.6.0 / 2014-05-09
-==================
-
- * deprecate `app.del()` -- use `app.delete()` instead
- * deprecate `res.json(obj, status)` -- use `res.json(status, obj)` instead
-   - the edge-case `res.json(status, num)` requires `res.status(status).json(num)`
- * deprecate `res.jsonp(obj, status)` -- use `res.jsonp(status, obj)` instead
-   - the edge-case `res.jsonp(status, num)` requires `res.status(status).jsonp(num)`
- * support PURGE method
-   - add `app.purge`
-   - add `router.purge`
-   - include PURGE in `app.all`
- * update connect to 2.15.0
-   * Add `res.appendHeader`
-   * Call error stack even when response has been sent
-   * Patch `res.headerSent` to return Boolean
-   * Patch `res.headersSent` for node.js 0.8
-   * Prevent default 404 handler after response sent
-   * dep: compression@1.0.2
-   * dep: connect-timeout@1.1.0
-   * dep: debug@^0.8.0
-   * dep: errorhandler@1.0.1
-   * dep: express-session@1.0.4
-   * dep: morgan@1.0.1
-   * dep: serve-favicon@2.0.0
-   * dep: serve-index@1.0.2
- * update debug to 0.8.0
-   * add `enable()` method
-   * change from stderr to stdout
- * update methods to 1.0.0
-   - add PURGE
- * update mkdirp to 0.5.0
-
-3.5.3 / 2014-05-08
-==================
-
- * fix `req.host` for IPv6 literals
- * fix `res.jsonp` error if callback param is object
-
-3.5.2 / 2014-04-24
-==================
-
- * update connect to 2.14.5
- * update cookie to 0.1.2
- * update mkdirp to 0.4.0
- * update send to 0.3.0
-
-3.5.1 / 2014-03-25
-==================
-
- * pin less-middleware in generated app
-
-3.5.0 / 2014-03-06
-==================
-
- * bump deps
-
-3.4.8 / 2014-01-13
-==================
-
- * prevent incorrect automatic OPTIONS responses #1868 @dpatti
- * update binary and examples for jade 1.0 #1876 @yossi, #1877 @reqshark, #1892 @matheusazzi
- * throw 400 in case of malformed paths @rlidwka
-
-3.4.7 / 2013-12-10
-==================
-
- * update connect
-
-3.4.6 / 2013-12-01
-==================
-
- * update connect (raw-body)
-
-3.4.5 / 2013-11-27
-==================
-
- * update connect
- * res.location: remove leading ./ #1802 @kapouer
- * res.redirect: fix `res.redirect('toString') #1829 @michaelficarra
- * res.send: always send ETag when content-length > 0
- * router: add Router.all() method
-
-3.4.4 / 2013-10-29
-==================
-
- * update connect
- * update supertest
- * update methods
- * express(1): replace bodyParser() with urlencoded() and json() #1795 @chirag04
-
-3.4.3 / 2013-10-23
-==================
-
- * update connect
-
-3.4.2 / 2013-10-18
-==================
-
- * update connect
- * downgrade commander
-
-3.4.1 / 2013-10-15
-==================
-
- * update connect
- * update commander
- * jsonp: check if callback is a function
- * router: wrap encodeURIComponent in a try/catch #1735 (@lxe)
- * res.format: now includes charset @1747 (@sorribas)
- * res.links: allow multiple calls @1746 (@sorribas)
-
-3.4.0 / 2013-09-07
-==================
-
- * add res.vary(). Closes #1682
- * update connect
-
-3.3.8 / 2013-09-02
-==================
-
- * update connect
-
-3.3.7 / 2013-08-28
-==================
-
- * update connect
-
-3.3.6 / 2013-08-27
-==================
-
- * Revert "remove charset from json responses. Closes #1631" (causes issues in some clients)
- * add: req.accepts take an argument list
-
-3.3.4 / 2013-07-08
-==================
-
- * update send and connect
-
-3.3.3 / 2013-07-04
-==================
-
- * update connect
-
-3.3.2 / 2013-07-03
-==================
-
- * update connect
- * update send
- * remove .version export
-
-3.3.1 / 2013-06-27
-==================
-
- * update connect
-
-3.3.0 / 2013-06-26
-==================
-
- * update connect
- * add support for multiple X-Forwarded-Proto values. Closes #1646
- * change: remove charset from json responses. Closes #1631
- * change: return actual booleans from req.accept* functions
- * fix jsonp callback array throw
-
-3.2.6 / 2013-06-02
-==================
-
- * update connect
-
-3.2.5 / 2013-05-21
-==================
-
- * update connect
- * update node-cookie
- * add: throw a meaningful error when there is no default engine
- * change generation of ETags with res.send() to GET requests only. Closes #1619
-
-3.2.4 / 2013-05-09
-==================
-
-  * fix `req.subdomains` when no Host is present
-  * fix `req.host` when no Host is present, return undefined
-
-3.2.3 / 2013-05-07
-==================
-
-  * update connect / qs
-
-3.2.2 / 2013-05-03
-==================
-
-  * update qs
-
-3.2.1 / 2013-04-29
-==================
-
-  * add app.VERB() paths array deprecation warning
-  * update connect
-  * update qs and remove all ~ semver crap
-  * fix: accept number as value of Signed Cookie
-
-3.2.0 / 2013-04-15
-==================
-
-  * add "view" constructor setting to override view behaviour
-  * add req.acceptsEncoding(name)
-  * add req.acceptedEncodings
-  * revert cookie signature change causing session race conditions
-  * fix sorting of Accept values of the same quality
-
-3.1.2 / 2013-04-12
-==================
-
-  * add support for custom Accept parameters
-  * update cookie-signature
-
-3.1.1 / 2013-04-01
-==================
-
-  * add X-Forwarded-Host support to `req.host`
-  * fix relative redirects
-  * update mkdirp
-  * update buffer-crc32
-  * remove legacy app.configure() method from app template.
-
-3.1.0 / 2013-01-25
-==================
-
-  * add support for leading "." in "view engine" setting
-  * add array support to `res.set()`
-  * add node 0.8.x to travis.yml
-  * add "subdomain offset" setting for tweaking `req.subdomains`
-  * add `res.location(url)` implementing `res.redirect()`-like setting of Location
-  * use app.get() for x-powered-by setting for inheritance
-  * fix colons in passwords for `req.auth`
-
-3.0.6 / 2013-01-04
-==================
-
-  * add http verb methods to Router
-  * update connect
-  * fix mangling of the `res.cookie()` options object
-  * fix jsonp whitespace escape. Closes #1132
-
-3.0.5 / 2012-12-19
-==================
-
-  * add throwing when a non-function is passed to a route
-  * fix: explicitly remove Transfer-Encoding header from 204 and 304 responses
-  * revert "add 'etag' option"
-
-3.0.4 / 2012-12-05
-==================
-
-  * add 'etag' option to disable `res.send()` Etags
-  * add escaping of urls in text/plain in `res.redirect()`
-    for old browsers interpreting as html
-  * change crc32 module for a more liberal license
-  * update connect
-
-3.0.3 / 2012-11-13
-==================
-
-  * update connect
-  * update cookie module
-  * fix cookie max-age
-
-3.0.2 / 2012-11-08
-==================
-
-  * add OPTIONS to cors example. Closes #1398
-  * fix route chaining regression. Closes #1397
-
-3.0.1 / 2012-11-01
-==================
-
-  * update connect
-
-3.0.0 / 2012-10-23
-==================
-
-  * add `make clean`
-  * add "Basic" check to req.auth
-  * add `req.auth` test coverage
-  * add cb && cb(payload) to `res.jsonp()`. Closes #1374
-  * add backwards compat for `res.redirect()` status. Closes #1336
-  * add support for `res.json()` to retain previously defined Content-Types. Closes #1349
-  * update connect
-  * change `res.redirect()` to utilize a pathname-relative Location again. Closes #1382
-  * remove non-primitive string support for `res.send()`
-  * fix view-locals example. Closes #1370
-  * fix route-separation example
-
-3.0.0rc5 / 2012-09-18
-==================
-
-  * update connect
-  * add redis search example
-  * add static-files example
-  * add "x-powered-by" setting (`app.disable('x-powered-by')`)
-  * add "application/octet-stream" redirect Accept test case. Closes #1317
-
-3.0.0rc4 / 2012-08-30
-==================
-
-  * add `res.jsonp()`. Closes #1307
-  * add "verbose errors" option to error-pages example
-  * add another route example to express(1) so people are not so confused
-  * add redis online user activity tracking example
-  * update connect dep
-  * fix etag quoting. Closes #1310
-  * fix error-pages 404 status
-  * fix jsonp callback char restrictions
-  * remove old OPTIONS default response
-
-3.0.0rc3 / 2012-08-13
-==================
-
-  * update connect dep
-  * fix signed cookies to work with `connect.cookieParser()` ("s:" prefix was missing) [tnydwrds]
-  * fix `res.render()` clobbering of "locals"
-
-3.0.0rc2 / 2012-08-03
-==================
-
-  * add CORS example
-  * update connect dep
-  * deprecate `.createServer()` & remove old stale examples
-  * fix: escape `res.redirect()` link
-  * fix vhost example
-
-3.0.0rc1 / 2012-07-24
-==================
-
-  * add more examples to view-locals
-  * add scheme-relative redirects (`res.redirect("//foo.com")`) support
-  * update cookie dep
-  * update connect dep
-  * update send dep
-  * fix `express(1)` -h flag, use -H for hogan. Closes #1245
-  * fix `res.sendfile()` socket error handling regression
-
-3.0.0beta7 / 2012-07-16
-==================
-
-  * update connect dep for `send()` root normalization regression
-
-3.0.0beta6 / 2012-07-13
-==================
-
-  * add `err.view` property for view errors. Closes #1226
-  * add "jsonp callback name" setting
-  * add support for "/foo/:bar*" non-greedy matches
-  * change `res.sendfile()` to use `send()` module
-  * change `res.send` to use "response-send" module
-  * remove `app.locals.use` and `res.locals.use`, use regular middleware
-
-3.0.0beta5 / 2012-07-03
-==================
-
-  * add "make check" support
-  * add route-map example
-  * add `res.json(obj, status)` support back for BC
-  * add "methods" dep, remove internal methods module
-  * update connect dep
-  * update auth example to utilize cores pbkdf2
-  * updated tests to use "supertest"
-
-3.0.0beta4 / 2012-06-25
-==================
-
-  * Added `req.auth`
-  * Added `req.range(size)`
-  * Added `res.links(obj)`
-  * Added `res.send(body, status)` support back for backwards compat
-  * Added `.default()` support to `res.format()`
-  * Added 2xx / 304 check to `req.fresh`
-  * Revert "Added + support to the router"
-  * Fixed `res.send()` freshness check, respect res.statusCode
-
-3.0.0beta3 / 2012-06-15
-==================
-
-  * Added hogan `--hjs` to express(1) [nullfirm]
-  * Added another example to content-negotiation
-  * Added `fresh` dep
-  * Changed: `res.send()` always checks freshness
-  * Fixed: expose connects mime module. Closes #1165
-
-3.0.0beta2 / 2012-06-06
-==================
-
-  * Added `+` support to the router
-  * Added `req.host`
-  * Changed `req.param()` to check route first
-  * Update connect dep
-
-3.0.0beta1 / 2012-06-01
-==================
-
-  * Added `res.format()` callback to override default 406 behaviour
-  * Fixed `res.redirect()` 406. Closes #1154
-
-3.0.0alpha5 / 2012-05-30
-==================
-
-  * Added `req.ip`
-  * Added `{ signed: true }` option to `res.cookie()`
-  * Removed `res.signedCookie()`
-  * Changed: dont reverse `req.ips`
-  * Fixed "trust proxy" setting check for `req.ips`
-
-3.0.0alpha4 / 2012-05-09
-==================
-
-  * Added: allow `[]` in jsonp callback. Closes #1128
-  * Added `PORT` env var support in generated template. Closes #1118 [benatkin]
-  * Updated: connect 2.2.2
-
-3.0.0alpha3 / 2012-05-04
-==================
-
-  * Added public `app.routes`. Closes #887
-  * Added _view-locals_ example
-  * Added _mvc_ example
-  * Added `res.locals.use()`. Closes #1120
-  * Added conditional-GET support to `res.send()`
-  * Added: coerce `res.set()` values to strings
-  * Changed: moved `static()` in generated apps below router
-  * Changed: `res.send()` only set ETag when not previously set
-  * Changed connect 2.2.1 dep
-  * Changed: `make test` now runs unit / acceptance tests
-  * Fixed req/res proto inheritance
-
-3.0.0alpha2 / 2012-04-26
-==================
-
-  * Added `make benchmark` back
-  * Added `res.send()` support for `String` objects
-  * Added client-side data exposing example
-  * Added `res.header()` and `req.header()` aliases for BC
-  * Added `express.createServer()` for BC
-  * Perf: memoize parsed urls
-  * Perf: connect 2.2.0 dep
-  * Changed: make `expressInit()` middleware self-aware
-  * Fixed: use app.get() for all core settings
-  * Fixed redis session example
-  * Fixed session example. Closes #1105
-  * Fixed generated express dep. Closes #1078
-
-3.0.0alpha1 / 2012-04-15
-==================
-
-  * Added `app.locals.use(callback)`
-  * Added `app.locals` object
-  * Added `app.locals(obj)`
-  * Added `res.locals` object
-  * Added `res.locals(obj)`
-  * Added `res.format()` for content-negotiation
-  * Added `app.engine()`
-  * Added `res.cookie()` JSON cookie support
-  * Added "trust proxy" setting
-  * Added `req.subdomains`
-  * Added `req.protocol`
-  * Added `req.secure`
-  * Added `req.path`
-  * Added `req.ips`
-  * Added `req.fresh`
-  * Added `req.stale`
-  * Added comma-delimited / array support for `req.accepts()`
-  * Added debug instrumentation
-  * Added `res.set(obj)`
-  * Added `res.set(field, value)`
-  * Added `res.get(field)`
-  * Added `app.get(setting)`. Closes #842
-  * Added `req.acceptsLanguage()`
-  * Added `req.acceptsCharset()`
-  * Added `req.accepted`
-  * Added `req.acceptedLanguages`
-  * Added `req.acceptedCharsets`
-  * Added "json replacer" setting
-  * Added "json spaces" setting
-  * Added X-Forwarded-Proto support to `res.redirect()`. Closes #92
-  * Added `--less` support to express(1)
-  * Added `express.response` prototype
-  * Added `express.request` prototype
-  * Added `express.application` prototype
-  * Added `app.path()`
-  * Added `app.render()`
-  * Added `res.type()` to replace `res.contentType()`
-  * Changed: `res.redirect()` to add relative support
-  * Changed: enable "jsonp callback" by default
-  * Changed: renamed "case sensitive routes" to "case sensitive routing"
-  * Rewrite of all tests with mocha
-  * Removed "root" setting
-  * Removed `res.redirect('home')` support
-  * Removed `req.notify()`
-  * Removed `app.register()`
-  * Removed `app.redirect()`
-  * Removed `app.is()`
-  * Removed `app.helpers()`
-  * Removed `app.dynamicHelpers()`
-  * Fixed `res.sendfile()` with non-GET. Closes #723
-  * Fixed express(1) public dir for windows. Closes #866
-
-2.5.9/ 2012-04-02
-==================
-
-  * Added support for PURGE request method [pbuyle]
-  * Fixed `express(1)` generated app `app.address()` before `listening` [mmalecki]
-
-2.5.8 / 2012-02-08
-==================
-
-  * Update mkdirp dep. Closes #991
-
-2.5.7 / 2012-02-06
-==================
-
-  * Fixed `app.all` duplicate DELETE requests [mscdex]
-
-2.5.6 / 2012-01-13
-==================
-
-  * Updated hamljs dev dep. Closes #953
-
-2.5.5 / 2012-01-08
-==================
-
-  * Fixed: set `filename` on cached templates [matthewleon]
-
-2.5.4 / 2012-01-02
-==================
-
-  * Fixed `express(1)` eol on 0.4.x. Closes #947
-
-2.5.3 / 2011-12-30
-==================
-
-  * Fixed `req.is()` when a charset is present
-
-2.5.2 / 2011-12-10
-==================
-
-  * Fixed: express(1) LF -> CRLF for windows
-
-2.5.1 / 2011-11-17
-==================
-
-  * Changed: updated connect to 1.8.x
-  * Removed sass.js support from express(1)
-
-2.5.0 / 2011-10-24
-==================
-
-  * Added ./routes dir for generated app by default
-  * Added npm install reminder to express(1) app gen
-  * Added 0.5.x support
-  * Removed `make test-cov` since it wont work with node 0.5.x
-  * Fixed express(1) public dir for windows. Closes #866
-
-2.4.7 / 2011-10-05
-==================
-
-  * Added mkdirp to express(1). Closes #795
-  * Added simple _json-config_ example
-  * Added  shorthand for the parsed request's pathname via `req.path`
-  * Changed connect dep to 1.7.x to fix npm issue...
-  * Fixed `res.redirect()` __HEAD__ support. [reported by xerox]
-  * Fixed `req.flash()`, only escape args
-  * Fixed absolute path checking on windows. Closes #829 [reported by andrewpmckenzie]
-
-2.4.6 / 2011-08-22
-==================
-
-  * Fixed multiple param callback regression. Closes #824 [reported by TroyGoode]
-
-2.4.5 / 2011-08-19
-==================
-
-  * Added support for routes to handle errors. Closes #809
-  * Added `app.routes.all()`. Closes #803
-  * Added "basepath" setting to work in conjunction with reverse proxies etc.
-  * Refactored `Route` to use a single array of callbacks
-  * Added support for multiple callbacks for `app.param()`. Closes #801
-Closes #805
-  * Changed: removed .call(self) for route callbacks
-  * Dependency: `qs >= 0.3.1`
-  * Fixed `res.redirect()` on windows due to `join()` usage. Closes #808
-
-2.4.4 / 2011-08-05
-==================
-
-  * Fixed `res.header()` intention of a set, even when `undefined`
-  * Fixed `*`, value no longer required
-  * Fixed `res.send(204)` support. Closes #771
-
-2.4.3 / 2011-07-14
-==================
-
-  * Added docs for `status` option special-case. Closes #739
-  * Fixed `options.filename`, exposing the view path to template engines
-
-2.4.2. / 2011-07-06
-==================
-
-  * Revert "removed jsonp stripping" for XSS
-
-2.4.1 / 2011-07-06
-==================
-
-  * Added `res.json()` JSONP support. Closes #737
-  * Added _extending-templates_ example. Closes #730
-  * Added "strict routing" setting for trailing slashes
-  * Added support for multiple envs in `app.configure()` calls. Closes #735
-  * Changed: `res.send()` using `res.json()`
-  * Changed: when cookie `path === null` don't default it
-  * Changed; default cookie path to "home" setting. Closes #731
-  * Removed _pids/logs_ creation from express(1)
-
-2.4.0 / 2011-06-28
-==================
-
-  * Added chainable `res.status(code)`
-  * Added `res.json()`, an explicit version of `res.send(obj)`
-  * Added simple web-service example
-
-2.3.12 / 2011-06-22
-==================
-
-  * \#express is now on freenode! come join!
-  * Added `req.get(field, param)`
-  * Added links to Japanese documentation, thanks @hideyukisaito!
-  * Added; the `express(1)` generated app outputs the env
-  * Added `content-negotiation` example
-  * Dependency: connect >= 1.5.1 < 2.0.0
-  * Fixed view layout bug. Closes #720
-  * Fixed; ignore body on 304. Closes #701
-
-2.3.11 / 2011-06-04
-==================
-
-  * Added `npm test`
-  * Removed generation of dummy test file from `express(1)`
-  * Fixed; `express(1)` adds express as a dep
-  * Fixed; prune on `prepublish`
-
-2.3.10 / 2011-05-27
-==================
-
-  * Added `req.route`, exposing the current route
-  * Added _package.json_ generation support to `express(1)`
-  * Fixed call to `app.param()` function for optional params. Closes #682
-
-2.3.9 / 2011-05-25
-==================
-
-  * Fixed bug-ish with `../' in `res.partial()` calls
-
-2.3.8 / 2011-05-24
-==================
-
-  * Fixed `app.options()`
-
-2.3.7 / 2011-05-23
-==================
-
-  * Added route `Collection`, ex: `app.get('/user/:id').remove();`
-  * Added support for `app.param(fn)` to define param logic
-  * Removed `app.param()` support for callback with return value
-  * Removed module.parent check from express(1) generated app. Closes #670
-  * Refactored router. Closes #639
-
-2.3.6 / 2011-05-20
-==================
-
-  * Changed; using devDependencies instead of git submodules
-  * Fixed redis session example
-  * Fixed markdown example
-  * Fixed view caching, should not be enabled in development
-
-2.3.5 / 2011-05-20
-==================
-
-  * Added export `.view` as alias for `.View`
-
-2.3.4 / 2011-05-08
-==================
-
-  * Added `./examples/say`
-  * Fixed `res.sendfile()` bug preventing the transfer of files with spaces
-
-2.3.3 / 2011-05-03
-==================
-
-  * Added "case sensitive routes" option.
-  * Changed; split methods supported per rfc [slaskis]
-  * Fixed route-specific middleware when using the same callback function several times
-
-2.3.2 / 2011-04-27
-==================
-
-  * Fixed view hints
-
-2.3.1 / 2011-04-26
-==================
-
-  * Added `app.match()` as `app.match.all()`
-  * Added `app.lookup()` as `app.lookup.all()`
-  * Added `app.remove()` for `app.remove.all()`
-  * Added `app.remove.VERB()`
-  * Fixed template caching collision issue. Closes #644
-  * Moved router over from connect and started refactor
-
-2.3.0 / 2011-04-25
-==================
-
-  * Added options support to `res.clearCookie()`
-  * Added `res.helpers()` as alias of `res.locals()`
-  * Added; json defaults to UTF-8 with `res.send()`. Closes #632. [Daniel   * Dependency `connect >= 1.4.0`
-  * Changed; auto set Content-Type in res.attachement [Aaron Heckmann]
-  * Renamed "cache views" to "view cache". Closes #628
-  * Fixed caching of views when using several apps. Closes #637
-  * Fixed gotcha invoking `app.param()` callbacks once per route middleware.
-Closes #638
-  * Fixed partial lookup precedence. Closes #631
-Shaw]
-
-2.2.2 / 2011-04-12
-==================
-
-  * Added second callback support for `res.download()` connection errors
-  * Fixed `filename` option passing to template engine
-
-2.2.1 / 2011-04-04
-==================
-
-  * Added `layout(path)` helper to change the layout within a view. Closes #610
-  * Fixed `partial()` collection object support.
-    Previously only anything with `.length` would work.
-    When `.length` is present one must still be aware of holes,
-    however now `{ collection: {foo: 'bar'}}` is valid, exposes
-    `keyInCollection` and `keysInCollection`.
-
-  * Performance improved with better view caching
-  * Removed `request` and `response` locals
-  * Changed; errorHandler page title is now `Express` instead of `Connect`
-
-2.2.0 / 2011-03-30
-==================
-
-  * Added `app.lookup.VERB()`, ex `app.lookup.put('/user/:id')`. Closes #606
-  * Added `app.match.VERB()`, ex `app.match.put('/user/12')`. Closes #606
-  * Added `app.VERB(path)` as alias of `app.lookup.VERB()`.
-  * Dependency `connect >= 1.2.0`
-
-2.1.1 / 2011-03-29
-==================
-
-  * Added; expose `err.view` object when failing to locate a view
-  * Fixed `res.partial()` call `next(err)` when no callback is given [reported by aheckmann]
-  * Fixed; `res.send(undefined)` responds with 204 [aheckmann]
-
-2.1.0 / 2011-03-24
-==================
-
-  * Added `<root>/_?<name>` partial lookup support. Closes #447
-  * Added `request`, `response`, and `app` local variables
-  * Added `settings` local variable, containing the app's settings
-  * Added `req.flash()` exception if `req.session` is not available
-  * Added `res.send(bool)` support (json response)
-  * Fixed stylus example for latest version
-  * Fixed; wrap try/catch around `res.render()`
-
-2.0.0 / 2011-03-17
-==================
-
-  * Fixed up index view path alternative.
-  * Changed; `res.locals()` without object returns the locals
-
-2.0.0rc3 / 2011-03-17
-==================
-
-  * Added `res.locals(obj)` to compliment `res.local(key, val)`
-  * Added `res.partial()` callback support
-  * Fixed recursive error reporting issue in `res.render()`
-
-2.0.0rc2 / 2011-03-17
-==================
-
-  * Changed; `partial()` "locals" are now optional
-  * Fixed `SlowBuffer` support. Closes #584 [reported by tyrda01]
-  * Fixed .filename view engine option [reported by drudge]
-  * Fixed blog example
-  * Fixed `{req,res}.app` reference when mounting [Ben Weaver]
-
-2.0.0rc / 2011-03-14
-==================
-
-  * Fixed; expose `HTTPSServer` constructor
-  * Fixed express(1) default test charset. Closes #579 [reported by secoif]
-  * Fixed; default charset to utf-8 instead of utf8 for lame IE [reported by NickP]
-
-2.0.0beta3 / 2011-03-09
-==================
-
-  * Added support for `res.contentType()` literal
-    The original `res.contentType('.json')`,
-    `res.contentType('application/json')`, and `res.contentType('json')`
-    will work now.
-  * Added `res.render()` status option support back
-  * Added charset option for `res.render()`
-  * Added `.charset` support (via connect 1.0.4)
-  * Added view resolution hints when in development and a lookup fails
-  * Added layout lookup support relative to the page view.
-    For example while rendering `./views/user/index.jade` if you create
-    `./views/user/layout.jade` it will be used in favour of the root layout.
-  * Fixed `res.redirect()`. RFC states absolute url [reported by unlink]
-  * Fixed; default `res.send()` string charset to utf8
-  * Removed `Partial` constructor (not currently used)
-
-2.0.0beta2 / 2011-03-07
-==================
-
-  * Added res.render() `.locals` support back to aid in migration process
-  * Fixed flash example
-
-2.0.0beta / 2011-03-03
-==================
-
-  * Added HTTPS support
-  * Added `res.cookie()` maxAge support
-  * Added `req.header()` _Referrer_ / _Referer_ special-case, either works
-  * Added mount support for `res.redirect()`, now respects the mount-point
-  * Added `union()` util, taking place of `merge(clone())` combo
-  * Added stylus support to express(1) generated app
-  * Added secret to session middleware used in examples and generated app
-  * Added `res.local(name, val)` for progressive view locals
-  * Added default param support to `req.param(name, default)`
-  * Added `app.disabled()` and `app.enabled()`
-  * Added `app.register()` support for omitting leading ".", either works
-  * Added `res.partial()`, using the same interface as `partial()` within a view. Closes #539
-  * Added `app.param()` to map route params to async/sync logic
-  * Added; aliased `app.helpers()` as `app.locals()`. Closes #481
-  * Added extname with no leading "." support to `res.contentType()`
-  * Added `cache views` setting, defaulting to enabled in "production" env
-  * Added index file partial resolution, eg: partial('user') may try _views/user/index.jade_.
-  * Added `req.accepts()` support for extensions
-  * Changed; `res.download()` and `res.sendfile()` now utilize Connect's
-    static file server `connect.static.send()`.
-  * Changed; replaced `connect.utils.mime()` with npm _mime_ module
-  * Changed; allow `req.query` to be pre-defined (via middleware or other parent
-  * Changed view partial resolution, now relative to parent view
-  * Changed view engine signature. no longer `engine.render(str, options, callback)`, now `engine.compile(str, options) -> Function`, the returned function accepts `fn(locals)`.
-  * Fixed `req.param()` bug returning Array.prototype methods. Closes #552
-  * Fixed; using `Stream#pipe()` instead of `sys.pump()` in `res.sendfile()`
-  * Fixed; using _qs_ module instead of _querystring_
-  * Fixed; strip unsafe chars from jsonp callbacks
-  * Removed "stream threshold" setting
-
-1.0.8 / 2011-03-01
-==================
-
-  * Allow `req.query` to be pre-defined (via middleware or other parent app)
-  * "connect": ">= 0.5.0 < 1.0.0". Closes #547
-  * Removed the long deprecated __EXPRESS_ENV__ support
-
-1.0.7 / 2011-02-07
-==================
-
-  * Fixed `render()` setting inheritance.
-    Mounted apps would not inherit "view engine"
-
-1.0.6 / 2011-02-07
-==================
-
-  * Fixed `view engine` setting bug when period is in dirname
-
-1.0.5 / 2011-02-05
-==================
-
-  * Added secret to generated app `session()` call
-
-1.0.4 / 2011-02-05
-==================
-
-  * Added `qs` dependency to _package.json_
-  * Fixed namespaced `require()`s for latest connect support
-
-1.0.3 / 2011-01-13
-==================
-
-  * Remove unsafe characters from JSONP callback names [Ryan Grove]
-
-1.0.2 / 2011-01-10
-==================
-
-  * Removed nested require, using `connect.router`
-
-1.0.1 / 2010-12-29
-==================
-
-  * Fixed for middleware stacked via `createServer()`
-    previously the `foo` middleware passed to `createServer(foo)`
-    would not have access to Express methods such as `res.send()`
-    or props like `req.query` etc.
-
-1.0.0 / 2010-11-16
-==================
-
-  * Added; deduce partial object names from the last segment.
-    For example by default `partial('forum/post', postObject)` will
-    give you the _post_ object, providing a meaningful default.
-  * Added http status code string representation to `res.redirect()` body
-  * Added; `res.redirect()` supporting _text/plain_ and _text/html_ via __Accept__.
-  * Added `req.is()` to aid in content negotiation
-  * Added partial local inheritance [suggested by masylum]. Closes #102
-    providing access to parent template locals.
-  * Added _-s, --session[s]_ flag to express(1) to add session related middleware
-  * Added _--template_ flag to express(1) to specify the
-    template engine to use.
-  * Added _--css_ flag to express(1) to specify the
-    stylesheet engine to use (or just plain css by default).
-  * Added `app.all()` support [thanks aheckmann]
-  * Added partial direct object support.
-    You may now `partial('user', user)` providing the "user" local,
-    vs previously `partial('user', { object: user })`.
-  * Added _route-separation_ example since many people question ways
-    to do this with CommonJS modules. Also view the _blog_ example for
-    an alternative.
-  * Performance; caching view path derived partial object names
-  * Fixed partial local inheritance precedence. [reported by Nick Poulden] Closes #454
-  * Fixed jsonp support; _text/javascript_ as per mailinglist discussion
-
-1.0.0rc4 / 2010-10-14
-==================
-
-  * Added _NODE_ENV_ support, _EXPRESS_ENV_ is deprecated and will be removed in 1.0.0
-  * Added route-middleware support (very helpful, see the [docs](http://expressjs.com/guide.html#Route-Middleware))
-  * Added _jsonp callback_ setting to enable/disable jsonp autowrapping [Dav Glass]
-  * Added callback query check on response.send to autowrap JSON objects for simple webservice implementations [Dav Glass]
-  * Added `partial()` support for array-like collections. Closes #434
-  * Added support for swappable querystring parsers
-  * Added session usage docs. Closes #443
-  * Added dynamic helper caching. Closes #439 [suggested by maritz]
-  * Added authentication example
-  * Added basic Range support to `res.sendfile()` (and `res.download()` etc)
-  * Changed; `express(1)` generated app using 2 spaces instead of 4
-  * Default env to "development" again [aheckmann]
-  * Removed _context_ option is no more, use "scope"
-  * Fixed; exposing _./support_ libs to examples so they can run without installs
-  * Fixed mvc example
-
-1.0.0rc3 / 2010-09-20
-==================
-
-  * Added confirmation for `express(1)` app generation. Closes #391
-  * Added extending of flash formatters via `app.flashFormatters`
-  * Added flash formatter support. Closes #411
-  * Added streaming support to `res.sendfile()` using `sys.pump()` when >= "stream threshold"
-  * Added _stream threshold_ setting for `res.sendfile()`
-  * Added `res.send()` __HEAD__ support
-  * Added `res.clearCookie()`
-  * Added `res.cookie()`
-  * Added `res.render()` headers option
-  * Added `res.redirect()` response bodies
-  * Added `res.render()` status option support. Closes #425 [thanks aheckmann]
-  * Fixed `res.sendfile()` responding with 403 on malicious path
-  * Fixed `res.download()` bug; when an error occurs remove _Content-Disposition_
-  * Fixed; mounted apps settings now inherit from parent app [aheckmann]
-  * Fixed; stripping Content-Length / Content-Type when 204
-  * Fixed `res.send()` 204. Closes #419
-  * Fixed multiple _Set-Cookie_ headers via `res.header()`. Closes #402
-  * Fixed bug messing with error handlers when `listenFD()` is called instead of `listen()`. [thanks guillermo]
-
-
-1.0.0rc2 / 2010-08-17
-==================
-
-  * Added `app.register()` for template engine mapping. Closes #390
-  * Added `res.render()` callback support as second argument (no options)
-  * Added callback support to `res.download()`
-  * Added callback support for `res.sendfile()`
-  * Added support for middleware access via `express.middlewareName()` vs `connect.middlewareName()`
-  * Added "partials" setting to docs
-  * Added default expresso tests to `express(1)` generated app. Closes #384
-  * Fixed `res.sendfile()` error handling, defer via `next()`
-  * Fixed `res.render()` callback when a layout is used [thanks guillermo]
-  * Fixed; `make install` creating ~/.node_libraries when not present
-  * Fixed issue preventing error handlers from being defined anywhere. Closes #387
-
-1.0.0rc / 2010-07-28
-==================
-
-  * Added mounted hook. Closes #369
-  * Added connect dependency to _package.json_
-
-  * Removed "reload views" setting and support code
-    development env never caches, production always caches.
-
-  * Removed _param_ in route callbacks, signature is now
-    simply (req, res, next), previously (req, res, params, next).
-    Use _req.params_ for path captures, _req.query_ for GET params.
-
-  * Fixed "home" setting
-  * Fixed middleware/router precedence issue. Closes #366
-  * Fixed; _configure()_ callbacks called immediately. Closes #368
-
-1.0.0beta2 / 2010-07-23
-==================
-
-  * Added more examples
-  * Added; exporting `Server` constructor
-  * Added `Server#helpers()` for view locals
-  * Added `Server#dynamicHelpers()` for dynamic view locals. Closes #349
-  * Added support for absolute view paths
-  * Added; _home_ setting defaults to `Server#route` for mounted apps. Closes #363
-  * Added Guillermo Rauch to the contributor list
-  * Added support for "as" for non-collection partials. Closes #341
-  * Fixed _install.sh_, ensuring _~/.node_libraries_ exists. Closes #362 [thanks jf]
-  * Fixed `res.render()` exceptions, now passed to `next()` when no callback is given [thanks guillermo]
-  * Fixed instanceof `Array` checks, now `Array.isArray()`
-  * Fixed express(1) expansion of public dirs. Closes #348
-  * Fixed middleware precedence. Closes #345
-  * Fixed view watcher, now async [thanks aheckmann]
-
-1.0.0beta / 2010-07-15
-==================
-
-  * Re-write
-    - much faster
-    - much lighter
-    - Check [ExpressJS.com](http://expressjs.com) for migration guide and updated docs
-
-0.14.0 / 2010-06-15
-==================
-
-  * Utilize relative requires
-  * Added Static bufferSize option [aheckmann]
-  * Fixed caching of view and partial subdirectories [aheckmann]
-  * Fixed mime.type() comments now that ".ext" is not supported
-  * Updated haml submodule
-  * Updated class submodule
-  * Removed bin/express
-
-0.13.0 / 2010-06-01
-==================
-
-  * Added node v0.1.97 compatibility
-  * Added support for deleting cookies via Request#cookie('key', null)
-  * Updated haml submodule
-  * Fixed not-found page, now using using charset utf-8
-  * Fixed show-exceptions page, now using using charset utf-8
-  * Fixed view support due to fs.readFile Buffers
-  * Changed; mime.type() no longer accepts ".type" due to node extname() changes
-
-0.12.0 / 2010-05-22
-==================
-
-  * Added node v0.1.96 compatibility
-  * Added view `helpers` export which act as additional local variables
-  * Updated haml submodule
-  * Changed ETag; removed inode, modified time only
-  * Fixed LF to CRLF for setting multiple cookies
-  * Fixed cookie compilation; values are now urlencoded
-  * Fixed cookies parsing; accepts quoted values and url escaped cookies
-
-0.11.0 / 2010-05-06
-==================
-
-  * Added support for layouts using different engines
-    - this.render('page.html.haml', { layout: 'super-cool-layout.html.ejs' })
-    - this.render('page.html.haml', { layout: 'foo' }) // assumes 'foo.html.haml'
-    - this.render('page.html.haml', { layout: false }) // no layout
-  * Updated ext submodule
-  * Updated haml submodule
-  * Fixed EJS partial support by passing along the context. Issue #307
-
-0.10.1 / 2010-05-03
-==================
-
-  * Fixed binary uploads.
-
-0.10.0 / 2010-04-30
-==================
-
-  * Added charset support via Request#charset (automatically assigned to 'UTF-8' when respond()'s
-    encoding is set to 'utf8' or 'utf-8'.
-  * Added "encoding" option to Request#render(). Closes #299
-  * Added "dump exceptions" setting, which is enabled by default.
-  * Added simple ejs template engine support
-  * Added error response support for text/plain, application/json. Closes #297
-  * Added callback function param to Request#error()
-  * Added Request#sendHead()
-  * Added Request#stream()
-  * Added support for Request#respond(304, null) for empty response bodies
-  * Added ETag support to Request#sendfile()
-  * Added options to Request#sendfile(), passed to fs.createReadStream()
-  * Added filename arg to Request#download()
-  * Performance enhanced due to pre-reversing plugins so that plugins.reverse() is not called on each request
-  * Performance enhanced by preventing several calls to toLowerCase() in Router#match()
-  * Changed; Request#sendfile() now streams
-  * Changed; Renamed Request#halt() to Request#respond(). Closes #289
-  * Changed; Using sys.inspect() instead of JSON.encode() for error output
-  * Changed; run() returns the http.Server instance. Closes #298
-  * Changed; Defaulting Server#host to null (INADDR_ANY)
-  * Changed; Logger "common" format scale of 0.4f
-  * Removed Logger "request" format
-  * Fixed; Catching ENOENT in view caching, preventing error when "views/partials" is not found
-  * Fixed several issues with http client
-  * Fixed Logger Content-Length output
-  * Fixed bug preventing Opera from retaining the generated session id. Closes #292
-
-0.9.0 / 2010-04-14
-==================
-
-  * Added DSL level error() route support
-  * Added DSL level notFound() route support
-  * Added Request#error()
-  * Added Request#notFound()
-  * Added Request#render() callback function. Closes #258
-  * Added "max upload size" setting
-  * Added "magic" variables to collection partials (\_\_index\_\_, \_\_length\_\_, \_\_isFirst\_\_, \_\_isLast\_\_). Closes #254
-  * Added [haml.js](http://github.com/visionmedia/haml.js) submodule; removed haml-js
-  * Added callback function support to Request#halt() as 3rd/4th arg
-  * Added preprocessing of route param wildcards using param(). Closes #251
-  * Added view partial support (with collections etc)
-  * Fixed bug preventing falsey params (such as ?page=0). Closes #286
-  * Fixed setting of multiple cookies. Closes #199
-  * Changed; view naming convention is now NAME.TYPE.ENGINE (for example page.html.haml)
-  * Changed; session cookie is now httpOnly
-  * Changed; Request is no longer global
-  * Changed; Event is no longer global
-  * Changed; "sys" module is no longer global
-  * Changed; moved Request#download to Static plugin where it belongs
-  * Changed; Request instance created before body parsing. Closes #262
-  * Changed; Pre-caching views in memory when "cache view contents" is enabled. Closes #253
-  * Changed; Pre-caching view partials in memory when "cache view partials" is enabled
-  * Updated support to node --version 0.1.90
-  * Updated dependencies
-  * Removed set("session cookie") in favour of use(Session, { cookie: { ... }})
-  * Removed utils.mixin(); use Object#mergeDeep()
-
-0.8.0 / 2010-03-19
-==================
-
-  * Added coffeescript example app. Closes #242
-  * Changed; cache api now async friendly. Closes #240
-  * Removed deprecated 'express/static' support. Use 'express/plugins/static'
-
-0.7.6 / 2010-03-19
-==================
-
-  * Added Request#isXHR. Closes #229
-  * Added `make install` (for the executable)
-  * Added `express` executable for setting up simple app templates
-  * Added "GET /public/*" to Static plugin, defaulting to <root>/public
-  * Added Static plugin
-  * Fixed; Request#render() only calls cache.get() once
-  * Fixed; Namespacing View caches with "view:"
-  * Fixed; Namespacing Static caches with "static:"
-  * Fixed; Both example apps now use the Static plugin
-  * Fixed set("views"). Closes #239
-  * Fixed missing space for combined log format
-  * Deprecated Request#sendfile() and 'express/static'
-  * Removed Server#running
-
-0.7.5 / 2010-03-16
-==================
-
-  * Added Request#flash() support without args, now returns all flashes
-  * Updated ext submodule
-
-0.7.4 / 2010-03-16
-==================
-
-  * Fixed session reaper
-  * Changed; class.js replacing js-oo Class implementation (quite a bit faster, no browser cruft)
-
-0.7.3 / 2010-03-16
-==================
-
-  * Added package.json
-  * Fixed requiring of haml / sass due to kiwi removal
-
-0.7.2 / 2010-03-16
-==================
-
-  * Fixed GIT submodules (HAH!)
-
-0.7.1 / 2010-03-16
-==================
-
-  * Changed; Express now using submodules again until a PM is adopted
-  * Changed; chat example using millisecond conversions from ext
-
-0.7.0 / 2010-03-15
-==================
-
-  * Added Request#pass() support (finds the next matching route, or the given path)
-  * Added Logger plugin (default "common" format replaces CommonLogger)
-  * Removed Profiler plugin
-  * Removed CommonLogger plugin
-
-0.6.0 / 2010-03-11
-==================
-
-  * Added seed.yml for kiwi package management support
-  * Added HTTP client query string support when method is GET. Closes #205
-
-  * Added support for arbitrary view engines.
-    For example "foo.engine.html" will now require('engine'),
-    the exports from this module are cached after the first require().
-
-  * Added async plugin support
-
-  * Removed usage of RESTful route funcs as http client
-    get() etc, use http.get() and friends
-
-  * Removed custom exceptions
-
-0.5.0 / 2010-03-10
-==================
-
-  * Added ext dependency (library of js extensions)
-  * Removed extname() / basename() utils. Use path module
-  * Removed toArray() util. Use arguments.values
-  * Removed escapeRegexp() util. Use RegExp.escape()
-  * Removed process.mixin() dependency. Use utils.mixin()
-  * Removed Collection
-  * Removed ElementCollection
-  * Shameless self promotion of ebook "Advanced JavaScript" (http://dev-mag.com)  ;)
-
-0.4.0 / 2010-02-11
-==================
-
-  * Added flash() example to sample upload app
-  * Added high level restful http client module (express/http)
-  * Changed; RESTful route functions double as HTTP clients. Closes #69
-  * Changed; throwing error when routes are added at runtime
-  * Changed; defaulting render() context to the current Request. Closes #197
-  * Updated haml submodule
-
-0.3.0 / 2010-02-11
-==================
-
-  * Updated haml / sass submodules. Closes #200
-  * Added flash message support. Closes #64
-  * Added accepts() now allows multiple args. fixes #117
-  * Added support for plugins to halt. Closes #189
-  * Added alternate layout support. Closes #119
-  * Removed Route#run(). Closes #188
-  * Fixed broken specs due to use(Cookie) missing
-
-0.2.1 / 2010-02-05
-==================
-
-  * Added "plot" format option for Profiler (for gnuplot processing)
-  * Added request number to Profiler plugin
-  * Fixed binary encoding for multipart file uploads, was previously defaulting to UTF8
-  * Fixed issue with routes not firing when not files are present. Closes #184
-  * Fixed process.Promise -> events.Promise
-
-0.2.0 / 2010-02-03
-==================
-
-  * Added parseParam() support for name[] etc. (allows for file inputs with "multiple" attr) Closes #180
-  * Added Both Cache and Session option "reapInterval" may be "reapEvery". Closes #174
-  * Added expiration support to cache api with reaper. Closes #133
-  * Added cache Store.Memory#reap()
-  * Added Cache; cache api now uses first class Cache instances
-  * Added abstract session Store. Closes #172
-  * Changed; cache Memory.Store#get() utilizing Collection
-  * Renamed MemoryStore -> Store.Memory
-  * Fixed use() of the same plugin several time will always use latest options. Closes #176
-
-0.1.0 / 2010-02-03
-==================
-
-  * Changed; Hooks (before / after) pass request as arg as well as evaluated in their context
-  * Updated node support to 0.1.27 Closes #169
-  * Updated dirname(__filename) -> __dirname
-  * Updated libxmljs support to v0.2.0
-  * Added session support with memory store / reaping
-  * Added quick uid() helper
-  * Added multi-part upload support
-  * Added Sass.js support / submodule
-  * Added production env caching view contents and static files
-  * Added static file caching. Closes #136
-  * Added cache plugin with memory stores
-  * Added support to StaticFile so that it works with non-textual files.
-  * Removed dirname() helper
-  * Removed several globals (now their modules must be required)
-
-0.0.2 / 2010-01-10
-==================
-
-  * Added view benchmarks; currently haml vs ejs
-  * Added Request#attachment() specs. Closes #116
-  * Added use of node's parseQuery() util. Closes #123
-  * Added `make init` for submodules
-  * Updated Haml
-  * Updated sample chat app to show messages on load
-  * Updated libxmljs parseString -> parseHtmlString
-  * Fixed `make init` to work with older versions of git
-  * Fixed specs can now run independent specs for those who can't build deps. Closes #127
-  * Fixed issues introduced by the node url module changes. Closes 126.
-  * Fixed two assertions failing due to Collection#keys() returning strings
-  * Fixed faulty Collection#toArray() spec due to keys() returning strings
-  * Fixed `make test` now builds libxmljs.node before testing
-
-0.0.1 / 2010-01-03
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/express/Readme.md b/device_home/node_modules/express/Readme.md
deleted file mode 100644 (file)
index 1f91297..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-[![Express Logo](https://i.cloudup.com/zfY6lL7eFa-3000x3000.png)](http://expressjs.com/)
-
-  Fast, unopinionated, minimalist web framework for [node](http://nodejs.org).
-
-  [![NPM Version][npm-image]][npm-url]
-  [![NPM Downloads][downloads-image]][downloads-url]
-  [![Linux Build][travis-image]][travis-url]
-  [![Windows Build][appveyor-image]][appveyor-url]
-  [![Test Coverage][coveralls-image]][coveralls-url]
-
-```js
-const express = require('express')
-const app = express()
-
-app.get('/', function (req, res) {
-  res.send('Hello World')
-})
-
-app.listen(3000)
-```
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/).
-
-Before installing, [download and install Node.js](https://nodejs.org/en/download/).
-Node.js 0.10 or higher is required.
-
-Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```bash
-$ npm install express
-```
-
-Follow [our installing guide](http://expressjs.com/en/starter/installing.html)
-for more information.
-
-## Features
-
-  * Robust routing
-  * Focus on high performance
-  * Super-high test coverage
-  * HTTP helpers (redirection, caching, etc)
-  * View system supporting 14+ template engines
-  * Content negotiation
-  * Executable for generating applications quickly
-
-## Docs & Community
-
-  * [Website and Documentation](http://expressjs.com/) - [[website repo](https://github.com/expressjs/expressjs.com)]
-  * [#express](https://webchat.freenode.net/?channels=express) on freenode IRC
-  * [GitHub Organization](https://github.com/expressjs) for Official Middleware & Modules
-  * Visit the [Wiki](https://github.com/expressjs/express/wiki)
-  * [Google Group](https://groups.google.com/group/express-js) for discussion
-  * [Gitter](https://gitter.im/expressjs/express) for support and discussion
-
-**PROTIP** Be sure to read [Migrating from 3.x to 4.x](https://github.com/expressjs/express/wiki/Migrating-from-3.x-to-4.x) as well as [New features in 4.x](https://github.com/expressjs/express/wiki/New-features-in-4.x).
-
-### Security Issues
-
-If you discover a security vulnerability in Express, please see [Security Policies and Procedures](Security.md).
-
-## Quick Start
-
-  The quickest way to get started with express is to utilize the executable [`express(1)`](https://github.com/expressjs/generator) to generate an application as shown below:
-
-  Install the executable. The executable's major version will match Express's:
-
-```bash
-$ npm install -g express-generator@4
-```
-
-  Create the app:
-
-```bash
-$ express /tmp/foo && cd /tmp/foo
-```
-
-  Install dependencies:
-
-```bash
-$ npm install
-```
-
-  Start the server:
-
-```bash
-$ npm start
-```
-
-  View the website at: http://localhost:3000
-
-## Philosophy
-
-  The Express philosophy is to provide small, robust tooling for HTTP servers, making
-  it a great solution for single page applications, web sites, hybrids, or public
-  HTTP APIs.
-
-  Express does not force you to use any specific ORM or template engine. With support for over
-  14 template engines via [Consolidate.js](https://github.com/tj/consolidate.js),
-  you can quickly craft your perfect framework.
-
-## Examples
-
-  To view the examples, clone the Express repo and install the dependencies:
-
-```bash
-$ git clone git://github.com/expressjs/express.git --depth 1
-$ cd express
-$ npm install
-```
-
-  Then run whichever example you want:
-
-```bash
-$ node examples/content-negotiation
-```
-
-## Tests
-
-  To run the test suite, first install the dependencies, then run `npm test`:
-
-```bash
-$ npm install
-$ npm test
-```
-
-## Contributing
-
-[Contributing Guide](Contributing.md)
-
-## People
-
-The original author of Express is [TJ Holowaychuk](https://github.com/tj)
-
-The current lead maintainer is [Douglas Christopher Wilson](https://github.com/dougwilson)
-
-[List of all contributors](https://github.com/expressjs/express/graphs/contributors)
-
-## License
-
-  [MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/express.svg
-[npm-url]: https://npmjs.org/package/express
-[downloads-image]: https://img.shields.io/npm/dm/express.svg
-[downloads-url]: https://npmjs.org/package/express
-[travis-image]: https://img.shields.io/travis/expressjs/express/master.svg?label=linux
-[travis-url]: https://travis-ci.org/expressjs/express
-[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/express/master.svg?label=windows
-[appveyor-url]: https://ci.appveyor.com/project/dougwilson/express
-[coveralls-image]: https://img.shields.io/coveralls/expressjs/express/master.svg
-[coveralls-url]: https://coveralls.io/r/expressjs/express?branch=master
diff --git a/device_home/node_modules/finalhandler/HISTORY.md b/device_home/node_modules/finalhandler/HISTORY.md
deleted file mode 100644 (file)
index 920c35e..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-1.1.2 / 2019-05-09
-==================
-
-  * Set stricter `Content-Security-Policy` header
-  * deps: parseurl@~1.3.3
-  * deps: statuses@~1.5.0
-
-1.1.1 / 2018-03-06
-==================
-
-  * Fix 404 output for bad / missing pathnames
-  * deps: encodeurl@~1.0.2
-    - Fix encoding `%` as last character
-  * deps: statuses@~1.4.0
-
-1.1.0 / 2017-09-24
-==================
-
-  * Use `res.headersSent` when available
-
-1.0.6 / 2017-09-22
-==================
-
-  * deps: debug@2.6.9
-
-1.0.5 / 2017-09-15
-==================
-
-  * deps: parseurl@~1.3.2
-    - perf: reduce overhead for full URLs
-    - perf: unroll the "fast-path" `RegExp`
-
-1.0.4 / 2017-08-03
-==================
-
-  * deps: debug@2.6.8
-
-1.0.3 / 2017-05-16
-==================
-
-  * deps: debug@2.6.7
-    - deps: ms@2.0.0
-
-1.0.2 / 2017-04-22
-==================
-
-  * deps: debug@2.6.4
-    - deps: ms@0.7.3
-
-1.0.1 / 2017-03-21
-==================
-
-  * Fix missing `</html>` in HTML document
-  * deps: debug@2.6.3
-    - Fix: `DEBUG_MAX_ARRAY_LENGTH`
-
-1.0.0 / 2017-02-15
-==================
-
-  * Fix exception when `err` cannot be converted to a string
-  * Fully URL-encode the pathname in the 404 message
-  * Only include the pathname in the 404 message
-  * Send complete HTML document
-  * Set `Content-Security-Policy: default-src 'self'` header
-  * deps: debug@2.6.1
-    - Allow colors in workers
-    - Deprecated `DEBUG_FD` environment variable set to `3` or higher
-    - Fix error when running under React Native
-    - Use same color for same namespace
-    - deps: ms@0.7.2
-
-0.5.1 / 2016-11-12
-==================
-
-  * Fix exception when `err.headers` is not an object
-  * deps: statuses@~1.3.1
-  * perf: hoist regular expressions
-  * perf: remove duplicate validation path
-
-0.5.0 / 2016-06-15
-==================
-
-  * Change invalid or non-numeric status code to 500
-  * Overwrite status message to match set status code
-  * Prefer `err.statusCode` if `err.status` is invalid
-  * Set response headers from `err.headers` object
-  * Use `statuses` instead of `http` module for status messages
-    - Includes all defined status messages
-
-0.4.1 / 2015-12-02
-==================
-
-  * deps: escape-html@~1.0.3
-    - perf: enable strict mode
-    - perf: optimize string replacement
-    - perf: use faster string coercion
-
-0.4.0 / 2015-06-14
-==================
-
-  * Fix a false-positive when unpiping in Node.js 0.8
-  * Support `statusCode` property on `Error` objects
-  * Use `unpipe` module for unpiping requests
-  * deps: escape-html@1.0.2
-  * deps: on-finished@~2.3.0
-    - Add defined behavior for HTTP `CONNECT` requests
-    - Add defined behavior for HTTP `Upgrade` requests
-    - deps: ee-first@1.1.1
-  * perf: enable strict mode
-  * perf: remove argument reassignment
-
-0.3.6 / 2015-05-11
-==================
-
-  * deps: debug@~2.2.0
-    - deps: ms@0.7.1
-
-0.3.5 / 2015-04-22
-==================
-
-  * deps: on-finished@~2.2.1
-    - Fix `isFinished(req)` when data buffered
-
-0.3.4 / 2015-03-15
-==================
-
-  * deps: debug@~2.1.3
-    - Fix high intensity foreground color for bold
-    - deps: ms@0.7.0
-
-0.3.3 / 2015-01-01
-==================
-
-  * deps: debug@~2.1.1
-  * deps: on-finished@~2.2.0
-
-0.3.2 / 2014-10-22
-==================
-
-  * deps: on-finished@~2.1.1
-    - Fix handling of pipelined requests
-
-0.3.1 / 2014-10-16
-==================
-
-  * deps: debug@~2.1.0
-    - Implement `DEBUG_FD` env variable support
-
-0.3.0 / 2014-09-17
-==================
-
-  * Terminate in progress response only on error
-  * Use `on-finished` to determine request status
-
-0.2.0 / 2014-09-03
-==================
-
-  * Set `X-Content-Type-Options: nosniff` header
-  * deps: debug@~2.0.0
-
-0.1.0 / 2014-07-16
-==================
-
-  * Respond after request fully read
-    - prevents hung responses and socket hang ups
-  * deps: debug@1.0.4
-
-0.0.3 / 2014-07-11
-==================
-
-  * deps: debug@1.0.3
-    - Add support for multiple wildcards in namespaces
-
-0.0.2 / 2014-06-19
-==================
-
-  * Handle invalid status codes
-
-0.0.1 / 2014-06-05
-==================
-
-  * deps: debug@1.0.2
-
-0.0.0 / 2014-06-05
-==================
-
-  * Extracted from connect/express
diff --git a/device_home/node_modules/finalhandler/README.md b/device_home/node_modules/finalhandler/README.md
deleted file mode 100644 (file)
index 96327f0..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-# finalhandler
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Node.js function to invoke as the final step to respond to HTTP request.
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install finalhandler
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var finalhandler = require('finalhandler')
-```
-
-### finalhandler(req, res, [options])
-
-Returns function to be invoked as the final step for the given `req` and `res`.
-This function is to be invoked as `fn(err)`. If `err` is falsy, the handler will
-write out a 404 response to the `res`. If it is truthy, an error response will
-be written out to the `res`.
-
-When an error is written, the following information is added to the response:
-
-  * The `res.statusCode` is set from `err.status` (or `err.statusCode`). If
-    this value is outside the 4xx or 5xx range, it will be set to 500.
-  * The `res.statusMessage` is set according to the status code.
-  * The body will be the HTML of the status code message if `env` is
-    `'production'`, otherwise will be `err.stack`.
-  * Any headers specified in an `err.headers` object.
-
-The final handler will also unpipe anything from `req` when it is invoked.
-
-#### options.env
-
-By default, the environment is determined by `NODE_ENV` variable, but it can be
-overridden by this option.
-
-#### options.onerror
-
-Provide a function to be called with the `err` when it exists. Can be used for
-writing errors to a central location without excessive function generation. Called
-as `onerror(err, req, res)`.
-
-## Examples
-
-### always 404
-
-```js
-var finalhandler = require('finalhandler')
-var http = require('http')
-
-var server = http.createServer(function (req, res) {
-  var done = finalhandler(req, res)
-  done()
-})
-
-server.listen(3000)
-```
-
-### perform simple action
-
-```js
-var finalhandler = require('finalhandler')
-var fs = require('fs')
-var http = require('http')
-
-var server = http.createServer(function (req, res) {
-  var done = finalhandler(req, res)
-
-  fs.readFile('index.html', function (err, buf) {
-    if (err) return done(err)
-    res.setHeader('Content-Type', 'text/html')
-    res.end(buf)
-  })
-})
-
-server.listen(3000)
-```
-
-### use with middleware-style functions
-
-```js
-var finalhandler = require('finalhandler')
-var http = require('http')
-var serveStatic = require('serve-static')
-
-var serve = serveStatic('public')
-
-var server = http.createServer(function (req, res) {
-  var done = finalhandler(req, res)
-  serve(req, res, done)
-})
-
-server.listen(3000)
-```
-
-### keep log of all errors
-
-```js
-var finalhandler = require('finalhandler')
-var fs = require('fs')
-var http = require('http')
-
-var server = http.createServer(function (req, res) {
-  var done = finalhandler(req, res, { onerror: logerror })
-
-  fs.readFile('index.html', function (err, buf) {
-    if (err) return done(err)
-    res.setHeader('Content-Type', 'text/html')
-    res.end(buf)
-  })
-})
-
-server.listen(3000)
-
-function logerror (err) {
-  console.error(err.stack || err.toString())
-}
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/finalhandler.svg
-[npm-url]: https://npmjs.org/package/finalhandler
-[node-image]: https://img.shields.io/node/v/finalhandler.svg
-[node-url]: https://nodejs.org/en/download
-[travis-image]: https://img.shields.io/travis/pillarjs/finalhandler.svg
-[travis-url]: https://travis-ci.org/pillarjs/finalhandler
-[coveralls-image]: https://img.shields.io/coveralls/pillarjs/finalhandler.svg
-[coveralls-url]: https://coveralls.io/r/pillarjs/finalhandler?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/finalhandler.svg
-[downloads-url]: https://npmjs.org/package/finalhandler
diff --git a/device_home/node_modules/find-up/readme.md b/device_home/node_modules/find-up/readme.md
deleted file mode 100644 (file)
index 810ad7c..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-# find-up [![Build Status: Linux and macOS](https://travis-ci.org/sindresorhus/find-up.svg?branch=master)](https://travis-ci.org/sindresorhus/find-up) [![Build Status: Windows](https://ci.appveyor.com/api/projects/status/l0cyjmvh5lq72vq2/branch/master?svg=true)](https://ci.appveyor.com/project/sindresorhus/find-up/branch/master)
-
-> Find a file or directory by walking up parent directories
-
-
-## Install
-
-```
-$ npm install find-up
-```
-
-
-## Usage
-
-```
-/
-└── Users
-               └── sindresorhus
-                               ├── unicorn.png
-                               └── foo
-                                               └── bar
-                                                               ├── baz
-                                                               └── example.js
-```
-
-`example.js`
-
-```js
-const findUp = require('find-up');
-
-(async () => {
-       console.log(await findUp('unicorn.png'));
-       //=> '/Users/sindresorhus/unicorn.png'
-
-       console.log(await findUp(['rainbow.png', 'unicorn.png']));
-       //=> '/Users/sindresorhus/unicorn.png'
-})();
-```
-
-
-## API
-
-### findUp(filename, [options])
-
-Returns a `Promise` for either the filepath or `null` if it couldn't be found.
-
-### findUp([filenameA, filenameB], [options])
-
-Returns a `Promise` for either the first filepath found (by respecting the order) or `null` if none could be found.
-
-### findUp.sync(filename, [options])
-
-Returns a filepath or `null`.
-
-### findUp.sync([filenameA, filenameB], [options])
-
-Returns the first filepath found (by respecting the order) or `null`.
-
-#### filename
-
-Type: `string`
-
-Filename of the file to find.
-
-#### options
-
-Type: `Object`
-
-##### cwd
-
-Type: `string`<br>
-Default: `process.cwd()`
-
-Directory to start from.
-
-
-## Related
-
-- [find-up-cli](https://github.com/sindresorhus/find-up-cli) - CLI for this module
-- [pkg-up](https://github.com/sindresorhus/pkg-up) - Find the closest package.json file
-- [pkg-dir](https://github.com/sindresorhus/pkg-dir) - Find the root directory of an npm package
-- [resolve-from](https://github.com/sindresorhus/resolve-from) - Resolve the path of a module like `require.resolve()` but from a given path
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/forwarded/HISTORY.md b/device_home/node_modules/forwarded/HISTORY.md
deleted file mode 100644 (file)
index 2599a55..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-0.1.2 / 2017-09-14
-==================
-
-  * perf: improve header parsing
-  * perf: reduce overhead when no `X-Forwarded-For` header
-
-0.1.1 / 2017-09-10
-==================
-
-  * Fix trimming leading / trailing OWS
-  * perf: hoist regular expression
-
-0.1.0 / 2014-09-21
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/forwarded/README.md b/device_home/node_modules/forwarded/README.md
deleted file mode 100644 (file)
index c776ee5..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# forwarded
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Parse HTTP X-Forwarded-For header
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install forwarded
-```
-
-## API
-
-```js
-var forwarded = require('forwarded')
-```
-
-### forwarded(req)
-
-```js
-var addresses = forwarded(req)
-```
-
-Parse the `X-Forwarded-For` header from the request. Returns an array
-of the addresses, including the socket address for the `req`, in reverse
-order (i.e. index `0` is the socket address and the last index is the
-furthest address, typically the end-user).
-
-## Testing
-
-```sh
-$ npm test
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/forwarded.svg
-[npm-url]: https://npmjs.org/package/forwarded
-[node-version-image]: https://img.shields.io/node/v/forwarded.svg
-[node-version-url]: https://nodejs.org/en/download/
-[travis-image]: https://img.shields.io/travis/jshttp/forwarded/master.svg
-[travis-url]: https://travis-ci.org/jshttp/forwarded
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/forwarded/master.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/forwarded?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/forwarded.svg
-[downloads-url]: https://npmjs.org/package/forwarded
diff --git a/device_home/node_modules/fresh/HISTORY.md b/device_home/node_modules/fresh/HISTORY.md
deleted file mode 100644 (file)
index 4586996..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-0.5.2 / 2017-09-13
-==================
-
-  * Fix regression matching multiple ETags in `If-None-Match`
-  * perf: improve `If-None-Match` token parsing
-
-0.5.1 / 2017-09-11
-==================
-
-  * Fix handling of modified headers with invalid dates
-  * perf: improve ETag match loop
-
-0.5.0 / 2017-02-21
-==================
-
-  * Fix incorrect result when `If-None-Match` has both `*` and ETags
-  * Fix weak `ETag` matching to match spec
-  * perf: delay reading header values until needed
-  * perf: skip checking modified time if ETag check failed
-  * perf: skip parsing `If-None-Match` when no `ETag` header
-  * perf: use `Date.parse` instead of `new Date`
-
-0.4.0 / 2017-02-05
-==================
-
-  * Fix false detection of `no-cache` request directive
-  * perf: enable strict mode
-  * perf: hoist regular expressions
-  * perf: remove duplicate conditional
-  * perf: remove unnecessary boolean coercions
-
-0.3.0 / 2015-05-12
-==================
-
-  * Add weak `ETag` matching support
-
-0.2.4 / 2014-09-07
-==================
-
-  * Support Node.js 0.6
-
-0.2.3 / 2014-09-07
-==================
-
-  * Move repository to jshttp
-
-0.2.2 / 2014-02-19
-==================
-
-  * Revert "Fix for blank page on Safari reload"
-
-0.2.1 / 2014-01-29
-==================
-
-  * Fix for blank page on Safari reload
-
-0.2.0 / 2013-08-11
-==================
-
-  * Return stale for `Cache-Control: no-cache`
-
-0.1.0 / 2012-06-15
-==================
-
-  * Add `If-None-Match: *` support
-
-0.0.1 / 2012-06-10
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/fresh/README.md b/device_home/node_modules/fresh/README.md
deleted file mode 100644 (file)
index 1c1c680..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-# fresh
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-HTTP response freshness testing
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```
-$ npm install fresh
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var fresh = require('fresh')
-```
-
-### fresh(reqHeaders, resHeaders)
-
-Check freshness of the response using request and response headers.
-
-When the response is still "fresh" in the client's cache `true` is
-returned, otherwise `false` is returned to indicate that the client
-cache is now stale and the full response should be sent.
-
-When a client sends the `Cache-Control: no-cache` request header to
-indicate an end-to-end reload request, this module will return `false`
-to make handling these requests transparent.
-
-## Known Issues
-
-This module is designed to only follow the HTTP specifications, not
-to work-around all kinda of client bugs (especially since this module
-typically does not recieve enough information to understand what the
-client actually is).
-
-There is a known issue that in certain versions of Safari, Safari
-will incorrectly make a request that allows this module to validate
-freshness of the resource even when Safari does not have a
-representation of the resource in the cache. The module
-[jumanji](https://www.npmjs.com/package/jumanji) can be used in
-an Express application to work-around this issue and also provides
-links to further reading on this Safari bug.
-
-## Example
-
-### API usage
-
-<!-- eslint-disable no-redeclare, no-undef -->
-
-```js
-var reqHeaders = { 'if-none-match': '"foo"' }
-var resHeaders = { 'etag': '"bar"' }
-fresh(reqHeaders, resHeaders)
-// => false
-
-var reqHeaders = { 'if-none-match': '"foo"' }
-var resHeaders = { 'etag': '"foo"' }
-fresh(reqHeaders, resHeaders)
-// => true
-```
-
-### Using with Node.js http server
-
-```js
-var fresh = require('fresh')
-var http = require('http')
-
-var server = http.createServer(function (req, res) {
-  // perform server logic
-  // ... including adding ETag / Last-Modified response headers
-
-  if (isFresh(req, res)) {
-    // client has a fresh copy of resource
-    res.statusCode = 304
-    res.end()
-    return
-  }
-
-  // send the resource
-  res.statusCode = 200
-  res.end('hello, world!')
-})
-
-function isFresh (req, res) {
-  return fresh(req.headers, {
-    'etag': res.getHeader('ETag'),
-    'last-modified': res.getHeader('Last-Modified')
-  })
-}
-
-server.listen(3000)
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/fresh.svg
-[npm-url]: https://npmjs.org/package/fresh
-[node-version-image]: https://img.shields.io/node/v/fresh.svg
-[node-version-url]: https://nodejs.org/en/
-[travis-image]: https://img.shields.io/travis/jshttp/fresh/master.svg
-[travis-url]: https://travis-ci.org/jshttp/fresh
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/fresh/master.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/fresh?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/fresh.svg
-[downloads-url]: https://npmjs.org/package/fresh
diff --git a/device_home/node_modules/get-caller-file/LICENSE.md b/device_home/node_modules/get-caller-file/LICENSE.md
deleted file mode 100644 (file)
index bf3e1c0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-ISC License (ISC)
-Copyright 2018 Stefan Penner
-
-Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/device_home/node_modules/get-caller-file/README.md b/device_home/node_modules/get-caller-file/README.md
deleted file mode 100644 (file)
index a7d8c07..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# get-caller-file
-
-[![Build Status](https://travis-ci.org/stefanpenner/get-caller-file.svg?branch=master)](https://travis-ci.org/stefanpenner/get-caller-file)
-[![Build status](https://ci.appveyor.com/api/projects/status/ol2q94g1932cy14a/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/get-caller-file/branch/master)
-
-This is a utility, which allows a function to figure out from which file it was invoked. It does so by inspecting v8's stack trace at the time it is invoked.
-
-Inspired by http://stackoverflow.com/questions/13227489
-
-*note: this relies on Node/V8 specific APIs, as such other runtimes may not work*
-
-## Installation
-
-```bash
-yarn add get-caller-file
-```
-
-## Usage
-
-Given:
-
-```js
-// ./foo.js
-const getCallerFile = require('get-caller-file');
-
-module.exports = function() {
-  return getCallerFile(); // figures out who called it
-};
-```
-
-```js
-// index.js
-const foo = require('./foo');
-
-foo() // => /full/path/to/this/file/index.js
-```
-
-
-## Options:
-
-* `getCallerFile(position = 2)`: where position is stack frame whos fileName we want.
diff --git a/device_home/node_modules/get-caller-file/index.js.map b/device_home/node_modules/get-caller-file/index.js.map
deleted file mode 100644 (file)
index 89c655c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,qEAAqE;AACrE,EAAE;AACF,0DAA0D;AAE1D,iBAAS,SAAS,aAAa,CAAC,QAAY;IAAZ,yBAAA,EAAA,YAAY;IAC1C,IAAI,QAAQ,IAAI,KAAK,CAAC,eAAe,EAAE;QACrC,MAAM,IAAI,SAAS,CAAC,kGAAkG,GAAG,QAAQ,GAAG,oCAAoC,GAAG,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;KACzM;IAED,IAAM,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACrD,KAAK,CAAC,iBAAiB,GAAG,UAAC,CAAC,EAAE,KAAK,IAAM,OAAA,KAAK,EAAL,CAAK,CAAC;IAC/C,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAChC,KAAK,CAAC,iBAAiB,GAAG,oBAAoB,CAAC;IAG/C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC/C,2BAA2B;QAC3B,gDAAgD;QAChD,8CAA8C;QAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,QAAQ,CAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KAC7E;AACH,CAAC,CAAC"}
\ No newline at end of file
diff --git a/device_home/node_modules/get-port/readme.md b/device_home/node_modules/get-port/readme.md
deleted file mode 100755 (executable)
index 05d78fb..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-# get-port [![Build Status](https://travis-ci.org/sindresorhus/get-port.svg?branch=master)](https://travis-ci.org/sindresorhus/get-port)
-
-> Get an available [TCP port](https://en.wikipedia.org/wiki/Port_(computer_networking))
-
-## Install
-
-```
-$ npm install get-port
-```
-
-## Usage
-
-```js
-const getPort = require('get-port');
-
-(async () => {
-       console.log(await getPort());
-       //=> 51402
-})();
-```
-
-Pass in a preferred port:
-
-```js
-(async () => {
-       console.log(await getPort({port: 3000}));
-       // Will use 3000 if available, otherwise fall back to a random port
-})();
-```
-
-Pass in an array of preferred ports:
-
-```js
-(async () => {
-       console.log(await getPort({port: [3000, 3001, 3002]}));
-       // Will use any element in the preferred ports array if available, otherwise fall back to a random port
-})();
-```
-
-Use the `makeRange()` helper in case you need a port in a certain range:
-
-```js
-(async () => {
-       console.log(await getPort({port: getPort.makeRange(3000, 3100)}));
-       // Will use any port from 3000 to 3100, otherwise fall back to a random port
-})();
-```
-
-## API
-
-### getPort(options?)
-
-Returns a `Promise` for a port number.
-
-#### options
-
-Type: `object`
-
-##### port
-
-Type: `number | Iterable<number>`
-
-A preferred port or an iterable of preferred ports to use.
-
-##### host
-
-Type: `string`
-
-The host on which port resolution should be performed. Can be either an IPv4 or IPv6 address.
-
-### getPort.makeRange(from, to)
-
-Make a range of ports `from`...`to`.
-
-Returns an `Iterable` for ports in the given range.
-
-#### from
-
-Type: `number`
-
-First port of the range. Must be in the range `1024`...`65535`.
-
-#### to
-
-Type: `number`
-
-Last port of the range. Must be in the range `1024`...`65535` and must be greater than `from`.
-
-## Beware
-
-There is a very tiny chance of a race condition if another process starts using the same port number as you in between the time you get the port number and you actually start using it.
-
-Race conditions in the same process are mitigated against by using a lightweight locking mechanism where a port will be held for a minimum of 15 seconds and a maximum of 30 seconds before being released again.
-
-## Related
-
-- [get-port-cli](https://github.com/sindresorhus/get-port-cli) - CLI for this module
-
----
-
-<div align="center">
-       <b>
-               <a href="https://tidelift.com/subscription/pkg/npm-get-port?utm_source=npm-get-port&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
-       </b>
-       <br>
-       <sub>
-               Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
-       </sub>
-</div>
diff --git a/device_home/node_modules/has-binary2/History.md b/device_home/node_modules/has-binary2/History.md
deleted file mode 100644 (file)
index 397793e..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<a name="1.0.3"></a>
-## [1.0.3](https://github.com/darrachequesne/has-binary/compare/1.0.2...1.0.3) (2018-05-14)
-
-
-### Bug Fixes
-
-* avoid use of global ([#4](https://github.com/darrachequesne/has-binary/issues/4)) ([91aa21e](https://github.com/darrachequesne/has-binary/commit/91aa21e))
-
-
-
-<a name="1.0.2"></a>
-## [1.0.2](https://github.com/darrachequesne/has-binary/compare/1.0.1...1.0.2) (2017-04-27)
-
-
-### Bug Fixes
-
-* Fix Blob detection for iOS 8/9 ([2a7b25c](https://github.com/darrachequesne/has-binary/commit/2a7b25c))
-
-
-
-<a name="1.0.1"></a>
-## [1.0.1](https://github.com/darrachequesne/has-binary/compare/1.0.0...1.0.1) (2017-04-05)
-
-
-
-<a name="1.0.0"></a>
-# [1.0.0](https://github.com/darrachequesne/has-binary/compare/0.1.7...1.0.0) (2017-04-05)
-
-
-### Bug Fixes
-
-* do not call toJSON more than once ([#7](https://github.com/darrachequesne/has-binary/issues/7)) ([27165d2](https://github.com/darrachequesne/has-binary/commit/27165d2))
-* Ensure globals are functions before running `instanceof` checks against them. ([#4](https://github.com/darrachequesne/has-binary/issues/4)) ([f9be9b3](https://github.com/darrachequesne/has-binary/commit/f9be9b3))
-* fix the case when toJSON() returns a Buffer  ([#6](https://github.com/darrachequesne/has-binary/issues/6)) ([518747d](https://github.com/darrachequesne/has-binary/commit/518747d))
-
-
-### Performance Improvements
-
-* Performance improvements ([#3](https://github.com/darrachequesne/has-binary/issues/3)) ([3e88e81](https://github.com/darrachequesne/has-binary/commit/3e88e81))
-
-
-
-<a name="0.1.7"></a>
-## [0.1.7](https://github.com/darrachequesne/has-binary/compare/0.1.6...0.1.7) (2015-11-19)
-
-
-
-<a name="0.1.6"></a>
-## [0.1.6](https://github.com/darrachequesne/has-binary/compare/0.1.5...0.1.6) (2015-01-24)
-
-
-
-<a name="0.1.5"></a>
-## 0.1.5 (2014-09-04)
-
-
-
diff --git a/device_home/node_modules/has-binary2/README.md b/device_home/node_modules/has-binary2/README.md
deleted file mode 100644 (file)
index 76a0035..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-has-binarydata.js
-=================
-
-Simple module to test if an object contains binary data
diff --git a/device_home/node_modules/has-cors/History.md b/device_home/node_modules/has-cors/History.md
deleted file mode 100644 (file)
index 4308161..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-1.1.0 / 2014-11-12
-==================
-
-  * remove "global" module dependency (#2, @achingbrain)
-
-1.0.2 / 2013-08-27
-==================
-
-  * explicitly use `global` instead of being implicit
-  * pin "component/global" to v2.0.1
-
-1.0.1 / 2013-08-23
-==================
-
-  * package: add "component" section
-
-1.0.0 / 2013-08-22
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/has-cors/Readme.md b/device_home/node_modules/has-cors/Readme.md
deleted file mode 100644 (file)
index 8954646..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-
-# has-cors
-
-  Detects support for Cross-Origin Resource Sharing
-
-## Installation
-
-  Install with [component(1)](http://component.io):
-
-    $ component install component/has-cors
-
-## API
-
-Exports `true` if the user-agent supports CORS, or `false` otherwise.
-
-``` js
-var hasCORS = require('has-cors');
-console.log(hasCORS);
-// true
-```
-
-## License
-
-  MIT
diff --git a/device_home/node_modules/has-flag/readme.md b/device_home/node_modules/has-flag/readme.md
deleted file mode 100755 (executable)
index 677893c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-# has-flag [![Build Status](https://travis-ci.org/sindresorhus/has-flag.svg?branch=master)](https://travis-ci.org/sindresorhus/has-flag)
-
-> Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag
-
-Correctly stops looking after an `--` argument terminator.
-
-
-## Install
-
-```
-$ npm install has-flag
-```
-
-
-## Usage
-
-```js
-// foo.js
-const hasFlag = require('has-flag');
-
-hasFlag('unicorn');
-//=> true
-
-hasFlag('--unicorn');
-//=> true
-
-hasFlag('f');
-//=> true
-
-hasFlag('-f');
-//=> true
-
-hasFlag('foo=bar');
-//=> true
-
-hasFlag('foo');
-//=> false
-
-hasFlag('rainbow');
-//=> false
-```
-
-```
-$ node foo.js -f --unicorn --foo=bar -- --rainbow
-```
-
-
-## API
-
-### hasFlag(flag, [argv])
-
-Returns a boolean for whether the flag exists.
-
-#### flag
-
-Type: `string`
-
-CLI flag to look for. The `--` prefix is optional.
-
-#### argv
-
-Type: `string[]`<br>
-Default: `process.argv`
-
-CLI arguments.
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/http-errors/HISTORY.md b/device_home/node_modules/http-errors/HISTORY.md
deleted file mode 100644 (file)
index efc2d4c..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-2019-02-18 / 1.7.2
-==================
-
-  * deps: setprototypeof@1.1.1
-
-2018-09-08 / 1.7.1
-==================
-
-  * Fix error creating objects in some environments
-
-2018-07-30 / 1.7.0
-==================
-
-  * Set constructor name when possible
-  * Use `toidentifier` module to make class names
-  * deps: statuses@'>= 1.5.0 < 2'
-
-2018-03-29 / 1.6.3
-==================
-
-  * deps: depd@~1.1.2
-    - perf: remove argument reassignment
-  * deps: setprototypeof@1.1.0
-  * deps: statuses@'>= 1.4.0 < 2'
-
-2017-08-04 / 1.6.2
-==================
-
-  * deps: depd@1.1.1
-    - Remove unnecessary `Buffer` loading
-
-2017-02-20 / 1.6.1
-==================
-
-  * deps: setprototypeof@1.0.3
-    - Fix shim for old browsers
-
-2017-02-14 / 1.6.0
-==================
-
-  * Accept custom 4xx and 5xx status codes in factory
-  * Add deprecation message to `"I'mateapot"` export
-  * Deprecate passing status code as anything except first argument in factory
-  * Deprecate using non-error status codes
-  * Make `message` property enumerable for `HttpError`s
-
-2016-11-16 / 1.5.1
-==================
-
-  * deps: inherits@2.0.3
-    - Fix issue loading in browser
-  * deps: setprototypeof@1.0.2
-  * deps: statuses@'>= 1.3.1 < 2'
-
-2016-05-18 / 1.5.0
-==================
-
-  * Support new code `421 Misdirected Request`
-  * Use `setprototypeof` module to replace `__proto__` setting
-  * deps: statuses@'>= 1.3.0 < 2'
-    - Add `421 Misdirected Request`
-    - perf: enable strict mode
-  * perf: enable strict mode
-
-2016-01-28 / 1.4.0
-==================
-
-  * Add `HttpError` export, for `err instanceof createError.HttpError`
-  * deps: inherits@2.0.1
-  * deps: statuses@'>= 1.2.1 < 2'
-    - Fix message for status 451
-    - Remove incorrect nginx status code
-
-2015-02-02 / 1.3.1
-==================
-
-  * Fix regression where status can be overwritten in `createError` `props`
-
-2015-02-01 / 1.3.0
-==================
-
-  * Construct errors using defined constructors from `createError`
-  * Fix error names that are not identifiers
-    - `createError["I'mateapot"]` is now `createError.ImATeapot`
-  * Set a meaningful `name` property on constructed errors
-
-2014-12-09 / 1.2.8
-==================
-
-  * Fix stack trace from exported function
-  * Remove `arguments.callee` usage
-
-2014-10-14 / 1.2.7
-==================
-
-  * Remove duplicate line
-
-2014-10-02 / 1.2.6
-==================
-
-  * Fix `expose` to be `true` for `ClientError` constructor
-
-2014-09-28 / 1.2.5
-==================
-
-  * deps: statuses@1
-
-2014-09-21 / 1.2.4
-==================
-
-  * Fix dependency version to work with old `npm`s
-
-2014-09-21 / 1.2.3
-==================
-
-  * deps: statuses@~1.1.0
-
-2014-09-21 / 1.2.2
-==================
-
-  * Fix publish error
-
-2014-09-21 / 1.2.1
-==================
-
-  * Support Node.js 0.6
-  * Use `inherits` instead of `util`
-
-2014-09-09 / 1.2.0
-==================
-
-  * Fix the way inheriting functions
-  * Support `expose` being provided in properties argument
-
-2014-09-08 / 1.1.0
-==================
-
-  * Default status to 500
-  * Support provided `error` to extend
-
-2014-09-08 / 1.0.1
-==================
-
-  * Fix accepting string message
-
-2014-09-08 / 1.0.0
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/http-errors/README.md b/device_home/node_modules/http-errors/README.md
deleted file mode 100644 (file)
index 3b25481..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-# http-errors
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][node-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Create HTTP errors for Express, Koa, Connect, etc. with ease.
-
-## Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```bash
-$ npm install http-errors
-```
-
-## Example
-
-```js
-var createError = require('http-errors')
-var express = require('express')
-var app = express()
-
-app.use(function (req, res, next) {
-  if (!req.user) return next(createError(401, 'Please login to view this page.'))
-  next()
-})
-```
-
-## API
-
-This is the current API, currently extracted from Koa and subject to change.
-
-### Error Properties
-
-- `expose` - can be used to signal if `message` should be sent to the client,
-  defaulting to `false` when `status` >= 500
-- `headers` - can be an object of header names to values to be sent to the
-  client, defaulting to `undefined`. When defined, the key names should all
-  be lower-cased
-- `message` - the traditional error message, which should be kept short and all
-  single line
-- `status` - the status code of the error, mirroring `statusCode` for general
-  compatibility
-- `statusCode` - the status code of the error, defaulting to `500`
-
-### createError([status], [message], [properties])
-
-Create a new error object with the given message `msg`.
-The error object inherits from `createError.HttpError`.
-
-<!-- eslint-disable no-undef, no-unused-vars -->
-
-```js
-var err = createError(404, 'This video does not exist!')
-```
-
-- `status: 500` - the status code as a number
-- `message` - the message of the error, defaulting to node's text for that status code.
-- `properties` - custom properties to attach to the object
-
-### createError([status], [error], [properties])
-
-Extend the given `error` object with `createError.HttpError`
-properties. This will not alter the inheritance of the given
-`error` object, and the modified `error` object is the
-return value.
-
-<!-- eslint-disable no-redeclare, no-undef, no-unused-vars -->
-
-```js
-fs.readFile('foo.txt', function (err, buf) {
-  if (err) {
-    if (err.code === 'ENOENT') {
-      var httpError = createError(404, err, { expose: false })
-    } else {
-      var httpError = createError(500, err)
-    }
-  }
-})
-```
-
-- `status` - the status code as a number
-- `error` - the error object to extend
-- `properties` - custom properties to attach to the object
-
-### new createError\[code || name\](\[msg]\))
-
-Create a new error object with the given message `msg`.
-The error object inherits from `createError.HttpError`.
-
-<!-- eslint-disable no-undef, no-unused-vars -->
-
-```js
-var err = new createError.NotFound()
-```
-
-- `code` - the status code as a number
-- `name` - the name of the error as a "bumpy case", i.e. `NotFound` or `InternalServerError`.
-
-#### List of all constructors
-
-|Status Code|Constructor Name             |
-|-----------|-----------------------------|
-|400        |BadRequest                   |
-|401        |Unauthorized                 |
-|402        |PaymentRequired              |
-|403        |Forbidden                    |
-|404        |NotFound                     |
-|405        |MethodNotAllowed             |
-|406        |NotAcceptable                |
-|407        |ProxyAuthenticationRequired  |
-|408        |RequestTimeout               |
-|409        |Conflict                     |
-|410        |Gone                         |
-|411        |LengthRequired               |
-|412        |PreconditionFailed           |
-|413        |PayloadTooLarge              |
-|414        |URITooLong                   |
-|415        |UnsupportedMediaType         |
-|416        |RangeNotSatisfiable          |
-|417        |ExpectationFailed            |
-|418        |ImATeapot                    |
-|421        |MisdirectedRequest           |
-|422        |UnprocessableEntity          |
-|423        |Locked                       |
-|424        |FailedDependency             |
-|425        |UnorderedCollection          |
-|426        |UpgradeRequired              |
-|428        |PreconditionRequired         |
-|429        |TooManyRequests              |
-|431        |RequestHeaderFieldsTooLarge  |
-|451        |UnavailableForLegalReasons   |
-|500        |InternalServerError          |
-|501        |NotImplemented               |
-|502        |BadGateway                   |
-|503        |ServiceUnavailable           |
-|504        |GatewayTimeout               |
-|505        |HTTPVersionNotSupported      |
-|506        |VariantAlsoNegotiates        |
-|507        |InsufficientStorage          |
-|508        |LoopDetected                 |
-|509        |BandwidthLimitExceeded       |
-|510        |NotExtended                  |
-|511        |NetworkAuthenticationRequired|
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/http-errors/master
-[coveralls-url]: https://coveralls.io/r/jshttp/http-errors?branch=master
-[node-image]: https://badgen.net/npm/node/http-errors
-[node-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/http-errors
-[npm-url]: https://npmjs.org/package/http-errors
-[npm-version-image]: https://badgen.net/npm/v/http-errors
-[travis-image]: https://badgen.net/travis/jshttp/http-errors/master
-[travis-url]: https://travis-ci.org/jshttp/http-errors
diff --git a/device_home/node_modules/iconv-lite/Changelog.md b/device_home/node_modules/iconv-lite/Changelog.md
deleted file mode 100644 (file)
index f252313..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-# 0.4.24 / 2018-08-22
-
-  * Added MIK encoding (#196, by @Ivan-Kalatchev)
-
-
-# 0.4.23 / 2018-05-07
-
-  * Fix deprecation warning in Node v10 due to the last usage of `new Buffer` (#185, by @felixbuenemann)
-  * Switched from NodeBuffer to Buffer in typings (#155 by @felixfbecker, #186 by @larssn)
-
-
-# 0.4.22 / 2018-05-05
-
-  * Use older semver style for dependencies to be compatible with Node version 0.10 (#182, by @dougwilson)
-  * Fix tests to accomodate fixes in Node v10 (#182, by @dougwilson)
-
-
-# 0.4.21 / 2018-04-06
-
-  * Fix encoding canonicalization (#156)
-  * Fix the paths in the "browser" field in package.json (#174 by @LMLB)
-  * Removed "contributors" section in package.json - see Git history instead.
-
-
-# 0.4.20 / 2018-04-06
-
-  * Updated `new Buffer()` usages with recommended replacements as it's being deprecated in Node v10 (#176, #178 by @ChALkeR)
-
-
-# 0.4.19 / 2017-09-09
-
-  * Fixed iso8859-1 codec regression in handling untranslatable characters (#162, caused by #147)
-  * Re-generated windows1255 codec, because it was updated in iconv project
-  * Fixed grammar in error message when iconv-lite is loaded with encoding other than utf8
-
-
-# 0.4.18 / 2017-06-13
-
-  * Fixed CESU-8 regression in Node v8.
-
-
-# 0.4.17 / 2017-04-22
-
- * Updated typescript definition file to support Angular 2 AoT mode (#153 by @larssn)
-
-
-# 0.4.16 / 2017-04-22
-
- * Added support for React Native (#150)
- * Changed iso8859-1 encoding to usine internal 'binary' encoding, as it's the same thing (#147 by @mscdex)
- * Fixed typo in Readme (#138 by @jiangzhuo)
- * Fixed build for Node v6.10+ by making correct version comparison
- * Added a warning if iconv-lite is loaded not as utf-8 (see #142)
-
-
-# 0.4.15 / 2016-11-21
-
- * Fixed typescript type definition (#137)
-
-
-# 0.4.14 / 2016-11-20
-
- * Preparation for v1.0
- * Added Node v6 and latest Node versions to Travis CI test rig
- * Deprecated Node v0.8 support
- * Typescript typings (@larssn)
- * Fix encoding of Euro character in GB 18030 (inspired by @lygstate)
- * Add ms prefix to dbcs windows encodings (@rokoroku)
-
-
-# 0.4.13 / 2015-10-01
-
- * Fix silly mistake in deprecation notice.
-
-
-# 0.4.12 / 2015-09-26
-
- * Node v4 support:
-   * Added CESU-8 decoding (#106)
-   * Added deprecation notice for `extendNodeEncodings`
-   * Added Travis tests for Node v4 and io.js latest (#105 by @Mithgol)
-
-
-# 0.4.11 / 2015-07-03
-
- * Added CESU-8 encoding.
-
-
-# 0.4.10 / 2015-05-26
-
- * Changed UTF-16 endianness heuristic to take into account any ASCII chars, not
-   just spaces. This should minimize the importance of "default" endianness.
-
-
-# 0.4.9 / 2015-05-24
-
- * Streamlined BOM handling: strip BOM by default, add BOM when encoding if 
-   addBOM: true. Added docs to Readme.
- * UTF16 now uses UTF16-LE by default.
- * Fixed minor issue with big5 encoding.
- * Added io.js testing on Travis; updated node-iconv version to test against.
-   Now we just skip testing SBCS encodings that node-iconv doesn't support.
- * (internal refactoring) Updated codec interface to use classes.
- * Use strict mode in all files.
-
-
-# 0.4.8 / 2015-04-14
- * added alias UNICODE-1-1-UTF-7 for UTF-7 encoding (#94)
-
-
-# 0.4.7 / 2015-02-05
-
- * stop official support of Node.js v0.8. Should still work, but no guarantees.
-   reason: Packages needed for testing are hard to get on Travis CI.
- * work in environment where Object.prototype is monkey patched with enumerable 
-   props (#89).
-
-
-# 0.4.6 / 2015-01-12
- * fix rare aliases of single-byte encodings (thanks @mscdex)
- * double the timeout for dbcs tests to make them less flaky on travis
-
-
-# 0.4.5 / 2014-11-20
-
- * fix windows-31j and x-sjis encoding support (@nleush)
- * minor fix: undefined variable reference when internal error happens
-
-
-# 0.4.4 / 2014-07-16
-
- * added encodings UTF-7 (RFC2152) and UTF-7-IMAP (RFC3501 Section 5.1.3)
- * fixed streaming base64 encoding
-
-
-# 0.4.3 / 2014-06-14
-
- * added encodings UTF-16BE and UTF-16 with BOM
-
-
-# 0.4.2 / 2014-06-12
-
- * don't throw exception if `extendNodeEncodings()` is called more than once
-
-
-# 0.4.1 / 2014-06-11
-
- * codepage 808 added
-
-
-# 0.4.0 / 2014-06-10
-
- * code is rewritten from scratch
- * all widespread encodings are supported
- * streaming interface added
- * browserify compatibility added
- * (optional) extend core primitive encodings to make usage even simpler
- * moved from vows to mocha as the testing framework
-
-
diff --git a/device_home/node_modules/iconv-lite/README.md b/device_home/node_modules/iconv-lite/README.md
deleted file mode 100644 (file)
index c981c37..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-## Pure JS character encoding conversion [![Build Status](https://travis-ci.org/ashtuchkin/iconv-lite.svg?branch=master)](https://travis-ci.org/ashtuchkin/iconv-lite)
-
- * Doesn't need native code compilation. Works on Windows and in sandboxed environments like [Cloud9](http://c9.io).
- * Used in popular projects like [Express.js (body_parser)](https://github.com/expressjs/body-parser), 
-   [Grunt](http://gruntjs.com/), [Nodemailer](http://www.nodemailer.com/), [Yeoman](http://yeoman.io/) and others.
- * Faster than [node-iconv](https://github.com/bnoordhuis/node-iconv) (see below for performance comparison).
- * Intuitive encode/decode API
- * Streaming support for Node v0.10+
- * [Deprecated] Can extend Node.js primitives (buffers, streams) to support all iconv-lite encodings.
- * In-browser usage via [Browserify](https://github.com/substack/node-browserify) (~180k gzip compressed with Buffer shim included).
- * Typescript [type definition file](https://github.com/ashtuchkin/iconv-lite/blob/master/lib/index.d.ts) included.
- * React Native is supported (need to explicitly `npm install` two more modules: `buffer` and `stream`).
- * License: MIT.
-
-[![NPM Stats](https://nodei.co/npm/iconv-lite.png?downloads=true&downloadRank=true)](https://npmjs.org/packages/iconv-lite/)
-
-## Usage
-### Basic API
-```javascript
-var iconv = require('iconv-lite');
-
-// Convert from an encoded buffer to js string.
-str = iconv.decode(Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f]), 'win1251');
-
-// Convert from js string to an encoded buffer.
-buf = iconv.encode("Sample input string", 'win1251');
-
-// Check if encoding is supported
-iconv.encodingExists("us-ascii")
-```
-
-### Streaming API (Node v0.10+)
-```javascript
-
-// Decode stream (from binary stream to js strings)
-http.createServer(function(req, res) {
-    var converterStream = iconv.decodeStream('win1251');
-    req.pipe(converterStream);
-
-    converterStream.on('data', function(str) {
-        console.log(str); // Do something with decoded strings, chunk-by-chunk.
-    });
-});
-
-// Convert encoding streaming example
-fs.createReadStream('file-in-win1251.txt')
-    .pipe(iconv.decodeStream('win1251'))
-    .pipe(iconv.encodeStream('ucs2'))
-    .pipe(fs.createWriteStream('file-in-ucs2.txt'));
-
-// Sugar: all encode/decode streams have .collect(cb) method to accumulate data.
-http.createServer(function(req, res) {
-    req.pipe(iconv.decodeStream('win1251')).collect(function(err, body) {
-        assert(typeof body == 'string');
-        console.log(body); // full request body string
-    });
-});
-```
-
-### [Deprecated] Extend Node.js own encodings
-> NOTE: This doesn't work on latest Node versions. See [details](https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility).
-
-```javascript
-// After this call all Node basic primitives will understand iconv-lite encodings.
-iconv.extendNodeEncodings();
-
-// Examples:
-buf = new Buffer(str, 'win1251');
-buf.write(str, 'gbk');
-str = buf.toString('latin1');
-assert(Buffer.isEncoding('iso-8859-15'));
-Buffer.byteLength(str, 'us-ascii');
-
-http.createServer(function(req, res) {
-    req.setEncoding('big5');
-    req.collect(function(err, body) {
-        console.log(body);
-    });
-});
-
-fs.createReadStream("file.txt", "shift_jis");
-
-// External modules are also supported (if they use Node primitives, which they probably do).
-request = require('request');
-request({
-    url: "http://github.com/", 
-    encoding: "cp932"
-});
-
-// To remove extensions
-iconv.undoExtendNodeEncodings();
-```
-
-## Supported encodings
-
- *  All node.js native encodings: utf8, ucs2 / utf16-le, ascii, binary, base64, hex.
- *  Additional unicode encodings: utf16, utf16-be, utf-7, utf-7-imap.
- *  All widespread singlebyte encodings: Windows 125x family, ISO-8859 family, 
-    IBM/DOS codepages, Macintosh family, KOI8 family, all others supported by iconv library. 
-    Aliases like 'latin1', 'us-ascii' also supported.
- *  All widespread multibyte encodings: CP932, CP936, CP949, CP950, GB2312, GBK, GB18030, Big5, Shift_JIS, EUC-JP.
-
-See [all supported encodings on wiki](https://github.com/ashtuchkin/iconv-lite/wiki/Supported-Encodings).
-
-Most singlebyte encodings are generated automatically from [node-iconv](https://github.com/bnoordhuis/node-iconv). Thank you Ben Noordhuis and libiconv authors!
-
-Multibyte encodings are generated from [Unicode.org mappings](http://www.unicode.org/Public/MAPPINGS/) and [WHATWG Encoding Standard mappings](http://encoding.spec.whatwg.org/). Thank you, respective authors!
-
-
-## Encoding/decoding speed
-
-Comparison with node-iconv module (1000x256kb, on MacBook Pro, Core i5/2.6 GHz, Node v0.12.0). 
-Note: your results may vary, so please always check on your hardware.
-
-    operation             iconv@2.1.4   iconv-lite@0.4.7
-    ----------------------------------------------------------
-    encode('win1251')     ~96 Mb/s      ~320 Mb/s
-    decode('win1251')     ~95 Mb/s      ~246 Mb/s
-
-## BOM handling
-
- * Decoding: BOM is stripped by default, unless overridden by passing `stripBOM: false` in options
-   (f.ex. `iconv.decode(buf, enc, {stripBOM: false})`).
-   A callback might also be given as a `stripBOM` parameter - it'll be called if BOM character was actually found.
- * If you want to detect UTF-8 BOM when decoding other encodings, use [node-autodetect-decoder-stream](https://github.com/danielgindi/node-autodetect-decoder-stream) module.
- * Encoding: No BOM added, unless overridden by `addBOM: true` option.
-
-## UTF-16 Encodings
-
-This library supports UTF-16LE, UTF-16BE and UTF-16 encodings. First two are straightforward, but UTF-16 is trying to be
-smart about endianness in the following ways:
- * Decoding: uses BOM and 'spaces heuristic' to determine input endianness. Default is UTF-16LE, but can be 
-   overridden with `defaultEncoding: 'utf-16be'` option. Strips BOM unless `stripBOM: false`.
- * Encoding: uses UTF-16LE and writes BOM by default. Use `addBOM: false` to override.
-
-## Other notes
-
-When decoding, be sure to supply a Buffer to decode() method, otherwise [bad things usually happen](https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding).  
-Untranslatable characters are set to � or ?. No transliteration is currently supported.  
-Node versions 0.10.31 and 0.11.13 are buggy, don't use them (see #65, #77).  
-
-## Testing
-
-```bash
-$ git clone git@github.com:ashtuchkin/iconv-lite.git
-$ cd iconv-lite
-$ npm install
-$ npm test
-    
-$ # To view performance:
-$ node test/performance.js
-
-$ # To view test coverage:
-$ npm run coverage
-$ open coverage/lcov-report/index.html
-```
diff --git a/device_home/node_modules/ieee754/README.md b/device_home/node_modules/ieee754/README.md
deleted file mode 100644 (file)
index cb7527b..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# ieee754 [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]
-
-[travis-image]: https://img.shields.io/travis/feross/ieee754/master.svg
-[travis-url]: https://travis-ci.org/feross/ieee754
-[npm-image]: https://img.shields.io/npm/v/ieee754.svg
-[npm-url]: https://npmjs.org/package/ieee754
-[downloads-image]: https://img.shields.io/npm/dm/ieee754.svg
-[downloads-url]: https://npmjs.org/package/ieee754
-[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg
-[standard-url]: https://standardjs.com
-
-[![saucelabs][saucelabs-image]][saucelabs-url]
-
-[saucelabs-image]: https://saucelabs.com/browser-matrix/ieee754.svg
-[saucelabs-url]: https://saucelabs.com/u/ieee754
-
-### Read/write IEEE754 floating point numbers from/to a Buffer or array-like object.
-
-## install
-
-```
-npm install ieee754
-```
-
-## methods
-
-`var ieee754 = require('ieee754')`
-
-The `ieee754` object has the following functions:
-
-```
-ieee754.read = function (buffer, offset, isLE, mLen, nBytes)
-ieee754.write = function (buffer, value, offset, isLE, mLen, nBytes)
-```
-
-The arguments mean the following:
-
-- buffer = the buffer
-- offset = offset into the buffer
-- value = value to set (only for `write`)
-- isLe = is little endian?
-- mLen = mantissa length
-- nBytes = number of bytes
-
-## what is ieee754?
-
-The IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point computation. [Read more](http://en.wikipedia.org/wiki/IEEE_floating_point).
-
-## license
-
-BSD 3 Clause. Copyright (c) 2008, Fair Oaks Labs, Inc.
diff --git a/device_home/node_modules/indexof/Readme.md b/device_home/node_modules/indexof/Readme.md
deleted file mode 100644 (file)
index 99c8dfc..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-
-# indexOf
-
-  Lame indexOf thing, thanks microsoft
-
-## Example
-
-```js
-var index = require('indexof');
-index(arr, obj);
-```
-
-## License
-
-  MIT
\ No newline at end of file
diff --git a/device_home/node_modules/inherits/README.md b/device_home/node_modules/inherits/README.md
deleted file mode 100644 (file)
index b1c5665..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-Browser-friendly inheritance fully compatible with standard node.js
-[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
-
-This package exports standard `inherits` from node.js `util` module in
-node environment, but also provides alternative browser-friendly
-implementation through [browser
-field](https://gist.github.com/shtylman/4339901). Alternative
-implementation is a literal copy of standard one located in standalone
-module to avoid requiring of `util`. It also has a shim for old
-browsers with no `Object.create` support.
-
-While keeping you sure you are using standard `inherits`
-implementation in node.js environment, it allows bundlers such as
-[browserify](https://github.com/substack/node-browserify) to not
-include full `util` package to your client code if all you need is
-just `inherits` function. It worth, because browser shim for `util`
-package is large and `inherits` is often the single function you need
-from it.
-
-It's recommended to use this package instead of
-`require('util').inherits` for any code that has chances to be used
-not only in node.js but in browser too.
-
-## usage
-
-```js
-var inherits = require('inherits');
-// then use exactly as the standard one
-```
-
-## note on version ~1.0
-
-Version ~1.0 had completely different motivation and is not compatible
-neither with 2.0 nor with standard node.js `inherits`.
-
-If you are using version ~1.0 and planning to switch to ~2.0, be
-careful:
-
-* new version uses `super_` instead of `super` for referencing
-  superclass
-* new version overwrites current prototype while old one preserves any
-  existing fields on it
diff --git a/device_home/node_modules/ipaddr.js/README.md b/device_home/node_modules/ipaddr.js/README.md
deleted file mode 100644 (file)
index f57725b..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-# ipaddr.js — an IPv6 and IPv4 address manipulation library [![Build Status](https://travis-ci.org/whitequark/ipaddr.js.svg)](https://travis-ci.org/whitequark/ipaddr.js)
-
-ipaddr.js is a small (1.9K minified and gzipped) library for manipulating
-IP addresses in JavaScript environments. It runs on both CommonJS runtimes
-(e.g. [nodejs]) and in a web browser.
-
-ipaddr.js allows you to verify and parse string representation of an IP
-address, match it against a CIDR range or range list, determine if it falls
-into some reserved ranges (examples include loopback and private ranges),
-and convert between IPv4 and IPv4-mapped IPv6 addresses.
-
-[nodejs]: http://nodejs.org
-
-## Installation
-
-`npm install ipaddr.js`
-
-or
-
-`bower install ipaddr.js`
-
-## API
-
-ipaddr.js defines one object in the global scope: `ipaddr`. In CommonJS,
-it is exported from the module:
-
-```js
-var ipaddr = require('ipaddr.js');
-```
-
-The API consists of several global methods and two classes: ipaddr.IPv6 and ipaddr.IPv4.
-
-### Global methods
-
-There are three global methods defined: `ipaddr.isValid`, `ipaddr.parse` and
-`ipaddr.process`. All of them receive a string as a single parameter.
-
-The `ipaddr.isValid` method returns `true` if the address is a valid IPv4 or
-IPv6 address, and `false` otherwise. It does not throw any exceptions.
-
-The `ipaddr.parse` method returns an object representing the IP address,
-or throws an `Error` if the passed string is not a valid representation of an
-IP address.
-
-The `ipaddr.process` method works just like the `ipaddr.parse` one, but it
-automatically converts IPv4-mapped IPv6 addresses to their IPv4 counterparts
-before returning. It is useful when you have a Node.js instance listening
-on an IPv6 socket, and the `net.ivp6.bindv6only` sysctl parameter (or its
-equivalent on non-Linux OS) is set to 0. In this case, you can accept IPv4
-connections on your IPv6-only socket, but the remote address will be mangled.
-Use `ipaddr.process` method to automatically demangle it.
-
-### Object representation
-
-Parsing methods return an object which descends from `ipaddr.IPv6` or
-`ipaddr.IPv4`. These objects share some properties, but most of them differ.
-
-#### Shared properties
-
-One can determine the type of address by calling `addr.kind()`. It will return
-either `"ipv6"` or `"ipv4"`.
-
-An address can be converted back to its string representation with `addr.toString()`.
-Note that this method:
- * does not return the original string used to create the object (in fact, there is
-   no way of getting that string)
- * returns a compact representation (when it is applicable)
-
-A `match(range, bits)` method can be used to check if the address falls into a
-certain CIDR range.
-Note that an address can be (obviously) matched only against an address of the same type.
-
-For example:
-
-```js
-var addr = ipaddr.parse("2001:db8:1234::1");
-var range = ipaddr.parse("2001:db8::");
-
-addr.match(range, 32); // => true
-```
-
-Alternatively, `match` can also be called as `match([range, bits])`. In this way,
-it can be used together with the `parseCIDR(string)` method, which parses an IP
-address together with a CIDR range.
-
-For example:
-
-```js
-var addr = ipaddr.parse("2001:db8:1234::1");
-
-addr.match(ipaddr.parseCIDR("2001:db8::/32")); // => true
-```
-
-A `range()` method returns one of predefined names for several special ranges defined
-by IP protocols. The exact names (and their respective CIDR ranges) can be looked up
-in the source: [IPv6 ranges] and [IPv4 ranges]. Some common ones include `"unicast"`
-(the default one) and `"reserved"`.
-
-You can match against your own range list by using
-`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with a mix of IPv6 or IPv4 addresses, and accepts a name-to-subnet map as the range list. For example:
-
-```js
-var rangeList = {
-  documentationOnly: [ ipaddr.parse('2001:db8::'), 32 ],
-  tunnelProviders: [
-    [ ipaddr.parse('2001:470::'), 32 ], // he.net
-    [ ipaddr.parse('2001:5c0::'), 32 ]  // freenet6
-  ]
-};
-ipaddr.subnetMatch(ipaddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => "tunnelProviders"
-```
-
-The addresses can be converted to their byte representation with `toByteArray()`.
-(Actually, JavaScript mostly does not know about byte buffers. They are emulated with
-arrays of numbers, each in range of 0..255.)
-
-```js
-var bytes = ipaddr.parse('2a00:1450:8007::68').toByteArray(); // ipv6.google.com
-bytes // => [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, <zeroes...>, 0x00, 0x68 ]
-```
-
-The `ipaddr.IPv4` and `ipaddr.IPv6` objects have some methods defined, too. All of them
-have the same interface for both protocols, and are similar to global methods.
-
-`ipaddr.IPvX.isValid(string)` can be used to check if the string is a valid address
-for particular protocol, and `ipaddr.IPvX.parse(string)` is the error-throwing parser.
-
-`ipaddr.IPvX.isValid(string)` uses the same format for parsing as the POSIX `inet_ntoa` function, which accepts unusual formats like `0xc0.168.1.1` or `0x10000000`. The function `ipaddr.IPv4.isValidFourPartDecimal(string)` validates the IPv4 address and also ensures that it is written in four-part decimal format.
-
-[IPv6 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L186
-[IPv4 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L71
-
-#### IPv6 properties
-
-Sometimes you will want to convert IPv6 not to a compact string representation (with
-the `::` substitution); the `toNormalizedString()` method will return an address where
-all zeroes are explicit.
-
-For example:
-
-```js
-var addr = ipaddr.parse("2001:0db8::0001");
-addr.toString(); // => "2001:db8::1"
-addr.toNormalizedString(); // => "2001:db8:0:0:0:0:0:1"
-```
-
-The `isIPv4MappedAddress()` method will return `true` if this address is an IPv4-mapped
-one, and `toIPv4Address()` will return an IPv4 object address.
-
-To access the underlying binary representation of the address, use `addr.parts`.
-
-```js
-var addr = ipaddr.parse("2001:db8:10::1234:DEAD");
-addr.parts // => [0x2001, 0xdb8, 0x10, 0, 0, 0, 0x1234, 0xdead]
-```
-
-A IPv6 zone index can be accessed via `addr.zoneId`:
-
-```js
-var addr = ipaddr.parse("2001:db8::%eth0");
-addr.zoneId // => 'eth0'
-```
-
-#### IPv4 properties
-
-`toIPv4MappedAddress()` will return a corresponding IPv4-mapped IPv6 address.
-
-To access the underlying representation of the address, use `addr.octets`.
-
-```js
-var addr = ipaddr.parse("192.168.1.1");
-addr.octets // => [192, 168, 1, 1]
-```
-
-`prefixLengthFromSubnetMask()` will return a CIDR prefix length for a valid IPv4 netmask or
-null if the netmask is not valid.
-
-```js
-ipaddr.IPv4.parse('255.255.255.240').prefixLengthFromSubnetMask() == 28
-ipaddr.IPv4.parse('255.192.164.0').prefixLengthFromSubnetMask()  == null
-```
-
-`subnetMaskFromPrefixLength()` will return an IPv4 netmask for a valid CIDR prefix length.
-
-```js
-ipaddr.IPv4.subnetMaskFromPrefixLength(24) == "255.255.255.0"
-ipaddr.IPv4.subnetMaskFromPrefixLength(29) == "255.255.255.248"
-```
-
-`broadcastAddressFromCIDR()` will return the broadcast address for a given IPv4 interface and netmask in CIDR notation.
-```js
-ipaddr.IPv4.broadcastAddressFromCIDR("172.0.0.1/24") == "172.0.0.255"
-```
-`networkAddressFromCIDR()` will return the network address for a given IPv4 interface and netmask in CIDR notation.
-```js
-ipaddr.IPv4.networkAddressFromCIDR("172.0.0.1/24") == "172.0.0.0"
-```
-
-#### Conversion
-
-IPv4 and IPv6 can be converted bidirectionally to and from network byte order (MSB) byte arrays.
-
-The `fromByteArray()` method will take an array and create an appropriate IPv4 or IPv6 object
-if the input satisfies the requirements. For IPv4 it has to be an array of four 8-bit values,
-while for IPv6 it has to be an array of sixteen 8-bit values.
-
-For example:
-```js
-var addr = ipaddr.fromByteArray([0x7f, 0, 0, 1]);
-addr.toString(); // => "127.0.0.1"
-```
-
-or
-
-```js
-var addr = ipaddr.fromByteArray([0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
-addr.toString(); // => "2001:db8::1"
-```
-
-Both objects also offer a `toByteArray()` method, which returns an array in network byte order (MSB).
-
-For example:
-```js
-var addr = ipaddr.parse("127.0.0.1");
-addr.toByteArray(); // => [0x7f, 0, 0, 1]
-```
-
-or
-
-```js
-var addr = ipaddr.parse("2001:db8::1");
-addr.toByteArray(); // => [0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
-```
diff --git a/device_home/node_modules/is-fullwidth-code-point/readme.md b/device_home/node_modules/is-fullwidth-code-point/readme.md
deleted file mode 100644 (file)
index 093b028..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point)
-
-> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms)
-
-
-## Install
-
-```
-$ npm install --save is-fullwidth-code-point
-```
-
-
-## Usage
-
-```js
-const isFullwidthCodePoint = require('is-fullwidth-code-point');
-
-isFullwidthCodePoint('谢'.codePointAt());
-//=> true
-
-isFullwidthCodePoint('a'.codePointAt());
-//=> false
-```
-
-
-## API
-
-### isFullwidthCodePoint(input)
-
-#### input
-
-Type: `number`
-
-[Code point](https://en.wikipedia.org/wiki/Code_point) of a character.
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/isarray/README.md b/device_home/node_modules/isarray/README.md
deleted file mode 100644 (file)
index 3e160b2..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-
-# isarray
-
-`Array#isArray` for older browsers and deprecated Node.js versions.
-
-[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray)
-[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray)
-
-[![browser support](https://ci.testling.com/juliangruber/isarray.png)
-](https://ci.testling.com/juliangruber/isarray)
-
-__Just use Array.isArray directly__, unless you need to support those older versions.
-
-## Usage
-
-```js
-var isArray = require('isarray');
-
-console.log(isArray([])); // => true
-console.log(isArray({})); // => false
-```
-
-## Installation
-
-With [npm](https://npmjs.org) do
-
-```bash
-$ npm install isarray
-```
-
-Then bundle for the browser with
-[browserify](https://github.com/substack/node-browserify).
-
-## Sponsors
-
-This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)!
-
-Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)!
diff --git a/device_home/node_modules/jake/README.md b/device_home/node_modules/jake/README.md
deleted file mode 100755 (executable)
index e938850..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-### Jake -- the JavaScript build tool for Node.js
-
-[![Build Status](https://travis-ci.org/jakejs/jake.svg?branch=master)](https://travis-ci.org/jakejs/jake)
-
-Documentation site at [http://jakejs.com](http://jakejs.com/)
-
-### Contributing
-1. [Install node](http://nodejs.org/#download).
-2. Clone this repository `$ git clone git@github.com:jakejs/jake.git`.
-3. Install dependencies `$ npm install`.
-4. Run tests with `$ npm test`.
-5. Start Hacking!
-
-### License
-
-Licensed under the Apache License, Version 2.0
-(<http://www.apache.org/licenses/LICENSE-2.0>)
diff --git a/device_home/node_modules/jake/test/integration/concurrent.js b/device_home/node_modules/jake/test/integration/concurrent.js
deleted file mode 100755 (executable)
index b80b897..0000000
+++ /dev/null
@@ -1 +0,0 @@
-let assert=require("assert"),exec=require("child_process").execSync;suite("concurrent",(function(){this.timeout(7e3),test(" simple concurrent prerequisites 1",(function(){let e=exec("./node_modules/.bin/jake -q concurrent:simple1").toString().trim();assert.equal("Started A\nStarted B\nFinished B\nFinished A",e)})),test(" simple concurrent prerequisites 2",(function(){let e=exec("./node_modules/.bin/jake -q concurrent:simple2").toString().trim();assert.equal("Started C\nStarted D\nFinished C\nFinished D",e)})),test(" sequential concurrent prerequisites",(function(){let e=exec("./node_modules/.bin/jake -q concurrent:seqconcurrent").toString().trim();assert.equal("Started A\nStarted B\nFinished B\nFinished A\nStarted C\nStarted D\nFinished C\nFinished D",e)})),test(" concurrent concurrent prerequisites",(function(){let e=exec("./node_modules/.bin/jake -q concurrent:concurrentconcurrent").toString().trim();assert.equal("Started A\nStarted B\nStarted C\nStarted D\nFinished B\nFinished C\nFinished A\nFinished D",e)})),test(" concurrent prerequisites with subdependency",(function(){let e=exec("./node_modules/.bin/jake -q concurrent:subdep").toString().trim();assert.equal("Started A\nFinished A\nStarted Ba\nFinished Ba",e)})),test(" failing in concurrent prerequisites",(function(){try{exec("./node_modules/.bin/jake -q concurrent:Cfail")}catch(e){assert(e.message.indexOf("Command failed")>-1)}}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/file.js b/device_home/node_modules/jake/test/integration/file.js
deleted file mode 100755 (executable)
index ea2a4e2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-const PROJECT_DIR=process.env.PROJECT_DIR;let assert=require("assert"),fs=require("fs"),path=require("path"),file=require(`${PROJECT_DIR}/lib/utils/file`),existsSync=fs.existsSync||path.existsSync,exec=require("child_process").execSync;suite("fileUtils",(function(){test("mkdirP",(function(){let t=[["foo"],["foo","bar"],["foo","bar","baz"],["foo","bar","baz","qux"]];file.mkdirP("foo/bar/baz/qux");let e=exec("find foo").toString().trim().split("\n");for(let f=0,o=e.length;f<o;f++)assert.equal(path.join.apply(path,t[f]),e[f]);file.rmRf("foo")})),test("rmRf",(function(){file.mkdirP("foo/bar/baz/qux"),file.rmRf("foo/bar");let t=exec("find foo").toString().trim().split("\n");assert.equal(1,t.length),assert.equal("foo",t[0]),fs.rmdirSync("foo")})),test("rmRf with symlink subdir",(function(){file.mkdirP("foo"),file.mkdirP("bar"),fs.writeFileSync("foo/hello.txt","hello, it's me"),fs.symlinkSync("../foo","bar/foo"),file.rmRf("bar");let t=!1;try{fs.statSync("bar")}catch(e){"ENOENT"==e.code&&(t=!0)}assert.equal(!0,t);let e=fs.readdirSync("foo");assert.equal(1,e.length),assert.equal("hello.txt",e[0]),fs.unlinkSync("foo/hello.txt"),fs.rmdirSync("foo")})),test("rmRf with symlinked dir",(function(){file.mkdirP("foo"),fs.writeFileSync("foo/hello.txt","hello!"),fs.symlinkSync("foo","bar"),file.rmRf("bar");let t=!1;try{fs.statSync("bar")}catch(e){"ENOENT"==e.code&&(t=!0)}assert.equal(!0,t);let e=fs.readdirSync("foo");assert.equal(1,e.length),assert.equal("hello.txt",e[0]),fs.unlinkSync("foo/hello.txt"),fs.rmdirSync("foo")})),test("cpR with same name and different directory",(function(){file.mkdirP("foo"),fs.writeFileSync("foo/bar.txt","w00t"),file.cpR("foo","bar"),assert.ok(existsSync("bar/bar.txt")),file.rmRf("foo"),file.rmRf("bar")})),test("cpR with same to and from will throw",(function(){assert.throws((function(){file.cpR("foo.txt","foo.txt")}))})),test("cpR rename via copy in directory",(function(){file.mkdirP("foo"),fs.writeFileSync("foo/bar.txt","w00t"),file.cpR("foo/bar.txt","foo/baz.txt"),assert.ok(existsSync("foo/baz.txt")),file.rmRf("foo")})),test("cpR rename via copy in base",(function(){fs.writeFileSync("bar.txt","w00t"),file.cpR("bar.txt","baz.txt"),assert.ok(existsSync("baz.txt")),file.rmRf("bar.txt"),file.rmRf("baz.txt")})),test("cpR keeps file mode",(function(){fs.writeFileSync("bar.txt","w00t",{mode:488}),fs.writeFileSync("bar1.txt","w00t!",{mode:484}),file.cpR("bar.txt","baz.txt"),file.cpR("bar1.txt","baz1.txt"),assert.ok(existsSync("baz.txt")),assert.ok(existsSync("baz1.txt"));let t=fs.statSync("baz.txt"),e=fs.statSync("baz1.txt");assert.equal(488,4095&t.mode),assert.equal(484,4095&e.mode),file.rmRf("bar.txt"),file.rmRf("baz.txt"),file.rmRf("bar1.txt"),file.rmRf("baz1.txt")})),test("cpR keeps file mode when overwriting with preserveMode",(function(){fs.writeFileSync("bar.txt","w00t",{mode:493}),fs.writeFileSync("baz.txt","w00t!",{mode:484}),file.cpR("bar.txt","baz.txt",{silent:!0,preserveMode:!0}),assert.ok(existsSync("baz.txt"));let t=fs.statSync("baz.txt");assert.equal(493,511&t.mode),file.rmRf("bar.txt"),file.rmRf("baz.txt")})),test("cpR does not keep file mode when overwriting",(function(){fs.writeFileSync("bar.txt","w00t",{mode:502}),fs.writeFileSync("baz.txt","w00t!",{mode:484}),file.cpR("bar.txt","baz.txt"),assert.ok(existsSync("baz.txt"));let t=fs.statSync("baz.txt");assert.equal(484,511&t.mode),file.rmRf("bar.txt"),file.rmRf("baz.txt")})),test("cpR copies file mode recursively",(function(){fs.mkdirSync("foo"),fs.writeFileSync("foo/bar.txt","w00t",{mode:480}),file.cpR("foo","baz"),assert.ok(existsSync("baz"));let t=fs.statSync("baz/bar.txt");assert.equal(480,511&t.mode),file.rmRf("foo"),file.rmRf("baz")})),test("cpR keeps file mode recursively",(function(){fs.mkdirSync("foo"),fs.writeFileSync("foo/bar.txt","w00t",{mode:480}),fs.mkdirSync("baz"),fs.mkdirSync("baz/foo"),fs.writeFileSync("baz/foo/bar.txt","w00t!",{mode:493}),file.cpR("foo","baz",{silent:!0,preserveMode:!0}),assert.ok(existsSync("baz"));let t=fs.statSync("baz/foo/bar.txt");assert.equal(480,511&t.mode),file.rmRf("foo"),file.rmRf("baz")})),test("cpR copies directory mode recursively",(function(){fs.mkdirSync("foo",493),fs.mkdirSync("foo/bar",448),file.cpR("foo","bar"),assert.ok(existsSync("foo"));let t=fs.statSync("bar/bar");assert.equal(448,511&t.mode),file.rmRf("foo"),file.rmRf("bar")}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/file_task.js b/device_home/node_modules/jake/test/integration/file_task.js
deleted file mode 100755 (executable)
index 1ba8a6a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-const PROJECT_DIR=process.env.PROJECT_DIR;let assert=require("assert"),fs=require("fs"),exec=require("child_process").execSync,{rmRf:rmRf}=require(`${PROJECT_DIR}/lib/jake`),cleanUpAndNext=function(e){rmRf("./foo",{silent:!0}),e&&e()};suite("fileTask",(function(){this.timeout(7e3),setup((function(){cleanUpAndNext()})),test("where a file-task prereq does not change with --always-make",(function(){let e;e=exec("./node_modules/.bin/jake -q fileTest:foo/from-src1.txt").toString().trim(),assert.equal("fileTest:foo/src1.txt task\nfileTest:foo/from-src1.txt task",e),e=exec("./node_modules/.bin/jake -q -B fileTest:foo/from-src1.txt").toString().trim(),assert.equal("fileTest:foo/src1.txt task\nfileTest:foo/from-src1.txt task",e),cleanUpAndNext()})),test("concating two files",(function(){let e;e=exec("./node_modules/.bin/jake -q fileTest:foo/concat.txt").toString().trim(),assert.equal("fileTest:foo/src1.txt task\ndefault task\nfileTest:foo/src2.txt task\nfileTest:foo/concat.txt task",e);let t=fs.readFileSync(process.cwd()+"/foo/concat.txt");assert.equal("src1src2",t.toString()),cleanUpAndNext()})),test("where a file-task prereq does not change",(function(){let e;e=exec("./node_modules/.bin/jake -q fileTest:foo/from-src1.txt").toString().trim(),assert.equal("fileTest:foo/src1.txt task\nfileTest:foo/from-src1.txt task",e),e=exec("./node_modules/.bin/jake -q fileTest:foo/from-src1.txt").toString().trim(),assert.equal("",e),cleanUpAndNext()})),test("where a file-task prereq does change, then does not",(function(e){exec("mkdir -p ./foo"),exec("touch ./foo/from-src1.txt"),setTimeout((()=>{let t;fs.writeFileSync("./foo/src1.txt","-SRC"),t=exec("./node_modules/.bin/jake -q fileTest:foo/from-src1.txt").toString().trim(),assert.equal("fileTest:foo/from-src1.txt task",t),t=exec("./node_modules/.bin/jake -q fileTest:foo/from-src1.txt").toString().trim(),assert.equal("",t),cleanUpAndNext(e)}),1e3)})),test("a preexisting file",(function(){let e,t="howdy";exec("mkdir -p ./foo"),fs.writeFileSync("foo/prereq.txt",t),e=exec("./node_modules/.bin/jake -q fileTest:foo/from-prereq.txt").toString().trim(),assert.equal("fileTest:foo/from-prereq.txt task",e);let o=fs.readFileSync(process.cwd()+"/foo/from-prereq.txt");assert.equal(t,o.toString()),e=exec("./node_modules/.bin/jake -q fileTest:foo/from-prereq.txt").toString().trim(),assert.equal("",e),cleanUpAndNext()})),test("a preexisting file with --always-make flag",(function(){let e,t="howdy";exec("mkdir -p ./foo"),fs.writeFileSync("foo/prereq.txt",t),e=exec("./node_modules/.bin/jake -q fileTest:foo/from-prereq.txt").toString().trim(),assert.equal("fileTest:foo/from-prereq.txt task",e);let o=fs.readFileSync(process.cwd()+"/foo/from-prereq.txt");assert.equal(t,o.toString()),e=exec("./node_modules/.bin/jake -q -B fileTest:foo/from-prereq.txt").toString().trim(),assert.equal("fileTest:foo/from-prereq.txt task",e),cleanUpAndNext()})),test("nested directory-task",(function(){exec("./node_modules/.bin/jake -q fileTest:foo/bar/baz/bamf.txt");let e=fs.readFileSync(process.cwd()+"/foo/bar/baz/bamf.txt");assert.equal("w00t",e),cleanUpAndNext()}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/helpers.js b/device_home/node_modules/jake/test/integration/helpers.js
deleted file mode 100755 (executable)
index a1070c5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var exec=require("child_process").exec,helpers=new function(){var e,r,t,n=[],i=function(){(r=n.shift())?(console.log("Running "+r),e[r]()):t()};this.exec=function(){for(var e,r,t=Array.prototype.slice.call(arguments),n=t.shift(),i={};e=t.shift();)"function"==typeof e?r=e:i=e;n+=" --trace";var c=i.execOpts?i.execOpts:{};exec(n,c,(function(e,t,n){var c=helpers.trim(t);if(e){if(!1===i.breakOnError)return r(e);throw e}r(n||c)}))},this.trim=function(e){return(e||"").replace(/^\s*|\s*$/g,"")},this.parse=function(e){var r=e||"";return r=(r=helpers.trim(r)).replace(/'/g,'"'),JSON.parse(r)},this.run=function(r,c){e=r,n=Object.keys(r),t=c,i()},this.next=function(){i()}};module.exports=helpers;
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/jakefile.js b/device_home/node_modules/jake/test/integration/jakefile.js
deleted file mode 100755 (executable)
index 8b1d780..0000000
+++ /dev/null
@@ -1 +0,0 @@
-let fs=require("fs"),Q=require("q");desc("The default t."),task("default",(function(){console.log("default task")})),desc("No action."),task({noAction:["default"]}),desc("No action, no prereqs."),task("noActionNoPrereqs"),desc("Top-level zerbofrangazoomy task"),task("zerbofrangazoomy",(function(){console.log("Whaaaaaaaa? Ran the zerbofrangazoomy task!")})),desc("Task that throws"),task("throwy",(function(){let e=function(o){console.log("Emitted"),console.log(o.toString()),jake.removeListener("error",e)};throw jake.on("error",e),new Error("I am bad")})),desc("Task that rejects a Promise"),task("promiseRejecter",(function(){const e=jake.program.opts["allow-rejection"],o=function(s){console.log(s.toString()),jake.removeListener("error",o),jake.program.opts["allow-rejection"]=e};jake.on("error",o),jake.program.opts["allow-rejection"]=!1,Promise.reject("<promise rejected on purpose>")})),desc("Accepts args and env vars."),task("argsEnvVars",(function(){let e={args:arguments,env:{foo:process.env.foo,baz:process.env.baz}};console.log(JSON.stringify(e))})),namespace("foo",(function(){desc("The foo:bar t."),task("bar",(function(){arguments.length?console.log("foo:bar["+Array.prototype.join.call(arguments,",")+"] task"):console.log("foo:bar task")})),desc("The foo:baz task, calls foo:bar as a prerequisite."),task("baz",["foo:bar"],(function(){console.log("foo:baz task")})),desc("The foo:qux task, calls foo:bar with cmdline args as a prerequisite."),task("qux",["foo:bar[asdf,qwer]"],(function(){console.log("foo:qux task")})),desc("The foo:frang task,`invokes` foo:bar with passed args as a prerequisite."),task("frang",(function(){let e=jake.Task["foo:bar"];e.invoke.apply(e,arguments),e.on("complete",(()=>{console.log("foo:frang task")}))})),desc("The foo:zerb task, `executes` foo:bar with passed args as a prerequisite."),task("zerb",(function(){let e=jake.Task["foo:bar"];e.execute.apply(e,arguments),e.on("complete",(()=>{console.log("foo:zerb task")}))})),desc("The foo:zoobie task, has no prerequisites."),task("zoobie",(function(){console.log("foo:zoobie task")})),desc("The foo:voom task, run the foo:zoobie task repeatedly."),task("voom",(function(){let e=jake.Task["foo:bar"];e.on("complete",(function(){console.log("complete")})),e.execute.apply(e),e.execute.apply(e)})),desc("The foo:asdf task, has the same prereq twice."),task("asdf",["foo:bar","foo:baz"],(function(){console.log("foo:asdf task")}))})),namespace("bar",(function(){desc("The bar:foo task, has no prerequisites, is async, returns Promise which resolves."),task("foo",(async function(){return new Promise(((e,o)=>{console.log("bar:foo task"),e()}))})),desc("The bar:promise task has no prerequisites, is async, returns Q-based promise."),task("promise",(function(){return Q().then((function(){return console.log("bar:promise task"),123654}))})),desc("The bar:dependOnpromise task waits for a promise based async test"),task("dependOnpromise",["promise"],(function(){console.log("bar:dependOnpromise task saw value",jake.Task["bar:promise"].value)})),desc("The bar:brokenPromise task is a failing Q-promise based async task."),task("brokenPromise",(function(){return Q().then((function(){throw new Error("nom nom nom")}))})),desc("The bar:bar task, has the async bar:foo task as a prerequisite."),task("bar",["bar:foo"],(function(){console.log("bar:bar task")}))})),namespace("hoge",(function(){desc("The hoge:hoge task, has no prerequisites."),task("hoge",(function(){console.log("hoge:hoge task")})),desc("The hoge:piyo task, has no prerequisites."),task("piyo",(function(){console.log("hoge:piyo task")})),desc("The hoge:fuga task, has hoge:hoge and hoge:piyo as prerequisites."),task("fuga",["hoge:hoge","hoge:piyo"],(function(){console.log("hoge:fuga task")})),desc("The hoge:charan task, has hoge:fuga as a prerequisite."),task("charan",["hoge:fuga"],(function(){console.log("hoge:charan task")})),desc("The hoge:gero task, has hoge:fuga as a prerequisite."),task("gero",["hoge:fuga"],(function(){console.log("hoge:gero task")})),desc("The hoge:kira task, has hoge:charan and hoge:gero as prerequisites."),task("kira",["hoge:charan","hoge:gero"],(function(){console.log("hoge:kira task")}))})),namespace("fileTest",(function(){directory("foo"),desc("File task, concatenating two files together"),file("foo/concat.txt",["fileTest:foo","fileTest:foo/src1.txt","fileTest:foo/src2.txt"],(function(){console.log("fileTest:foo/concat.txt task");let e=fs.readFileSync("foo/src1.txt"),o=fs.readFileSync("foo/src2.txt");fs.writeFileSync("foo/concat.txt",e+o)})),desc("File task, async creation with writeFile"),file("foo/src1.txt",(function(){return new Promise((function(e,o){fs.writeFile("foo/src1.txt","src1",(function(s){s?o(s):(console.log("fileTest:foo/src1.txt task"),e())}))}))})),desc("File task, sync creation with writeFileSync"),file("foo/src2.txt",["default"],(function(){fs.writeFileSync("foo/src2.txt","src2"),console.log("fileTest:foo/src2.txt task")})),desc("File task, do not run unless the prereq file changes"),file("foo/from-src1.txt",["fileTest:foo","fileTest:foo/src1.txt"],(function(){let e=fs.readFileSync("foo/src1.txt").toString();fs.writeFileSync("foo/from-src1.txt",e),console.log("fileTest:foo/from-src1.txt task")})),desc("File task, run if the prereq file changes"),task("touch-prereq",(function(){fs.writeFileSync("foo/prereq.txt","UPDATED")})),desc("File task, has a preexisting file (with no associated task) as a prereq"),file("foo/from-prereq.txt",["fileTest:foo","foo/prereq.txt"],(function(){let e=fs.readFileSync("foo/prereq.txt");fs.writeFileSync("foo/from-prereq.txt",e),console.log("fileTest:foo/from-prereq.txt task")})),directory("foo/bar/baz"),desc("Write a file in a nested subdirectory"),file("foo/bar/baz/bamf.txt",["foo/bar/baz"],(function(){fs.writeFileSync("foo/bar/baz/bamf.txt","w00t")}))})),task("blammo"),task("voom",["blammo"],(function(){console.log(this.prereqs.length)})),task("voom",["noActionNoPrereqs"]),namespace("vronk",(function(){task("groo",(function(){let e=jake.Task["vronk:zong"];e.addListener("error",(function(e){console.log(e.message)})),e.invoke()})),task("zong",(function(){throw new Error("OMFGZONG")}))})),namespace("one",(function(){task("one",(function(){console.log("one:one")}))})),namespace("one",(function(){task("two",["one:one"],(function(){console.log("one:two")}))})),task("selfdepconst",[],(function(){task("selfdep",["selfdep"],(function(){console.log("I made a task that depends on itself")}))})),task("selfdepdyn",(function(){task("selfdeppar",[],{concurrency:2},(function(){console.log("I will depend on myself and will fail at runtime")})),task("selfdeppar",["selfdeppar"]),jake.Task.selfdeppar.invoke()})),namespace("large",(function(){task("leaf",(function(){console.log("large:leaf")}));const e=[];for(let o=0;o<2e3;o++)e.push("leaf");desc("Task with a large number of same prereqs"),task("same",e,{concurrency:2},(function(){console.log("large:same")}));const o=[];for(let e=0;e<2e3;e++){const s="leaf-"+e;task(s,(function(){"leaf-12"!==s&&"leaf-123"!==s||console.log(s)})),o.push(s)}desc("Task with a large number of different prereqs"),task("different",o,{concurrency:2},(function(){console.log("large:different")}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/jakelib/concurrent.jake.js b/device_home/node_modules/jake/test/integration/jakelib/concurrent.jake.js
deleted file mode 100755 (executable)
index 8930293..0000000
+++ /dev/null
@@ -1 +0,0 @@
-namespace("concurrent",(function(){task("A",(function(){return console.log("Started A"),new Promise(((e,n)=>{setTimeout((()=>{console.log("Finished A"),e()}),200)}))})),task("B",(function(){return console.log("Started B"),new Promise(((e,n)=>{setTimeout((()=>{console.log("Finished B"),e()}),50)}))})),task("C",(function(){return console.log("Started C"),new Promise(((e,n)=>{setTimeout((()=>{console.log("Finished C"),e()}),100)}))})),task("D",(function(){return console.log("Started D"),new Promise(((e,n)=>{setTimeout((()=>{console.log("Finished D"),e()}),300)}))})),task("Ba",["A"],(function(){return console.log("Started Ba"),new Promise(((e,n)=>{setTimeout((()=>{console.log("Finished Ba"),e()}),50)}))})),task("Afail",(function(){return console.log("Started failing task"),new Promise(((e,n)=>{setTimeout((()=>{throw console.log("Failing B with error"),new Error("I failed")}),50)}))})),task("simple1",["A","B"],{concurrency:2},(function(){return new Promise(((e,n)=>{setTimeout((()=>{e()}),50)}))})),task("simple2",["C","D"],{concurrency:2},(function(){return new Promise(((e,n)=>{setTimeout((()=>{e()}),50)}))})),task("seqconcurrent",["simple1","simple2"],(function(){return new Promise(((e,n)=>{setTimeout((()=>{e()}),50)}))})),task("concurrentconcurrent",["simple1","simple2"],{concurrency:2},(function(){return new Promise(((e,n)=>{setTimeout((()=>{e()}),50)}))})),task("subdep",["A","Ba"],{concurrency:2},(function(){return new Promise(((e,n)=>{setTimeout((()=>{e()}),50)}))})),task("fail",["A","B","Afail"],{concurrency:3},(function(){return new Promise(((e,n)=>{setTimeout((()=>{e()}),50)}))}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/jakelib/publish.jake.js b/device_home/node_modules/jake/test/integration/jakelib/publish.jake.js
deleted file mode 100755 (executable)
index 47da0bc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-const PROJECT_DIR=process.env.PROJECT_DIR;let fs=require("fs"),{publishTask:publishTask,rmRf:rmRf,mkdirP:mkdirP}=require(`${PROJECT_DIR}/lib/jake`);fs.writeFileSync("package.json",'{"version": "0.0.1"}'),mkdirP("tmp_publish"),fs.writeFileSync("tmp_publish/foo.txt","FOO"),publishTask("zerb",(function(){this.packageFiles.include(["package.json","tmp_publish/**"]),this.publishCmd="node -p -e \"'%filename'\"",this.gitCmd="echo",this.scheduleDelay=0,this._ensureRepoClean=function(){},this._getCurrentBranch=function(){return"v0.0"}})),jake.setTaskTimeout(5e3),jake.Task.publish.on("complete",(function(){rmRf("tmp_publish",{silent:!0}),rmRf("package.json",{silent:!0})}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/jakelib/required_module.jake.js b/device_home/node_modules/jake/test/integration/jakelib/required_module.jake.js
deleted file mode 100755 (executable)
index 517cb73..0000000
+++ /dev/null
@@ -1 +0,0 @@
-let{task:task,namespace:namespace}=require("jake");namespace("usingRequire",(function(){task("test",(()=>{console.log("howdy test")}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/jakelib/rule.jake.js b/device_home/node_modules/jake/test/integration/jakelib/rule.jake.js
deleted file mode 100755 (executable)
index a5269f5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-const PROJECT_DIR=process.env.PROJECT_DIR;let exec=require("child_process").execSync,fs=require("fs"),util=require("util"),{rule:rule,rmRf:rmRf}=require(`${PROJECT_DIR}/lib/jake`);directory("tmpsrc"),directory("tmpbin"),file("tmp",["tmp_init","tmp_dep1.o","tmp_dep2.o"],(function(t){console.log("tmp task");let e=fs.readFileSync("tmp_dep1.o"),n=fs.readFileSync("tmp_dep2.o");fs.writeFileSync("tmp",e+n)})),rule(".o",".c",(function(){let t=util.format("cp %s %s",this.source,this.name);console.log(t+" task"),exec(t)})),file("tmp_dep1.c",(function(){fs.writeFileSync("tmp_dep1.c","src_1"),console.log("tmp_dep1.c task")})),task("tmp_init",(function(){fs.writeFileSync("tmp_dep2.c","src_2"),console.log("tmp_dep2.c task")})),file("tmp_p",["tmp_init","tmp_dep1.oo","tmp_dep2.oo"],(function(t){console.log("tmp pattern task");let e=fs.readFileSync("tmp_dep1.oo"),n=fs.readFileSync("tmp_dep2.oo");fs.writeFileSync("tmp_p",e+n+" pattern")})),rule("%.oo","%.c",(function(){let t=util.format("cp %s %s",this.source,this.name);console.log(t+" task"),exec(t)})),file("tmp_pf",["tmp_src_init","tmpbin","tmpbin/tmp_dep1.oo","tmpbin/tmp_dep2.oo"],(function(t){console.log("tmp pattern folder task");let e=fs.readFileSync("tmpbin/tmp_dep1.oo"),n=fs.readFileSync("tmpbin/tmp_dep2.oo");fs.writeFileSync("tmp_pf",e+n+" pattern folder")})),rule("tmpbin/%.oo","tmpsrc/%.c",(function(){let t=util.format("cp %s %s",this.source,this.name);console.log(t+" task"),exec(t)})),file("tmpsrc/tmp_dep2.c",["tmpsrc"],(function(){fs.writeFileSync("tmpsrc/tmp_dep2.c","src/src_2"),console.log("tmpsrc/tmp_dep2.c task")})),task("tmp_src_init",["tmpsrc"],(function(){fs.writeFileSync("tmpsrc/tmp_dep1.c","src/src_1"),console.log("tmpsrc/tmp_dep1.c task")})),task("tmp_ns",["tmpbin","rule:init","tmpbin/tmp_dep2.oo","rule:tmpbin/dep1.oo","rule:tmpbin/file2.oo"],(function(){console.log("tmp pattern folder namespace task");let t=fs.readFileSync("tmpbin/dep1.oo"),e=fs.readFileSync("tmpbin/tmp_dep2.oo"),n=fs.readFileSync("tmpbin/file2.oo");fs.writeFileSync("tmp_ns",t+e+n+" pattern folder namespace")})),namespace("rule",(function(){task("init",["tmpsrc"],(function(){fs.writeFileSync("tmpsrc/file2.c","src/src_3"),console.log("tmpsrc/file2.c init task")})),file("tmpsrc/dep1.c",["tmpsrc"],(function(){fs.writeFileSync("tmpsrc/dep1.c","src/src_1"),console.log("tmpsrc/dep1.c task")}),{async:!0}),rule("tmpbin/%.oo","tmpsrc/%.c",(function(){let t=util.format("cp %s %s",this.source,this.name);console.log(t+" ns task"),exec(t)}))})),task("tmp_cr",["chainrule:init","chainrule:tmpbin/file1.pdf","chainrule:tmpbin/file2.pdf"],(function(){console.log("tmp chainrule namespace task");let t=fs.readFileSync("tmpbin/file1.pdf"),e=fs.readFileSync("tmpbin/file2.pdf");fs.writeFileSync("tmp_cr",t+e+" chainrule namespace")})),namespace("chainrule",(function(){task("init",["tmpsrc","tmpbin"],(function(){fs.writeFileSync("tmpsrc/file1.tex","tex1 "),fs.writeFileSync("tmpsrc/file2.tex","tex2 "),console.log("chainrule init task")})),rule("tmpbin/%.pdf","tmpbin/%.dvi",(function(){let t=util.format("cp %s %s",this.source,this.name);console.log(t+" dvi->pdf task"),exec(t)})),rule("tmpbin/%.dvi","tmpsrc/%.tex",["tmpbin"],(function(){let t=util.format("cp %s %s",this.source,this.name);console.log(t+" tex->dvi task"),exec(t)}))})),namespace("precedence",(function(){task("test",["foo.html"],(function(){console.log("ran test")})),rule(".html",".txt",(function(){console.log("created html");let t=fs.readFileSync(this.source);fs.writeFileSync(this.name,t.toString())}))})),namespace("regexPattern",(function(){task("test",["foo.html"],(function(){console.log("ran test")})),rule(/\.html$/,".txt",(function(){console.log("created html");let t=fs.readFileSync(this.source);fs.writeFileSync(this.name,t.toString())}))})),namespace("sourceFunction",(function(){task("test",["foo.html"],(function(){console.log("ran test")})),rule(".html",(function(t){return t.replace(/\.[^.]+$/,".txt")}),(function(){console.log("created html");let t=fs.readFileSync(this.source);fs.writeFileSync(this.name,t.toString())}))})),task("clean",(function(){rmRf("./foo"),rmRf("./tmp")}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/publish_task.js b/device_home/node_modules/jake/test/integration/publish_task.js
deleted file mode 100755 (executable)
index cbaa13d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-let assert=require("assert"),exec=require("child_process").execSync;suite("publishTask",(function(){this.timeout(7e3),test("default task",(function(){let e=exec("./node_modules/.bin/jake  -q publish").toString().trim(),t=["Fetched remote tags.","On branch v0.0","Bumped version number to v0.0.2.","Created package for zerb v0.0.2","Publishing zerb v0.0.2","./pkg/zerb-v0.0.2.tar.gz","BOOM! Published.","Cleaned up package"].join("\n");assert.equal(t,e)}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/rule.js b/device_home/node_modules/jake/test/integration/rule.js
deleted file mode 100755 (executable)
index 6c018c2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-const PROJECT_DIR=process.env.PROJECT_DIR;let assert=require("assert"),exec=require("child_process").execSync,fs=require("fs"),{Rule:Rule}=require(`${PROJECT_DIR}/lib/rule`),{rmRf:rmRf}=require(`${PROJECT_DIR}/lib/jake`),cleanUpAndNext=function(e){["tmp","tmp_ns","tmp_cr","tmp_p","tmp_pf","tmpbin","tmpsrc","tmp_dep1.c","tmp_dep1.o","tmp_dep1.oo","tmp_dep2.c","tmp_dep2.o","tmp_dep2.oo","foo","foo.html"].forEach((function(e){rmRf(e,{silent:!0})})),e&&e()};suite("rule",(function(){this.timeout(7e3),setup((function(e){cleanUpAndNext(e)})),test("Rule.getSource",(function(){let e=Rule.getSource("foo:bin/main.o","bin/%.o","src/%.c");assert.equal("foo:src/main.c",e)})),test("rule w/o pattern",(function(){let e=exec("./node_modules/.bin/jake -q  tmp").toString().trim();assert.equal(["tmp_dep2.c task","tmp_dep1.c task","cp tmp_dep1.c tmp_dep1.o task","cp tmp_dep2.c tmp_dep2.o task","tmp task"].join("\n"),e);let t=fs.readFileSync(process.cwd()+"/tmp");assert.equal("src_1src_2",t.toString()),cleanUpAndNext()})),test("rule w pattern w/o folder w/o namespace",(function(){let e,t=exec("./node_modules/.bin/jake  -q  tmp_p").toString().trim();assert.equal(["tmp_dep2.c task","tmp_dep1.c task","cp tmp_dep1.c tmp_dep1.oo task","cp tmp_dep2.c tmp_dep2.oo task","tmp pattern task"].join("\n"),t),e=fs.readFileSync(process.cwd()+"/tmp_p"),assert.equal("src_1src_2 pattern",e.toString()),cleanUpAndNext()})),test("rule w pattern w folder w/o namespace",(function(){let e,t=exec("./node_modules/.bin/jake  -q  tmp_pf").toString().trim();assert.equal(["tmpsrc/tmp_dep1.c task","cp tmpsrc/tmp_dep1.c tmpbin/tmp_dep1.oo task","tmpsrc/tmp_dep2.c task","cp tmpsrc/tmp_dep2.c tmpbin/tmp_dep2.oo task","tmp pattern folder task"].join("\n"),t),e=fs.readFileSync(process.cwd()+"/tmp_pf"),assert.equal("src/src_1src/src_2 pattern folder",e.toString()),cleanUpAndNext()})),test.skip("rule w pattern w folder w namespace",(function(){let e,t=exec("./node_modules/.bin/jake -q   tmp_ns").toString().trim();assert.equal(["tmpsrc/file2.c init task","tmpsrc/tmp_dep2.c task","cp tmpsrc/tmp_dep2.c tmpbin/tmp_dep2.oo task","tmpsrc/dep1.c task","cp tmpsrc/dep1.c tmpbin/dep1.oo ns task","cp tmpsrc/file2.c tmpbin/file2.oo ns task","tmp pattern folder namespace task"].join("\n"),t),e=fs.readFileSync(process.cwd()+"/tmp_ns"),assert.equal("src/src_1src/src_2src/src_3 pattern folder namespace",e.toString()),cleanUpAndNext()})),test.skip("rule w chain w pattern w folder w namespace",(function(){let e,t=exec("./node_modules/.bin/jake -q tmp_cr").toString().trim();assert.equal(["chainrule init task","cp tmpsrc/file1.tex tmpbin/file1.dvi tex->dvi task","cp tmpbin/file1.dvi tmpbin/file1.pdf dvi->pdf task","cp tmpsrc/file2.tex tmpbin/file2.dvi tex->dvi task","cp tmpbin/file2.dvi tmpbin/file2.pdf dvi->pdf task","tmp chainrule namespace task"].join("\n"),t),e=fs.readFileSync(process.cwd()+"/tmp_cr"),assert.equal("tex1 tex2  chainrule namespace",e.toString()),cleanUpAndNext()})),["precedence","regexPattern","sourceFunction"].forEach((function(e){test("rule with source file not created yet ("+e+")",(function(){let t=process.stderr.write;process.stderr.write=()=>{},rmRf("foo.txt",{silent:!0}),rmRf("foo.html",{silent:!0});try{exec("./node_modules/.bin/jake  "+e+":test")}catch(e){assert.ok(e.message.indexOf('Unknown task "foo.html"')>-1)}process.stderr.write=t})),test("rule with source file now created ("+e+")",(function(){fs.writeFileSync("foo.txt","");let t=exec("./node_modules/.bin/jake -q  "+e+":test").toString().trim();assert.equal(["created html","ran test"].join("\n"),t)})),test("rule with source file modified ("+e+")",(function(t){setTimeout((function(){fs.writeFileSync("foo.txt","");let s=exec("./node_modules/.bin/jake -q  "+e+":test").toString().trim();assert.equal(["created html","ran test"].join("\n"),s),cleanUpAndNext(t)}),1e3)})),test("rule with existing objective file and no source  (should be normal file-task) ("+e+")",(function(){fs.writeFileSync("foo.html",""),rmRf("foo.txt",{silent:!0});let t=exec("./node_modules/.bin/jake -q  "+e+":test").toString().trim();assert.equal(["ran test"].join("\n"),t),cleanUpAndNext()}))}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/selfdep.js b/device_home/node_modules/jake/test/integration/selfdep.js
deleted file mode 100755 (executable)
index b8c469e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-let assert=require("assert"),exec=require("child_process").execSync;suite("selfDep",(function(){let e;this.timeout(7e3),setup((function(){e=process.stderr.write,process.stderr.write=function(){}})),teardown((function(){process.stderr.write=e})),test("self dep const",(function(){try{exec("./node_modules/.bin/jake selfdepconst")}catch(e){assert(e.message.indexOf("dependency of itself")>-1)}})),test("self dep dyn",(function(){try{exec("./node_modules/.bin/jake selfdepdyn")}catch(e){assert(e.message.indexOf("dependency of itself")>-1)}}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/integration/task_base.js b/device_home/node_modules/jake/test/integration/task_base.js
deleted file mode 100755 (executable)
index 24d00f3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-let assert=require("assert"),h=require("./helpers"),exec=require("child_process").execSync;suite("taskBase",(function(){this.timeout(7e3),test("default task",(function(){let e;e=exec("./node_modules/.bin/jake -q").toString().trim(),assert.equal(e,"default task"),e=exec("./node_modules/.bin/jake -q default").toString().trim(),assert.equal(e,"default task")})),test("task with no action",(function(){let e=exec("./node_modules/.bin/jake -q noAction").toString().trim();assert.equal(e,"default task")})),test("a task with no action and no prereqs",(function(){exec("./node_modules/.bin/jake noActionNoPrereqs")})),test("a task that exists at the top-level, and not in the specified namespace, should error",(function(){let e=require("child_process").spawnSync("./node_modules/.bin/jake",["asdfasdfasdf:zerbofrangazoomy"]).stderr.toString();assert.ok(e.indexOf(!1))})),test("passing args to a task",(function(){let e=exec("./node_modules/.bin/jake -q argsEnvVars[foo,bar]").toString().trim(),t=h.parse(e).args;assert.equal(t[0],"foo"),assert.equal(t[1],"bar")})),test("a task with environment vars",(function(){let e=exec("./node_modules/.bin/jake -q argsEnvVars foo=bar baz=qux").toString().trim(),t=h.parse(e).env;assert.equal(t.foo,"bar"),assert.equal(t.baz,"qux")})),test("passing args and using environment vars",(function(){let e=exec("./node_modules/.bin/jake -q argsEnvVars[foo,bar] foo=bar baz=qux").toString().trim(),t=h.parse(e),a=t.args,o=t.env;assert.equal(a[0],"foo"),assert.equal(a[1],"bar"),assert.equal(o.foo,"bar"),assert.equal(o.baz,"qux")})),test("a simple prereq",(function(){let e=exec("./node_modules/.bin/jake -q foo:baz").toString().trim();assert.equal(e,"foo:bar task\nfoo:baz task")})),test("a duplicate prereq only runs once",(function(){let e=exec("./node_modules/.bin/jake -q foo:asdf").toString().trim();assert.equal(e,"foo:bar task\nfoo:baz task\nfoo:asdf task")})),test("a prereq with command-line args",(function(){let e=exec("./node_modules/.bin/jake -q foo:qux").toString().trim();assert.equal(e,"foo:bar[asdf,qwer] task\nfoo:qux task")})),test("a prereq with args via invoke",(function(){let e=exec("./node_modules/.bin/jake -q foo:frang[zxcv,uiop]").toString().trim();assert.equal(e,"foo:bar[zxcv,uiop] task\nfoo:frang task")})),test("a prereq with args via execute",(function(){let e=exec("./node_modules/.bin/jake -q foo:zerb[zxcv,uiop]").toString().trim();assert.equal(e,"foo:bar[zxcv,uiop] task\nfoo:zerb task")})),test("repeating the task via execute",(function(){let e=exec("./node_modules/.bin/jake -q foo:voom").toString().trim();assert.equal(e,"foo:bar task\nfoo:bar task\ncomplete\ncomplete")})),test("prereq execution-order",(function(){let e=exec("./node_modules/.bin/jake -q hoge:fuga").toString().trim();assert.equal(e,"hoge:hoge task\nhoge:piyo task\nhoge:fuga task")})),test("basic async task",(function(){let e=exec("./node_modules/.bin/jake -q bar:bar").toString().trim();assert.equal(e,"bar:foo task\nbar:bar task")})),test("promise async task",(function(){let e=exec("./node_modules/.bin/jake -q bar:dependOnpromise").toString().trim();assert.equal(e,"bar:promise task\nbar:dependOnpromise task saw value 123654")})),test("failing promise async task",(function(){try{exec("./node_modules/.bin/jake -q bar:brokenPromise")}catch(e){assert(e.message.indexOf("Command failed")>-1)}})),test("that current-prereq index gets reset",(function(){let e=exec("./node_modules/.bin/jake -q hoge:kira").toString().trim();assert.equal(e,"hoge:hoge task\nhoge:piyo task\nhoge:fuga task\nhoge:charan task\nhoge:gero task\nhoge:kira task")})),test("modifying a task by adding prereq during execution",(function(){let e=exec("./node_modules/.bin/jake -q voom").toString().trim();assert.equal(e,2)})),test("listening for task error-event",(function(){try{exec("./node_modules/.bin/jake -q vronk:groo").toString().trim()}catch(e){assert(e.message.indexOf("OMFGZONG")>-1)}})),test("listening for jake error-event",(function(){let e=exec("./node_modules/.bin/jake -q throwy").toString().trim();assert(e.indexOf("Emitted\nError: I am bad")>-1)})),test("listening for jake unhandledRejection-event",(function(){let e=exec("./node_modules/.bin/jake -q promiseRejecter").toString().trim();assert.equal(e,"<promise rejected on purpose>")})),test("large number of same prereqs",(function(){let e=exec("./node_modules/.bin/jake -q large:same").toString().trim();assert.equal(e,"large:leaf\nlarge:same")})),test("large number of different prereqs",(function(){let e=exec("./node_modules/.bin/jake -q large:different").toString().trim();assert.equal(e,"leaf-12\nleaf-123\nlarge:different")})),test("large number of different prereqs",(function(){let e=exec("./node_modules/.bin/jake -q usingRequire:test").toString().trim();assert.equal(e,"howdy test")})),test("modifying a namespace by adding a new task",(function(){let e=exec("./node_modules/.bin/jake -q one:two").toString().trim();assert.equal("one:one\none:two",e)}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/unit/jakefile.js b/device_home/node_modules/jake/test/unit/jakefile.js
deleted file mode 100755 (executable)
index b38377d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-task("foo",(function(){console.log("ran top-level foo")})),task("bar",(function(){console.log("ran top-level bar")})),task("zerb",(function(){console.log("ran zerb")})),namespace("zooby",(function(){task("zerp",(function(){})),task("derp",["zerp"],(function(){})),namespace("frang",(function(){namespace("w00t",(function(){task("bar",(function(){console.log("ran zooby:frang:w00t:bar")}))})),task("asdf",(function(){}))}))})),namespace("hurr",(function(){namespace("durr")}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/unit/namespace.js b/device_home/node_modules/jake/test/unit/namespace.js
deleted file mode 100755 (executable)
index 4e7d1b6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-const PROJECT_DIR=process.env.PROJECT_DIR;require(`${PROJECT_DIR}/lib/jake`);let{Namespace:Namespace}=require(`${PROJECT_DIR}/lib/namespace`);require("./jakefile");let assert=require("assert");suite("namespace",(function(){this.timeout(7e3),test("resolve namespace by relative name",(function(){let e,a,s;e=namespace("aaa",(function(){a=namespace("bbb",(function(){s=namespace("ccc",(function(){}))}))})),assert.ok(e,Namespace.ROOT_NAMESPACE.resolveNamespace("aaa")),assert.ok(a===e.resolveNamespace("bbb")),assert.ok(s===e.resolveNamespace("bbb:ccc"))})),test("resolve task in sub-namespace by relative path",(function(){let e=Namespace.ROOT_NAMESPACE.resolveNamespace("zooby").resolveTask("frang:w00t:bar");assert.ok(e.action.toString().indexOf("zooby:frang:w00t:bar")>-1)})),test("prefer local to top-level",(function(){let e=Namespace.ROOT_NAMESPACE.resolveNamespace("zooby:frang:w00t").resolveTask("bar");assert.ok(e.action.toString().indexOf("zooby:frang:w00t:bar")>-1)})),test("does resolve top-level",(function(){let e=Namespace.ROOT_NAMESPACE.resolveNamespace("zooby:frang:w00t").resolveTask("foo");assert.ok(e.action.toString().indexOf("top-level foo")>-1)})),test("absolute lookup works from sub-namespaces",(function(){let e=Namespace.ROOT_NAMESPACE.resolveNamespace("hurr:durr").resolveTask("zooby:frang:w00t:bar");assert.ok(e.action.toString().indexOf("zooby:frang:w00t:bar")>-1)})),test("resolution miss with throw error",(function(){let e=Namespace.ROOT_NAMESPACE.resolveTask("asdf:qwer");assert.ok(!e)}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/jake/test/unit/parseargs.js b/device_home/node_modules/jake/test/unit/parseargs.js
deleted file mode 100755 (executable)
index 44adb2c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-const PROJECT_DIR=process.env.PROJECT_DIR;let res,parseargs=require(`${PROJECT_DIR}/lib/parseargs`),assert=require("assert"),optsReg=[{full:"directory",abbr:"C",preempts:!1,expectValue:!0},{full:"jakefile",abbr:"f",preempts:!1,expectValue:!0},{full:"tasks",abbr:"T",preempts:!0},{full:"tasks",abbr:"ls",preempts:!0},{full:"trace",abbr:"t",preempts:!1,expectValue:!1},{full:"help",abbr:"h",preempts:!0},{full:"version",abbr:"V",preempts:!0}],p=new parseargs.Parser(optsReg),z=function(e){return e.split(" ")};suite("parseargs",(function(){test("long preemptive opt and val with equal-sign, ignore further opts",(function(){res=p.parse(z("--tasks=foo --jakefile=asdf")),assert.equal("foo",res.opts.tasks),assert.equal(void 0,res.opts.jakefile)})),test("long preemptive opt and val without equal-sign, ignore further opts",(function(){res=p.parse(z("--tasks foo --jakefile=asdf")),assert.equal("foo",res.opts.tasks),assert.equal(void 0,res.opts.jakefile)})),test("long preemptive opt and no val, ignore further opts",(function(){res=p.parse(z("--tasks --jakefile=asdf")),assert.equal(!0,res.opts.tasks),assert.equal(void 0,res.opts.jakefile)})),test("preemptive opt with no val, should be true",(function(){res=p.parse(z("-T")),assert.equal(!0,res.opts.tasks)})),test("preemptive opt with no val, should be true and ignore further opts",(function(){res=p.parse(z("-T -f")),assert.equal(!0,res.opts.tasks),assert.equal(void 0,res.opts.jakefile)})),test("preemptive opt with val, should be val",(function(){res=p.parse(z("-T zoobie -f foo/bar/baz")),assert.equal("zoobie",res.opts.tasks),assert.equal(void 0,res.opts.jakefile)})),test("-f expects a value, -t does not (howdy is task-name)",(function(){res=p.parse(z("-f zoobie -t howdy")),assert.equal("zoobie",res.opts.jakefile),assert.equal(!0,res.opts.trace),assert.equal("howdy",res.taskNames[0])})),test("different order, -f expects a value, -t does not (howdy is task-name)",(function(){res=p.parse(z("-f zoobie howdy -t")),assert.equal("zoobie",res.opts.jakefile),assert.equal(!0,res.opts.trace),assert.equal("howdy",res.taskNames[0])})),test("-f expects a value, -t does not (foo=bar is env var)",(function(){res=p.parse(z("-f zoobie -t foo=bar")),assert.equal("zoobie",res.opts.jakefile),assert.equal(!0,res.opts.trace),assert.equal("bar",res.envVars.foo),assert.equal(void 0,res.taskNames[0])})),test("-f expects a value, -t does not (foo=bar is env-var, task-name follows)",(function(){res=p.parse(z("-f zoobie -t howdy foo=bar")),assert.equal("zoobie",res.opts.jakefile),assert.equal(!0,res.opts.trace),assert.equal("bar",res.envVars.foo),assert.equal("howdy",res.taskNames[0])})),test("-t does not expect a value, -f does (howdy is task-name)",(function(){res=p.parse(z("-t howdy -f zoobie")),assert.equal(!0,res.opts.trace),assert.equal("zoobie",res.opts.jakefile),assert.equal("howdy",res.taskNames[0])})),test("--trace does not expect a value, -f does (howdy is task-name)",(function(){res=p.parse(z("--trace howdy --jakefile zoobie")),assert.equal(!0,res.opts.trace),assert.equal("zoobie",res.opts.jakefile),assert.equal("howdy",res.taskNames[0])})),test("--trace does not expect a value (equal), -f does (throw howdy away)",(function(){res=p.parse(z("--trace=howdy --jakefile=zoobie")),assert.equal(!0,res.opts.trace),assert.equal("zoobie",res.opts.jakefile),assert.equal(void 0,res.taskNames[0])}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/locate-path/readme.md b/device_home/node_modules/locate-path/readme.md
deleted file mode 100644 (file)
index a1d2e62..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-# locate-path [![Build Status](https://travis-ci.org/sindresorhus/locate-path.svg?branch=master)](https://travis-ci.org/sindresorhus/locate-path)
-
-> Get the first path that exists on disk of multiple paths
-
-
-## Install
-
-```
-$ npm install locate-path
-```
-
-
-## Usage
-
-Here we find the first file that exists on disk, in array order.
-
-```js
-const locatePath = require('locate-path');
-
-const files = [
-       'unicorn.png',
-       'rainbow.png', // Only this one actually exists on disk
-       'pony.png'
-];
-
-(async () => {
-       console(await locatePath(files));
-       //=> 'rainbow'
-})();
-```
-
-
-## API
-
-### locatePath(input, [options])
-
-Returns a `Promise` for the first path that exists or `undefined` if none exists.
-
-#### input
-
-Type: `Iterable<string>`
-
-Paths to check.
-
-#### options
-
-Type: `Object`
-
-##### concurrency
-
-Type: `number`<br>
-Default: `Infinity`<br>
-Minimum: `1`
-
-Number of concurrently pending promises.
-
-##### preserveOrder
-
-Type: `boolean`<br>
-Default: `true`
-
-Preserve `input` order when searching.
-
-Disable this to improve performance if you don't care about the order.
-
-##### cwd
-
-Type: `string`<br>
-Default: `process.cwd()`
-
-Current working directory.
-
-### locatePath.sync(input, [options])
-
-Returns the first path that exists or `undefined` if none exists.
-
-#### input
-
-Type: `Iterable<string>`
-
-Paths to check.
-
-#### options
-
-Type: `Object`
-
-##### cwd
-
-Same as above.
-
-
-## Related
-
-- [path-exists](https://github.com/sindresorhus/path-exists) - Check if a path exists
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/media-typer/HISTORY.md b/device_home/node_modules/media-typer/HISTORY.md
deleted file mode 100644 (file)
index 62c2003..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-0.3.0 / 2014-09-07
-==================
-
-  * Support Node.js 0.6
-  * Throw error when parameter format invalid on parse
-
-0.2.0 / 2014-06-18
-==================
-
-  * Add `typer.format()` to format media types
-
-0.1.0 / 2014-06-17
-==================
-
-  * Accept `req` as argument to `parse`
-  * Accept `res` as argument to `parse`
-  * Parse media type with extra LWS between type and first parameter
-
-0.0.0 / 2014-06-13
-==================
-
-  * Initial implementation
diff --git a/device_home/node_modules/media-typer/README.md b/device_home/node_modules/media-typer/README.md
deleted file mode 100644 (file)
index d8df623..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-# media-typer
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Simple RFC 6838 media type parser
-
-## Installation
-
-```sh
-$ npm install media-typer
-```
-
-## API
-
-```js
-var typer = require('media-typer')
-```
-
-### typer.parse(string)
-
-```js
-var obj = typer.parse('image/svg+xml; charset=utf-8')
-```
-
-Parse a media type string. This will return an object with the following
-properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):
-
- - `type`: The type of the media type (always lower case). Example: `'image'`
-
- - `subtype`: The subtype of the media type (always lower case). Example: `'svg'`
-
- - `suffix`: The suffix of the media type (always lower case). Example: `'xml'`
-
- - `parameters`: An object of the parameters in the media type (name of parameter always lower case). Example: `{charset: 'utf-8'}`
-
-### typer.parse(req)
-
-```js
-var obj = typer.parse(req)
-```
-
-Parse the `content-type` header from the given `req`. Short-cut for
-`typer.parse(req.headers['content-type'])`.
-
-### typer.parse(res)
-
-```js
-var obj = typer.parse(res)
-```
-
-Parse the `content-type` header set on the given `res`. Short-cut for
-`typer.parse(res.getHeader('content-type'))`.
-
-### typer.format(obj)
-
-```js
-var obj = typer.format({type: 'image', subtype: 'svg', suffix: 'xml'})
-```
-
-Format an object into a media type string. This will return a string of the
-mime type for the given object. For the properties of the object, see the
-documentation for `typer.parse(string)`.
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/media-typer.svg?style=flat
-[npm-url]: https://npmjs.org/package/media-typer
-[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat
-[node-version-url]: http://nodejs.org/download/
-[travis-image]: https://img.shields.io/travis/jshttp/media-typer.svg?style=flat
-[travis-url]: https://travis-ci.org/jshttp/media-typer
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/media-typer.svg?style=flat
-[coveralls-url]: https://coveralls.io/r/jshttp/media-typer
-[downloads-image]: https://img.shields.io/npm/dm/media-typer.svg?style=flat
-[downloads-url]: https://npmjs.org/package/media-typer
diff --git a/device_home/node_modules/merge-descriptors/HISTORY.md b/device_home/node_modules/merge-descriptors/HISTORY.md
deleted file mode 100644 (file)
index 486771f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-1.0.1 / 2016-01-17
-==================
-
-  * perf: enable strict mode
-
-1.0.0 / 2015-03-01
-==================
-
-  * Add option to only add new descriptors
-  * Add simple argument validation
-  * Add jsdoc to source file
-
-0.0.2 / 2013-12-14
-==================
-
-  * Move repository to `component` organization
-
-0.0.1 / 2013-10-29
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/merge-descriptors/README.md b/device_home/node_modules/merge-descriptors/README.md
deleted file mode 100644 (file)
index d593c0e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-# Merge Descriptors
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Merge objects using descriptors.
-
-```js
-var thing = {
-  get name() {
-    return 'jon'
-  }
-}
-
-var animal = {
-
-}
-
-merge(animal, thing)
-
-animal.name === 'jon'
-```
-
-## API
-
-### merge(destination, source)
-
-Redefines `destination`'s descriptors with `source`'s.
-
-### merge(destination, source, false)
-
-Defines `source`'s descriptors on `destination` if `destination` does not have
-a descriptor by the same name.
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/merge-descriptors.svg
-[npm-url]: https://npmjs.org/package/merge-descriptors
-[travis-image]: https://img.shields.io/travis/component/merge-descriptors/master.svg
-[travis-url]: https://travis-ci.org/component/merge-descriptors
-[coveralls-image]: https://img.shields.io/coveralls/component/merge-descriptors/master.svg
-[coveralls-url]: https://coveralls.io/r/component/merge-descriptors?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/merge-descriptors.svg
-[downloads-url]: https://npmjs.org/package/merge-descriptors
diff --git a/device_home/node_modules/methods/HISTORY.md b/device_home/node_modules/methods/HISTORY.md
deleted file mode 100644 (file)
index c0ecf07..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-1.1.2 / 2016-01-17
-==================
-
-  * perf: enable strict mode
-
-1.1.1 / 2014-12-30
-==================
-
-  * Improve `browserify` support
-
-1.1.0 / 2014-07-05
-==================
-
-  * Add `CONNECT` method
-1.0.1 / 2014-06-02
-==================
-
-  * Fix module to work with harmony transform
-
-1.0.0 / 2014-05-08
-==================
-
-  * Add `PURGE` method
-
-0.1.0 / 2013-10-28
-==================
-
-  * Add `http.METHODS` support
diff --git a/device_home/node_modules/methods/README.md b/device_home/node_modules/methods/README.md
deleted file mode 100644 (file)
index 672a32b..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# Methods
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-HTTP verbs that Node.js core's HTTP parser supports.
-
-This module provides an export that is just like `http.METHODS` from Node.js core,
-with the following differences:
-
-  * All method names are lower-cased.
-  * Contains a fallback list of methods for Node.js versions that do not have a
-    `http.METHODS` export (0.10 and lower).
-  * Provides the fallback list when using tools like `browserify` without pulling
-    in the `http` shim module.
-
-## Install
-
-```bash
-$ npm install methods
-```
-
-## API
-
-```js
-var methods = require('methods')
-```
-
-### methods
-
-This is an array of lower-cased method names that Node.js supports. If Node.js
-provides the `http.METHODS` export, then this is the same array lower-cased,
-otherwise it is a snapshot of the verbs from Node.js 0.10.
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/methods.svg?style=flat
-[npm-url]: https://npmjs.org/package/methods
-[node-version-image]: https://img.shields.io/node/v/methods.svg?style=flat
-[node-version-url]: https://nodejs.org/en/download/
-[travis-image]: https://img.shields.io/travis/jshttp/methods.svg?style=flat
-[travis-url]: https://travis-ci.org/jshttp/methods
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/methods.svg?style=flat
-[coveralls-url]: https://coveralls.io/r/jshttp/methods?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/methods.svg?style=flat
-[downloads-url]: https://npmjs.org/package/methods
diff --git a/device_home/node_modules/mime-db/HISTORY.md b/device_home/node_modules/mime-db/HISTORY.md
deleted file mode 100644 (file)
index 56d792f..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-1.45.0 / 2020-09-22
-===================
-
-  * Add `application/ubjson` with extension `.ubj`
-  * Add `image/avif` with extension `.avif`
-  * Add `image/ktx2` with extension `.ktx2`
-  * Add extension `.dbf` to `application/vnd.dbf`
-  * Add extension `.rar` to `application/vnd.rar`
-  * Add extension `.td` to `application/urc-targetdesc+xml`
-  * Add new upstream MIME types
-  * Fix extension of `application/vnd.apple.keynote` to be `.key`
-
-1.44.0 / 2020-04-22
-===================
-
-  * Add charsets from IANA
-  * Add extension `.cjs` to `application/node`
-  * Add new upstream MIME types
-
-1.43.0 / 2020-01-05
-===================
-
-  * Add `application/x-keepass2` with extension `.kdbx`
-  * Add extension `.mxmf` to `audio/mobile-xmf`
-  * Add extensions from IANA for `application/*+xml` types
-  * Add new upstream MIME types
-
-1.42.0 / 2019-09-25
-===================
-
-  * Add `image/vnd.ms-dds` with extension `.dds`
-  * Add new upstream MIME types
-  * Remove compressible from `multipart/mixed`
-
-1.41.0 / 2019-08-30
-===================
-
-  * Add new upstream MIME types
-  * Add `application/toml` with extension `.toml`
-  * Mark `font/ttf` as compressible
-
-1.40.0 / 2019-04-20
-===================
-
-  * Add extensions from IANA for `model/*` types
-  * Add `text/mdx` with extension `.mdx`
-
-1.39.0 / 2019-04-04
-===================
-
-  * Add extensions `.siv` and `.sieve` to `application/sieve`
-  * Add new upstream MIME types
-
-1.38.0 / 2019-02-04
-===================
-
-  * Add extension `.nq` to `application/n-quads`
-  * Add extension `.nt` to `application/n-triples`
-  * Add new upstream MIME types
-  * Mark `text/less` as compressible
-
-1.37.0 / 2018-10-19
-===================
-
-  * Add extensions to HEIC image types
-  * Add new upstream MIME types
-
-1.36.0 / 2018-08-20
-===================
-
-  * Add Apple file extensions from IANA
-  * Add extensions from IANA for `image/*` types
-  * Add new upstream MIME types
-
-1.35.0 / 2018-07-15
-===================
-
-  * Add extension `.owl` to `application/rdf+xml`
-  * Add new upstream MIME types
-    - Removes extension `.woff` from `application/font-woff`
-
-1.34.0 / 2018-06-03
-===================
-
-  * Add extension `.csl` to `application/vnd.citationstyles.style+xml`
-  * Add extension `.es` to `application/ecmascript`
-  * Add new upstream MIME types
-  * Add `UTF-8` as default charset for `text/turtle`
-  * Mark all XML-derived types as compressible
-
-1.33.0 / 2018-02-15
-===================
-
-  * Add extensions from IANA for `message/*` types
-  * Add new upstream MIME types
-  * Fix some incorrect OOXML types
-  * Remove `application/font-woff2`
-
-1.32.0 / 2017-11-29
-===================
-
-  * Add new upstream MIME types
-  * Update `text/hjson` to registered `application/hjson`
-  * Add `text/shex` with extension `.shex`
-
-1.31.0 / 2017-10-25
-===================
-
-  * Add `application/raml+yaml` with extension `.raml`
-  * Add `application/wasm` with extension `.wasm`
-  * Add new `font` type from IANA
-  * Add new upstream font extensions
-  * Add new upstream MIME types
-  * Add extensions for JPEG-2000 images
-
-1.30.0 / 2017-08-27
-===================
-
-  * Add `application/vnd.ms-outlook`
-  * Add `application/x-arj`
-  * Add extension `.mjs` to `application/javascript`
-  * Add glTF types and extensions
-  * Add new upstream MIME types
-  * Add `text/x-org`
-  * Add VirtualBox MIME types
-  * Fix `source` records for `video/*` types that are IANA
-  * Update `font/opentype` to registered `font/otf`
-
-1.29.0 / 2017-07-10
-===================
-
-  * Add `application/fido.trusted-apps+json`
-  * Add extension `.wadl` to `application/vnd.sun.wadl+xml`
-  * Add new upstream MIME types
-  * Add `UTF-8` as default charset for `text/css`
-
-1.28.0 / 2017-05-14
-===================
-
-  * Add new upstream MIME types
-  * Add extension `.gz` to `application/gzip`
-  * Update extensions `.md` and `.markdown` to be `text/markdown`
-
-1.27.0 / 2017-03-16
-===================
-
-  * Add new upstream MIME types
-  * Add `image/apng` with extension `.apng`
-
-1.26.0 / 2017-01-14
-===================
-
-  * Add new upstream MIME types
-  * Add extension `.geojson` to `application/geo+json`
-
-1.25.0 / 2016-11-11
-===================
-
-  * Add new upstream MIME types
-
-1.24.0 / 2016-09-18
-===================
-
-  * Add `audio/mp3`
-  * Add new upstream MIME types
-
-1.23.0 / 2016-05-01
-===================
-
-  * Add new upstream MIME types
-  * Add extension `.3gpp` to `audio/3gpp`
-
-1.22.0 / 2016-02-15
-===================
-
-  * Add `text/slim`
-  * Add extension `.rng` to `application/xml`
-  * Add new upstream MIME types
-  * Fix extension of `application/dash+xml` to be `.mpd`
-  * Update primary extension to `.m4a` for `audio/mp4`
-
-1.21.0 / 2016-01-06
-===================
-
-  * Add Google document types
-  * Add new upstream MIME types
-
-1.20.0 / 2015-11-10
-===================
-
-  * Add `text/x-suse-ymp`
-  * Add new upstream MIME types
-
-1.19.0 / 2015-09-17
-===================
-
-  * Add `application/vnd.apple.pkpass`
-  * Add new upstream MIME types
-
-1.18.0 / 2015-09-03
-===================
-
-  * Add new upstream MIME types
-
-1.17.0 / 2015-08-13
-===================
-
-  * Add `application/x-msdos-program`
-  * Add `audio/g711-0`
-  * Add `image/vnd.mozilla.apng`
-  * Add extension `.exe` to `application/x-msdos-program`
-
-1.16.0 / 2015-07-29
-===================
-
-  * Add `application/vnd.uri-map`
-
-1.15.0 / 2015-07-13
-===================
-
-  * Add `application/x-httpd-php`
-
-1.14.0 / 2015-06-25
-===================
-
-  * Add `application/scim+json`
-  * Add `application/vnd.3gpp.ussd+xml`
-  * Add `application/vnd.biopax.rdf+xml`
-  * Add `text/x-processing`
-
-1.13.0 / 2015-06-07
-===================
-
-  * Add nginx as a source
-  * Add `application/x-cocoa`
-  * Add `application/x-java-archive-diff`
-  * Add `application/x-makeself`
-  * Add `application/x-perl`
-  * Add `application/x-pilot`
-  * Add `application/x-redhat-package-manager`
-  * Add `application/x-sea`
-  * Add `audio/x-m4a`
-  * Add `audio/x-realaudio`
-  * Add `image/x-jng`
-  * Add `text/mathml`
-
-1.12.0 / 2015-06-05
-===================
-
-  * Add `application/bdoc`
-  * Add `application/vnd.hyperdrive+json`
-  * Add `application/x-bdoc`
-  * Add extension `.rtf` to `text/rtf`
-
-1.11.0 / 2015-05-31
-===================
-
-  * Add `audio/wav`
-  * Add `audio/wave`
-  * Add extension `.litcoffee` to `text/coffeescript`
-  * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data`
-  * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install`
-
-1.10.0 / 2015-05-19
-===================
-
-  * Add `application/vnd.balsamiq.bmpr`
-  * Add `application/vnd.microsoft.portable-executable`
-  * Add `application/x-ns-proxy-autoconfig`
-
-1.9.1 / 2015-04-19
-==================
-
-  * Remove `.json` extension from `application/manifest+json`
-    - This is causing bugs downstream
-
-1.9.0 / 2015-04-19
-==================
-
-  * Add `application/manifest+json`
-  * Add `application/vnd.micro+json`
-  * Add `image/vnd.zbrush.pcx`
-  * Add `image/x-ms-bmp`
-
-1.8.0 / 2015-03-13
-==================
-
-  * Add `application/vnd.citationstyles.style+xml`
-  * Add `application/vnd.fastcopy-disk-image`
-  * Add `application/vnd.gov.sk.xmldatacontainer+xml`
-  * Add extension `.jsonld` to `application/ld+json`
-
-1.7.0 / 2015-02-08
-==================
-
-  * Add `application/vnd.gerber`
-  * Add `application/vnd.msa-disk-image`
-
-1.6.1 / 2015-02-05
-==================
-
-  * Community extensions ownership transferred from `node-mime`
-
-1.6.0 / 2015-01-29
-==================
-
-  * Add `application/jose`
-  * Add `application/jose+json`
-  * Add `application/json-seq`
-  * Add `application/jwk+json`
-  * Add `application/jwk-set+json`
-  * Add `application/jwt`
-  * Add `application/rdap+json`
-  * Add `application/vnd.gov.sk.e-form+xml`
-  * Add `application/vnd.ims.imsccv1p3`
-
-1.5.0 / 2014-12-30
-==================
-
-  * Add `application/vnd.oracle.resource+json`
-  * Fix various invalid MIME type entries
-    - `application/mbox+xml`
-    - `application/oscp-response`
-    - `application/vwg-multiplexed`
-    - `audio/g721`
-
-1.4.0 / 2014-12-21
-==================
-
-  * Add `application/vnd.ims.imsccv1p2`
-  * Fix various invalid MIME type entries
-    - `application/vnd-acucobol`
-    - `application/vnd-curl`
-    - `application/vnd-dart`
-    - `application/vnd-dxr`
-    - `application/vnd-fdf`
-    - `application/vnd-mif`
-    - `application/vnd-sema`
-    - `application/vnd-wap-wmlc`
-    - `application/vnd.adobe.flash-movie`
-    - `application/vnd.dece-zip`
-    - `application/vnd.dvb_service`
-    - `application/vnd.micrografx-igx`
-    - `application/vnd.sealed-doc`
-    - `application/vnd.sealed-eml`
-    - `application/vnd.sealed-mht`
-    - `application/vnd.sealed-ppt`
-    - `application/vnd.sealed-tiff`
-    - `application/vnd.sealed-xls`
-    - `application/vnd.sealedmedia.softseal-html`
-    - `application/vnd.sealedmedia.softseal-pdf`
-    - `application/vnd.wap-slc`
-    - `application/vnd.wap-wbxml`
-    - `audio/vnd.sealedmedia.softseal-mpeg`
-    - `image/vnd-djvu`
-    - `image/vnd-svf`
-    - `image/vnd-wap-wbmp`
-    - `image/vnd.sealed-png`
-    - `image/vnd.sealedmedia.softseal-gif`
-    - `image/vnd.sealedmedia.softseal-jpg`
-    - `model/vnd-dwf`
-    - `model/vnd.parasolid.transmit-binary`
-    - `model/vnd.parasolid.transmit-text`
-    - `text/vnd-a`
-    - `text/vnd-curl`
-    - `text/vnd.wap-wml`
-  * Remove example template MIME types
-    - `application/example`
-    - `audio/example`
-    - `image/example`
-    - `message/example`
-    - `model/example`
-    - `multipart/example`
-    - `text/example`
-    - `video/example`
-
-1.3.1 / 2014-12-16
-==================
-
-  * Fix missing extensions
-    - `application/json5`
-    - `text/hjson`
-
-1.3.0 / 2014-12-07
-==================
-
-  * Add `application/a2l`
-  * Add `application/aml`
-  * Add `application/atfx`
-  * Add `application/atxml`
-  * Add `application/cdfx+xml`
-  * Add `application/dii`
-  * Add `application/json5`
-  * Add `application/lxf`
-  * Add `application/mf4`
-  * Add `application/vnd.apache.thrift.compact`
-  * Add `application/vnd.apache.thrift.json`
-  * Add `application/vnd.coffeescript`
-  * Add `application/vnd.enphase.envoy`
-  * Add `application/vnd.ims.imsccv1p1`
-  * Add `text/csv-schema`
-  * Add `text/hjson`
-  * Add `text/markdown`
-  * Add `text/yaml`
-
-1.2.0 / 2014-11-09
-==================
-
-  * Add `application/cea`
-  * Add `application/dit`
-  * Add `application/vnd.gov.sk.e-form+zip`
-  * Add `application/vnd.tmd.mediaflex.api+xml`
-  * Type `application/epub+zip` is now IANA-registered
-
-1.1.2 / 2014-10-23
-==================
-
-  * Rebuild database for `application/x-www-form-urlencoded` change
-
-1.1.1 / 2014-10-20
-==================
-
-  * Mark `application/x-www-form-urlencoded` as compressible.
-
-1.1.0 / 2014-09-28
-==================
-
-  * Add `application/font-woff2`
-
-1.0.3 / 2014-09-25
-==================
-
-  * Fix engine requirement in package
-
-1.0.2 / 2014-09-25
-==================
-
-  * Add `application/coap-group+json`
-  * Add `application/dcd`
-  * Add `application/vnd.apache.thrift.binary`
-  * Add `image/vnd.tencent.tap`
-  * Mark all JSON-derived types as compressible
-  * Update `text/vtt` data
-
-1.0.1 / 2014-08-30
-==================
-
-  * Fix extension ordering
-
-1.0.0 / 2014-08-30
-==================
-
-  * Add `application/atf`
-  * Add `application/merge-patch+json`
-  * Add `multipart/x-mixed-replace`
-  * Add `source: 'apache'` metadata
-  * Add `source: 'iana'` metadata
-  * Remove badly-assumed charset data
diff --git a/device_home/node_modules/mime-db/README.md b/device_home/node_modules/mime-db/README.md
deleted file mode 100644 (file)
index f1e6391..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# mime-db
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Coverage Status][coveralls-image]][coveralls-url]
-
-This is a database of all mime types.
-It consists of a single, public JSON file and does not include any logic,
-allowing it to remain as un-opinionated as possible with an API.
-It aggregates data from the following sources:
-
-- http://www.iana.org/assignments/media-types/media-types.xhtml
-- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
-- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types
-
-## Installation
-
-```bash
-npm install mime-db
-```
-
-### Database Download
-
-If you're crazy enough to use this in the browser, you can just grab the
-JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to
-replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags)
-as the JSON format may change in the future.
-
-```
-https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json
-```
-
-## Usage
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var db = require('mime-db')
-
-// grab data on .js files
-var data = db['application/javascript']
-```
-
-## Data Structure
-
-The JSON file is a map lookup for lowercased mime types.
-Each mime type has the following properties:
-
-- `.source` - where the mime type is defined.
-    If not set, it's probably a custom media type.
-    - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)
-    - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
-    - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)
-- `.extensions[]` - known extensions associated with this mime type.
-- `.compressible` - whether a file of this type can be gzipped.
-- `.charset` - the default charset associated with this type, if any.
-
-If unknown, every property could be `undefined`.
-
-## Contributing
-
-To edit the database, only make PRs against `src/custom-types.json` or
-`src/custom-suffix.json`.
-
-The `src/custom-types.json` file is a JSON object with the MIME type as the
-keys and the values being an object with the following keys:
-
-- `compressible` - leave out if you don't know, otherwise `true`/`false` to
-  indicate whether the data represented by the type is typically compressible.
-- `extensions` - include an array of file extensions that are associated with
-  the type.
-- `notes` - human-readable notes about the type, typically what the type is.
-- `sources` - include an array of URLs of where the MIME type and the associated
-  extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source);
-  links to type aggregating sites and Wikipedia are _not acceptable_.
-
-To update the build, run `npm run build`.
-
-### Adding Custom Media Types
-
-The best way to get new media types included in this library is to register
-them with the IANA. The community registration procedure is outlined in
-[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types
-registered with the IANA are automatically pulled into this library.
-
-If that is not possible / feasible, they can be added directly here as a
-"custom" type. To do this, it is required to have a primary source that
-definitively lists the media type. If an extension is going to be listed as
-associateed with this media type, the source must definitively link the
-media type and extension as well.
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master
-[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master
-[node-image]: https://badgen.net/npm/node/mime-db
-[node-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/mime-db
-[npm-url]: https://npmjs.org/package/mime-db
-[npm-version-image]: https://badgen.net/npm/v/mime-db
-[travis-image]: https://badgen.net/travis/jshttp/mime-db/master
-[travis-url]: https://travis-ci.org/jshttp/mime-db
diff --git a/device_home/node_modules/mime-types/HISTORY.md b/device_home/node_modules/mime-types/HISTORY.md
deleted file mode 100644 (file)
index af65fdb..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-2.1.28 / 2021-01-01
-===================
-
-  * deps: mime-db@1.45.0
-    - Add `application/ubjson` with extension `.ubj`
-    - Add `image/avif` with extension `.avif`
-    - Add `image/ktx2` with extension `.ktx2`
-    - Add extension `.dbf` to `application/vnd.dbf`
-    - Add extension `.rar` to `application/vnd.rar`
-    - Add extension `.td` to `application/urc-targetdesc+xml`
-    - Add new upstream MIME types
-    - Fix extension of `application/vnd.apple.keynote` to be `.key`
-
-2.1.27 / 2020-04-23
-===================
-
-  * deps: mime-db@1.44.0
-    - Add charsets from IANA
-    - Add extension `.cjs` to `application/node`
-    - Add new upstream MIME types
-
-2.1.26 / 2020-01-05
-===================
-
-  * deps: mime-db@1.43.0
-    - Add `application/x-keepass2` with extension `.kdbx`
-    - Add extension `.mxmf` to `audio/mobile-xmf`
-    - Add extensions from IANA for `application/*+xml` types
-    - Add new upstream MIME types
-
-2.1.25 / 2019-11-12
-===================
-
-  * deps: mime-db@1.42.0
-    - Add new upstream MIME types
-    - Add `application/toml` with extension `.toml`
-    - Add `image/vnd.ms-dds` with extension `.dds`
-
-2.1.24 / 2019-04-20
-===================
-
-  * deps: mime-db@1.40.0
-    - Add extensions from IANA for `model/*` types
-    - Add `text/mdx` with extension `.mdx`
-
-2.1.23 / 2019-04-17
-===================
-
-  * deps: mime-db@~1.39.0
-    - Add extensions `.siv` and `.sieve` to `application/sieve`
-    - Add new upstream MIME types
-
-2.1.22 / 2019-02-14
-===================
-
-  * deps: mime-db@~1.38.0
-    - Add extension `.nq` to `application/n-quads`
-    - Add extension `.nt` to `application/n-triples`
-    - Add new upstream MIME types
-    - Mark `text/less` as compressible
-
-2.1.21 / 2018-10-19
-===================
-
-  * deps: mime-db@~1.37.0
-    - Add extensions to HEIC image types
-    - Add new upstream MIME types
-
-2.1.20 / 2018-08-26
-===================
-
-  * deps: mime-db@~1.36.0
-    - Add Apple file extensions from IANA
-    - Add extensions from IANA for `image/*` types
-    - Add new upstream MIME types
-
-2.1.19 / 2018-07-17
-===================
-
-  * deps: mime-db@~1.35.0
-    - Add extension `.csl` to `application/vnd.citationstyles.style+xml`
-    - Add extension `.es` to `application/ecmascript`
-    - Add extension `.owl` to `application/rdf+xml`
-    - Add new upstream MIME types
-    - Add UTF-8 as default charset for `text/turtle`
-
-2.1.18 / 2018-02-16
-===================
-
-  * deps: mime-db@~1.33.0
-    - Add `application/raml+yaml` with extension `.raml`
-    - Add `application/wasm` with extension `.wasm`
-    - Add `text/shex` with extension `.shex`
-    - Add extensions for JPEG-2000 images
-    - Add extensions from IANA for `message/*` types
-    - Add new upstream MIME types
-    - Update font MIME types
-    - Update `text/hjson` to registered `application/hjson`
-
-2.1.17 / 2017-09-01
-===================
-
-  * deps: mime-db@~1.30.0
-    - Add `application/vnd.ms-outlook`
-    - Add `application/x-arj`
-    - Add extension `.mjs` to `application/javascript`
-    - Add glTF types and extensions
-    - Add new upstream MIME types
-    - Add `text/x-org`
-    - Add VirtualBox MIME types
-    - Fix `source` records for `video/*` types that are IANA
-    - Update `font/opentype` to registered `font/otf`
-
-2.1.16 / 2017-07-24
-===================
-
-  * deps: mime-db@~1.29.0
-    - Add `application/fido.trusted-apps+json`
-    - Add extension `.wadl` to `application/vnd.sun.wadl+xml`
-    - Add extension `.gz` to `application/gzip`
-    - Add new upstream MIME types
-    - Update extensions `.md` and `.markdown` to be `text/markdown`
-
-2.1.15 / 2017-03-23
-===================
-
-  * deps: mime-db@~1.27.0
-    - Add new mime types
-    - Add `image/apng`
-
-2.1.14 / 2017-01-14
-===================
-
-  * deps: mime-db@~1.26.0
-    - Add new mime types
-
-2.1.13 / 2016-11-18
-===================
-
-  * deps: mime-db@~1.25.0
-    - Add new mime types
-
-2.1.12 / 2016-09-18
-===================
-
-  * deps: mime-db@~1.24.0
-    - Add new mime types
-    - Add `audio/mp3`
-
-2.1.11 / 2016-05-01
-===================
-
-  * deps: mime-db@~1.23.0
-    - Add new mime types
-
-2.1.10 / 2016-02-15
-===================
-
-  * deps: mime-db@~1.22.0
-    - Add new mime types
-    - Fix extension of `application/dash+xml`
-    - Update primary extension for `audio/mp4`
-
-2.1.9 / 2016-01-06
-==================
-
-  * deps: mime-db@~1.21.0
-    - Add new mime types
-
-2.1.8 / 2015-11-30
-==================
-
-  * deps: mime-db@~1.20.0
-    - Add new mime types
-
-2.1.7 / 2015-09-20
-==================
-
-  * deps: mime-db@~1.19.0
-    - Add new mime types
-
-2.1.6 / 2015-09-03
-==================
-
-  * deps: mime-db@~1.18.0
-    - Add new mime types
-
-2.1.5 / 2015-08-20
-==================
-
-  * deps: mime-db@~1.17.0
-    - Add new mime types
-
-2.1.4 / 2015-07-30
-==================
-
-  * deps: mime-db@~1.16.0
-    - Add new mime types
-
-2.1.3 / 2015-07-13
-==================
-
-  * deps: mime-db@~1.15.0
-    - Add new mime types
-
-2.1.2 / 2015-06-25
-==================
-
-  * deps: mime-db@~1.14.0
-    - Add new mime types
-
-2.1.1 / 2015-06-08
-==================
-
-  * perf: fix deopt during mapping
-
-2.1.0 / 2015-06-07
-==================
-
-  * Fix incorrectly treating extension-less file name as extension
-    - i.e. `'path/to/json'` will no longer return `application/json`
-  * Fix `.charset(type)` to accept parameters
-  * Fix `.charset(type)` to match case-insensitive
-  * Improve generation of extension to MIME mapping
-  * Refactor internals for readability and no argument reassignment
-  * Prefer `application/*` MIME types from the same source
-  * Prefer any type over `application/octet-stream`
-  * deps: mime-db@~1.13.0
-    - Add nginx as a source
-    - Add new mime types
-
-2.0.14 / 2015-06-06
-===================
-
-  * deps: mime-db@~1.12.0
-    - Add new mime types
-
-2.0.13 / 2015-05-31
-===================
-
-  * deps: mime-db@~1.11.0
-    - Add new mime types
-
-2.0.12 / 2015-05-19
-===================
-
-  * deps: mime-db@~1.10.0
-    - Add new mime types
-
-2.0.11 / 2015-05-05
-===================
-
-  * deps: mime-db@~1.9.1
-    - Add new mime types
-
-2.0.10 / 2015-03-13
-===================
-
-  * deps: mime-db@~1.8.0
-    - Add new mime types
-
-2.0.9 / 2015-02-09
-==================
-
-  * deps: mime-db@~1.7.0
-    - Add new mime types
-    - Community extensions ownership transferred from `node-mime`
-
-2.0.8 / 2015-01-29
-==================
-
-  * deps: mime-db@~1.6.0
-    - Add new mime types
-
-2.0.7 / 2014-12-30
-==================
-
-  * deps: mime-db@~1.5.0
-    - Add new mime types
-    - Fix various invalid MIME type entries
-
-2.0.6 / 2014-12-30
-==================
-
-  * deps: mime-db@~1.4.0
-    - Add new mime types
-    - Fix various invalid MIME type entries
-    - Remove example template MIME types
-
-2.0.5 / 2014-12-29
-==================
-
-  * deps: mime-db@~1.3.1
-    - Fix missing extensions
-
-2.0.4 / 2014-12-10
-==================
-
-  * deps: mime-db@~1.3.0
-    - Add new mime types
-
-2.0.3 / 2014-11-09
-==================
-
-  * deps: mime-db@~1.2.0
-    - Add new mime types
-
-2.0.2 / 2014-09-28
-==================
-
-  * deps: mime-db@~1.1.0
-    - Add new mime types
-    - Add additional compressible
-    - Update charsets
-
-2.0.1 / 2014-09-07
-==================
-
-  * Support Node.js 0.6
-
-2.0.0 / 2014-09-02
-==================
-
-  * Use `mime-db`
-  * Remove `.define()`
-
-1.0.2 / 2014-08-04
-==================
-
-  * Set charset=utf-8 for `text/javascript`
-
-1.0.1 / 2014-06-24
-==================
-
-  * Add `text/jsx` type
-
-1.0.0 / 2014-05-12
-==================
-
-  * Return `false` for unknown types
-  * Set charset=utf-8 for `application/json`
-
-0.1.0 / 2014-05-02
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/mime-types/README.md b/device_home/node_modules/mime-types/README.md
deleted file mode 100644 (file)
index e8bf8eb..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-# mime-types
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][ci-image]][ci-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-The ultimate javascript content-type utility.
-
-Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except:
-
-- __No fallbacks.__ Instead of naively returning the first available type,
-  `mime-types` simply returns `false`, so do
-  `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.
-- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.
-- No `.define()` functionality
-- Bug fixes for `.lookup(path)`
-
-Otherwise, the API is compatible with `mime` 1.x.
-
-## Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install mime-types
-```
-
-## Adding Types
-
-All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db),
-so open a PR there if you'd like to add mime types.
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var mime = require('mime-types')
-```
-
-All functions return `false` if input is invalid or not found.
-
-### mime.lookup(path)
-
-Lookup the content-type associated with a file.
-
-<!-- eslint-disable no-undef -->
-
-```js
-mime.lookup('json') // 'application/json'
-mime.lookup('.md') // 'text/markdown'
-mime.lookup('file.html') // 'text/html'
-mime.lookup('folder/file.js') // 'application/javascript'
-mime.lookup('folder/.htaccess') // false
-
-mime.lookup('cats') // false
-```
-
-### mime.contentType(type)
-
-Create a full content-type header given a content-type or extension.
-When given an extension, `mime.lookup` is used to get the matching
-content-type, otherwise the given content-type is used. Then if the
-content-type does not already have a `charset` parameter, `mime.charset`
-is used to get the default charset and add to the returned content-type.
-
-<!-- eslint-disable no-undef -->
-
-```js
-mime.contentType('markdown') // 'text/x-markdown; charset=utf-8'
-mime.contentType('file.json') // 'application/json; charset=utf-8'
-mime.contentType('text/html') // 'text/html; charset=utf-8'
-mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1'
-
-// from a full path
-mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'
-```
-
-### mime.extension(type)
-
-Get the default extension for a content-type.
-
-<!-- eslint-disable no-undef -->
-
-```js
-mime.extension('application/octet-stream') // 'bin'
-```
-
-### mime.charset(type)
-
-Lookup the implied default charset of a content-type.
-
-<!-- eslint-disable no-undef -->
-
-```js
-mime.charset('text/markdown') // 'UTF-8'
-```
-
-### var type = mime.types[extension]
-
-A map of content-types by extension.
-
-### [extensions...] = mime.extensions[type]
-
-A map of extensions by content-type.
-
-## License
-
-[MIT](LICENSE)
-
-[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci
-[ci-url]: https://github.com/jshttp/mime-types/actions?query=workflow%3Aci
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master
-[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master
-[node-version-image]: https://badgen.net/npm/node/mime-types
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/mime-types
-[npm-url]: https://npmjs.org/package/mime-types
-[npm-version-image]: https://badgen.net/npm/v/mime-types
diff --git a/device_home/node_modules/mime/CHANGELOG.md b/device_home/node_modules/mime/CHANGELOG.md
deleted file mode 100644 (file)
index f127535..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-# Changelog
-
-## v1.6.0 (24/11/2017)
-*No changelog for this release.*
-
----
-
-## v2.0.4 (24/11/2017)
-- [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/node-mime/issues/182)
-- [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/node-mime/issues/181)
-
----
-
-## v1.5.0 (22/11/2017)
-- [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/node-mime/issues/179)
-- [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/node-mime/issues/178)
-- [**closed**] How it works in brownser ? [#176](https://github.com/broofa/node-mime/issues/176)
-- [**closed**] Missing `./Mime` [#175](https://github.com/broofa/node-mime/issues/175)
-- [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/node-mime/issues/167)
-
----
-
-## v2.0.3 (25/09/2017)
-*No changelog for this release.*
-
----
-
-## v1.4.1 (25/09/2017)
-- [**closed**] Issue when bundling with webpack [#172](https://github.com/broofa/node-mime/issues/172)
-
----
-
-## v2.0.2 (15/09/2017)
-- [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/node-mime/issues/165)
-- [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/node-mime/issues/164)
-- [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/node-mime/issues/163)
-- [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/node-mime/issues/162)
-- [**V2**] Allow callers to load module with official, full, or no defined types.  [#161](https://github.com/broofa/node-mime/issues/161)
-- [**V2**] Use "facets" to resolve extension conflicts [#160](https://github.com/broofa/node-mime/issues/160)
-- [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/node-mime/issues/152)
-- [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/node-mime/issues/139)
-- [**V2**] reset mime-types [#124](https://github.com/broofa/node-mime/issues/124)
-- [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/node-mime/issues/113)
-
----
-
-## v2.0.1 (14/09/2017)
-- [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/node-mime/issues/171)
-- [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/node-mime/issues/170)
-
----
-
-## v2.0.0 (12/09/2017)
-- [**closed**] woff and woff2 [#168](https://github.com/broofa/node-mime/issues/168)
-
----
-
-## v1.4.0 (28/08/2017)
-- [**closed**] support for ac3 voc files [#159](https://github.com/broofa/node-mime/issues/159)
-- [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/node-mime/issues/158)
-- [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/node-mime/issues/157)
-- [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/node-mime/issues/147)
-- [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/node-mime/issues/135)
-- [**closed**] requested features [#131](https://github.com/broofa/node-mime/issues/131)
-- [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/node-mime/issues/129)
-- [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/node-mime/issues/120)
-- [**V2**] .wav files show up as "audio/x-wav" instead of "audio/x-wave" [#118](https://github.com/broofa/node-mime/issues/118)
-- [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/node-mime/issues/108)
-- [**closed**] don't make default_type global [#78](https://github.com/broofa/node-mime/issues/78)
-- [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/node-mime/issues/74)
-
----
-
-## v1.3.6 (11/05/2017)
-- [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/node-mime/issues/154)
-- [**closed**] Error while installing mime [#153](https://github.com/broofa/node-mime/issues/153)
-- [**closed**] application/manifest+json [#149](https://github.com/broofa/node-mime/issues/149)
-- [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/node-mime/issues/141)
-- [**closed**] charsets image/png undefined [#140](https://github.com/broofa/node-mime/issues/140)
-- [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/node-mime/issues/130)
-- [**closed**] how to support plist? [#126](https://github.com/broofa/node-mime/issues/126)
-- [**closed**] how does .types file format look like? [#123](https://github.com/broofa/node-mime/issues/123)
-- [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/node-mime/issues/121)
-- [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/node-mime/issues/117)
-
----
-
-## v1.3.4 (06/02/2015)
-*No changelog for this release.*
-
----
-
-## v1.3.3 (06/02/2015)
-*No changelog for this release.*
-
----
-
-## v1.3.1 (05/02/2015)
-- [**closed**] Consider adding support for Handlebars .hbs file ending [#111](https://github.com/broofa/node-mime/issues/111)
-- [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/node-mime/issues/110)
-- [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/node-mime/issues/94)
-- [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/node-mime/issues/77)
-
----
-
-## v1.3.0 (05/02/2015)
-- [**closed**] Add common name? [#114](https://github.com/broofa/node-mime/issues/114)
-- [**closed**] application/x-yaml [#104](https://github.com/broofa/node-mime/issues/104)
-- [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/node-mime/issues/102)
-- [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/node-mime/issues/99)
-- [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/node-mime/issues/98)
-- [**closed**] collaborators [#88](https://github.com/broofa/node-mime/issues/88)
-- [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/node-mime/issues/87)
-- [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/node-mime/issues/86)
-- [**closed**] Add "license" and "licenses" to package.json [#81](https://github.com/broofa/node-mime/issues/81)
-- [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/node-mime/issues/68)
-
----
-
-## v1.2.11 (15/08/2013)
-- [**closed**] Update mime.types [#65](https://github.com/broofa/node-mime/issues/65)
-- [**closed**] Publish a new version [#63](https://github.com/broofa/node-mime/issues/63)
-- [**closed**] README should state upfront that "application/octet-stream" is default for unknown extension [#55](https://github.com/broofa/node-mime/issues/55)
-- [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/node-mime/issues/52)
-
----
-
-## v1.2.10 (25/07/2013)
-- [**closed**] Mime type for woff files should be application/font-woff and not application/x-font-woff [#62](https://github.com/broofa/node-mime/issues/62)
-- [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/node-mime/issues/51)
-
----
-
-## v1.2.9 (17/01/2013)
-- [**closed**] Please update "mime" NPM [#49](https://github.com/broofa/node-mime/issues/49)
-- [**closed**] Please add semicolon [#46](https://github.com/broofa/node-mime/issues/46)
-- [**closed**] parse full mime types [#43](https://github.com/broofa/node-mime/issues/43)
-
----
-
-## v1.2.8 (10/01/2013)
-- [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/node-mime/issues/47)
-- [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/node-mime/issues/45)
-
----
-
-## v1.2.7 (19/10/2012)
-- [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/node-mime/issues/41)
-- [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/node-mime/issues/36)
-- [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/node-mime/issues/30)
-- [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/node-mime/issues/27)
-
----
-
-## v1.2.5 (16/02/2012)
-- [**closed**] When looking up a types, check hasOwnProperty [#23](https://github.com/broofa/node-mime/issues/23)
-- [**closed**] Bump version to 1.2.2 [#18](https://github.com/broofa/node-mime/issues/18)
-- [**closed**] No license [#16](https://github.com/broofa/node-mime/issues/16)
-- [**closed**] Some types missing that are used by html5/css3 [#13](https://github.com/broofa/node-mime/issues/13)
-- [**closed**] npm install fails for 1.2.1 [#12](https://github.com/broofa/node-mime/issues/12)
-- [**closed**] image/pjpeg + image/x-png [#10](https://github.com/broofa/node-mime/issues/10)
-- [**closed**] symlink [#8](https://github.com/broofa/node-mime/issues/8)
-- [**closed**] gzip [#2](https://github.com/broofa/node-mime/issues/2)
-- [**closed**] ALL CAPS filenames return incorrect mime type [#1](https://github.com/broofa/node-mime/issues/1)
diff --git a/device_home/node_modules/mime/README.md b/device_home/node_modules/mime/README.md
deleted file mode 100644 (file)
index 506fbe5..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-# mime
-
-Comprehensive MIME type mapping API based on mime-db module.
-
-## Install
-
-Install with [npm](http://github.com/isaacs/npm):
-
-    npm install mime
-
-## Contributing / Testing
-
-    npm run test
-
-## Command Line
-
-    mime [path_string]
-
-E.g.
-
-    > mime scripts/jquery.js
-    application/javascript
-
-## API - Queries
-
-### mime.lookup(path)
-Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.').  E.g.
-
-```js
-var mime = require('mime');
-
-mime.lookup('/path/to/file.txt');         // => 'text/plain'
-mime.lookup('file.txt');                  // => 'text/plain'
-mime.lookup('.TXT');                      // => 'text/plain'
-mime.lookup('htm');                       // => 'text/html'
-```
-
-### mime.default_type
-Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)
-
-### mime.extension(type)
-Get the default extension for `type`
-
-```js
-mime.extension('text/html');                 // => 'html'
-mime.extension('application/octet-stream');  // => 'bin'
-```
-
-### mime.charsets.lookup()
-
-Map mime-type to charset
-
-```js
-mime.charsets.lookup('text/plain');        // => 'UTF-8'
-```
-
-(The logic for charset lookups is pretty rudimentary.  Feel free to suggest improvements.)
-
-## API - Defining Custom Types
-
-Custom type mappings can be added on a per-project basis via the following APIs.
-
-### mime.define()
-
-Add custom mime/extension mappings
-
-```js
-mime.define({
-    'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],
-    'application/x-my-type': ['x-mt', 'x-mtt'],
-    // etc ...
-});
-
-mime.lookup('x-sft');                 // => 'text/x-some-format'
-```
-
-The first entry in the extensions array is returned by `mime.extension()`. E.g.
-
-```js
-mime.extension('text/x-some-format'); // => 'x-sf'
-```
-
-### mime.load(filepath)
-
-Load mappings from an Apache ".types" format file
-
-```js
-mime.load('./my_project.types');
-```
-The .types file format is simple -  See the `types` dir for examples.
diff --git a/device_home/node_modules/minimatch/README.md b/device_home/node_modules/minimatch/README.md
deleted file mode 100755 (executable)
index ad72b81..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-# minimatch
-
-A minimal matching utility.
-
-[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.svg)](http://travis-ci.org/isaacs/minimatch)
-
-
-This is the matching library used internally by npm.
-
-It works by converting glob expressions into JavaScript `RegExp`
-objects.
-
-## Usage
-
-```javascript
-var minimatch = require("minimatch")
-
-minimatch("bar.foo", "*.foo") // true!
-minimatch("bar.foo", "*.bar") // false!
-minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
-```
-
-## Features
-
-Supports these glob features:
-
-* Brace Expansion
-* Extended glob matching
-* "Globstar" `**` matching
-
-See:
-
-* `man sh`
-* `man bash`
-* `man 3 fnmatch`
-* `man 5 gitignore`
-
-## Minimatch Class
-
-Create a minimatch object by instantiating the `minimatch.Minimatch` class.
-
-```javascript
-var Minimatch = require("minimatch").Minimatch
-var mm = new Minimatch(pattern, options)
-```
-
-### Properties
-
-* `pattern` The original pattern the minimatch object represents.
-* `options` The options supplied to the constructor.
-* `set` A 2-dimensional array of regexp or string expressions.
-  Each row in the
-  array corresponds to a brace-expanded pattern.  Each item in the row
-  corresponds to a single path-part.  For example, the pattern
-  `{a,b/c}/d` would expand to a set of patterns like:
-
-        [ [ a, d ]
-        , [ b, c, d ] ]
-
-    If a portion of the pattern doesn't have any "magic" in it
-    (that is, it's something like `"foo"` rather than `fo*o?`), then it
-    will be left as a string rather than converted to a regular
-    expression.
-
-* `regexp` Created by the `makeRe` method.  A single regular expression
-  expressing the entire pattern.  This is useful in cases where you wish
-  to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.
-* `negate` True if the pattern is negated.
-* `comment` True if the pattern is a comment.
-* `empty` True if the pattern is `""`.
-
-### Methods
-
-* `makeRe` Generate the `regexp` member if necessary, and return it.
-  Will return `false` if the pattern is invalid.
-* `match(fname)` Return true if the filename matches the pattern, or
-  false otherwise.
-* `matchOne(fileArray, patternArray, partial)` Take a `/`-split
-  filename, and match it against a single row in the `regExpSet`.  This
-  method is mainly for internal use, but is exposed so that it can be
-  used by a glob-walker that needs to avoid excessive filesystem calls.
-
-All other methods are internal, and will be called as necessary.
-
-### minimatch(path, pattern, options)
-
-Main export.  Tests a path against the pattern using the options.
-
-```javascript
-var isJS = minimatch(file, "*.js", { matchBase: true })
-```
-
-### minimatch.filter(pattern, options)
-
-Returns a function that tests its
-supplied argument, suitable for use with `Array.filter`.  Example:
-
-```javascript
-var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true}))
-```
-
-### minimatch.match(list, pattern, options)
-
-Match against the list of
-files, in the style of fnmatch or glob.  If nothing is matched, and
-options.nonull is set, then return a list containing the pattern itself.
-
-```javascript
-var javascripts = minimatch.match(fileList, "*.js", {matchBase: true}))
-```
-
-### minimatch.makeRe(pattern, options)
-
-Make a regular expression object from the pattern.
-
-## Options
-
-All options are `false` by default.
-
-### debug
-
-Dump a ton of stuff to stderr.
-
-### nobrace
-
-Do not expand `{a,b}` and `{1..3}` brace sets.
-
-### noglobstar
-
-Disable `**` matching against multiple folder names.
-
-### dot
-
-Allow patterns to match filenames starting with a period, even if
-the pattern does not explicitly have a period in that spot.
-
-Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`
-is set.
-
-### noext
-
-Disable "extglob" style patterns like `+(a|b)`.
-
-### nocase
-
-Perform a case-insensitive match.
-
-### nonull
-
-When a match is not found by `minimatch.match`, return a list containing
-the pattern itself if this option is set.  When not set, an empty list
-is returned if there are no matches.
-
-### matchBase
-
-If set, then patterns without slashes will be matched
-against the basename of the path if it contains slashes.  For example,
-`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.
-
-### nocomment
-
-Suppress the behavior of treating `#` at the start of a pattern as a
-comment.
-
-### nonegate
-
-Suppress the behavior of treating a leading `!` character as negation.
-
-### flipNegate
-
-Returns from negate expressions the same as if they were not negated.
-(Ie, true on a hit, false on a miss.)
-
-
-## Comparisons to other fnmatch/glob implementations
-
-While strict compliance with the existing standards is a worthwhile
-goal, some discrepancies exist between minimatch and other
-implementations, and are intentional.
-
-If the pattern starts with a `!` character, then it is negated.  Set the
-`nonegate` flag to suppress this behavior, and treat leading `!`
-characters normally.  This is perhaps relevant if you wish to start the
-pattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`
-characters at the start of a pattern will negate the pattern multiple
-times.
-
-If a pattern starts with `#`, then it is treated as a comment, and
-will not match anything.  Use `\#` to match a literal `#` at the
-start of a line, or set the `nocomment` flag to suppress this behavior.
-
-The double-star character `**` is supported by default, unless the
-`noglobstar` flag is set.  This is supported in the manner of bsdglob
-and bash 4.1, where `**` only has special significance if it is the only
-thing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but
-`a/**b` will not.
-
-If an escaped pattern has no matches, and the `nonull` flag is set,
-then minimatch.match returns the pattern as-provided, rather than
-interpreting the character escapes.  For example,
-`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
-`"*a?"`.  This is akin to setting the `nullglob` option in bash, except
-that it does not resolve escaped pattern characters.
-
-If brace expansion is not disabled, then it is performed before any
-other interpretation of the glob pattern.  Thus, a pattern like
-`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
-**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
-checked for validity.  Since those two are valid, matching proceeds.
diff --git a/device_home/node_modules/ms/license.md b/device_home/node_modules/ms/license.md
deleted file mode 100644 (file)
index 69b6125..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2016 Zeit, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/device_home/node_modules/ms/readme.md b/device_home/node_modules/ms/readme.md
deleted file mode 100644 (file)
index 9a1996b..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# ms
-
-[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms)
-[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit)
-
-Use this package to easily convert various time formats to milliseconds.
-
-## Examples
-
-```js
-ms('2 days')  // 172800000
-ms('1d')      // 86400000
-ms('10h')     // 36000000
-ms('2.5 hrs') // 9000000
-ms('2h')      // 7200000
-ms('1m')      // 60000
-ms('5s')      // 5000
-ms('1y')      // 31557600000
-ms('100')     // 100
-ms('-3 days') // -259200000
-ms('-1h')     // -3600000
-ms('-200')    // -200
-```
-
-### Convert from Milliseconds
-
-```js
-ms(60000)             // "1m"
-ms(2 * 60000)         // "2m"
-ms(-3 * 60000)        // "-3m"
-ms(ms('10 hours'))    // "10h"
-```
-
-### Time Format Written-Out
-
-```js
-ms(60000, { long: true })             // "1 minute"
-ms(2 * 60000, { long: true })         // "2 minutes"
-ms(-3 * 60000, { long: true })        // "-3 minutes"
-ms(ms('10 hours'), { long: true })    // "10 hours"
-```
-
-## Features
-
-- Works both in [Node.js](https://nodejs.org) and in the browser
-- If a number is supplied to `ms`, a string with a unit is returned
-- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`)
-- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned
-
-## Related Packages
-
-- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time.
-
-## Caught a Bug?
-
-1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device
-2. Link the package to the global module directory: `npm link`
-3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms!
-
-As always, you can run the tests using: `npm test`
diff --git a/device_home/node_modules/negotiator/HISTORY.md b/device_home/node_modules/negotiator/HISTORY.md
deleted file mode 100644 (file)
index 6d06c76..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-0.6.2 / 2019-04-29
-==================
-
-  * Fix sorting charset, encoding, and language with extra parameters
-
-0.6.1 / 2016-05-02
-==================
-
-  * perf: improve `Accept` parsing speed
-  * perf: improve `Accept-Charset` parsing speed
-  * perf: improve `Accept-Encoding` parsing speed
-  * perf: improve `Accept-Language` parsing speed
-
-0.6.0 / 2015-09-29
-==================
-
-  * Fix including type extensions in parameters in `Accept` parsing
-  * Fix parsing `Accept` parameters with quoted equals
-  * Fix parsing `Accept` parameters with quoted semicolons
-  * Lazy-load modules from main entry point
-  * perf: delay type concatenation until needed
-  * perf: enable strict mode
-  * perf: hoist regular expressions
-  * perf: remove closures getting spec properties
-  * perf: remove a closure from media type parsing
-  * perf: remove property delete from media type parsing
-
-0.5.3 / 2015-05-10
-==================
-
-  * Fix media type parameter matching to be case-insensitive
-
-0.5.2 / 2015-05-06
-==================
-
-  * Fix comparing media types with quoted values
-  * Fix splitting media types with quoted commas
-
-0.5.1 / 2015-02-14
-==================
-
-  * Fix preference sorting to be stable for long acceptable lists
-
-0.5.0 / 2014-12-18
-==================
-
-  * Fix list return order when large accepted list
-  * Fix missing identity encoding when q=0 exists
-  * Remove dynamic building of Negotiator class
-
-0.4.9 / 2014-10-14
-==================
-
-  * Fix error when media type has invalid parameter
-
-0.4.8 / 2014-09-28
-==================
-
-  * Fix all negotiations to be case-insensitive
-  * Stable sort preferences of same quality according to client order
-  * Support Node.js 0.6
-
-0.4.7 / 2014-06-24
-==================
-
-  * Handle invalid provided languages
-  * Handle invalid provided media types
-
-0.4.6 / 2014-06-11
-==================
-
-  *  Order by specificity when quality is the same
-
-0.4.5 / 2014-05-29
-==================
-
-  * Fix regression in empty header handling
-
-0.4.4 / 2014-05-29
-==================
-
-  * Fix behaviors when headers are not present
-
-0.4.3 / 2014-04-16
-==================
-
-  * Handle slashes on media params correctly
-
-0.4.2 / 2014-02-28
-==================
-
-  * Fix media type sorting
-  * Handle media types params strictly
-
-0.4.1 / 2014-01-16
-==================
-
-  * Use most specific matches
-
-0.4.0 / 2014-01-09
-==================
-
-  * Remove preferred prefix from methods
diff --git a/device_home/node_modules/negotiator/README.md b/device_home/node_modules/negotiator/README.md
deleted file mode 100644 (file)
index 04a67ff..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-# negotiator
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-An HTTP content negotiator for Node.js
-
-## Installation
-
-```sh
-$ npm install negotiator
-```
-
-## API
-
-```js
-var Negotiator = require('negotiator')
-```
-
-### Accept Negotiation
-
-```js
-availableMediaTypes = ['text/html', 'text/plain', 'application/json']
-
-// The negotiator constructor receives a request object
-negotiator = new Negotiator(request)
-
-// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'
-
-negotiator.mediaTypes()
-// -> ['text/html', 'image/jpeg', 'application/*']
-
-negotiator.mediaTypes(availableMediaTypes)
-// -> ['text/html', 'application/json']
-
-negotiator.mediaType(availableMediaTypes)
-// -> 'text/html'
-```
-
-You can check a working example at `examples/accept.js`.
-
-#### Methods
-
-##### mediaType()
-
-Returns the most preferred media type from the client.
-
-##### mediaType(availableMediaType)
-
-Returns the most preferred media type from a list of available media types.
-
-##### mediaTypes()
-
-Returns an array of preferred media types ordered by the client preference.
-
-##### mediaTypes(availableMediaTypes)
-
-Returns an array of preferred media types ordered by priority from a list of
-available media types.
-
-### Accept-Language Negotiation
-
-```js
-negotiator = new Negotiator(request)
-
-availableLanguages = ['en', 'es', 'fr']
-
-// Let's say Accept-Language header is 'en;q=0.8, es, pt'
-
-negotiator.languages()
-// -> ['es', 'pt', 'en']
-
-negotiator.languages(availableLanguages)
-// -> ['es', 'en']
-
-language = negotiator.language(availableLanguages)
-// -> 'es'
-```
-
-You can check a working example at `examples/language.js`.
-
-#### Methods
-
-##### language()
-
-Returns the most preferred language from the client.
-
-##### language(availableLanguages)
-
-Returns the most preferred language from a list of available languages.
-
-##### languages()
-
-Returns an array of preferred languages ordered by the client preference.
-
-##### languages(availableLanguages)
-
-Returns an array of preferred languages ordered by priority from a list of
-available languages.
-
-### Accept-Charset Negotiation
-
-```js
-availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']
-
-negotiator = new Negotiator(request)
-
-// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'
-
-negotiator.charsets()
-// -> ['utf-8', 'iso-8859-1', 'utf-7']
-
-negotiator.charsets(availableCharsets)
-// -> ['utf-8', 'iso-8859-1']
-
-negotiator.charset(availableCharsets)
-// -> 'utf-8'
-```
-
-You can check a working example at `examples/charset.js`.
-
-#### Methods
-
-##### charset()
-
-Returns the most preferred charset from the client.
-
-##### charset(availableCharsets)
-
-Returns the most preferred charset from a list of available charsets.
-
-##### charsets()
-
-Returns an array of preferred charsets ordered by the client preference.
-
-##### charsets(availableCharsets)
-
-Returns an array of preferred charsets ordered by priority from a list of
-available charsets.
-
-### Accept-Encoding Negotiation
-
-```js
-availableEncodings = ['identity', 'gzip']
-
-negotiator = new Negotiator(request)
-
-// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'
-
-negotiator.encodings()
-// -> ['gzip', 'identity', 'compress']
-
-negotiator.encodings(availableEncodings)
-// -> ['gzip', 'identity']
-
-negotiator.encoding(availableEncodings)
-// -> 'gzip'
-```
-
-You can check a working example at `examples/encoding.js`.
-
-#### Methods
-
-##### encoding()
-
-Returns the most preferred encoding from the client.
-
-##### encoding(availableEncodings)
-
-Returns the most preferred encoding from a list of available encodings.
-
-##### encodings()
-
-Returns an array of preferred encodings ordered by the client preference.
-
-##### encodings(availableEncodings)
-
-Returns an array of preferred encodings ordered by priority from a list of
-available encodings.
-
-## See Also
-
-The [accepts](https://npmjs.org/package/accepts#readme) module builds on
-this module and provides an alternative interface, mime type validation,
-and more.
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/negotiator.svg
-[npm-url]: https://npmjs.org/package/negotiator
-[node-version-image]: https://img.shields.io/node/v/negotiator.svg
-[node-version-url]: https://nodejs.org/en/download/
-[travis-image]: https://img.shields.io/travis/jshttp/negotiator/master.svg
-[travis-url]: https://travis-ci.org/jshttp/negotiator
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg
-[downloads-url]: https://npmjs.org/package/negotiator
diff --git a/device_home/node_modules/on-finished/HISTORY.md b/device_home/node_modules/on-finished/HISTORY.md
deleted file mode 100644 (file)
index 98ff0e9..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-2.3.0 / 2015-05-26
-==================
-
-  * Add defined behavior for HTTP `CONNECT` requests
-  * Add defined behavior for HTTP `Upgrade` requests
-  * deps: ee-first@1.1.1
-
-2.2.1 / 2015-04-22
-==================
-
-  * Fix `isFinished(req)` when data buffered
-
-2.2.0 / 2014-12-22
-==================
-
-  * Add message object to callback arguments
-
-2.1.1 / 2014-10-22
-==================
-
-  * Fix handling of pipelined requests
-
-2.1.0 / 2014-08-16
-==================
-
-  * Check if `socket` is detached
-  * Return `undefined` for `isFinished` if state unknown
-
-2.0.0 / 2014-08-16
-==================
-
-  * Add `isFinished` function
-  * Move to `jshttp` organization
-  * Remove support for plain socket argument
-  * Rename to `on-finished`
-  * Support both `req` and `res` as arguments
-  * deps: ee-first@1.0.5
-
-1.2.2 / 2014-06-10
-==================
-
-  * Reduce listeners added to emitters
-    - avoids "event emitter leak" warnings when used multiple times on same request
-
-1.2.1 / 2014-06-08
-==================
-
-  * Fix returned value when already finished
-
-1.2.0 / 2014-06-05
-==================
-
-  * Call callback when called on already-finished socket
-
-1.1.4 / 2014-05-27
-==================
-
-  * Support node.js 0.8
-
-1.1.3 / 2014-04-30
-==================
-
-  * Make sure errors passed as instanceof `Error`
-
-1.1.2 / 2014-04-18
-==================
-
-  * Default the `socket` to passed-in object
-
-1.1.1 / 2014-01-16
-==================
-
-  * Rename module to `finished`
-
-1.1.0 / 2013-12-25
-==================
-
-  * Call callback when called on already-errored socket
-
-1.0.1 / 2013-12-20
-==================
-
-  * Actually pass the error to the callback
-
-1.0.0 / 2013-12-20
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/on-finished/README.md b/device_home/node_modules/on-finished/README.md
deleted file mode 100644 (file)
index a0e1157..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-# on-finished
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Execute a callback when a HTTP request closes, finishes, or errors.
-
-## Install
-
-```sh
-$ npm install on-finished
-```
-
-## API
-
-```js
-var onFinished = require('on-finished')
-```
-
-### onFinished(res, listener)
-
-Attach a listener to listen for the response to finish. The listener will
-be invoked only once when the response finished. If the response finished
-to an error, the first argument will contain the error. If the response
-has already finished, the listener will be invoked.
-
-Listening to the end of a response would be used to close things associated
-with the response, like open files.
-
-Listener is invoked as `listener(err, res)`.
-
-```js
-onFinished(res, function (err, res) {
-  // clean up open fds, etc.
-  // err contains the error is request error'd
-})
-```
-
-### onFinished(req, listener)
-
-Attach a listener to listen for the request to finish. The listener will
-be invoked only once when the request finished. If the request finished
-to an error, the first argument will contain the error. If the request
-has already finished, the listener will be invoked.
-
-Listening to the end of a request would be used to know when to continue
-after reading the data.
-
-Listener is invoked as `listener(err, req)`.
-
-```js
-var data = ''
-
-req.setEncoding('utf8')
-res.on('data', function (str) {
-  data += str
-})
-
-onFinished(req, function (err, req) {
-  // data is read unless there is err
-})
-```
-
-### onFinished.isFinished(res)
-
-Determine if `res` is already finished. This would be useful to check and
-not even start certain operations if the response has already finished.
-
-### onFinished.isFinished(req)
-
-Determine if `req` is already finished. This would be useful to check and
-not even start certain operations if the request has already finished.
-
-## Special Node.js requests
-
-### HTTP CONNECT method
-
-The meaning of the `CONNECT` method from RFC 7231, section 4.3.6:
-
-> The CONNECT method requests that the recipient establish a tunnel to
-> the destination origin server identified by the request-target and,
-> if successful, thereafter restrict its behavior to blind forwarding
-> of packets, in both directions, until the tunnel is closed.  Tunnels
-> are commonly used to create an end-to-end virtual connection, through
-> one or more proxies, which can then be secured using TLS (Transport
-> Layer Security, [RFC5246]).
-
-In Node.js, these request objects come from the `'connect'` event on
-the HTTP server.
-
-When this module is used on a HTTP `CONNECT` request, the request is
-considered "finished" immediately, **due to limitations in the Node.js
-interface**. This means if the `CONNECT` request contains a request entity,
-the request will be considered "finished" even before it has been read.
-
-There is no such thing as a response object to a `CONNECT` request in
-Node.js, so there is no support for for one.
-
-### HTTP Upgrade request
-
-The meaning of the `Upgrade` header from RFC 7230, section 6.1:
-
-> The "Upgrade" header field is intended to provide a simple mechanism
-> for transitioning from HTTP/1.1 to some other protocol on the same
-> connection.
-
-In Node.js, these request objects come from the `'upgrade'` event on
-the HTTP server.
-
-When this module is used on a HTTP request with an `Upgrade` header, the
-request is considered "finished" immediately, **due to limitations in the
-Node.js interface**. This means if the `Upgrade` request contains a request
-entity, the request will be considered "finished" even before it has been
-read.
-
-There is no such thing as a response object to a `Upgrade` request in
-Node.js, so there is no support for for one.
-
-## Example
-
-The following code ensures that file descriptors are always closed
-once the response finishes.
-
-```js
-var destroy = require('destroy')
-var http = require('http')
-var onFinished = require('on-finished')
-
-http.createServer(function onRequest(req, res) {
-  var stream = fs.createReadStream('package.json')
-  stream.pipe(res)
-  onFinished(res, function (err) {
-    destroy(stream)
-  })
-})
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/on-finished.svg
-[npm-url]: https://npmjs.org/package/on-finished
-[node-version-image]: https://img.shields.io/node/v/on-finished.svg
-[node-version-url]: http://nodejs.org/download/
-[travis-image]: https://img.shields.io/travis/jshttp/on-finished/master.svg
-[travis-url]: https://travis-ci.org/jshttp/on-finished
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/on-finished/master.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/on-finished?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/on-finished.svg
-[downloads-url]: https://npmjs.org/package/on-finished
diff --git a/device_home/node_modules/on-headers/HISTORY.md b/device_home/node_modules/on-headers/HISTORY.md
deleted file mode 100755 (executable)
index 090598d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-1.0.2 / 2019-02-21
-==================
-
-  * Fix `res.writeHead` patch missing return value
-
-1.0.1 / 2015-09-29
-==================
-
-  * perf: enable strict mode
-
-1.0.0 / 2014-08-10
-==================
-
-  * Honor `res.statusCode` change in `listener`
-  * Move to `jshttp` organization
-  * Prevent `arguments`-related de-opt
-
-0.0.0 / 2014-05-13
-==================
-
-  * Initial implementation
diff --git a/device_home/node_modules/on-headers/README.md b/device_home/node_modules/on-headers/README.md
deleted file mode 100755 (executable)
index ae84282..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-# on-headers
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Execute a listener when a response is about to write headers.
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install on-headers
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var onHeaders = require('on-headers')
-```
-
-### onHeaders(res, listener)
-
-This will add the listener `listener` to fire when headers are emitted for `res`.
-The listener is passed the `response` object as it's context (`this`). Headers are
-considered to be emitted only once, right before they are sent to the client.
-
-When this is called multiple times on the same `res`, the `listener`s are fired
-in the reverse order they were added.
-
-## Examples
-
-```js
-var http = require('http')
-var onHeaders = require('on-headers')
-
-http
-  .createServer(onRequest)
-  .listen(3000)
-
-function addPoweredBy () {
-  // set if not set by end of request
-  if (!this.getHeader('X-Powered-By')) {
-    this.setHeader('X-Powered-By', 'Node.js')
-  }
-}
-
-function onRequest (req, res) {
-  onHeaders(res, addPoweredBy)
-
-  res.setHeader('Content-Type', 'text/plain')
-  res.end('hello!')
-}
-```
-
-## Testing
-
-```sh
-$ npm test
-```
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/on-headers/master
-[coveralls-url]: https://coveralls.io/r/jshttp/on-headers?branch=master
-[node-version-image]: https://badgen.net/npm/node/on-headers
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/on-headers
-[npm-url]: https://npmjs.org/package/on-headers
-[npm-version-image]: https://badgen.net/npm/v/on-headers
-[travis-image]: https://badgen.net/travis/jshttp/on-headers/master
-[travis-url]: https://travis-ci.org/jshttp/on-headers
diff --git a/device_home/node_modules/p-limit/readme.md b/device_home/node_modules/p-limit/readme.md
deleted file mode 100644 (file)
index 64aa476..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# p-limit [![Build Status](https://travis-ci.org/sindresorhus/p-limit.svg?branch=master)](https://travis-ci.org/sindresorhus/p-limit)
-
-> Run multiple promise-returning & async functions with limited concurrency
-
-## Install
-
-```
-$ npm install p-limit
-```
-
-## Usage
-
-```js
-const pLimit = require('p-limit');
-
-const limit = pLimit(1);
-
-const input = [
-       limit(() => fetchSomething('foo')),
-       limit(() => fetchSomething('bar')),
-       limit(() => doSomething())
-];
-
-(async () => {
-       // Only one promise is run at once
-       const result = await Promise.all(input);
-       console.log(result);
-})();
-```
-
-## API
-
-### pLimit(concurrency)
-
-Returns a `limit` function.
-
-#### concurrency
-
-Type: `number`\
-Minimum: `1`\
-Default: `Infinity`
-
-Concurrency limit.
-
-### limit(fn, ...args)
-
-Returns the promise returned by calling `fn(...args)`.
-
-#### fn
-
-Type: `Function`
-
-Promise-returning/async function.
-
-#### args
-
-Any arguments to pass through to `fn`.
-
-Support for passing arguments on to the `fn` is provided in order to be able to avoid creating unnecessary closures. You probably don't need this optimization unless you're pushing a *lot* of functions.
-
-### limit.activeCount
-
-The number of promises that are currently running.
-
-### limit.pendingCount
-
-The number of promises that are waiting to run (i.e. their internal `fn` was not called yet).
-
-### limit.clearQueue()
-
-Discard pending promises that are waiting to run.
-
-This might be useful if you want to teardown the queue at the end of your program's lifecycle or discard any function calls referencing an intermediary state of your app.
-
-Note: This does not cancel promises that are already running.
-
-## FAQ
-
-### How is this different from the [`p-queue`](https://github.com/sindresorhus/p-queue) package?
-
-This package is only about limiting the number of concurrent executions, while `p-queue` is a fully featured queue implementation with lots of different options, introspection, and ability to pause the queue.
-
-## Related
-
-- [p-queue](https://github.com/sindresorhus/p-queue) - Promise queue with concurrency control
-- [p-throttle](https://github.com/sindresorhus/p-throttle) - Throttle promise-returning & async functions
-- [p-debounce](https://github.com/sindresorhus/p-debounce) - Debounce promise-returning & async functions
-- [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning & async functions concurrently with optional limited concurrency
-- [More…](https://github.com/sindresorhus/promise-fun)
-
----
-
-<div align="center">
-       <b>
-               <a href="https://tidelift.com/subscription/pkg/npm-p-limit?utm_source=npm-p-limit&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
-       </b>
-       <br>
-       <sub>
-               Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
-       </sub>
-</div>
diff --git a/device_home/node_modules/p-locate/readme.md b/device_home/node_modules/p-locate/readme.md
deleted file mode 100644 (file)
index 3b0173b..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# p-locate [![Build Status](https://travis-ci.org/sindresorhus/p-locate.svg?branch=master)](https://travis-ci.org/sindresorhus/p-locate)
-
-> Get the first fulfilled promise that satisfies the provided testing function
-
-Think of it like an async version of [`Array#find`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find).
-
-
-## Install
-
-```
-$ npm install p-locate
-```
-
-
-## Usage
-
-Here we find the first file that exists on disk, in array order.
-
-```js
-const pathExists = require('path-exists');
-const pLocate = require('p-locate');
-
-const files = [
-       'unicorn.png',
-       'rainbow.png', // Only this one actually exists on disk
-       'pony.png'
-];
-
-(async () => {
-       const foundPath = await pLocate(files, file => pathExists(file));
-
-       console.log(foundPath);
-       //=> 'rainbow'
-})();
-```
-
-*The above is just an example. Use [`locate-path`](https://github.com/sindresorhus/locate-path) if you need this.*
-
-
-## API
-
-### pLocate(input, tester, [options])
-
-Returns a `Promise` that is fulfilled when `tester` resolves to `true` or the iterable is done, or rejects if any of the promises reject. The fulfilled value is the current iterable value or `undefined` if `tester` never resolved to `true`.
-
-#### input
-
-Type: `Iterable<Promise|any>`
-
-#### tester(element)
-
-Type: `Function`
-
-Expected to return a `Promise<boolean>` or boolean.
-
-#### options
-
-Type: `Object`
-
-##### concurrency
-
-Type: `number`<br>
-Default: `Infinity`<br>
-Minimum: `1`
-
-Number of concurrently pending promises returned by `tester`.
-
-##### preserveOrder
-
-Type: `boolean`<br>
-Default: `true`
-
-Preserve `input` order when searching.
-
-Disable this to improve performance if you don't care about the order.
-
-
-## Related
-
-- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently
-- [p-filter](https://github.com/sindresorhus/p-filter) - Filter promises concurrently
-- [p-any](https://github.com/sindresorhus/p-any) - Wait for any promise to be fulfilled
-- [More…](https://github.com/sindresorhus/promise-fun)
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/p-try/readme.md b/device_home/node_modules/p-try/readme.md
deleted file mode 100644 (file)
index 4d7bd64..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-# p-try [![Build Status](https://travis-ci.org/sindresorhus/p-try.svg?branch=master)](https://travis-ci.org/sindresorhus/p-try)
-
-> Start a promise chain
-
-[How is it useful?](http://cryto.net/~joepie91/blog/2016/05/11/what-is-promise-try-and-why-does-it-matter/)
-
-
-## Install
-
-```
-$ npm install p-try
-```
-
-
-## Usage
-
-```js
-const pTry = require('p-try');
-
-(async () => {
-       try {
-               const value = await pTry(() => {
-                       return synchronousFunctionThatMightThrow();
-               });
-               console.log(value);
-       } catch (error) {
-               console.error(error);
-       }
-})();
-```
-
-
-## API
-
-### pTry(fn, ...arguments)
-
-Returns a `Promise` resolved with the value of calling `fn(...arguments)`. If the function throws an error, the returned `Promise` will be rejected with that error.
-
-Support for passing arguments on to the `fn` is provided in order to be able to avoid creating unnecessary closures. You probably don't need this optimization unless you're pushing a *lot* of functions.
-
-#### fn
-
-The function to run to start the promise chain.
-
-#### arguments
-
-Arguments to pass to `fn`.
-
-
-## Related
-
-- [p-finally](https://github.com/sindresorhus/p-finally) - `Promise#finally()` ponyfill - Invoked when the promise is settled regardless of outcome
-- [More…](https://github.com/sindresorhus/promise-fun)
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/parseqs/README.md b/device_home/node_modules/parseqs/README.md
deleted file mode 100644 (file)
index 5c03c55..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Provides methods for converting an object into string representation, and vice versa.
diff --git a/device_home/node_modules/parseuri/History.md b/device_home/node_modules/parseuri/History.md
deleted file mode 100644 (file)
index c33a1bf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-n.n.n / 2014-02-09
-==================
-
- * parseuri first commit
diff --git a/device_home/node_modules/parseuri/README.md b/device_home/node_modules/parseuri/README.md
deleted file mode 100644 (file)
index 5c663ed..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-# parseuri
-Module for parsing URI's in engine.io-client
diff --git a/device_home/node_modules/parseurl/HISTORY.md b/device_home/node_modules/parseurl/HISTORY.md
deleted file mode 100644 (file)
index 8e40954..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-1.3.3 / 2019-04-15
-==================
-
-  * Fix Node.js 0.8 return value inconsistencies
-
-1.3.2 / 2017-09-09
-==================
-
-  * perf: reduce overhead for full URLs
-  * perf: unroll the "fast-path" `RegExp`
-
-1.3.1 / 2016-01-17
-==================
-
-  * perf: enable strict mode
-
-1.3.0 / 2014-08-09
-==================
-
-  * Add `parseurl.original` for parsing `req.originalUrl` with fallback
-  * Return `undefined` if `req.url` is `undefined`
-
-1.2.0 / 2014-07-21
-==================
-
-  * Cache URLs based on original value
-  * Remove no-longer-needed URL mis-parse work-around
-  * Simplify the "fast-path" `RegExp`
-
-1.1.3 / 2014-07-08
-==================
-
-  * Fix typo
-
-1.1.2 / 2014-07-08
-==================
-
-  * Seriously fix Node.js 0.8 compatibility
-
-1.1.1 / 2014-07-08
-==================
-
-  * Fix Node.js 0.8 compatibility
-
-1.1.0 / 2014-07-08
-==================
-
-  * Incorporate URL href-only parse fast-path
-
-1.0.1 / 2014-03-08
-==================
-
-  * Add missing `require`
-
-1.0.0 / 2014-03-08
-==================
-
-  * Genesis from `connect`
diff --git a/device_home/node_modules/parseurl/README.md b/device_home/node_modules/parseurl/README.md
deleted file mode 100644 (file)
index 443e716..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-# parseurl
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Parse a URL with memoization.
-
-## Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install parseurl
-```
-
-## API
-
-```js
-var parseurl = require('parseurl')
-```
-
-### parseurl(req)
-
-Parse the URL of the given request object (looks at the `req.url` property)
-and return the result. The result is the same as `url.parse` in Node.js core.
-Calling this function multiple times on the same `req` where `req.url` does
-not change will return a cached parsed object, rather than parsing again.
-
-### parseurl.original(req)
-
-Parse the original URL of the given request object and return the result.
-This works by trying to parse `req.originalUrl` if it is a string, otherwise
-parses `req.url`. The result is the same as `url.parse` in Node.js core.
-Calling this function multiple times on the same `req` where `req.originalUrl`
-does not change will return a cached parsed object, rather than parsing again.
-
-## Benchmark
-
-```bash
-$ npm run-script bench
-
-> parseurl@1.3.3 bench nodejs-parseurl
-> node benchmark/index.js
-
-  http_parser@2.8.0
-  node@10.6.0
-  v8@6.7.288.46-node.13
-  uv@1.21.0
-  zlib@1.2.11
-  ares@1.14.0
-  modules@64
-  nghttp2@1.32.0
-  napi@3
-  openssl@1.1.0h
-  icu@61.1
-  unicode@10.0
-  cldr@33.0
-  tz@2018c
-
-> node benchmark/fullurl.js
-
-  Parsing URL "http://localhost:8888/foo/bar?user=tj&pet=fluffy"
-
-  4 tests completed.
-
-  fasturl            x 2,207,842 ops/sec ±3.76% (184 runs sampled)
-  nativeurl - legacy x   507,180 ops/sec ±0.82% (191 runs sampled)
-  nativeurl - whatwg x   290,044 ops/sec ±1.96% (189 runs sampled)
-  parseurl           x   488,907 ops/sec ±2.13% (192 runs sampled)
-
-> node benchmark/pathquery.js
-
-  Parsing URL "/foo/bar?user=tj&pet=fluffy"
-
-  4 tests completed.
-
-  fasturl            x 3,812,564 ops/sec ±3.15% (188 runs sampled)
-  nativeurl - legacy x 2,651,631 ops/sec ±1.68% (189 runs sampled)
-  nativeurl - whatwg x   161,837 ops/sec ±2.26% (189 runs sampled)
-  parseurl           x 4,166,338 ops/sec ±2.23% (184 runs sampled)
-
-> node benchmark/samerequest.js
-
-  Parsing URL "/foo/bar?user=tj&pet=fluffy" on same request object
-
-  4 tests completed.
-
-  fasturl            x  3,821,651 ops/sec ±2.42% (185 runs sampled)
-  nativeurl - legacy x  2,651,162 ops/sec ±1.90% (187 runs sampled)
-  nativeurl - whatwg x    175,166 ops/sec ±1.44% (188 runs sampled)
-  parseurl           x 14,912,606 ops/sec ±3.59% (183 runs sampled)
-
-> node benchmark/simplepath.js
-
-  Parsing URL "/foo/bar"
-
-  4 tests completed.
-
-  fasturl            x 12,421,765 ops/sec ±2.04% (191 runs sampled)
-  nativeurl - legacy x  7,546,036 ops/sec ±1.41% (188 runs sampled)
-  nativeurl - whatwg x    198,843 ops/sec ±1.83% (189 runs sampled)
-  parseurl           x 24,244,006 ops/sec ±0.51% (194 runs sampled)
-
-> node benchmark/slash.js
-
-  Parsing URL "/"
-
-  4 tests completed.
-
-  fasturl            x 17,159,456 ops/sec ±3.25% (188 runs sampled)
-  nativeurl - legacy x 11,635,097 ops/sec ±3.79% (184 runs sampled)
-  nativeurl - whatwg x    240,693 ops/sec ±0.83% (189 runs sampled)
-  parseurl           x 42,279,067 ops/sec ±0.55% (190 runs sampled)
-```
-
-## License
-
-  [MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/parseurl/master
-[coveralls-url]: https://coveralls.io/r/pillarjs/parseurl?branch=master
-[node-image]: https://badgen.net/npm/node/parseurl
-[node-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/parseurl
-[npm-url]: https://npmjs.org/package/parseurl
-[npm-version-image]: https://badgen.net/npm/v/parseurl
-[travis-image]: https://badgen.net/travis/pillarjs/parseurl/master
-[travis-url]: https://travis-ci.org/pillarjs/parseurl
diff --git a/device_home/node_modules/path-exists/readme.md b/device_home/node_modules/path-exists/readme.md
deleted file mode 100644 (file)
index 1b65fa7..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# path-exists [![Build Status](https://travis-ci.org/sindresorhus/path-exists.svg?branch=master)](https://travis-ci.org/sindresorhus/path-exists)
-
-> Check if a path exists
-
-Because [`fs.exists()`](https://nodejs.org/api/fs.html#fs_fs_exists_path_callback) is being [deprecated](https://github.com/iojs/io.js/issues/103), but there's still a genuine use-case of being able to check if a path exists for other purposes than doing IO with it.
-
-Never use this before handling a file though:
-
-> In particular, checking if a file exists before opening it is an anti-pattern that leaves you vulnerable to race conditions: another process may remove the file between the calls to `fs.exists()` and `fs.open()`. Just open the file and handle the error when it's not there.
-
-
-## Install
-
-```
-$ npm install --save path-exists
-```
-
-
-## Usage
-
-```js
-// foo.js
-const pathExists = require('path-exists');
-
-pathExists('foo.js').then(exists => {
-       console.log(exists);
-       //=> true
-});
-```
-
-
-## API
-
-### pathExists(path)
-
-Returns a promise for a boolean of whether the path exists.
-
-### pathExists.sync(path)
-
-Returns a boolean of whether the path exists.
-
-
-## Related
-
-- [path-exists-cli](https://github.com/sindresorhus/path-exists-cli) - CLI for this module
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/path-to-regexp/History.md b/device_home/node_modules/path-to-regexp/History.md
deleted file mode 100644 (file)
index 7f65878..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-0.1.7 / 2015-07-28
-==================
-
-  * Fixed regression with escaped round brackets and matching groups.
-
-0.1.6 / 2015-06-19
-==================
-
-  * Replace `index` feature by outputting all parameters, unnamed and named.
-
-0.1.5 / 2015-05-08
-==================
-
-  * Add an index property for position in match result.
-
-0.1.4 / 2015-03-05
-==================
-
-  * Add license information
-
-0.1.3 / 2014-07-06
-==================
-
-  * Better array support
-  * Improved support for trailing slash in non-ending mode
-
-0.1.0 / 2014-03-06
-==================
-
-  * add options.end
-
-0.0.2 / 2013-02-10
-==================
-
-  * Update to match current express
-  * add .license property to component.json
diff --git a/device_home/node_modules/path-to-regexp/Readme.md b/device_home/node_modules/path-to-regexp/Readme.md
deleted file mode 100644 (file)
index 95452a6..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Path-to-RegExp
-
-Turn an Express-style path string such as `/user/:name` into a regular expression.
-
-**Note:** This is a legacy branch. You should upgrade to `1.x`.
-
-## Usage
-
-```javascript
-var pathToRegexp = require('path-to-regexp');
-```
-
-### pathToRegexp(path, keys, options)
-
- - **path** A string in the express format, an array of such strings, or a regular expression
- - **keys** An array to be populated with the keys present in the url.  Once the function completes, this will be an array of strings.
- - **options**
-   - **options.sensitive** Defaults to false, set this to true to make routes case sensitive
-   - **options.strict** Defaults to false, set this to true to make the trailing slash matter.
-   - **options.end** Defaults to true, set this to false to only match the prefix of the URL.
-
-```javascript
-var keys = [];
-var exp = pathToRegexp('/foo/:bar', keys);
-//keys = ['bar']
-//exp = /^\/foo\/(?:([^\/]+?))\/?$/i
-```
-
-## Live Demo
-
-You can see a live demo of this library in use at [express-route-tester](http://forbeslindesay.github.com/express-route-tester/).
-
-## License
-
-  MIT
diff --git a/device_home/node_modules/pngjs/README.md b/device_home/node_modules/pngjs/README.md
deleted file mode 100644 (file)
index fcd2f0d..0000000
+++ /dev/null
@@ -1,397 +0,0 @@
-[![Build Status](https://travis-ci.org/lukeapage/pngjs.svg?branch=master)](https://travis-ci.org/lukeapage/pngjs) [![Build status](https://ci.appveyor.com/api/projects/status/tb8418jql1trkntd/branch/master?svg=true)](https://ci.appveyor.com/project/lukeapage/pngjs2/branch/master) [![Coverage Status](https://coveralls.io/repos/lukeapage/pngjs2/badge.svg?branch=master&service=github)](https://coveralls.io/github/lukeapage/pngjs2?branch=master) [![npm version](https://badge.fury.io/js/pngjs.svg)](http://badge.fury.io/js/pngjs)
-
-pngjs
-========
-
-[![Greenkeeper badge](https://badges.greenkeeper.io/lukeapage/pngjs.svg)](https://greenkeeper.io/)
-Simple PNG encoder/decoder for Node.js with no dependencies.
-
-Based on the original [pngjs](https://github.com/niegowski/node-pngjs) with the follow enhancements.
-
-  * Support for reading 1,2,4 & 16 bit files
-  * Support for reading interlace files
-  * Support for reading `tTRNS` transparent colours
-  * Support for writing colortype 0 (grayscale), colortype 2 (RGB), colortype 4 (grayscale alpha) and colortype 6 (RGBA)
-  * Sync interface as well as async
-  * API compatible with pngjs and node-pngjs
-
-Known lack of support for:
-
-  * Extended PNG e.g. Animation
-  * Writing in colortype 3 (indexed color)
-
-# Table of Contents
-* [Requirements](#requirements)
-* [Comparison Table](#comparison-table)
-* [Tests](#tests)
-* [Installation](#installation)
-* [Browser](#browser)
-* [Example](#example)
-* [Async API](#async-api)
-* [Sync API](#sync-api)
-* [Changelog](#changelog)
-
-Requirements
-============
-
-* Node.js v4 (use older v2.3.0 for 0.10/0.12/iojs support)
-
-Comparison Table
-================
-
-Name     |  Forked From | Sync | Async | 16 Bit | 1/2/4 Bit | Interlace | Gamma | Encodes | Tested
----------|--------------|------|-------|--------|-----------|-----------|-------|---------|--------
-pngjs    |              | Yes  | Yes   | Yes    | Yes       | Yes       | Yes   | Yes     | Yes
-node-png | pngjs        | No   | Yes   | No     | No        | No        | Hidden| Yes     | Manual
-png-coder| pngjs        | No   | Yes   | Yes    | No        | No        | Hidden| Yes     | Manual
-pngparse |              | No   | Yes   | No     | Yes       | No        | No    | No      | Yes
-pngparse-sync | pngparse| Yes  | No    | No     | Yes       | No        | No    | No      | Yes
-png-async|              | No   | Yes   | No     | No        | No        | No    | Yes     | Yes
-png-js   |              | No   | Yes   | No     | No        | No        | No    | No      | No
-
-
-Native C++ node decoders:
- * png
- * png-sync (sync version of above)
- * pixel-png
- * png-img
-
-Tests
-=====
-
-Tested using [PNG Suite](http://www.schaik.com/pngsuite/). We read every file into pngjs, output it in standard 8bit colour, synchronously and asynchronously, then compare the original with the newly saved images.
-
-To run the tests, fetch the repo (tests are not distributed via npm) and install with `npm i`, run `npm test`.
-
-The only thing not converted is gamma correction - this is because multiple vendors will do gamma correction differently, so the tests will have different results on different browsers.
-
-In addition we use a tolerance of 3 for 16 bit images in PhantomJS because PhantomJS seems to have non-compliant rules for downscaling 16 bit images.
-
-Installation
-===============
-```
-$ npm install pngjs  --save
-```
-
-Browser
-===========
-The package has been build with a [Browserify](browserify.org) version (`npm run browserify`) and you can use the browser version by including in your code:
-
-```
-import { PNG } from 'pngjs/browser';
-```
-
-Example
-==========
-```js
-var fs = require('fs'),
-    PNG = require('pngjs').PNG;
-
-fs.createReadStream('in.png')
-    .pipe(new PNG({
-        filterType: 4
-    }))
-    .on('parsed', function() {
-
-        for (var y = 0; y < this.height; y++) {
-            for (var x = 0; x < this.width; x++) {
-                var idx = (this.width * y + x) << 2;
-
-                // invert color
-                this.data[idx] = 255 - this.data[idx];
-                this.data[idx+1] = 255 - this.data[idx+1];
-                this.data[idx+2] = 255 - this.data[idx+2];
-
-                // and reduce opacity
-                this.data[idx+3] = this.data[idx+3] >> 1;
-            }
-        }
-
-        this.pack().pipe(fs.createWriteStream('out.png'));
-    });
-```
-For more examples see `examples` folder.
-
-Async API
-================
-
-As input any color type is accepted (grayscale, rgb, palette, grayscale with alpha, rgb with alpha) but 8 bit per sample (channel) is the only supported bit depth. Interlaced mode is not supported.
-
-## Class: PNG
-`PNG` is readable and writable `Stream`.
-
-
-### Options
-- `width` - use this with `height` if you want to create png from scratch
-- `height` - as above
-- `checkCRC` - whether parser should be strict about checksums in source stream (default: `true`)
-- `deflateChunkSize` - chunk size used for deflating data chunks, this should be power of 2 and must not be less than 256 and more than 32*1024 (default: 32 kB)
-- `deflateLevel` - compression level for deflate (default: 9)
-- `deflateStrategy` - compression strategy for deflate (default: 3)
-- `deflateFactory` - deflate stream factory (default: `zlib.createDeflate`)
-- `filterType` - png filtering method for scanlines (default: -1 => auto, accepts array of numbers 0-4)
-- `colorType` - the output colorType - see constants. 0 = grayscale, no alpha, 2 = color, no alpha, 4 = grayscale & alpha, 6 = color & alpha. Default currently 6, but in the future may calculate best mode.
-- `inputColorType` - the input colorType - see constants. Default is 6 (RGBA)
-- `bitDepth` - the bitDepth of the output, 8 or 16 bits. Input data is expected to have this bit depth.
-16 bit data is expected in the system endianness (Default: 8)
-- `inputHasAlpha` - whether the input bitmap has 4 bytes per pixel (rgb and alpha) or 3 (rgb - no alpha).
-- `bgColor` - an object containing red, green, and blue values between 0 and 255
-that is used when packing a PNG if alpha is not to be included (default: 255,255,255)
-
-
-### Event "metadata"
-`function(metadata) { }`
-Image's header has been parsed, metadata contains this information:
-- `width` image size in pixels
-- `height` image size in pixels
-- `palette` image is paletted
-- `color` image is not grayscale
-- `alpha` image contains alpha channel
-- `interlace` image is interlaced
-
-
-### Event: "parsed"
-`function(data) { }`
-Input image has been completely parsed, `data` is complete and ready for modification.
-
-
-### Event: "error"
-`function(error) { }`
-
-
-### png.parse(data, [callback])
-Parses PNG file data. Can be `String` or `Buffer`. Alternatively you can stream data to instance of PNG.
-
-Optional `callback` is once called on `error` or `parsed`. The callback gets
-two arguments `(err, data)`.
-
-Returns `this` for method chaining.
-
-#### Example
-```js
-new PNG({ filterType:4 }).parse( imageData, function(error, data)
-{
-       console.log(error, data)
-});
-```
-
-### png.pack()
-Starts converting data to PNG file Stream.
-
-Returns `this` for method chaining.
-
-
-### png.bitblt(dst, sx, sy, w, h, dx, dy)
-Helper for image manipulation, copies a rectangle of pixels from current (i.e. the source) image (`sx`, `sy`, `w`, `h`) to `dst` image (at `dx`, `dy`).
-
-Returns `this` for method chaining.
-
-For example, the following code copies the top-left 100x50 px of `in.png` into dst and writes it to `out.png`:
-```js
-var dst = new PNG({width: 100, height: 50});
-fs.createReadStream('in.png')
-    .pipe(new PNG())
-    .on('parsed', function() {
-        this.bitblt(dst, 0, 0, 100, 50, 0, 0);
-        dst.pack().pipe(fs.createWriteStream('out.png'));
-    });
-```
-
-### Property: adjustGamma()
-Helper that takes data and adjusts it to be gamma corrected. Note that it is not 100% reliable with transparent colours because that requires knowing the background colour the bitmap is rendered on to.
-
-In tests against PNG suite it compared 100% with chrome on all 8 bit and below images. On IE there were some differences.
-
-The following example reads a file, adjusts the gamma (which sets the gamma to 0) and writes it out again, effectively removing any gamma correction from the image.
-
-```js
-fs.createReadStream('in.png')
-    .pipe(new PNG())
-    .on('parsed', function() {
-        this.adjustGamma();
-        this.pack().pipe(fs.createWriteStream('out.png'));
-    });
-```
-
-### Property: width
-Width of image in pixels
-
-
-### Property: height
-Height of image in pixels
-
-
-### Property: data
-Buffer of image pixel data. Every pixel consists 4 bytes: R, G, B, A (opacity).
-
-
-### Property: gamma
-Gamma of image (0 if not specified)
-
-## Packing a PNG and removing alpha (RGBA to RGB)
-
-When removing the alpha channel from an image, there needs to be a background color to correctly
-convert each pixel's transparency to the appropriate RGB value. By default, pngjs will flatten
-the image against a white background. You can override this in the options:
-
-```js
-var fs = require('fs'),
-    PNG = require('pngjs').PNG;
-
-fs.createReadStream('in.png')
-    .pipe(new PNG({
-        colorType: 2,
-        bgColor: {
-            red: 0,
-            green: 255,
-            blue: 0
-        }
-    }))
-    .on('parsed', function() {
-        this.pack().pipe(fs.createWriteStream('out.png'));
-    });
-```
-
-# Sync API
-
-## PNG.sync
-
-### PNG.sync.read(buffer)
-
-Take a buffer and returns a PNG image. The properties on the image include the meta data and `data` as per the async API above.
-
-```
-var data = fs.readFileSync('in.png');
-var png = PNG.sync.read(data);
-```
-
-### PNG.sync.write(png)
-
-Take a PNG image and returns a buffer. The properties on the image include the meta data and `data` as per the async API above.
-
-```
-var data = fs.readFileSync('in.png');
-var png = PNG.sync.read(data);
-var options = { colorType: 6 };
-var buffer = PNG.sync.write(png, options);
-fs.writeFileSync('out.png', buffer);
-```
-
-### PNG.adjustGamma(src)
-
-Adjusts the gamma of a sync image. See the async adjustGamma.
-
-```
-var data = fs.readFileSync('in.png');
-var png = PNG.sync.read(data);
-PNG.adjustGamma(png);
-```
-
-
-Changelog
-============
-
-### 3.4.0 - 09/03/2019
-
-- Include whether the png has alpha in the meta data
-- emit an error if the image is truncated instead of hanging
-- Add a browserified version
-- speed up some mapping functions
-
-### 3.3.3 - 19/04/2018
-
-- Real fix for node 9
-
-### 3.3.2 - 16/02/2018
-
-- Fix for node 9
-
-### 3.3.1 - 15/11/2017
-
-- Bugfixes and removal of es6
-
-### 3.3.0
-
-- Add writing 16 bit channels and support for grayscale input
-
-### 3.2.0 - 30/04/2017
-
-- Support for encoding 8-bit grayscale images
-
-### 3.1.0 - 30/04/2017
- - Support for pngs with zlib chunks that are malformed after valid data
-
-### 3.0.1 - 16/02/2017
- - Fix single pixel pngs
-
-### 3.0.0 - 03/08/2016
- - Drop support for node below v4 and iojs. Pin to 2.3.0 to use with old, unsupported or patched node versions.
-
-### 2.3.0 - 22/04/2016
- - Support for sync in node 0.10
-
-### 2.2.0 - 04/12/2015
- - Add sync write api
- - Fix newfile example
- - Correct comparison table
-
-### 2.1.0 - 28/10/2015
- - rename package to pngjs
- - added 'bgColor' option
-
-### 2.0.0 - 08/10/2015
- - fixes to readme
- - *breaking change* - bitblt on the png prototype now doesn't take a unused, unnecessary src first argument
-
-### 1.2.0 - 13/09/2015
-  - support passing colorType to write PNG's and writing bitmaps without alpha information
-
-### 1.1.0 - 07/09/2015
-  - support passing a deflate factory for controlled compression
-
-### 1.0.2 - 22/08/2015
-  - Expose all PNG creation info
-
-### 1.0.1 - 21/08/2015
-  - Fix non square interlaced files
-
-### 1.0.0 - 08/08/2015
-  - More tests
-  - source linted
-  - maintainability refactorings
-  - async API - exceptions in reading now emit warnings
-  - documentation improvement - sync api now documented, adjustGamma documented
-  - breaking change - gamma chunk is now written. previously a read then write would destroy gamma information, now it is persisted.
-
-### 0.0.3 - 03/08/2015
-  - Error handling fixes
-  - ignore files for smaller npm footprint
-
-### 0.0.2 - 02/08/2015
-  - Bugfixes to interlacing, support for transparent colours
-
-### 0.0.1 - 02/08/2015
-  - Initial release, see pngjs for older changelog.
-
-License
-=========
-
-(The MIT License)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/device_home/node_modules/proxy-addr/HISTORY.md b/device_home/node_modules/proxy-addr/HISTORY.md
deleted file mode 100644 (file)
index be765b7..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-2.0.6 / 2020-02-24
-==================
-
-  * deps: ipaddr.js@1.9.1
-
-2.0.5 / 2019-04-16
-==================
-
-  * deps: ipaddr.js@1.9.0
-
-2.0.4 / 2018-07-26
-==================
-
-  * deps: ipaddr.js@1.8.0
-
-2.0.3 / 2018-02-19
-==================
-
-  * deps: ipaddr.js@1.6.0
-
-2.0.2 / 2017-09-24
-==================
-
-  * deps: forwarded@~0.1.2
-    - perf: improve header parsing
-    - perf: reduce overhead when no `X-Forwarded-For` header
-
-2.0.1 / 2017-09-10
-==================
-
-  * deps: forwarded@~0.1.1
-    - Fix trimming leading / trailing OWS
-    - perf: hoist regular expression
-  * deps: ipaddr.js@1.5.2
-
-2.0.0 / 2017-08-08
-==================
-
-  * Drop support for Node.js below 0.10
-
-1.1.5 / 2017-07-25
-==================
-
-  * Fix array argument being altered
-  * deps: ipaddr.js@1.4.0
-
-1.1.4 / 2017-03-24
-==================
-
-  * deps: ipaddr.js@1.3.0
-
-1.1.3 / 2017-01-14
-==================
-
-  * deps: ipaddr.js@1.2.0
-
-1.1.2 / 2016-05-29
-==================
-
-  * deps: ipaddr.js@1.1.1
-    - Fix IPv6-mapped IPv4 validation edge cases
-
-1.1.1 / 2016-05-03
-==================
-
-  * Fix regression matching mixed versions against multiple subnets
-
-1.1.0 / 2016-05-01
-==================
-
-  * Fix accepting various invalid netmasks
-    - IPv4 netmasks must be contingous
-    - IPv6 addresses cannot be used as a netmask
-  * deps: ipaddr.js@1.1.0
-
-1.0.10 / 2015-12-09
-===================
-
-  * deps: ipaddr.js@1.0.5
-    - Fix regression in `isValid` with non-string arguments
-
-1.0.9 / 2015-12-01
-==================
-
-  * deps: ipaddr.js@1.0.4
-    - Fix accepting some invalid IPv6 addresses
-    - Reject CIDRs with negative or overlong masks
-  * perf: enable strict mode
-
-1.0.8 / 2015-05-10
-==================
-
-  * deps: ipaddr.js@1.0.1
-
-1.0.7 / 2015-03-16
-==================
-
-  * deps: ipaddr.js@0.1.9
-    - Fix OOM on certain inputs to `isValid`
-
-1.0.6 / 2015-02-01
-==================
-
-  * deps: ipaddr.js@0.1.8
-
-1.0.5 / 2015-01-08
-==================
-
-  * deps: ipaddr.js@0.1.6
-
-1.0.4 / 2014-11-23
-==================
-
-  * deps: ipaddr.js@0.1.5
-    - Fix edge cases with `isValid`
-
-1.0.3 / 2014-09-21
-==================
-
-  * Use `forwarded` npm module
-
-1.0.2 / 2014-09-18
-==================
-
-  * Fix a global leak when multiple subnets are trusted
-  * Support Node.js 0.6
-  * deps: ipaddr.js@0.1.3
-
-1.0.1 / 2014-06-03
-==================
-
-  * Fix links in npm package
-
-1.0.0 / 2014-05-08
-==================
-
-  * Add `trust` argument to determine proxy trust on
-    * Accepts custom function
-    * Accepts IPv4/IPv6 address(es)
-    * Accepts subnets
-    * Accepts pre-defined names
-  * Add optional `trust` argument to `proxyaddr.all` to
-    stop at first untrusted
-  * Add `proxyaddr.compile` to pre-compile `trust` function
-    to make subsequent calls faster
-
-0.0.1 / 2014-05-04
-==================
-
-  * Fix bad npm publish
-
-0.0.0 / 2014-05-04
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/proxy-addr/README.md b/device_home/node_modules/proxy-addr/README.md
deleted file mode 100644 (file)
index 8c176ea..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-# proxy-addr
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Determine address of proxied request
-
-## Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install proxy-addr
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var proxyaddr = require('proxy-addr')
-```
-
-### proxyaddr(req, trust)
-
-Return the address of the request, using the given `trust` parameter.
-
-The `trust` argument is a function that returns `true` if you trust
-the address, `false` if you don't. The closest untrusted address is
-returned.
-
-<!-- eslint-disable no-undef -->
-
-```js
-proxyaddr(req, function (addr) { return addr === '127.0.0.1' })
-proxyaddr(req, function (addr, i) { return i < 1 })
-```
-
-The `trust` arugment may also be a single IP address string or an
-array of trusted addresses, as plain IP addresses, CIDR-formatted
-strings, or IP/netmask strings.
-
-<!-- eslint-disable no-undef -->
-
-```js
-proxyaddr(req, '127.0.0.1')
-proxyaddr(req, ['127.0.0.0/8', '10.0.0.0/8'])
-proxyaddr(req, ['127.0.0.0/255.0.0.0', '192.168.0.0/255.255.0.0'])
-```
-
-This module also supports IPv6. Your IPv6 addresses will be normalized
-automatically (i.e. `fe80::00ed:1` equals `fe80:0:0:0:0:0:ed:1`).
-
-<!-- eslint-disable no-undef -->
-
-```js
-proxyaddr(req, '::1')
-proxyaddr(req, ['::1/128', 'fe80::/10'])
-```
-
-This module will automatically work with IPv4-mapped IPv6 addresses
-as well to support node.js in IPv6-only mode. This means that you do
-not have to specify both `::ffff:a00:1` and `10.0.0.1`.
-
-As a convenience, this module also takes certain pre-defined names
-in addition to IP addresses, which expand into IP addresses:
-
-<!-- eslint-disable no-undef -->
-
-```js
-proxyaddr(req, 'loopback')
-proxyaddr(req, ['loopback', 'fc00:ac:1ab5:fff::1/64'])
-```
-
-  * `loopback`: IPv4 and IPv6 loopback addresses (like `::1` and
-    `127.0.0.1`).
-  * `linklocal`: IPv4 and IPv6 link-local addresses (like
-    `fe80::1:1:1:1` and `169.254.0.1`).
-  * `uniquelocal`: IPv4 private addresses and IPv6 unique-local
-    addresses (like `fc00:ac:1ab5:fff::1` and `192.168.0.1`).
-
-When `trust` is specified as a function, it will be called for each
-address to determine if it is a trusted address. The function is
-given two arguments: `addr` and `i`, where `addr` is a string of
-the address to check and `i` is a number that represents the distance
-from the socket address.
-
-### proxyaddr.all(req, [trust])
-
-Return all the addresses of the request, optionally stopping at the
-first untrusted. This array is ordered from closest to furthest
-(i.e. `arr[0] === req.connection.remoteAddress`).
-
-<!-- eslint-disable no-undef -->
-
-```js
-proxyaddr.all(req)
-```
-
-The optional `trust` argument takes the same arguments as `trust`
-does in `proxyaddr(req, trust)`.
-
-<!-- eslint-disable no-undef -->
-
-```js
-proxyaddr.all(req, 'loopback')
-```
-
-### proxyaddr.compile(val)
-
-Compiles argument `val` into a `trust` function. This function takes
-the same arguments as `trust` does in `proxyaddr(req, trust)` and
-returns a function suitable for `proxyaddr(req, trust)`.
-
-<!-- eslint-disable no-undef, no-unused-vars -->
-
-```js
-var trust = proxyaddr.compile('loopback')
-var addr = proxyaddr(req, trust)
-```
-
-This function is meant to be optimized for use against every request.
-It is recommend to compile a trust function up-front for the trusted
-configuration and pass that to `proxyaddr(req, trust)` for each request.
-
-## Testing
-
-```sh
-$ npm test
-```
-
-## Benchmarks
-
-```sh
-$ npm run-script bench
-```
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/proxy-addr/master
-[coveralls-url]: https://coveralls.io/r/jshttp/proxy-addr?branch=master
-[node-image]: https://badgen.net/npm/node/proxy-addr
-[node-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/proxy-addr
-[npm-url]: https://npmjs.org/package/proxy-addr
-[npm-version-image]: https://badgen.net/npm/v/proxy-addr
-[travis-image]: https://badgen.net/travis/jshttp/proxy-addr/master
-[travis-url]: https://travis-ci.org/jshttp/proxy-addr
diff --git a/device_home/node_modules/qrcode/CHANGELOG.md b/device_home/node_modules/qrcode/CHANGELOG.md
deleted file mode 100644 (file)
index 1e7fbbe..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-## [1.3.3](https://github.com/soldair/node-qrcode/compare/v1.3.2...v1.3.3) (2019-01-16)
-
-fixing security vulnerabillities reported by users of snyk and `npm audit` major
-versions of deps were bumped and should only impact development of qrcode.
-
-
-## [1.3.2](https://github.com/soldair/node-qrcode/compare/v1.3.0...v1.3.2) (2019-01-16)
-
-
-### Bug Fixes
-
-* forgot can-promise replacement ([2514445](https://github.com/soldair/node-qrcode/commit/2514445))
-* replacing can-promise ([8197d78](https://github.com/soldair/node-qrcode/commit/8197d78))
-* security vulnerabillities and a ref to new Buffer ([a40c757](https://github.com/soldair/node-qrcode/commit/a40c757))
-
-
-
-# [1.3.0](https://github.com/soldair/node-qrcode/compare/v1.2.1...v1.3.0) (2018-10-01)
-
-
-
-## [1.2.1](https://github.com/soldair/node-qrcode/compare/v1.2.0...v1.2.1) (2018-06-06)
-
-
-
-# [1.2.0](https://github.com/soldair/node-qrcode/compare/v1.1.0...v1.2.0) (2017-12-28)
-
-
-
-# [1.1.0](https://github.com/soldair/node-qrcode/compare/v1.0.1...v1.1.0) (2017-12-28)
-
-
-
-## [1.0.1](https://github.com/soldair/node-qrcode/compare/v1.0.0...v1.0.1) (2017-12-27)
-
-
-
-# [1.0.0](https://github.com/soldair/node-qrcode/compare/v0.9.0...v1.0.0) (2017-11-08)
-
-no breaking changes. promoting to a stable semver
-
-# [0.9.0](https://github.com/soldair/node-qrcode/compare/v0.8.2...v0.9.0) (2017-07-22)
-
-
-
-## [0.8.2](https://github.com/soldair/node-qrcode/compare/v0.8.0...v0.8.2) (2017-05-23)
-
-
-
-# [0.8.0](https://github.com/soldair/node-qrcode/compare/v0.7.1...v0.8.0) (2017-03-30)
-
-
-
-## [0.7.1](https://github.com/soldair/node-qrcode/compare/v0.7.0...v0.7.1) (2017-03-17)
-
-
-
-# [0.7.0](https://github.com/soldair/node-qrcode/compare/v0.6.0...v0.7.0) (2017-02-27)
-
-
-
-# [0.6.0](https://github.com/soldair/node-qrcode/compare/v0.5.0...v0.6.0) (2017-02-24)
-
-
-
-# [0.5.0](https://github.com/soldair/node-qrcode/compare/v0.4.4...v0.5.0) (2016-09-19)
-
-
-
-## [0.4.4](https://github.com/soldair/node-qrcode/compare/v0.4.3...v0.4.4) (2016-08-25)
-
-
-
-## [0.4.3](https://github.com/soldair/node-qrcode/compare/v0.4.0...v0.4.3) (2016-08-16)
-
-
-
-# [0.4.0](https://github.com/soldair/node-qrcode/compare/0.2.10...v0.4.0) (2015-09-17)
-
-
-
-## [0.1.1](https://github.com/soldair/node-qrcode/compare/v0.1.0...v0.1.1) (2011-04-17)
-
-
-
-# [0.1.0](https://github.com/soldair/node-qrcode/compare/0.0.3...v0.1.0) (2011-04-17)
-
-
-
-## [0.0.3](https://github.com/soldair/node-qrcode/compare/0.0.2...0.0.3) (2011-02-27)
-
-
-
-## 0.0.2 (2010-12-27)
-
-
-
diff --git a/device_home/node_modules/qrcode/README.md b/device_home/node_modules/qrcode/README.md
deleted file mode 100644 (file)
index 6d50cbf..0000000
+++ /dev/null
@@ -1,761 +0,0 @@
-# node-qrcode
-> QR code/2d barcode generator.
-
-[![Travis](https://img.shields.io/travis/soldair/node-qrcode.svg?style=flat-square)](http://travis-ci.org/soldair/node-qrcode)
-[![npm](https://img.shields.io/npm/v/qrcode.svg?style=flat-square)](https://www.npmjs.com/package/qrcode)
-[![npm](https://img.shields.io/npm/dt/qrcode.svg?style=flat-square)](https://www.npmjs.com/package/qrcode)
-[![npm](https://img.shields.io/npm/l/qrcode.svg?style=flat-square)](https://github.com/soldair/node-qrcode/blob/master/license)
-
-- [Highlights](#highlights)
-- [Installation](#installation)
-- [Usage](#usage)
-- [Error correction level](#error-correction-level)
-- [QR Code capacity](#qr-code-capacity)
-- [Encoding Modes](#encoding-modes)
-- [Binary data](#binary-data)
-- [Multibyte characters](#multibyte-characters)
-- [API](#api)
-- [GS1 QR Codes](#gs1)
-- [Credits](#credits)
-- [License](#license)
-
-## Highlights
-- Works on server and client (and react native with svg)
-- CLI utility
-- Save QR code as image
-- Support for Numeric, Alphanumeric, Kanji and Byte mode
-- Support for mixed modes
-- Support for chinese, cyrillic, greek and japanese characters
-- Support for multibyte characters (like emojis :smile:)
-- Auto generates optimized segments for best data compression and smallest QR Code size
-- App agnostic readability, QR Codes by definition are app agnostic
-
-## Installation
-Inside your project folder do:
-
-```shell
-npm install --save qrcode
-```
-
-or, install it globally to use `qrcode` from the command line to save qrcode images or generate ones you can view in your terminal.
-
-```shell
-npm install -g qrcode
-```
-
-## Usage
-### CLI
-
-```
-Usage: qrcode [options] <input string>
-
-QR Code options:
-  -v, --qversion  QR Code symbol version (1 - 40)                       [number]
-  -e, --error     Error correction level           [choices: "L", "M", "Q", "H"]
-  -m, --mask      Mask pattern (0 - 7)                                  [number]
-
-Renderer options:
-  -t, --type        Output type                  [choices: "png", "svg", "utf8"]
-  -w, --width       Image width (px)                                    [number]
-  -s, --scale       Scale factor                                        [number]
-  -q, --qzone       Quiet zone size                                     [number]
-  -l, --lightcolor  Light RGBA hex color
-  -d, --darkcolor   Dark RGBA hex color
-
-Options:
-  -o, --output  Output file
-  -h, --help    Show help                                              [boolean]
-  --version     Show version number                                    [boolean]
-
-Examples:
-  qrcode "some text"                    Draw in terminal window
-  qrcode -o out.png "some text"         Save as png image
-  qrcode -d F00 -o out.png "some text"  Use red as foreground color
-```
-If not specified, output type is guessed from file extension.<br>
-Recognized extensions are `png`, `svg` and `txt`.
-
-### Browser
-`node-qrcode` can be used in browser through module bundlers like [Browserify](https://github.com/substack/node-browserify) and [Webpack](https://github.com/webpack/webpack) or by including the precompiled bundle present in `build/` folder.
-
-#### Module bundlers
-```html
-<!-- index.html -->
-<html>
-  <body>
-    <canvas id="canvas"></canvas>
-    <script src="bundle.js"></script>
-  </body>
-</html>
-```
-
-```javascript
-// index.js -> bundle.js
-var QRCode = require('qrcode')
-var canvas = document.getElementById('canvas')
-
-QRCode.toCanvas(canvas, 'sample text', function (error) {
-  if (error) console.error(error)
-  console.log('success!');
-})
-```
-
-#### Precompiled bundle
-```html
-<canvas id="canvas"></canvas>
-
-<script src="/build/qrcode.min.js"></script>
-<script>
-  QRCode.toCanvas(document.getElementById('canvas'), 'sample text', function (error) {
-    if (error) console.error(error)
-    console.log('success!');
-  })
-</script>
-```
-
-If you install through `npm`, precompiled files will be available in `node_modules/qrcode/build/` folder.<br>
-
-### NodeJS
-Require the module `qrcode`
-
-```javascript
-var QRCode = require('qrcode')
-
-QRCode.toDataURL('I am a pony!', function (err, url) {
-  console.log(url)
-})
-```
-
-render a qrcode for the terminal
-```js
-var QRCode = require('qrcode')
-
-QRCode.toString('I am a pony!',{type:'terminal'}, function (err, url) {
-  console.log(url)
-})
-```
-
-### ES6/ES7
-Promises and Async/Await can be used in place of callback function.
-
-```javascript
-import QRCode from 'qrcode'
-
-// With promises
-QRCode.toDataURL('I am a pony!')
-  .then(url => {
-    console.log(url)
-  })
-  .catch(err => {
-    console.error(err)
-  })
-
-// With async/await
-const generateQR = async text => {
-  try {
-    console.log(await QRCode.toDataURL(text))
-  } catch (err) {
-    console.error(err)
-  }
-}
-```
-
-## Error correction level
-Error correction capability allows to successfully scan a QR Code even if the symbol is dirty or damaged.
-Four levels are available to choose according to the operating environment.
-
-Higher levels offer a better error resistance but reduce the symbol's capacity.<br>
-If the chances that the QR Code symbol may be corrupted are low (for example if it is showed through a monitor)
-is possible to safely use a low error level such as `Low` or `Medium`.
-
-Possible levels are shown below:
-
-| Level            | Error resistance |
-|------------------|:----------------:|
-| **L** (Low)      | **~7%**          |
-| **M** (Medium)   | **~15%**         |
-| **Q** (Quartile) | **~25%**         |
-| **H** (High)     | **~30%**         |
-
-The percentage indicates the maximum amount of damaged surface after which the symbol becomes unreadable.
-
-Error level can be set through `options.errorCorrectionLevel` property.<br>
-If not specified, the default value is `M`.
-
-```javascript
-QRCode.toDataURL('some text', { errorCorrectionLevel: 'H' }, function (err, url) {
-  console.log(url)
-})
-```
-
-## QR Code capacity
-Capacity depends on symbol version and error correction level. Also encoding modes may influence the amount of storable data.
-
-The QR Code versions range from version **1** to version **40**.<br>
-Each version has a different number of modules (black and white dots), which define the symbol's size.
-For version 1 they are `21x21`, for version 2 `25x25` e so on.
-Higher is the version, more are the storable data, and of course bigger will be the QR Code symbol.
-
-The table below shows the maximum number of storable characters in each encoding mode and for each error correction level.
-
-| Mode         | L    | M    | Q    | H    |
-|--------------|------|------|------|------|
-| Numeric      | 7089 | 5596 | 3993 | 3057 |
-| Alphanumeric | 4296 | 3391 | 2420 | 1852 |
-| Byte         | 2953 | 2331 | 1663 | 1273 |
-| Kanji        | 1817 | 1435 | 1024 | 784  |
-
-**Note:** Maximum characters number can be different when using [Mixed modes](#mixed-modes).
-
-QR Code version can be set through `options.version` property.<br>
-If no version is specified, the more suitable value will be used. Unless a specific version is required, this option is not needed.
-
-```javascript
-QRCode.toDataURL('some text', { version: 2 }, function (err, url) {
-  console.log(url)
-})
-```
-
-## Encoding modes
-Modes can be used to encode a string in a more efficient way.<br>
-A mode may be more suitable than others depending on the string content.
-A list of supported modes are shown in the table below:
-
-| Mode         | Characters                                                | Compression                               |
-|--------------|-----------------------------------------------------------|-------------------------------------------|
-| Numeric      | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9                              | 3 characters are represented by 10 bits   |
-| Alphanumeric | 0–9, A–Z (upper-case only), space, $, %, *, +, -, ., /, : | 2 characters are represented by 11 bits   |
-| Kanji        | Characters from the Shift JIS system based on JIS X 0208  | 2 kanji are represented by 13 bits        |
-| Byte         | Characters from the ISO/IEC 8859-1 character set          | Each characters are represented by 8 bits |
-
-Choose the right mode may be tricky if the input text is unknown.<br>
-In these cases **Byte** mode is the best choice since all characters can be encoded with it. (See [Multibyte characters](#multibyte-characters))<br>
-However, if the QR Code reader supports mixed modes, using [Auto mode](#auto-mode) may produce better results.
-
-### Mixed modes
-Mixed modes are also possible. A QR code can be generated from a series of segments having different encoding modes to optimize the data compression.<br>
-However, switching from a mode to another has a cost which may lead to a worst result if it's not taken into account.
-See [Manual mode](#manual-mode) for an example of how to specify segments with different encoding modes.
-
-### Auto mode
-By **default**, automatic mode selection is used.<br>
-The input string is automatically splitted in various segments optimized to produce the shortest possible bitstream using mixed modes.<br>
-This is the preferred way to generate the QR Code.
-
-For example, the string **ABCDE12345678?A1A** will be splitted in 3 segments with the following modes:
-
-| Segment  | Mode         |
-|----------|--------------|
-| ABCDE    | Alphanumeric |
-| 12345678 | Numeric      |
-| ?A1A     | Byte         |
-
-Any other combinations of segments and modes will result in a longer bitstream.<br>
-If you need to keep the QR Code size small, this mode will produce the best results.
-
-### Manual mode
-If auto mode doesn't work for you or you have specific needs, is also possible to manually specify each segment with the relative mode.
-In this way no segment optimizations will be applied under the hood.<br>
-Segments list can be passed as an array of object:
-
-```javascript
-  var QRCode = require('qrcode')
-
-  var segs = [
-    { data: 'ABCDEFG', mode: 'alphanumeric' },
-    { data: '0123456', mode: 'numeric' }
-  ]
-
-  QRCode.toDataURL(segs, function (err, url) {
-    console.log(url)
-  })
-```
-
-### Kanji mode
-With kanji mode is possible to encode characters from the Shift JIS system in an optimized way.<br>
-Unfortunately, there isn't a way to calculate a Shifted JIS values from, for example, a character encoded in UTF-8, for this reason a conversion table from the input characters to the SJIS values is needed.<br>
-This table is not included by default in the bundle to keep the size as small as possible.
-
-If your application requires kanji support, you will need to pass a function that will take care of converting the input characters to appropriate values.
-
-An helper method is provided by the lib through an optional file that you can include as shown in the example below.
-
-**Note:** Support for Kanji mode is only needed if you want to benefit of the data compression, otherwise is still possible to encode kanji using Byte mode (See [Multibyte characters](#multibyte-characters)).
-
-```javascript
-  var QRCode = require('qrcode')
-  var toSJIS = require('qrcode/helper/to-sjis')
-
-  QRCode.toDataURL(kanjiString, { toSJISFunc: toSJIS }, function (err, url) {
-    console.log(url)
-  })
-```
-
-With precompiled bundle:
-
-```html
-<canvas id="canvas"></canvas>
-
-<script src="/build/qrcode.min.js"></script>
-<script src="/build/qrcode.tosjis.min.js"></script>
-<script>
-  QRCode.toCanvas(document.getElementById('canvas'),
-    'sample text', { toSJISFunc: QRCode.toSJIS }, function (error) {
-    if (error) console.error(error)
-    console.log('success!')
-  })
-</script>
-```
-
-## Binary data
-QR Codes can hold arbitrary byte-based binary data. If you attempt to create a binary QR Code by first converting the data to a JavaScript string, it will fail to encode propery because string encoding adds additional bytes. Instead, you must pass a [`Uint8ClampedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray) or compatible array, or a Node [Buffer](https://nodejs.org/api/buffer.html), as follows:
-
-```javascript
-// Regular array example
-// WARNING: Element values will be clamped to 0-255 even if your data contains higher values.
-const QRCode = require('qrcode')
-QRCode.toFile(
-  'foo.png',
-  [{ data: [253,254,255], mode: 'byte' }],
-  ...options...,
-  ...callback...
-)
-```
-
-```javascript
-// Uint8ClampedArray example
-const QRCode = require('qrcode')
-
-QRCode.toFile(
-  'foo.png',
-  [{ data: new Uint8ClampedArray([253,254,255]), mode: 'byte' }],
-  ...options...,
-  ...callback...
-)
-```
-
-```javascript
-// Node Buffer example
-// WARNING: Element values will be clamped to 0-255 even if your data contains higher values.
-const QRCode = require('qrcode')
-
-QRCode.toFile(
-  'foo.png',
-  [{ data: Buffer.from([253,254,255]), mode: 'byte' }],
-  ...options...,
-  ...callback...
-)
-```
-
-TypeScript users: if you are using [@types/qrcode](https://www.npmjs.com/package/@types/qrcode), you will need to add a `// @ts-ignore` above the data segment because it expects `data: string`. 
-
-## Multibyte characters
-Support for multibyte characters isn't present in the initial QR Code standard, but is possible to encode UTF-8 characters in Byte mode.
-
-QR Codes provide a way to specify a different type of character set through ECI (Extended Channel Interpretation), but it's not fully implemented in this lib yet.
-
-Most QR Code readers, however, are able to recognize multibyte characters even without ECI.
-
-Note that a single Kanji/Kana or Emoji can take up to 4 bytes.
-
-## API
-Browser:
-- [create()](#createtext-options)
-- [toCanvas()](#tocanvascanvaselement-text-options-cberror)
-- [toDataURL()](#todataurltext-options-cberror-url)
-- [toString()](#tostringtext-options-cberror-string)
-
-Server:
-- [create()](#createtext-options)
-- [toCanvas()](#tocanvascanvas-text-options-cberror)
-- [toDataURL()](#todataurltext-options-cberror-url-1)
-- [toString()](#tostringtext-options-cberror-string-1)
-- [toFile()](#tofilepath-text-options-cberror)
-- [toFileStream()](#tofilestreamstream-text-options)
-
-### Browser API
-#### `create(text, [options])`
-Creates QR Code symbol and returns a qrcode object.
-
-##### `text`
-Type: `String|Array`
-
-Text to encode or a list of objects describing segments.
-
-##### `options`
-See [QR Code options](#qr-code-options).
-
-##### `returns`
-Type: `Object`
-
-```javascript
-// QRCode object
-{
-  modules,              // Bitmatrix class with modules data
-  version,              // Calculated QR Code version
-  errorCorrectionLevel, // Error Correction Level
-  maskPattern,          // Calculated Mask pattern
-  segments              // Generated segments
-}
-```
-
-<br>
-
-#### `toCanvas(canvasElement, text, [options], [cb(error)])`
-#### `toCanvas(text, [options], [cb(error, canvas)])`
-Draws qr code symbol to canvas.<br>
-If `canvasElement` is omitted a new canvas is returned.
-
-##### `canvasElement`
-Type: `DOMElement`
-
-Canvas where to draw QR Code.
-
-##### `text`
-Type: `String|Array`
-
-Text to encode or a list of objects describing segments.
-
-##### `options`
-See [Options](#options).
-
-##### `cb`
-Type: `Function`
-
-Callback function called on finish.
-
-##### Example
-```javascript
-QRCode.toCanvas('text', { errorCorrectionLevel: 'H' }, function (err, canvas) {
-  if (err) throw err
-
-  var container = document.getElementById('container')
-  container.appendChild(canvas)
-})
-```
-
-<br>
-
-#### `toDataURL(text, [options], [cb(error, url)])`
-#### `toDataURL(canvasElement, text, [options], [cb(error, url)])`
-Returns a Data URI containing a representation of the QR Code image.<br>
-If provided, `canvasElement` will be used as canvas to generate the data URI.
-
-##### `canvasElement`
-Type: `DOMElement`
-
-Canvas where to draw QR Code.
-
-##### `text`
-Type: `String|Array`
-
-Text to encode or a list of objects describing segments.
-
-##### `options`
-- ###### `type`
-  Type: `String`<br>
-  Default: `image/png`
-
-  Data URI format.<br>
-  Possible values are: `image/png`, `image/jpeg`, `image/webp`.<br>
-
-- ###### `rendererOpts.quality`
-  Type: `Number`<br>
-  Default: `0.92`
-
-  A Number between `0` and `1` indicating image quality if the requested type is `image/jpeg` or `image/webp`.
-
-See [Options](#options) for other settings.
-
-##### `cb`
-Type: `Function`
-
-Callback function called on finish.
-
-##### Example
-```javascript
-var opts = {
-  errorCorrectionLevel: 'H',
-  type: 'image/jpeg',
-  quality: 0.3,
-  margin: 1,
-  color: {
-    dark:"#010599FF",
-    light:"#FFBF60FF"
-  }
-}
-
-QRCode.toDataURL('text', opts, function (err, url) {
-  if (err) throw err
-
-  var img = document.getElementById('image')
-  img.src = url
-})
-```
-<br>
-
-#### `toString(text, [options], [cb(error, string)])`
-
-Returns a string representation of the QR Code.<br>
-
-
-##### `text`
-Type: `String|Array`
-
-Text to encode or a list of objects describing segments.
-
-##### `options`
-- ###### `type`
-  Type: `String`<br>
-  Default: `utf8`
-
-  Output format.<br>
-  Possible values are: `terminal`,`utf8`, and `svg`.
-
-See [Options](#options) for other settings.
-
-##### `cb`
-Type: `Function`
-
-Callback function called on finish.
-
-##### Example
-```javascript
-QRCode.toString('http://www.google.com', function (err, string) {
-  if (err) throw err
-  console.log(string)
-})
-```
-
-<br>
-
-
-### Server API
-#### `create(text, [options])`
-See [create](#createtext-options).
-
-<br>
-
-#### `toCanvas(canvas, text, [options], [cb(error)])`
-Draws qr code symbol to [node canvas](https://github.com/Automattic/node-canvas).
-
-##### `text`
-Type: `String|Array`
-
-Text to encode or a list of objects describing segments.
-
-##### `options`
-See [Options](#options).
-
-##### `cb`
-Type: `Function`
-
-Callback function called on finish.
-
-<br>
-
-#### `toDataURL(text, [options], [cb(error, url)])`
-Returns a Data URI containing a representation of the QR Code image.<br>
-Only works with `image/png` type for now.
-
-##### `text`
-Type: `String|Array`
-
-Text to encode or a list of objects describing segments.
-
-##### `options`
-See [Options](#options) for other settings.
-
-##### `cb`
-Type: `Function`
-
-Callback function called on finish.
-
-<br>
-
-#### `toString(text, [options], [cb(error, string)])`
-Returns a string representation of the QR Code.<br>
-If choosen output format is `svg` it will returns a string containing xml code.
-
-##### `text`
-Type: `String|Array`
-
-Text to encode or a list of objects describing segments.
-
-##### `options`
-- ###### `type`
-  Type: `String`<br>
-  Default: `utf8`
-
-  Output format.<br>
-  Possible values are: `utf8`, `svg`, `terminal`.
-
-See [Options](#options) for other settings.
-
-##### `cb`
-Type: `Function`
-
-Callback function called on finish.
-
-##### Example
-```javascript
-QRCode.toString('http://www.google.com', function (err, string) {
-  if (err) throw err
-  console.log(string)
-})
-```
-
-<br>
-
-#### `toFile(path, text, [options], [cb(error)])`
-Saves QR Code to image file.<br>
-If `options.type` is not specified, the format will be guessed from file extension.<br>
-Recognized extensions are `png`, `svg`, `txt`.
-
-##### `path`
-Type: `String`
-
-Path where to save the file.
-
-##### `text`
-Type: `String|Array`
-
-Text to encode or a list of objects describing segments.
-
-##### `options`
-- ###### `type`
-  Type: `String`<br>
-  Default: `png`
-
-  Output format.<br>
-  Possible values are: `png`, `svg`, `utf8`.
-
-- ###### `rendererOpts.deflateLevel` **(png only)**
-  Type: `Number`<br>
-  Default: `9`
-
-  Compression level for deflate.
-
-- ###### `rendererOpts.deflateStrategy` **(png only)**
-  Type: `Number`<br>
-  Default: `3`
-
-  Compression strategy for deflate.
-
-See [Options](#options) for other settings.
-
-##### `cb`
-Type: `Function`
-
-Callback function called on finish.
-
-##### Example
-```javascript
-QRCode.toFile('path/to/filename.png', 'Some text', {
-  color: {
-    dark: '#00F',  // Blue dots
-    light: '#0000' // Transparent background
-  }
-}, function (err) {
-  if (err) throw err
-  console.log('done')
-})
-```
-
-<br>
-
-#### `toFileStream(stream, text, [options])`
-Writes QR Code image to stream. Only works with `png` format for now.
-
-##### `stream`
-Type: `stream.Writable`
-
-Node stream.
-
-##### `text`
-Type: `String|Array`
-
-Text to encode or a list of objects describing segments.
-
-##### `options`
-See [Options](#options).
-
-<br>
-
-### Options
-
-#### QR Code options
-##### `version`
-  Type: `Number`<br>
-
-  QR Code version. If not specified the more suitable value will be calculated.
-
-##### `errorCorrectionLevel`
-  Type: `String`<br>
-  Default: `M`
-
-  Error correction level.<br>
-  Possible values are `low, medium, quartile, high` or `L, M, Q, H`.
-
-##### `maskPattern`
-  Type: `Number`<br>
-
-  Mask pattern used to mask the symbol.<br>
-  Possible values are `0`, `1`, `2`, `3`, `4`, `5`, `6`, `7`.<br>
-  If not specified the more suitable value will be calculated.
-
-##### `toSJISFunc`
-  Type: `Function`<br>
-
-  Helper function used internally to convert a kanji to its Shift JIS value.<br>
-  Provide this function if you need support for Kanji mode.
-
-#### Renderers options
-##### `margin`
-  Type: `Number`<br>
-  Default: `4`
-
-  Define how much wide the quiet zone should be.
-
-##### `scale`
-  Type: `Number`<br>
-  Default: `4`
-
-  Scale factor. A value of `1` means 1px per modules (black dots).
-
-##### `width`
-  Type: `Number`<br>
-
-  Forces a specific width for the output image.<br>
-  If width is too small to contain the qr symbol, this option will be ignored.<br>
-  Takes precedence over `scale`.
-
-##### `color.dark`
-Type: `String`<br>
-Default: `#000000ff`
-
-Color of dark module. Value must be in hex format (RGBA).<br>
-Note: dark color should always be darker than `color.light`.
-
-##### `color.light`
-Type: `String`<br>
-Default: `#ffffffff`
-
-Color of light module. Value must be in hex format (RGBA).<br>
-
-<br>
-
-## GS1 QR Codes
-There was a real good discussion here about them. but in short any qrcode generator will make gs1 compatible qrcodes, but what defines a gs1 qrcode is a header with metadata that describes your gs1 information.
-
-https://github.com/soldair/node-qrcode/issues/45
-
-
-## Credits
-This lib is based on "QRCode for JavaScript" which Kazuhiko Arase thankfully MIT licensed.
-
-## License
-[MIT](https://github.com/soldair/node-qrcode/blob/master/license)
-
-The word "QR Code" is registered trademark of:<br>
-DENSO WAVE INCORPORATED
diff --git a/device_home/node_modules/qrcode/build/qrcode.min.js.map b/device_home/node_modules/qrcode/build/qrcode.min.js.map
deleted file mode 100644 (file)
index 0350903..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["build/qrcode.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","QRCode","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","Promise","prototype","then","2","getSymbolSize","getRowColCoords","version","posCount","Math","floor","size","intervals","ceil","positions","push","reverse","getPositions","coords","pos","posLength","j","./utils","3","AlphanumericData","data","mode","Mode","ALPHANUMERIC","ALPHA_NUM_CHARS","getBitsLength","getLength","write","bitBuffer","value","indexOf","put","./mode","4","BitBuffer","buffer","get","index","bufIndex","num","putBit","getLengthInBits","bit","5","BitMatrix","BufferUtil","alloc","reservedBit","set","row","col","reserved","xor","isReserved","../utils/buffer","6","ByteData","BYTE","from","l","7","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","getBlocksCount","errorCorrectionLevel","L","M","Q","H","getTotalCodewordsCount","./error-correction-level","8","fromString","string","toLowerCase","isValid","level","defaultValue","9","10","Utils","G15_BCH","getBCHDigit","getEncodedBits","mask","d","11","EXP_TABLE","LOG_TABLE","x","log","exp","mul","y","12","KanjiData","KANJI","toSJIS","13","getMaskAt","maskPattern","Patterns","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","PenaltyScores","N1","N2","N3","N4","isNaN","parseInt","undefined","getPenaltyN1","points","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","last","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","abs","applyMask","pattern","getBestMask","setupFormatFunc","numPatterns","Object","keys","bestPattern","lowerPenalty","Infinity","penalty","14","NUMERIC","VersionCheck","Regex","id","ccBits","MIXED","getCharCountIndicator","getBestModeForData","dataStr","testNumeric","testAlphanumeric","testKanji","toString","./regex","./version-check","15","NumericData","group","substr","remainingNum","16","GF","p1","p2","coeff","mod","divident","divisor","result","offset","slice","generateECPolynomial","degree","poly","./galois-field","17","setupFinderPattern","matrix","FinderPattern","setupTimingPattern","setupAlignmentPattern","AlignmentPattern","setupVersionInfo","bits","Version","setupFormatInfo","FormatInfo","setupData","inc","bitIndex","byteIndex","dark","createData","segments","forEach","totalCodewords","getSymbolTotalCodewords","ecTotalCodewords","ECCode","dataTotalCodewordsBits","remainingByte","createCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup2","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","ReedSolomonEncoder","dcData","Array","ecData","maxDataSize","b","dataSize","encode","max","createSymbol","isArray","Segments","fromArray","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","bestVersion","dataBits","moduleCount","modules","MaskPattern","bind","create","options","toSJISFunc","setToSJISFunction","./alignment-pattern","./bit-buffer","./bit-matrix","./error-correction-code","./finder-pattern","./format-info","./mask-pattern","./reed-solomon-encoder","./segments","./version","isarray","18","genPoly","initialize","Polynomial","Buffer","pad","paddedData","concat","remainder","start","buff","copy","./polynomial","19","kanji","replace","byte","RegExp","BYTE_KANJI","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","str","test","20","getStringByteLength","unescape","encodeURIComponent","getSegments","regex","exec","getSegmentsFromString","byteSegs","kanjiSegs","numSegs","alphaNumSegs","isKanjiModeEnabled","sort","s1","s2","map","obj","getSegmentBitsLength","mergeSegments","segs","reduce","acc","curr","prevSeg","buildNodes","nodes","seg","buildGraph","table","graph","prevNodeIds","nodeGroup","currentNodeIds","node","key","lastCount","prevNodeId","buildSingleSegment","modesHint","bestMode","dijkstra","array","path","find_path","optimizedSegs","./alphanumeric-data","./byte-data","./kanji-data","./numeric-data","dijkstrajs","21","toSJISFunction","CODEWORDS_COUNT","digit","22","23","getBestVersionForDataLength","currentVersion","getCapacity","getReservedBitsCount","getTotalBitsFromDataArray","totalBits","reservedBits","getBestVersionForMixedData","G18_BCH","usableBits","ecl","24","renderCanvas","renderFunc","canvas","text","opts","cb","args","arguments","argsNum","isLastArgCb","canPromise","getContext","resolve","reject","CanvasRenderer","SvgRenderer","toCanvas","render","toDataURL","renderToDataURL","_","./can-promise","./core/qrcode","./renderer/canvas","./renderer/svg-tag.js","25","clearCanvas","ctx","clearRect","width","height","style","getCanvasElement","document","createElement","qrData","canvasEl","getOptions","getImageWidth","image","createImageData","qrToImageData","putImageData","type","rendererOpts","quality","26","getColorAttrib","color","attrib","alpha","hex","toFixed","svgCmd","cmd","qrToPath","margin","moveBy","newRow","lineLength","qrcodesize","bg","light","viewBox","svgTag","27","hex2rgba","hexCode","split","apply","hexValue","join","scale","getScale","qrSize","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","iSrc","jSrc","28","arg","TYPED_ARRAY_SUPPORT","allocUnsafe","checked","K_MAX_LENGTH","RangeError","isnan","val","createBuffer","that","buf","Uint8Array","__proto__","byteLength","actual","fromArrayLike","fromArrayBuffer","byteOffset","fromObject","isBuffer","len","ArrayBuffer","TypeError","utf8ToBytes","units","codePoint","leadSurrogate","bytes","charCodeAt","isView","blitBuffer","src","dst","utf8Write","arr","foo","Symbol","species","defineProperty","configurable","enumerable","writable","isFinite","remaining","end","newBuf","subarray","sliceLen","target","targetStart","fill","list","_isBuffer","29","getLens","b64","validLen","lens","placeHoldersLen","_byteLength","toByteArray","tmp","Arr","curByte","revLookup","tripletToBase64","lookup","encodeChunk","uint8","output","fromByteArray","extraBytes","parts","len2","30","setPrototypeOf","encodingOrOffset","isInstance","valueOf","toPrimitive","assertSize","encoding","isEncoding","numberIsNaN","SlowBuffer","mustMatch","loweredCase","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","m","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","read","indexSize","readUInt16BE","arrLength","valLength","String","foundIndex","found","hexWrite","Number","strLen","parsed","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","base64","min","res","firstByte","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","ret","out","hexSliceLookupTable","checkOffset","ext","checkInt","checkIEEE754","writeFloat","littleEndian","noAssert","ieee754","writeDouble","base64clean","trim","INVALID_BASE64_RE","byteArray","hi","lo","constructor","name","customInspectSymbol","for","INSPECT_MAX_BYTES","kMaxLength","proto","console","error","poolSize","allocUnsafeSlow","compare","swap16","swap32","swap64","toLocaleString","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","toJSON","_arr","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","copyWithin","i16","base64-js","31","single_source_shortest_paths","s","predecessors","costs","open","PriorityQueue","make","closest","v","cost_of_s_to_u","adjacent_nodes","cost_of_e","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","empty","pop","cost","hasOwnProperty","msg","extract_shortest_path_from_predecessor_list","T","queue","sorter","default_sorter","item","shift","32","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","33"],"mappings":"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"}
\ No newline at end of file
diff --git a/device_home/node_modules/qrcode/build/qrcode.tosjis.min.js.map b/device_home/node_modules/qrcode/build/qrcode.tosjis.min.js.map
deleted file mode 100644 (file)
index d8e9bbe..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["build/qrcode.tosjis.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","QRCode","toSJIS","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","SJIS_UTF8","utf8Char","kanji","posIndex","indexOf"],"mappings":"CAAA,SAAUA,GAAG,GAAoB,gBAAVC,UAAoC,mBAATC,QAAsBA,OAAOD,QAAQD,QAAS,IAAmB,kBAATG,SAAqBA,OAAOC,IAAKD,UAAUH,OAAO,CAAC,GAAIK,EAAkCA,GAAb,mBAATC,QAAwBA,OAA+B,mBAATC,QAAwBA,OAA6B,mBAAPC,MAAsBA,KAAYC,MAAMJ,EAAEK,SAAWL,EAAEK,YAAcC,OAASX,MAAO,WAAqC,MAAO,YAAY,QAASY,GAAEC,EAAEC,EAAEC,GAAG,QAASC,GAAEC,EAAEjB,GAAG,IAAIc,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAAC,GAAIC,GAAE,kBAAmBC,UAASA,OAAQ,KAAInB,GAAGkB,EAAE,MAAOA,GAAED,GAAE,EAAI,IAAGG,EAAE,MAAOA,GAAEH,GAAE,EAAI,IAAII,GAAE,GAAIC,OAAM,uBAAuBL,EAAE,IAAK,MAAMI,GAAEE,KAAK,mBAAmBF,EAAE,GAAIG,GAAEV,EAAEG,IAAIhB,WAAYY,GAAEI,GAAG,GAAGQ,KAAKD,EAAEvB,QAAQ,SAASW,GAAoB,MAAOI,GAAlBH,EAAEI,GAAG,GAAGL,IAAeA,IAAIY,EAAEA,EAAEvB,QAAQW,EAAEC,EAAEC,EAAEC,GAAG,MAAOD,GAAEG,GAAGhB,QAAQ,IAAI,GAAImB,GAAE,kBAAmBD,UAASA,QAAQF,EAAE,EAAEA,EAAEF,EAAEW,OAAOT,IAAID,EAAED,EAAEE,GAAI,OAAOD,GAAE,MAAOJ,OAAOe,GAAG,SAASR,EAAQjB,EAAOD,GACl3B,GAAI2B,KACD,MAAQ,oEACR,MAAQ,UACR,MAAQ,iBACR,MAAQ,YACR,MAAQ,MACR,MAAQ,eACR,MAAQ,+BACR,MAAQ,+BACR,MAAQ,wFACR,MAAQ,oEACR,MAAQ,4BACR,MAAQ,6BACR,MAAQ,6BACR,MAAQ,sCACR,MAAQ,oBACR,MAAQ,uBACR,MAAQ,OACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,wDACR,MAAQ,mGACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,IAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,yCAGX1B,GAAOD,QAAU,SAAiB4B,GAChC,GAAKA,GAAyB,KAAbA,EAEjB,IAAK,GAAIZ,GAAI,EAAGA,EAAIW,EAAUF,OAAQT,IAAK,CACzC,GAAIa,GAAQF,EAAUX,GAAG,GAErBc,EAAWD,EAAME,QAAQH,EAC7B,IAAIE,GAAY,EACd,MAAOH,GAAUX,GAAG,GAAKc,cAKpB,IAAI"}
\ No newline at end of file
diff --git a/device_home/node_modules/qs/CHANGELOG.md b/device_home/node_modules/qs/CHANGELOG.md
deleted file mode 100644 (file)
index 50505c4..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-## **6.7.0**
-- [New] `stringify`/`parse`: add `comma` as an `arrayFormat` option (#276, #219)
-- [Fix] correctly parse nested arrays (#212)
-- [Fix] `utils.merge`: avoid a crash with a null target and a truthy non-array source, also with an array source
-- [Robustness] `stringify`: cache `Object.prototype.hasOwnProperty`
-- [Refactor] `utils`: `isBuffer`: small tweak; add tests
-- [Refactor] use cached `Array.isArray`
-- [Refactor] `parse`/`stringify`: make a function to normalize the options
-- [Refactor] `utils`: reduce observable [[Get]]s
-- [Refactor] `stringify`/`utils`: cache `Array.isArray`
-- [Tests] always use `String(x)` over `x.toString()`
-- [Tests] fix Buffer tests to work in node < 4.5 and node < 5.10
-- [Tests] temporarily allow coverage to fail
-
-## **6.6.0**
-- [New] Add support for iso-8859-1, utf8 "sentinel" and numeric entities (#268)
-- [New] move two-value combine to a `utils` function (#189)
-- [Fix] `stringify`: fix a crash with `strictNullHandling` and a custom `filter`/`serializeDate` (#279)
-- [Fix] when `parseArrays` is false, properly handle keys ending in `[]` (#260)
-- [Fix] `stringify`: do not crash in an obscure combo of `interpretNumericEntities`, a bad custom `decoder`, & `iso-8859-1`
-- [Fix] `utils`: `merge`: fix crash when `source` is a truthy primitive & no options are provided
-- [refactor] `stringify`: Avoid arr = arr.concat(...), push to the existing instance (#269)
-- [Refactor] `parse`: only need to reassign the var once
-- [Refactor] `parse`/`stringify`: clean up `charset` options checking; fix defaults
-- [Refactor] add missing defaults
-- [Refactor] `parse`: one less `concat` call
-- [Refactor] `utils`: `compactQueue`: make it explicitly side-effecting
-- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`, `iconv-lite`, `safe-publish-latest`, `tape`
-- [Tests] up to `node` `v10.10`, `v9.11`, `v8.12`, `v6.14`, `v4.9`; pin included builds to LTS
-
-## **6.5.2**
-- [Fix] use `safer-buffer` instead of `Buffer` constructor
-- [Refactor] utils: `module.exports` one thing, instead of mutating `exports` (#230)
-- [Dev Deps] update `browserify`, `eslint`, `iconv-lite`, `safer-buffer`, `tape`, `browserify`
-
-## **6.5.1**
-- [Fix] Fix parsing & compacting very deep objects (#224)
-- [Refactor] name utils functions
-- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`
-- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` so newer npm doesn’t break older node
-- [Tests] Use precise dist for Node.js 0.6 runtime (#225)
-- [Tests] make 0.6 required, now that it’s passing
-- [Tests] on `node` `v8.2`; fix npm on node 0.6
-
-## **6.5.0**
-- [New] add `utils.assign`
-- [New] pass default encoder/decoder to custom encoder/decoder functions (#206)
-- [New] `parse`/`stringify`: add `ignoreQueryPrefix`/`addQueryPrefix` options, respectively (#213)
-- [Fix] Handle stringifying empty objects with addQueryPrefix (#217)
-- [Fix] do not mutate `options` argument (#207)
-- [Refactor] `parse`: cache index to reuse in else statement (#182)
-- [Docs] add various badges to readme (#208)
-- [Dev Deps] update `eslint`, `browserify`, `iconv-lite`, `tape`
-- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`; npm v4.6 breaks on node < v1; npm v5+ breaks on node < v4
-- [Tests] add `editorconfig-tools`
-
-## **6.4.0**
-- [New] `qs.stringify`: add `encodeValuesOnly` option
-- [Fix] follow `allowPrototypes` option during merge (#201, #201)
-- [Fix] support keys starting with brackets (#202, #200)
-- [Fix] chmod a-x
-- [Dev Deps] update `eslint`
-- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds
-- [eslint] reduce warnings
-
-## **6.3.2**
-- [Fix] follow `allowPrototypes` option during merge (#201, #200)
-- [Dev Deps] update `eslint`
-- [Fix] chmod a-x
-- [Fix] support keys starting with brackets (#202, #200)
-- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds
-
-## **6.3.1**
-- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties (thanks, @snyk!)
-- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `iconv-lite`, `qs-iconv`, `tape`
-- [Tests] on all node minors; improve test matrix
-- [Docs] document stringify option `allowDots` (#195)
-- [Docs] add empty object and array values example (#195)
-- [Docs] Fix minor inconsistency/typo (#192)
-- [Docs] document stringify option `sort` (#191)
-- [Refactor] `stringify`: throw faster with an invalid encoder
-- [Refactor] remove unnecessary escapes (#184)
-- Remove contributing.md, since `qs` is no longer part of `hapi` (#183)
-
-## **6.3.0**
-- [New] Add support for RFC 1738 (#174, #173)
-- [New] `stringify`: Add `serializeDate` option to customize Date serialization (#159)
-- [Fix] ensure `utils.merge` handles merging two arrays
-- [Refactor] only constructors should be capitalized
-- [Refactor] capitalized var names are for constructors only
-- [Refactor] avoid using a sparse array
-- [Robustness] `formats`: cache `String#replace`
-- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`; add `safe-publish-latest`
-- [Tests] up to `node` `v6.8`, `v4.6`; improve test matrix
-- [Tests] flesh out arrayLimit/arrayFormat tests (#107)
-- [Tests] skip Object.create tests when null objects are not available
-- [Tests] Turn on eslint for test files (#175)
-
-## **6.2.3**
-- [Fix] follow `allowPrototypes` option during merge (#201, #200)
-- [Fix] chmod a-x
-- [Fix] support keys starting with brackets (#202, #200)
-- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds
-
-## **6.2.2**
-- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties
-
-## **6.2.1**
-- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values
-- [Refactor] Be explicit and use `Object.prototype.hasOwnProperty.call`
-- [Tests] remove `parallelshell` since it does not reliably report failures
-- [Tests] up to `node` `v6.3`, `v5.12`
-- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `qs-iconv`
-
-## [**6.2.0**](https://github.com/ljharb/qs/issues?milestone=36&state=closed)
-- [New] pass Buffers to the encoder/decoder directly (#161)
-- [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160)
-- [Fix] fix compacting of nested sparse arrays (#150)
-
-## **6.1.2
-- [Fix] follow `allowPrototypes` option during merge (#201, #200)
-- [Fix] chmod a-x
-- [Fix] support keys starting with brackets (#202, #200)
-- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds
-
-## **6.1.1**
-- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties
-
-## [**6.1.0**](https://github.com/ljharb/qs/issues?milestone=35&state=closed)
-- [New] allowDots option for `stringify` (#151)
-- [Fix] "sort" option should work at a depth of 3 or more (#151)
-- [Fix] Restore `dist` directory; will be removed in v7 (#148)
-
-## **6.0.4**
-- [Fix] follow `allowPrototypes` option during merge (#201, #200)
-- [Fix] chmod a-x
-- [Fix] support keys starting with brackets (#202, #200)
-- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds
-
-## **6.0.3**
-- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties
-- [Fix] Restore `dist` directory; will be removed in v7 (#148)
-
-## [**6.0.2**](https://github.com/ljharb/qs/issues?milestone=33&state=closed)
-- Revert ES6 requirement and restore support for node down to v0.8.
-
-## [**6.0.1**](https://github.com/ljharb/qs/issues?milestone=32&state=closed)
-- [**#127**](https://github.com/ljharb/qs/pull/127) Fix engines definition in package.json
-
-## [**6.0.0**](https://github.com/ljharb/qs/issues?milestone=31&state=closed)
-- [**#124**](https://github.com/ljharb/qs/issues/124) Use ES6 and drop support for node < v4
-
-## **5.2.1**
-- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values
-
-## [**5.2.0**](https://github.com/ljharb/qs/issues?milestone=30&state=closed)
-- [**#64**](https://github.com/ljharb/qs/issues/64) Add option to sort object keys in the query string
-
-## [**5.1.0**](https://github.com/ljharb/qs/issues?milestone=29&state=closed)
-- [**#117**](https://github.com/ljharb/qs/issues/117) make URI encoding stringified results optional
-- [**#106**](https://github.com/ljharb/qs/issues/106) Add flag `skipNulls` to optionally skip null values in stringify
-
-## [**5.0.0**](https://github.com/ljharb/qs/issues?milestone=28&state=closed)
-- [**#114**](https://github.com/ljharb/qs/issues/114) default allowDots to false
-- [**#100**](https://github.com/ljharb/qs/issues/100) include dist to npm
-
-## [**4.0.0**](https://github.com/ljharb/qs/issues?milestone=26&state=closed)
-- [**#98**](https://github.com/ljharb/qs/issues/98) make returning plain objects and allowing prototype overwriting properties optional
-
-## [**3.1.0**](https://github.com/ljharb/qs/issues?milestone=24&state=closed)
-- [**#89**](https://github.com/ljharb/qs/issues/89) Add option to disable "Transform dot notation to bracket notation"
-
-## [**3.0.0**](https://github.com/ljharb/qs/issues?milestone=23&state=closed)
-- [**#80**](https://github.com/ljharb/qs/issues/80) qs.parse silently drops properties
-- [**#77**](https://github.com/ljharb/qs/issues/77) Perf boost
-- [**#60**](https://github.com/ljharb/qs/issues/60) Add explicit option to disable array parsing
-- [**#74**](https://github.com/ljharb/qs/issues/74) Bad parse when turning array into object
-- [**#81**](https://github.com/ljharb/qs/issues/81) Add a `filter` option
-- [**#68**](https://github.com/ljharb/qs/issues/68) Fixed issue with recursion and passing strings into objects.
-- [**#66**](https://github.com/ljharb/qs/issues/66) Add mixed array and object dot notation support Closes: #47
-- [**#76**](https://github.com/ljharb/qs/issues/76) RFC 3986
-- [**#85**](https://github.com/ljharb/qs/issues/85) No equal sign
-- [**#84**](https://github.com/ljharb/qs/issues/84) update license attribute
-
-## [**2.4.1**](https://github.com/ljharb/qs/issues?milestone=20&state=closed)
-- [**#73**](https://github.com/ljharb/qs/issues/73) Property 'hasOwnProperty' of object #<Object> is not a function
-
-## [**2.4.0**](https://github.com/ljharb/qs/issues?milestone=19&state=closed)
-- [**#70**](https://github.com/ljharb/qs/issues/70) Add arrayFormat option
-
-## [**2.3.3**](https://github.com/ljharb/qs/issues?milestone=18&state=closed)
-- [**#59**](https://github.com/ljharb/qs/issues/59) make sure array indexes are >= 0, closes #57
-- [**#58**](https://github.com/ljharb/qs/issues/58) make qs usable for browser loader
-
-## [**2.3.2**](https://github.com/ljharb/qs/issues?milestone=17&state=closed)
-- [**#55**](https://github.com/ljharb/qs/issues/55) allow merging a string into an object
-
-## [**2.3.1**](https://github.com/ljharb/qs/issues?milestone=16&state=closed)
-- [**#52**](https://github.com/ljharb/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError".
-
-## [**2.3.0**](https://github.com/ljharb/qs/issues?milestone=15&state=closed)
-- [**#50**](https://github.com/ljharb/qs/issues/50) add option to omit array indices, closes #46
-
-## [**2.2.5**](https://github.com/ljharb/qs/issues?milestone=14&state=closed)
-- [**#39**](https://github.com/ljharb/qs/issues/39) Is there an alternative to Buffer.isBuffer?
-- [**#49**](https://github.com/ljharb/qs/issues/49) refactor utils.merge, fixes #45
-- [**#41**](https://github.com/ljharb/qs/issues/41) avoid browserifying Buffer, for #39
-
-## [**2.2.4**](https://github.com/ljharb/qs/issues?milestone=13&state=closed)
-- [**#38**](https://github.com/ljharb/qs/issues/38) how to handle object keys beginning with a number
-
-## [**2.2.3**](https://github.com/ljharb/qs/issues?milestone=12&state=closed)
-- [**#37**](https://github.com/ljharb/qs/issues/37) parser discards first empty value in array
-- [**#36**](https://github.com/ljharb/qs/issues/36) Update to lab 4.x
-
-## [**2.2.2**](https://github.com/ljharb/qs/issues?milestone=11&state=closed)
-- [**#33**](https://github.com/ljharb/qs/issues/33) Error when plain object in a value
-- [**#34**](https://github.com/ljharb/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty
-- [**#24**](https://github.com/ljharb/qs/issues/24) Changelog? Semver?
-
-## [**2.2.1**](https://github.com/ljharb/qs/issues?milestone=10&state=closed)
-- [**#32**](https://github.com/ljharb/qs/issues/32) account for circular references properly, closes #31
-- [**#31**](https://github.com/ljharb/qs/issues/31) qs.parse stackoverflow on circular objects
-
-## [**2.2.0**](https://github.com/ljharb/qs/issues?milestone=9&state=closed)
-- [**#26**](https://github.com/ljharb/qs/issues/26) Don't use Buffer global if it's not present
-- [**#30**](https://github.com/ljharb/qs/issues/30) Bug when merging non-object values into arrays
-- [**#29**](https://github.com/ljharb/qs/issues/29) Don't call Utils.clone at the top of Utils.merge
-- [**#23**](https://github.com/ljharb/qs/issues/23) Ability to not limit parameters?
-
-## [**2.1.0**](https://github.com/ljharb/qs/issues?milestone=8&state=closed)
-- [**#22**](https://github.com/ljharb/qs/issues/22) Enable using a RegExp as delimiter
-
-## [**2.0.0**](https://github.com/ljharb/qs/issues?milestone=7&state=closed)
-- [**#18**](https://github.com/ljharb/qs/issues/18) Why is there arrayLimit?
-- [**#20**](https://github.com/ljharb/qs/issues/20) Configurable parametersLimit
-- [**#21**](https://github.com/ljharb/qs/issues/21) make all limits optional, for #18, for #20
-
-## [**1.2.2**](https://github.com/ljharb/qs/issues?milestone=6&state=closed)
-- [**#19**](https://github.com/ljharb/qs/issues/19) Don't overwrite null values
-
-## [**1.2.1**](https://github.com/ljharb/qs/issues?milestone=5&state=closed)
-- [**#16**](https://github.com/ljharb/qs/issues/16) ignore non-string delimiters
-- [**#15**](https://github.com/ljharb/qs/issues/15) Close code block
-
-## [**1.2.0**](https://github.com/ljharb/qs/issues?milestone=4&state=closed)
-- [**#12**](https://github.com/ljharb/qs/issues/12) Add optional delim argument
-- [**#13**](https://github.com/ljharb/qs/issues/13) fix #11: flattened keys in array are now correctly parsed
-
-## [**1.1.0**](https://github.com/ljharb/qs/issues?milestone=3&state=closed)
-- [**#7**](https://github.com/ljharb/qs/issues/7) Empty values of a POST array disappear after being submitted
-- [**#9**](https://github.com/ljharb/qs/issues/9) Should not omit equals signs (=) when value is null
-- [**#6**](https://github.com/ljharb/qs/issues/6) Minor grammar fix in README
-
-## [**1.0.2**](https://github.com/ljharb/qs/issues?milestone=2&state=closed)
-- [**#5**](https://github.com/ljharb/qs/issues/5) array holes incorrectly copied into object on large index
diff --git a/device_home/node_modules/qs/README.md b/device_home/node_modules/qs/README.md
deleted file mode 100644 (file)
index 8590cfd..0000000
+++ /dev/null
@@ -1,570 +0,0 @@
-# qs <sup>[![Version Badge][2]][1]</sup>
-
-[![Build Status][3]][4]
-[![dependency status][5]][6]
-[![dev dependency status][7]][8]
-[![License][license-image]][license-url]
-[![Downloads][downloads-image]][downloads-url]
-
-[![npm badge][11]][1]
-
-A querystring parsing and stringifying library with some added security.
-
-Lead Maintainer: [Jordan Harband](https://github.com/ljharb)
-
-The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring).
-
-## Usage
-
-```javascript
-var qs = require('qs');
-var assert = require('assert');
-
-var obj = qs.parse('a=c');
-assert.deepEqual(obj, { a: 'c' });
-
-var str = qs.stringify(obj);
-assert.equal(str, 'a=c');
-```
-
-### Parsing Objects
-
-[](#preventEval)
-```javascript
-qs.parse(string, [options]);
-```
-
-**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`.
-For example, the string `'foo[bar]=baz'` converts to:
-
-```javascript
-assert.deepEqual(qs.parse('foo[bar]=baz'), {
-    foo: {
-        bar: 'baz'
-    }
-});
-```
-
-When using the `plainObjects` option the parsed value is returned as a null object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like:
-
-```javascript
-var nullObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true });
-assert.deepEqual(nullObject, { a: { hasOwnProperty: 'b' } });
-```
-
-By default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties. *WARNING* It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten. Always be careful with this option.
-
-```javascript
-var protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true });
-assert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } });
-```
-
-URI encoded strings work too:
-
-```javascript
-assert.deepEqual(qs.parse('a%5Bb%5D=c'), {
-    a: { b: 'c' }
-});
-```
-
-You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`:
-
-```javascript
-assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), {
-    foo: {
-        bar: {
-            baz: 'foobarbaz'
-        }
-    }
-});
-```
-
-By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like
-`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be:
-
-```javascript
-var expected = {
-    a: {
-        b: {
-            c: {
-                d: {
-                    e: {
-                        f: {
-                            '[g][h][i]': 'j'
-                        }
-                    }
-                }
-            }
-        }
-    }
-};
-var string = 'a[b][c][d][e][f][g][h][i]=j';
-assert.deepEqual(qs.parse(string), expected);
-```
-
-This depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`:
-
-```javascript
-var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 });
-assert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } });
-```
-
-The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number.
-
-For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option:
-
-```javascript
-var limited = qs.parse('a=b&c=d', { parameterLimit: 1 });
-assert.deepEqual(limited, { a: 'b' });
-```
-
-To bypass the leading question mark, use `ignoreQueryPrefix`:
-
-```javascript
-var prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true });
-assert.deepEqual(prefixed, { a: 'b', c: 'd' });
-```
-
-An optional delimiter can also be passed:
-
-```javascript
-var delimited = qs.parse('a=b;c=d', { delimiter: ';' });
-assert.deepEqual(delimited, { a: 'b', c: 'd' });
-```
-
-Delimiters can be a regular expression too:
-
-```javascript
-var regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ });
-assert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' });
-```
-
-Option `allowDots` can be used to enable dot notation:
-
-```javascript
-var withDots = qs.parse('a.b=c', { allowDots: true });
-assert.deepEqual(withDots, { a: { b: 'c' } });
-```
-
-If you have to deal with legacy browsers or services, there's
-also support for decoding percent-encoded octets as iso-8859-1:
-
-```javascript
-var oldCharset = qs.parse('a=%A7', { charset: 'iso-8859-1' });
-assert.deepEqual(oldCharset, { a: '§' });
-```
-
-Some services add an initial `utf8=✓` value to forms so that old
-Internet Explorer versions are more likely to submit the form as
-utf-8. Additionally, the server can check the value against wrong
-encodings of the checkmark character and detect that a query string
-or `application/x-www-form-urlencoded` body was *not* sent as
-utf-8, eg. if the form had an `accept-charset` parameter or the
-containing page had a different character set.
-
-**qs** supports this mechanism via the `charsetSentinel` option.
-If specified, the `utf8` parameter will be omitted from the
-returned object. It will be used to switch to `iso-8859-1`/`utf-8`
-mode depending on how the checkmark is encoded.
-
-**Important**: When you specify both the `charset` option and the
-`charsetSentinel` option, the `charset` will be overridden when
-the request contains a `utf8` parameter from which the actual
-charset can be deduced. In that sense the `charset` will behave
-as the default charset rather than the authoritative charset.
-
-```javascript
-var detectedAsUtf8 = qs.parse('utf8=%E2%9C%93&a=%C3%B8', {
-    charset: 'iso-8859-1',
-    charsetSentinel: true
-});
-assert.deepEqual(detectedAsUtf8, { a: 'ø' });
-
-// Browsers encode the checkmark as &#10003; when submitting as iso-8859-1:
-var detectedAsIso8859_1 = qs.parse('utf8=%26%2310003%3B&a=%F8', {
-    charset: 'utf-8',
-    charsetSentinel: true
-});
-assert.deepEqual(detectedAsIso8859_1, { a: 'ø' });
-```
-
-If you want to decode the `&#...;` syntax to the actual character,
-you can specify the `interpretNumericEntities` option as well:
-
-```javascript
-var detectedAsIso8859_1 = qs.parse('a=%26%239786%3B', {
-    charset: 'iso-8859-1',
-    interpretNumericEntities: true
-});
-assert.deepEqual(detectedAsIso8859_1, { a: '☺' });
-```
-
-It also works when the charset has been detected in `charsetSentinel`
-mode.
-
-### Parsing Arrays
-
-**qs** can also parse arrays using a similar `[]` notation:
-
-```javascript
-var withArray = qs.parse('a[]=b&a[]=c');
-assert.deepEqual(withArray, { a: ['b', 'c'] });
-```
-
-You may specify an index as well:
-
-```javascript
-var withIndexes = qs.parse('a[1]=c&a[0]=b');
-assert.deepEqual(withIndexes, { a: ['b', 'c'] });
-```
-
-Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number
-to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving
-their order:
-
-```javascript
-var noSparse = qs.parse('a[1]=b&a[15]=c');
-assert.deepEqual(noSparse, { a: ['b', 'c'] });
-```
-
-Note that an empty string is also a value, and will be preserved:
-
-```javascript
-var withEmptyString = qs.parse('a[]=&a[]=b');
-assert.deepEqual(withEmptyString, { a: ['', 'b'] });
-
-var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c');
-assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] });
-```
-
-**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will
-instead be converted to an object with the index as the key. This is needed to handle cases when someone sent, for example, `a[999999999]` and it will take significant time to iterate over this huge array.
-
-```javascript
-var withMaxIndex = qs.parse('a[100]=b');
-assert.deepEqual(withMaxIndex, { a: { '100': 'b' } });
-```
-
-This limit can be overridden by passing an `arrayLimit` option:
-
-```javascript
-var withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 });
-assert.deepEqual(withArrayLimit, { a: { '1': 'b' } });
-```
-
-To disable array parsing entirely, set `parseArrays` to `false`.
-
-```javascript
-var noParsingArrays = qs.parse('a[]=b', { parseArrays: false });
-assert.deepEqual(noParsingArrays, { a: { '0': 'b' } });
-```
-
-If you mix notations, **qs** will merge the two items into an object:
-
-```javascript
-var mixedNotation = qs.parse('a[0]=b&a[b]=c');
-assert.deepEqual(mixedNotation, { a: { '0': 'b', b: 'c' } });
-```
-
-You can also create arrays of objects:
-
-```javascript
-var arraysOfObjects = qs.parse('a[][b]=c');
-assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] });
-```
-
-Some people use comma to join array, **qs** can parse it:
-```javascript
-var arraysOfObjects = qs.parse('a=b,c', { comma: true })
-assert.deepEqual(arraysOfObjects, { a: ['b', 'c'] })
-```
-(_this cannot convert nested objects, such as `a={b:1},{c:d}`_)
-
-### Stringifying
-
-[](#preventEval)
-```javascript
-qs.stringify(object, [options]);
-```
-
-When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect:
-
-```javascript
-assert.equal(qs.stringify({ a: 'b' }), 'a=b');
-assert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
-```
-
-This encoding can be disabled by setting the `encode` option to `false`:
-
-```javascript
-var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false });
-assert.equal(unencoded, 'a[b]=c');
-```
-
-Encoding can be disabled for keys by setting the `encodeValuesOnly` option to `true`:
-```javascript
-var encodedValues = qs.stringify(
-    { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] },
-    { encodeValuesOnly: true }
-);
-assert.equal(encodedValues,'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h');
-```
-
-This encoding can also be replaced by a custom encoding method set as `encoder` option:
-
-```javascript
-var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) {
-    // Passed in values `a`, `b`, `c`
-    return // Return encoded string
-}})
-```
-
-_(Note: the `encoder` option does not apply if `encode` is `false`)_
-
-Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values:
-
-```javascript
-var decoded = qs.parse('x=z', { decoder: function (str) {
-    // Passed in values `x`, `z`
-    return // Return decoded string
-}})
-```
-
-Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage.
-
-When arrays are stringified, by default they are given explicit indices:
-
-```javascript
-qs.stringify({ a: ['b', 'c', 'd'] });
-// 'a[0]=b&a[1]=c&a[2]=d'
-```
-
-You may override this by setting the `indices` option to `false`:
-
-```javascript
-qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
-// 'a=b&a=c&a=d'
-```
-
-You may use the `arrayFormat` option to specify the format of the output array:
-
-```javascript
-qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })
-// 'a[0]=b&a[1]=c'
-qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })
-// 'a[]=b&a[]=c'
-qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })
-// 'a=b&a=c'
-qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' })
-// 'a=b,c'
-```
-
-When objects are stringified, by default they use bracket notation:
-
-```javascript
-qs.stringify({ a: { b: { c: 'd', e: 'f' } } });
-// 'a[b][c]=d&a[b][e]=f'
-```
-
-You may override this to use dot notation by setting the `allowDots` option to `true`:
-
-```javascript
-qs.stringify({ a: { b: { c: 'd', e: 'f' } } }, { allowDots: true });
-// 'a.b.c=d&a.b.e=f'
-```
-
-Empty strings and null values will omit the value, but the equals sign (=) remains in place:
-
-```javascript
-assert.equal(qs.stringify({ a: '' }), 'a=');
-```
-
-Key with no values (such as an empty object or array) will return nothing:
-
-```javascript
-assert.equal(qs.stringify({ a: [] }), '');
-assert.equal(qs.stringify({ a: {} }), '');
-assert.equal(qs.stringify({ a: [{}] }), '');
-assert.equal(qs.stringify({ a: { b: []} }), '');
-assert.equal(qs.stringify({ a: { b: {}} }), '');
-```
-
-Properties that are set to `undefined` will be omitted entirely:
-
-```javascript
-assert.equal(qs.stringify({ a: null, b: undefined }), 'a=');
-```
-
-The query string may optionally be prepended with a question mark:
-
-```javascript
-assert.equal(qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true }), '?a=b&c=d');
-```
-
-The delimiter may be overridden with stringify as well:
-
-```javascript
-assert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d');
-```
-
-If you only want to override the serialization of `Date` objects, you can provide a `serializeDate` option:
-
-```javascript
-var date = new Date(7);
-assert.equal(qs.stringify({ a: date }), 'a=1970-01-01T00:00:00.007Z'.replace(/:/g, '%3A'));
-assert.equal(
-    qs.stringify({ a: date }, { serializeDate: function (d) { return d.getTime(); } }),
-    'a=7'
-);
-```
-
-You may use the `sort` option to affect the order of parameter keys:
-
-```javascript
-function alphabeticalSort(a, b) {
-    return a.localeCompare(b);
-}
-assert.equal(qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort: alphabeticalSort }), 'a=c&b=f&z=y');
-```
-
-Finally, you can use the `filter` option to restrict which keys will be included in the stringified output.
-If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you
-pass an array, it will be used to select properties and array indices for stringification:
-
-```javascript
-function filterFunc(prefix, value) {
-    if (prefix == 'b') {
-        // Return an `undefined` value to omit a property.
-        return;
-    }
-    if (prefix == 'e[f]') {
-        return value.getTime();
-    }
-    if (prefix == 'e[g][0]') {
-        return value * 2;
-    }
-    return value;
-}
-qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc });
-// 'a=b&c=d&e[f]=123&e[g][0]=4'
-qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] });
-// 'a=b&e=f'
-qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] });
-// 'a[0]=b&a[2]=d'
-```
-
-### Handling of `null` values
-
-By default, `null` values are treated like empty strings:
-
-```javascript
-var withNull = qs.stringify({ a: null, b: '' });
-assert.equal(withNull, 'a=&b=');
-```
-
-Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings.
-
-```javascript
-var equalsInsensitive = qs.parse('a&b=');
-assert.deepEqual(equalsInsensitive, { a: '', b: '' });
-```
-
-To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null`
-values have no `=` sign:
-
-```javascript
-var strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true });
-assert.equal(strictNull, 'a&b=');
-```
-
-To parse values without `=` back to `null` use the `strictNullHandling` flag:
-
-```javascript
-var parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true });
-assert.deepEqual(parsedStrictNull, { a: null, b: '' });
-```
-
-To completely skip rendering keys with `null` values, use the `skipNulls` flag:
-
-```javascript
-var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true });
-assert.equal(nullsSkipped, 'a=b');
-```
-
-If you're communicating with legacy systems, you can switch to `iso-8859-1`
-using the `charset` option:
-
-```javascript
-var iso = qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' });
-assert.equal(iso, '%E6=%E6');
-```
-
-Characters that don't exist in `iso-8859-1` will be converted to numeric
-entities, similar to what browsers do:
-
-```javascript
-var numeric = qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' });
-assert.equal(numeric, 'a=%26%239786%3B');
-```
-
-You can use the `charsetSentinel` option to announce the character by
-including an `utf8=✓` parameter with the proper encoding if the checkmark,
-similar to what Ruby on Rails and others do when submitting forms.
-
-```javascript
-var sentinel = qs.stringify({ a: '☺' }, { charsetSentinel: true });
-assert.equal(sentinel, 'utf8=%E2%9C%93&a=%E2%98%BA');
-
-var isoSentinel = qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' });
-assert.equal(isoSentinel, 'utf8=%26%2310003%3B&a=%E6');
-```
-
-### Dealing with special character sets
-
-By default the encoding and decoding of characters is done in `utf-8`,
-and `iso-8859-1` support is also built in via the `charset` parameter.
-
-If you wish to encode querystrings to a different character set (i.e.
-[Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the
-[`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library:
-
-```javascript
-var encoder = require('qs-iconv/encoder')('shift_jis');
-var shiftJISEncoded = qs.stringify({ a: 'こんにちは!' }, { encoder: encoder });
-assert.equal(shiftJISEncoded, 'a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I');
-```
-
-This also works for decoding of query strings:
-
-```javascript
-var decoder = require('qs-iconv/decoder')('shift_jis');
-var obj = qs.parse('a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I', { decoder: decoder });
-assert.deepEqual(obj, { a: 'こんにちは!' });
-```
-
-### RFC 3986 and RFC 1738 space encoding
-
-RFC3986 used as default option and encodes ' ' to *%20* which is backward compatible.
-In the same time, output can be stringified as per RFC1738 with ' ' equal to '+'.
-
-```
-assert.equal(qs.stringify({ a: 'b c' }), 'a=b%20c');
-assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC3986' }), 'a=b%20c');
-assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC1738' }), 'a=b+c');
-```
-
-[1]: https://npmjs.org/package/qs
-[2]: http://versionbadg.es/ljharb/qs.svg
-[3]: https://api.travis-ci.org/ljharb/qs.svg
-[4]: https://travis-ci.org/ljharb/qs
-[5]: https://david-dm.org/ljharb/qs.svg
-[6]: https://david-dm.org/ljharb/qs
-[7]: https://david-dm.org/ljharb/qs/dev-status.svg
-[8]: https://david-dm.org/ljharb/qs?type=dev
-[9]: https://ci.testling.com/ljharb/qs.png
-[10]: https://ci.testling.com/ljharb/qs
-[11]: https://nodei.co/npm/qs.png?downloads=true&stars=true
-[license-image]: http://img.shields.io/npm/l/qs.svg
-[license-url]: LICENSE
-[downloads-image]: http://img.shields.io/npm/dm/qs.svg
-[downloads-url]: http://npm-stat.com/charts.html?package=qs
diff --git a/device_home/node_modules/qs/test/.eslintrc b/device_home/node_modules/qs/test/.eslintrc
deleted file mode 100644 (file)
index 9ebbb92..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-    "rules": {
-               "array-bracket-newline": 0,
-               "array-element-newline": 0,
-               "consistent-return": 2,
-        "function-paren-newline": 0,
-        "max-lines": 0,
-        "max-lines-per-function": 0,
-        "max-nested-callbacks": [2, 3],
-        "max-statements": 0,
-               "no-buffer-constructor": 0,
-        "no-extend-native": 0,
-        "no-magic-numbers": 0,
-               "object-curly-newline": 0,
-        "sort-keys": 0
-    }
-}
diff --git a/device_home/node_modules/qs/test/index.js b/device_home/node_modules/qs/test/index.js
deleted file mode 100644 (file)
index 0714bdb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";require("./parse"),require("./stringify"),require("./utils");
\ No newline at end of file
diff --git a/device_home/node_modules/qs/test/parse.js b/device_home/node_modules/qs/test/parse.js
deleted file mode 100644 (file)
index 645efa7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";var test=require("tape"),qs=require("../"),utils=require("../lib/utils"),iconv=require("iconv-lite"),SaferBuffer=require("safer-buffer").Buffer;test("parse()",(function(e){e.test("parses a simple string",(function(e){e.deepEqual(qs.parse("0=foo"),{0:"foo"}),e.deepEqual(qs.parse("foo=c++"),{foo:"c  "}),e.deepEqual(qs.parse("a[>=]=23"),{a:{">=":"23"}}),e.deepEqual(qs.parse("a[<=>]==23"),{a:{"<=>":"=23"}}),e.deepEqual(qs.parse("a[==]=23"),{a:{"==":"23"}}),e.deepEqual(qs.parse("foo",{strictNullHandling:!0}),{foo:null}),e.deepEqual(qs.parse("foo"),{foo:""}),e.deepEqual(qs.parse("foo="),{foo:""}),e.deepEqual(qs.parse("foo=bar"),{foo:"bar"}),e.deepEqual(qs.parse(" foo = bar = baz "),{" foo ":" bar = baz "}),e.deepEqual(qs.parse("foo=bar=baz"),{foo:"bar=baz"}),e.deepEqual(qs.parse("foo=bar&bar=baz"),{foo:"bar",bar:"baz"}),e.deepEqual(qs.parse("foo2=bar2&baz2="),{foo2:"bar2",baz2:""}),e.deepEqual(qs.parse("foo=bar&baz",{strictNullHandling:!0}),{foo:"bar",baz:null}),e.deepEqual(qs.parse("foo=bar&baz"),{foo:"bar",baz:""}),e.deepEqual(qs.parse("cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World"),{cht:"p3",chd:"t:60,40",chs:"250x100",chl:"Hello|World"}),e.end()})),e.test("allows enabling dot notation",(function(e){e.deepEqual(qs.parse("a.b=c"),{"a.b":"c"}),e.deepEqual(qs.parse("a.b=c",{allowDots:!0}),{a:{b:"c"}}),e.end()})),e.deepEqual(qs.parse("a[b]=c"),{a:{b:"c"}},"parses a single nested string"),e.deepEqual(qs.parse("a[b][c]=d"),{a:{b:{c:"d"}}},"parses a double nested string"),e.deepEqual(qs.parse("a[b][c][d][e][f][g][h]=i"),{a:{b:{c:{d:{e:{f:{"[g][h]":"i"}}}}}}},"defaults to a depth of 5"),e.test("only parses one level when depth = 1",(function(e){e.deepEqual(qs.parse("a[b][c]=d",{depth:1}),{a:{b:{"[c]":"d"}}}),e.deepEqual(qs.parse("a[b][c][d]=e",{depth:1}),{a:{b:{"[c][d]":"e"}}}),e.end()})),e.deepEqual(qs.parse("a=b&a=c"),{a:["b","c"]},"parses a simple array"),e.test("parses an explicit array",(function(e){e.deepEqual(qs.parse("a[]=b"),{a:["b"]}),e.deepEqual(qs.parse("a[]=b&a[]=c"),{a:["b","c"]}),e.deepEqual(qs.parse("a[]=b&a[]=c&a[]=d"),{a:["b","c","d"]}),e.end()})),e.test("parses a mix of simple and explicit arrays",(function(e){e.deepEqual(qs.parse("a=b&a[]=c"),{a:["b","c"]}),e.deepEqual(qs.parse("a[]=b&a=c"),{a:["b","c"]}),e.deepEqual(qs.parse("a[0]=b&a=c"),{a:["b","c"]}),e.deepEqual(qs.parse("a=b&a[0]=c"),{a:["b","c"]}),e.deepEqual(qs.parse("a[1]=b&a=c",{arrayLimit:20}),{a:["b","c"]}),e.deepEqual(qs.parse("a[]=b&a=c",{arrayLimit:0}),{a:["b","c"]}),e.deepEqual(qs.parse("a[]=b&a=c"),{a:["b","c"]}),e.deepEqual(qs.parse("a=b&a[1]=c",{arrayLimit:20}),{a:["b","c"]}),e.deepEqual(qs.parse("a=b&a[]=c",{arrayLimit:0}),{a:["b","c"]}),e.deepEqual(qs.parse("a=b&a[]=c"),{a:["b","c"]}),e.end()})),e.test("parses a nested array",(function(e){e.deepEqual(qs.parse("a[b][]=c&a[b][]=d"),{a:{b:["c","d"]}}),e.deepEqual(qs.parse("a[>=]=25"),{a:{">=":"25"}}),e.end()})),e.test("allows to specify array indices",(function(e){e.deepEqual(qs.parse("a[1]=c&a[0]=b&a[2]=d"),{a:["b","c","d"]}),e.deepEqual(qs.parse("a[1]=c&a[0]=b"),{a:["b","c"]}),e.deepEqual(qs.parse("a[1]=c",{arrayLimit:20}),{a:["c"]}),e.deepEqual(qs.parse("a[1]=c",{arrayLimit:0}),{a:{1:"c"}}),e.deepEqual(qs.parse("a[1]=c"),{a:["c"]}),e.end()})),e.test("limits specific array indices to arrayLimit",(function(e){e.deepEqual(qs.parse("a[20]=a",{arrayLimit:20}),{a:["a"]}),e.deepEqual(qs.parse("a[21]=a",{arrayLimit:20}),{a:{21:"a"}}),e.end()})),e.deepEqual(qs.parse("a[12b]=c"),{a:{"12b":"c"}},"supports keys that begin with a number"),e.test("supports encoded = signs",(function(e){e.deepEqual(qs.parse("he%3Dllo=th%3Dere"),{"he=llo":"th=ere"}),e.end()})),e.test("is ok with url encoded strings",(function(e){e.deepEqual(qs.parse("a[b%20c]=d"),{a:{"b c":"d"}}),e.deepEqual(qs.parse("a[b]=c%20d"),{a:{b:"c d"}}),e.end()})),e.test("allows brackets in the value",(function(e){e.deepEqual(qs.parse('pets=["tobi"]'),{pets:'["tobi"]'}),e.deepEqual(qs.parse('operators=[">=", "<="]'),{operators:'[">=", "<="]'}),e.end()})),e.test("allows empty values",(function(e){e.deepEqual(qs.parse(""),{}),e.deepEqual(qs.parse(null),{}),e.deepEqual(qs.parse(void 0),{}),e.end()})),e.test("transforms arrays to objects",(function(e){e.deepEqual(qs.parse("foo[0]=bar&foo[bad]=baz"),{foo:{0:"bar",bad:"baz"}}),e.deepEqual(qs.parse("foo[bad]=baz&foo[0]=bar"),{foo:{bad:"baz",0:"bar"}}),e.deepEqual(qs.parse("foo[bad]=baz&foo[]=bar"),{foo:{bad:"baz",0:"bar"}}),e.deepEqual(qs.parse("foo[]=bar&foo[bad]=baz"),{foo:{0:"bar",bad:"baz"}}),e.deepEqual(qs.parse("foo[bad]=baz&foo[]=bar&foo[]=foo"),{foo:{bad:"baz",0:"bar",1:"foo"}}),e.deepEqual(qs.parse("foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb"),{foo:[{a:"a",b:"b"},{a:"aa",b:"bb"}]}),e.deepEqual(qs.parse("a[]=b&a[t]=u&a[hasOwnProperty]=c",{allowPrototypes:!1}),{a:{0:"b",t:"u"}}),e.deepEqual(qs.parse("a[]=b&a[t]=u&a[hasOwnProperty]=c",{allowPrototypes:!0}),{a:{0:"b",t:"u",hasOwnProperty:"c"}}),e.deepEqual(qs.parse("a[]=b&a[hasOwnProperty]=c&a[x]=y",{allowPrototypes:!1}),{a:{0:"b",x:"y"}}),e.deepEqual(qs.parse("a[]=b&a[hasOwnProperty]=c&a[x]=y",{allowPrototypes:!0}),{a:{0:"b",hasOwnProperty:"c",x:"y"}}),e.end()})),e.test("transforms arrays to objects (dot notation)",(function(e){e.deepEqual(qs.parse("foo[0].baz=bar&fool.bad=baz",{allowDots:!0}),{foo:[{baz:"bar"}],fool:{bad:"baz"}}),e.deepEqual(qs.parse("foo[0].baz=bar&fool.bad.boo=baz",{allowDots:!0}),{foo:[{baz:"bar"}],fool:{bad:{boo:"baz"}}}),e.deepEqual(qs.parse("foo[0][0].baz=bar&fool.bad=baz",{allowDots:!0}),{foo:[[{baz:"bar"}]],fool:{bad:"baz"}}),e.deepEqual(qs.parse("foo[0].baz[0]=15&foo[0].bar=2",{allowDots:!0}),{foo:[{baz:["15"],bar:"2"}]}),e.deepEqual(qs.parse("foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2",{allowDots:!0}),{foo:[{baz:["15","16"],bar:"2"}]}),e.deepEqual(qs.parse("foo.bad=baz&foo[0]=bar",{allowDots:!0}),{foo:{bad:"baz",0:"bar"}}),e.deepEqual(qs.parse("foo.bad=baz&foo[]=bar",{allowDots:!0}),{foo:{bad:"baz",0:"bar"}}),e.deepEqual(qs.parse("foo[]=bar&foo.bad=baz",{allowDots:!0}),{foo:{0:"bar",bad:"baz"}}),e.deepEqual(qs.parse("foo.bad=baz&foo[]=bar&foo[]=foo",{allowDots:!0}),{foo:{bad:"baz",0:"bar",1:"foo"}}),e.deepEqual(qs.parse("foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb",{allowDots:!0}),{foo:[{a:"a",b:"b"},{a:"aa",b:"bb"}]}),e.end()})),e.test("correctly prunes undefined values when converting an array to an object",(function(e){e.deepEqual(qs.parse("a[2]=b&a[99999999]=c"),{a:{2:"b",99999999:"c"}}),e.end()})),e.test("supports malformed uri characters",(function(e){e.deepEqual(qs.parse("{%:%}",{strictNullHandling:!0}),{"{%:%}":null}),e.deepEqual(qs.parse("{%:%}="),{"{%:%}":""}),e.deepEqual(qs.parse("foo=%:%}"),{foo:"%:%}"}),e.end()})),e.test("doesn't produce empty keys",(function(e){e.deepEqual(qs.parse("_r=1&"),{_r:"1"}),e.end()})),e.test("cannot access Object prototype",(function(e){qs.parse("constructor[prototype][bad]=bad"),qs.parse("bad[constructor][prototype][bad]=bad"),e.equal(typeof Object.prototype.bad,"undefined"),e.end()})),e.test("parses arrays of objects",(function(e){e.deepEqual(qs.parse("a[][b]=c"),{a:[{b:"c"}]}),e.deepEqual(qs.parse("a[0][b]=c"),{a:[{b:"c"}]}),e.end()})),e.test("allows for empty strings in arrays",(function(e){e.deepEqual(qs.parse("a[]=b&a[]=&a[]=c"),{a:["b","","c"]}),e.deepEqual(qs.parse("a[0]=b&a[1]&a[2]=c&a[19]=",{strictNullHandling:!0,arrayLimit:20}),{a:["b",null,"c",""]},"with arrayLimit 20 + array indices: null then empty string works"),e.deepEqual(qs.parse("a[]=b&a[]&a[]=c&a[]=",{strictNullHandling:!0,arrayLimit:0}),{a:["b",null,"c",""]},"with arrayLimit 0 + array brackets: null then empty string works"),e.deepEqual(qs.parse("a[0]=b&a[1]=&a[2]=c&a[19]",{strictNullHandling:!0,arrayLimit:20}),{a:["b","","c",null]},"with arrayLimit 20 + array indices: empty string then null works"),e.deepEqual(qs.parse("a[]=b&a[]=&a[]=c&a[]",{strictNullHandling:!0,arrayLimit:0}),{a:["b","","c",null]},"with arrayLimit 0 + array brackets: empty string then null works"),e.deepEqual(qs.parse("a[]=&a[]=b&a[]=c"),{a:["","b","c"]},"array brackets: empty strings work"),e.end()})),e.test("compacts sparse arrays",(function(e){e.deepEqual(qs.parse("a[10]=1&a[2]=2",{arrayLimit:20}),{a:["2","1"]}),e.deepEqual(qs.parse("a[1][b][2][c]=1",{arrayLimit:20}),{a:[{b:[{c:"1"}]}]}),e.deepEqual(qs.parse("a[1][2][3][c]=1",{arrayLimit:20}),{a:[[[{c:"1"}]]]}),e.deepEqual(qs.parse("a[1][2][3][c][1]=1",{arrayLimit:20}),{a:[[[{c:["1"]}]]]}),e.end()})),e.test("parses semi-parsed strings",(function(e){e.deepEqual(qs.parse({"a[b]":"c"}),{a:{b:"c"}}),e.deepEqual(qs.parse({"a[b]":"c","a[d]":"e"}),{a:{b:"c",d:"e"}}),e.end()})),e.test("parses buffers correctly",(function(e){var a=SaferBuffer.from("test");e.deepEqual(qs.parse({a:a}),{a:a}),e.end()})),e.test("parses jquery-param strings",(function(e){e.deepEqual(qs.parse("filter%5B0%5D%5B%5D=int1&filter%5B0%5D%5B%5D=%3D&filter%5B0%5D%5B%5D=77&filter%5B%5D=and&filter%5B2%5D%5B%5D=int2&filter%5B2%5D%5B%5D=%3D&filter%5B2%5D%5B%5D=8"),{filter:[["int1","=","77"],"and",["int2","=","8"]]}),e.end()})),e.test("continues parsing when no parent is found",(function(e){e.deepEqual(qs.parse("[]=&a=b"),{0:"",a:"b"}),e.deepEqual(qs.parse("[]&a=b",{strictNullHandling:!0}),{0:null,a:"b"}),e.deepEqual(qs.parse("[foo]=bar"),{foo:"bar"}),e.end()})),e.test("does not error when parsing a very long array",(function(e){for(var a="a[]=a";Buffer.byteLength(a)<131072;)a=a+"&"+a;e.doesNotThrow((function(){qs.parse(a)})),e.end()})),e.test("should not throw when a native prototype has an enumerable property",(function(e){Object.prototype.crash="",Array.prototype.crash="",e.doesNotThrow(qs.parse.bind(null,"a=b")),e.deepEqual(qs.parse("a=b"),{a:"b"}),e.doesNotThrow(qs.parse.bind(null,"a[][b]=c")),e.deepEqual(qs.parse("a[][b]=c"),{a:[{b:"c"}]}),delete Object.prototype.crash,delete Array.prototype.crash,e.end()})),e.test("parses a string with an alternative string delimiter",(function(e){e.deepEqual(qs.parse("a=b;c=d",{delimiter:";"}),{a:"b",c:"d"}),e.end()})),e.test("parses a string with an alternative RegExp delimiter",(function(e){e.deepEqual(qs.parse("a=b; c=d",{delimiter:/[;,] */}),{a:"b",c:"d"}),e.end()})),e.test("does not use non-splittable objects as delimiters",(function(e){e.deepEqual(qs.parse("a=b&c=d",{delimiter:!0}),{a:"b",c:"d"}),e.end()})),e.test("allows overriding parameter limit",(function(e){e.deepEqual(qs.parse("a=b&c=d",{parameterLimit:1}),{a:"b"}),e.end()})),e.test("allows setting the parameter limit to Infinity",(function(e){e.deepEqual(qs.parse("a=b&c=d",{parameterLimit:1/0}),{a:"b",c:"d"}),e.end()})),e.test("allows overriding array limit",(function(e){e.deepEqual(qs.parse("a[0]=b",{arrayLimit:-1}),{a:{0:"b"}}),e.deepEqual(qs.parse("a[-1]=b",{arrayLimit:-1}),{a:{"-1":"b"}}),e.deepEqual(qs.parse("a[0]=b&a[1]=c",{arrayLimit:0}),{a:{0:"b",1:"c"}}),e.end()})),e.test("allows disabling array parsing",(function(e){var a=qs.parse("a[0]=b&a[1]=c",{parseArrays:!1});e.deepEqual(a,{a:{0:"b",1:"c"}}),e.equal(Array.isArray(a.a),!1,"parseArrays:false, indices case is not an array");var s=qs.parse("a[]=b",{parseArrays:!1});e.deepEqual(s,{a:{0:"b"}}),e.equal(Array.isArray(s.a),!1,"parseArrays:false, empty brackets case is not an array"),e.end()})),e.test("allows for query string prefix",(function(e){e.deepEqual(qs.parse("?foo=bar",{ignoreQueryPrefix:!0}),{foo:"bar"}),e.deepEqual(qs.parse("foo=bar",{ignoreQueryPrefix:!0}),{foo:"bar"}),e.deepEqual(qs.parse("?foo=bar",{ignoreQueryPrefix:!1}),{"?foo":"bar"}),e.end()})),e.test("parses an object",(function(e){var a=qs.parse({"user[name]":{"pop[bob]":3},"user[email]":null});e.deepEqual(a,{user:{name:{"pop[bob]":3},email:null}}),e.end()})),e.test("parses string with comma as array divider",(function(e){e.deepEqual(qs.parse("foo=bar,tee",{comma:!0}),{foo:["bar","tee"]}),e.deepEqual(qs.parse("foo[bar]=coffee,tee",{comma:!0}),{foo:{bar:["coffee","tee"]}}),e.deepEqual(qs.parse("foo=",{comma:!0}),{foo:""}),e.deepEqual(qs.parse("foo",{comma:!0}),{foo:""}),e.deepEqual(qs.parse("foo",{comma:!0,strictNullHandling:!0}),{foo:null}),e.end()})),e.test("parses an object in dot notation",(function(e){var a=qs.parse({"user.name":{"pop[bob]":3},"user.email.":null},{allowDots:!0});e.deepEqual(a,{user:{name:{"pop[bob]":3},email:null}}),e.end()})),e.test("parses an object and not child values",(function(e){var a=qs.parse({"user[name]":{"pop[bob]":{test:3}},"user[email]":null});e.deepEqual(a,{user:{name:{"pop[bob]":{test:3}},email:null}}),e.end()})),e.test("does not blow up when Buffer global is missing",(function(e){var a=global.Buffer;delete global.Buffer;var s=qs.parse("a=b&c=d");global.Buffer=a,e.deepEqual(s,{a:"b",c:"d"}),e.end()})),e.test("does not crash when parsing circular references",(function(e){var a,s={};s.b=s,e.doesNotThrow((function(){a=qs.parse({"foo[bar]":"baz","foo[baz]":s})})),e.equal("foo"in a,!0,'parsed has "foo" property'),e.equal("bar"in a.foo,!0),e.equal("baz"in a.foo,!0),e.equal(a.foo.bar,"baz"),e.deepEqual(a.foo.baz,s),e.end()})),e.test("does not crash when parsing deep objects",(function(e){for(var a,s="foo",r=0;r<5e3;r++)s+="[p]";s+="=bar",e.doesNotThrow((function(){a=qs.parse(s,{depth:5e3})})),e.equal("foo"in a,!0,'parsed has "foo" property');for(var t=0,o=a.foo;o=o.p;)t+=1;e.equal(t,5e3,"parsed is 5000 properties deep"),e.end()})),e.test("parses null objects correctly",{skip:!Object.create},(function(e){var a=Object.create(null);a.b="c",e.deepEqual(qs.parse(a),{b:"c"});var s=qs.parse({a:a});e.equal("a"in s,!0,'result has "a" property'),e.deepEqual(s.a,a),e.end()})),e.test("parses dates correctly",(function(e){var a=new Date;e.deepEqual(qs.parse({a:a}),{a:a}),e.end()})),e.test("parses regular expressions correctly",(function(e){var a=/^test$/;e.deepEqual(qs.parse({a:a}),{a:a}),e.end()})),e.test("does not allow overwriting prototype properties",(function(e){e.deepEqual(qs.parse("a[hasOwnProperty]=b",{allowPrototypes:!1}),{}),e.deepEqual(qs.parse("hasOwnProperty=b",{allowPrototypes:!1}),{}),e.deepEqual(qs.parse("toString",{allowPrototypes:!1}),{},'bare "toString" results in {}'),e.end()})),e.test("can allow overwriting prototype properties",(function(e){e.deepEqual(qs.parse("a[hasOwnProperty]=b",{allowPrototypes:!0}),{a:{hasOwnProperty:"b"}}),e.deepEqual(qs.parse("hasOwnProperty=b",{allowPrototypes:!0}),{hasOwnProperty:"b"}),e.deepEqual(qs.parse("toString",{allowPrototypes:!0}),{toString:""},'bare "toString" results in { toString: "" }'),e.end()})),e.test("params starting with a closing bracket",(function(e){e.deepEqual(qs.parse("]=toString"),{"]":"toString"}),e.deepEqual(qs.parse("]]=toString"),{"]]":"toString"}),e.deepEqual(qs.parse("]hello]=toString"),{"]hello]":"toString"}),e.end()})),e.test("params starting with a starting bracket",(function(e){e.deepEqual(qs.parse("[=toString"),{"[":"toString"}),e.deepEqual(qs.parse("[[=toString"),{"[[":"toString"}),e.deepEqual(qs.parse("[hello[=toString"),{"[hello[":"toString"}),e.end()})),e.test("add keys to objects",(function(e){e.deepEqual(qs.parse("a[b]=c&a=d"),{a:{b:"c",d:!0}},"can add keys to objects"),e.deepEqual(qs.parse("a[b]=c&a=toString"),{a:{b:"c"}},"can not overwrite prototype"),e.deepEqual(qs.parse("a[b]=c&a=toString",{allowPrototypes:!0}),{a:{b:"c",toString:!0}},"can overwrite prototype with allowPrototypes true"),e.deepEqual(qs.parse("a[b]=c&a=toString",{plainObjects:!0}),{a:{b:"c",toString:!0}},"can overwrite prototype with plainObjects true"),e.end()})),e.test("can return null objects",{skip:!Object.create},(function(e){var a=Object.create(null);a.a=Object.create(null),a.a.b="c",a.a.hasOwnProperty="d",e.deepEqual(qs.parse("a[b]=c&a[hasOwnProperty]=d",{plainObjects:!0}),a),e.deepEqual(qs.parse(null,{plainObjects:!0}),Object.create(null));var s=Object.create(null);s.a=Object.create(null),s.a[0]="b",s.a.c="d",e.deepEqual(qs.parse("a[]=b&a[c]=d",{plainObjects:!0}),s),e.end()})),e.test("can parse with custom encoding",(function(e){e.deepEqual(qs.parse("%8c%a7=%91%e5%8d%e3%95%7b",{decoder:function(e){for(var a=/%([0-9A-F]{2})/gi,s=[],r=a.exec(e);r;)s.push(parseInt(r[1],16)),r=a.exec(e);return String(iconv.decode(SaferBuffer.from(s),"shift_jis"))}}),{"県":"大阪府"}),e.end()})),e.test("receives the default decoder as a second argument",(function(e){e.plan(1),qs.parse("a",{decoder:function(a,s){e.equal(s,utils.decode)}}),e.end()})),e.test("throws error with wrong decoder",(function(e){e.throws((function(){qs.parse({},{decoder:"string"})}),new TypeError("Decoder has to be a function.")),e.end()})),e.test("does not mutate the options argument",(function(e){var a={};qs.parse("a[b]=true",a),e.deepEqual(a,{}),e.end()})),e.test("throws if an invalid charset is specified",(function(e){e.throws((function(){qs.parse("a=b",{charset:"foobar"})}),new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined")),e.end()})),e.test("parses an iso-8859-1 string if asked to",(function(e){e.deepEqual(qs.parse("%A2=%BD",{charset:"iso-8859-1"}),{"¢":"½"}),e.end()}));e.test("prefers an utf-8 charset specified by the utf8 sentinel to a default charset of iso-8859-1",(function(e){e.deepEqual(qs.parse("utf8=%E2%9C%93&%C3%B8=%C3%B8",{charsetSentinel:!0,charset:"iso-8859-1"}),{"ø":"ø"}),e.end()})),e.test("prefers an iso-8859-1 charset specified by the utf8 sentinel to a default charset of utf-8",(function(e){e.deepEqual(qs.parse("utf8=%26%2310003%3B&%C3%B8=%C3%B8",{charsetSentinel:!0,charset:"utf-8"}),{"ø":"ø"}),e.end()})),e.test("does not require the utf8 sentinel to be defined before the parameters whose decoding it affects",(function(e){e.deepEqual(qs.parse("a=%C3%B8&utf8=%26%2310003%3B",{charsetSentinel:!0,charset:"utf-8"}),{a:"ø"}),e.end()})),e.test("should ignore an utf8 sentinel with an unknown value",(function(e){e.deepEqual(qs.parse("utf8=foo&%C3%B8=%C3%B8",{charsetSentinel:!0,charset:"utf-8"}),{"ø":"ø"}),e.end()})),e.test("uses the utf8 sentinel to switch to utf-8 when no default charset is given",(function(e){e.deepEqual(qs.parse("utf8=%E2%9C%93&%C3%B8=%C3%B8",{charsetSentinel:!0}),{"ø":"ø"}),e.end()})),e.test("uses the utf8 sentinel to switch to iso-8859-1 when no default charset is given",(function(e){e.deepEqual(qs.parse("utf8=%26%2310003%3B&%C3%B8=%C3%B8",{charsetSentinel:!0}),{"ø":"ø"}),e.end()})),e.test("interprets numeric entities in iso-8859-1 when `interpretNumericEntities`",(function(e){e.deepEqual(qs.parse("foo=%26%239786%3B",{charset:"iso-8859-1",interpretNumericEntities:!0}),{foo:"☺"}),e.end()})),e.test("handles a custom decoder returning `null`, in the `iso-8859-1` charset, when `interpretNumericEntities`",(function(e){e.deepEqual(qs.parse("foo=&bar=%26%239786%3B",{charset:"iso-8859-1",decoder:function(e,a,s){return e?a(e,a,s):null},interpretNumericEntities:!0}),{foo:null,bar:"☺"}),e.end()})),e.test("does not interpret numeric entities in iso-8859-1 when `interpretNumericEntities` is absent",(function(e){e.deepEqual(qs.parse("foo=%26%239786%3B",{charset:"iso-8859-1"}),{foo:"&#9786;"}),e.end()})),e.test("does not interpret numeric entities when the charset is utf-8, even when `interpretNumericEntities`",(function(e){e.deepEqual(qs.parse("foo=%26%239786%3B",{charset:"utf-8",interpretNumericEntities:!0}),{foo:"&#9786;"}),e.end()})),e.test("does not interpret %uXXXX syntax in iso-8859-1 mode",(function(e){e.deepEqual(qs.parse("%u263A=%u263A",{charset:"iso-8859-1"}),{"%u263A":"%u263A"}),e.end()})),e.end()}));
\ No newline at end of file
diff --git a/device_home/node_modules/qs/test/stringify.js b/device_home/node_modules/qs/test/stringify.js
deleted file mode 100644 (file)
index ca75482..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";var test=require("tape"),qs=require("../"),utils=require("../lib/utils"),iconv=require("iconv-lite"),SaferBuffer=require("safer-buffer").Buffer;test("stringify()",(function(e){e.test("stringifies a querystring object",(function(e){e.equal(qs.stringify({a:"b"}),"a=b"),e.equal(qs.stringify({a:1}),"a=1"),e.equal(qs.stringify({a:1,b:2}),"a=1&b=2"),e.equal(qs.stringify({a:"A_Z"}),"a=A_Z"),e.equal(qs.stringify({a:"€"}),"a=%E2%82%AC"),e.equal(qs.stringify({a:""}),"a=%EE%80%80"),e.equal(qs.stringify({a:"א"}),"a=%D7%90"),e.equal(qs.stringify({a:"𐐷"}),"a=%F0%90%90%B7"),e.end()})),e.test("stringifies falsy values",(function(e){e.equal(qs.stringify(void 0),""),e.equal(qs.stringify(null),""),e.equal(qs.stringify(null,{strictNullHandling:!0}),""),e.equal(qs.stringify(!1),""),e.equal(qs.stringify(0),""),e.end()})),e.test("adds query prefix",(function(e){e.equal(qs.stringify({a:"b"},{addQueryPrefix:!0}),"?a=b"),e.end()})),e.test("with query prefix, outputs blank string given an empty object",(function(e){e.equal(qs.stringify({},{addQueryPrefix:!0}),""),e.end()})),e.test("stringifies nested falsy values",(function(e){e.equal(qs.stringify({a:{b:{c:null}}}),"a%5Bb%5D%5Bc%5D="),e.equal(qs.stringify({a:{b:{c:null}}},{strictNullHandling:!0}),"a%5Bb%5D%5Bc%5D"),e.equal(qs.stringify({a:{b:{c:!1}}}),"a%5Bb%5D%5Bc%5D=false"),e.end()})),e.test("stringifies a nested object",(function(e){e.equal(qs.stringify({a:{b:"c"}}),"a%5Bb%5D=c"),e.equal(qs.stringify({a:{b:{c:{d:"e"}}}}),"a%5Bb%5D%5Bc%5D%5Bd%5D=e"),e.end()})),e.test("stringifies a nested object with dots notation",(function(e){e.equal(qs.stringify({a:{b:"c"}},{allowDots:!0}),"a.b=c"),e.equal(qs.stringify({a:{b:{c:{d:"e"}}}},{allowDots:!0}),"a.b.c.d=e"),e.end()})),e.test("stringifies an array value",(function(e){e.equal(qs.stringify({a:["b","c","d"]},{arrayFormat:"indices"}),"a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d","indices => indices"),e.equal(qs.stringify({a:["b","c","d"]},{arrayFormat:"brackets"}),"a%5B%5D=b&a%5B%5D=c&a%5B%5D=d","brackets => brackets"),e.equal(qs.stringify({a:["b","c","d"]},{arrayFormat:"comma"}),"a=b%2Cc%2Cd","comma => comma"),e.equal(qs.stringify({a:["b","c","d"]}),"a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d","default => indices"),e.end()})),e.test("omits nulls when asked",(function(e){e.equal(qs.stringify({a:"b",c:null},{skipNulls:!0}),"a=b"),e.end()})),e.test("omits nested nulls when asked",(function(e){e.equal(qs.stringify({a:{b:"c",d:null}},{skipNulls:!0}),"a%5Bb%5D=c"),e.end()})),e.test("omits array indices when asked",(function(e){e.equal(qs.stringify({a:["b","c","d"]},{indices:!1}),"a=b&a=c&a=d"),e.end()})),e.test("stringifies a nested array value",(function(e){e.equal(qs.stringify({a:{b:["c","d"]}},{arrayFormat:"indices"}),"a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d"),e.equal(qs.stringify({a:{b:["c","d"]}},{arrayFormat:"brackets"}),"a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d"),e.equal(qs.stringify({a:{b:["c","d"]}},{arrayFormat:"comma"}),"a%5Bb%5D=c%2Cd"),e.equal(qs.stringify({a:{b:["c","d"]}}),"a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d"),e.end()})),e.test("stringifies a nested array value with dots notation",(function(e){e.equal(qs.stringify({a:{b:["c","d"]}},{allowDots:!0,encode:!1,arrayFormat:"indices"}),"a.b[0]=c&a.b[1]=d","indices: stringifies with dots + indices"),e.equal(qs.stringify({a:{b:["c","d"]}},{allowDots:!0,encode:!1,arrayFormat:"brackets"}),"a.b[]=c&a.b[]=d","brackets: stringifies with dots + brackets"),e.equal(qs.stringify({a:{b:["c","d"]}},{allowDots:!0,encode:!1,arrayFormat:"comma"}),"a.b=c,d","comma: stringifies with dots + comma"),e.equal(qs.stringify({a:{b:["c","d"]}},{allowDots:!0,encode:!1}),"a.b[0]=c&a.b[1]=d","default: stringifies with dots + indices"),e.end()})),e.test("stringifies an object inside an array",(function(e){e.equal(qs.stringify({a:[{b:"c"}]},{arrayFormat:"indices"}),"a%5B0%5D%5Bb%5D=c","indices => brackets"),e.equal(qs.stringify({a:[{b:"c"}]},{arrayFormat:"brackets"}),"a%5B%5D%5Bb%5D=c","brackets => brackets"),e.equal(qs.stringify({a:[{b:"c"}]}),"a%5B0%5D%5Bb%5D=c","default => indices"),e.equal(qs.stringify({a:[{b:{c:[1]}}]},{arrayFormat:"indices"}),"a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1","indices => indices"),e.equal(qs.stringify({a:[{b:{c:[1]}}]},{arrayFormat:"brackets"}),"a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1","brackets => brackets"),e.equal(qs.stringify({a:[{b:{c:[1]}}]}),"a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1","default => indices"),e.end()})),e.test("stringifies an array with mixed objects and primitives",(function(e){e.equal(qs.stringify({a:[{b:1},2,3]},{encode:!1,arrayFormat:"indices"}),"a[0][b]=1&a[1]=2&a[2]=3","indices => indices"),e.equal(qs.stringify({a:[{b:1},2,3]},{encode:!1,arrayFormat:"brackets"}),"a[][b]=1&a[]=2&a[]=3","brackets => brackets"),e.equal(qs.stringify({a:[{b:1},2,3]},{encode:!1}),"a[0][b]=1&a[1]=2&a[2]=3","default => indices"),e.end()})),e.test("stringifies an object inside an array with dots notation",(function(e){e.equal(qs.stringify({a:[{b:"c"}]},{allowDots:!0,encode:!1,arrayFormat:"indices"}),"a[0].b=c","indices => indices"),e.equal(qs.stringify({a:[{b:"c"}]},{allowDots:!0,encode:!1,arrayFormat:"brackets"}),"a[].b=c","brackets => brackets"),e.equal(qs.stringify({a:[{b:"c"}]},{allowDots:!0,encode:!1}),"a[0].b=c","default => indices"),e.equal(qs.stringify({a:[{b:{c:[1]}}]},{allowDots:!0,encode:!1,arrayFormat:"indices"}),"a[0].b.c[0]=1","indices => indices"),e.equal(qs.stringify({a:[{b:{c:[1]}}]},{allowDots:!0,encode:!1,arrayFormat:"brackets"}),"a[].b.c[]=1","brackets => brackets"),e.equal(qs.stringify({a:[{b:{c:[1]}}]},{allowDots:!0,encode:!1}),"a[0].b.c[0]=1","default => indices"),e.end()})),e.test("does not omit object keys when indices = false",(function(e){e.equal(qs.stringify({a:[{b:"c"}]},{indices:!1}),"a%5Bb%5D=c"),e.end()})),e.test("uses indices notation for arrays when indices=true",(function(e){e.equal(qs.stringify({a:["b","c"]},{indices:!0}),"a%5B0%5D=b&a%5B1%5D=c"),e.end()})),e.test("uses indices notation for arrays when no arrayFormat is specified",(function(e){e.equal(qs.stringify({a:["b","c"]}),"a%5B0%5D=b&a%5B1%5D=c"),e.end()})),e.test("uses indices notation for arrays when no arrayFormat=indices",(function(e){e.equal(qs.stringify({a:["b","c"]},{arrayFormat:"indices"}),"a%5B0%5D=b&a%5B1%5D=c"),e.end()})),e.test("uses repeat notation for arrays when no arrayFormat=repeat",(function(e){e.equal(qs.stringify({a:["b","c"]},{arrayFormat:"repeat"}),"a=b&a=c"),e.end()})),e.test("uses brackets notation for arrays when no arrayFormat=brackets",(function(e){e.equal(qs.stringify({a:["b","c"]},{arrayFormat:"brackets"}),"a%5B%5D=b&a%5B%5D=c"),e.end()})),e.test("stringifies a complicated object",(function(e){e.equal(qs.stringify({a:{b:"c",d:"e"}}),"a%5Bb%5D=c&a%5Bd%5D=e"),e.end()})),e.test("stringifies an empty value",(function(e){e.equal(qs.stringify({a:""}),"a="),e.equal(qs.stringify({a:null},{strictNullHandling:!0}),"a"),e.equal(qs.stringify({a:"",b:""}),"a=&b="),e.equal(qs.stringify({a:null,b:""},{strictNullHandling:!0}),"a&b="),e.equal(qs.stringify({a:{b:""}}),"a%5Bb%5D="),e.equal(qs.stringify({a:{b:null}},{strictNullHandling:!0}),"a%5Bb%5D"),e.equal(qs.stringify({a:{b:null}},{strictNullHandling:!1}),"a%5Bb%5D="),e.end()})),e.test("stringifies a null object",{skip:!Object.create},(function(e){var a=Object.create(null);a.a="b",e.equal(qs.stringify(a),"a=b"),e.end()})),e.test("returns an empty string for invalid input",(function(e){e.equal(qs.stringify(void 0),""),e.equal(qs.stringify(!1),""),e.equal(qs.stringify(null),""),e.equal(qs.stringify(""),""),e.end()})),e.test("stringifies an object with a null object as a child",{skip:!Object.create},(function(e){var a={a:Object.create(null)};a.a.b="c",e.equal(qs.stringify(a),"a%5Bb%5D=c"),e.end()})),e.test("drops keys with a value of undefined",(function(e){e.equal(qs.stringify({a:void 0}),""),e.equal(qs.stringify({a:{b:void 0,c:null}},{strictNullHandling:!0}),"a%5Bc%5D"),e.equal(qs.stringify({a:{b:void 0,c:null}},{strictNullHandling:!1}),"a%5Bc%5D="),e.equal(qs.stringify({a:{b:void 0,c:""}}),"a%5Bc%5D="),e.end()})),e.test("url encodes values",(function(e){e.equal(qs.stringify({a:"b c"}),"a=b%20c"),e.end()})),e.test("stringifies a date",(function(e){var a=new Date,t="a="+encodeURIComponent(a.toISOString());e.equal(qs.stringify({a:a}),t),e.end()})),e.test("stringifies the weird object from qs",(function(e){e.equal(qs.stringify({"my weird field":"~q1!2\"'w$5&7/z8)?"}),"my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F"),e.end()})),e.test("skips properties that are part of the object prototype",(function(e){Object.prototype.crash="test",e.equal(qs.stringify({a:"b"}),"a=b"),e.equal(qs.stringify({a:{b:"c"}}),"a%5Bb%5D=c"),delete Object.prototype.crash,e.end()})),e.test("stringifies boolean values",(function(e){e.equal(qs.stringify({a:!0}),"a=true"),e.equal(qs.stringify({a:{b:!0}}),"a%5Bb%5D=true"),e.equal(qs.stringify({b:!1}),"b=false"),e.equal(qs.stringify({b:{c:!1}}),"b%5Bc%5D=false"),e.end()})),e.test("stringifies buffer values",(function(e){e.equal(qs.stringify({a:SaferBuffer.from("test")}),"a=test"),e.equal(qs.stringify({a:{b:SaferBuffer.from("test")}}),"a%5Bb%5D=test"),e.end()})),e.test("stringifies an object using an alternative delimiter",(function(e){e.equal(qs.stringify({a:"b",c:"d"},{delimiter:";"}),"a=b;c=d"),e.end()})),e.test("doesn't blow up when Buffer global is missing",(function(e){var a=global.Buffer;delete global.Buffer;var t=qs.stringify({a:"b",c:"d"});global.Buffer=a,e.equal(t,"a=b&c=d"),e.end()})),e.test("selects properties when filter=array",(function(e){e.equal(qs.stringify({a:"b"},{filter:["a"]}),"a=b"),e.equal(qs.stringify({a:1},{filter:[]}),""),e.equal(qs.stringify({a:{b:[1,2,3,4],c:"d"},c:"f"},{filter:["a","b",0,2],arrayFormat:"indices"}),"a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3","indices => indices"),e.equal(qs.stringify({a:{b:[1,2,3,4],c:"d"},c:"f"},{filter:["a","b",0,2],arrayFormat:"brackets"}),"a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3","brackets => brackets"),e.equal(qs.stringify({a:{b:[1,2,3,4],c:"d"},c:"f"},{filter:["a","b",0,2]}),"a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3","default => indices"),e.end()})),e.test("supports custom representations when filter=function",(function(e){var a=0,t={a:"b",c:"d",e:{f:new Date(1257894e6)}};e.equal(qs.stringify(t,{filter:function(i,n){if(1===(a+=1))e.equal(i,"","prefix is empty"),e.equal(n,t);else{if("c"===i)return;if(n instanceof Date)return e.equal(i,"e[f]"),n.getTime()}return n}}),"a=b&e%5Bf%5D=1257894000000"),e.equal(a,5),e.end()})),e.test("can disable uri encoding",(function(e){e.equal(qs.stringify({a:"b"},{encode:!1}),"a=b"),e.equal(qs.stringify({a:{b:"c"}},{encode:!1}),"a[b]=c"),e.equal(qs.stringify({a:"b",c:null},{strictNullHandling:!0,encode:!1}),"a=b&c"),e.end()})),e.test("can sort the keys",(function(e){var a=function(e,a){return e.localeCompare(a)};e.equal(qs.stringify({a:"c",z:"y",b:"f"},{sort:a}),"a=c&b=f&z=y"),e.equal(qs.stringify({a:"c",z:{j:"a",i:"b"},b:"f"},{sort:a}),"a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a"),e.end()})),e.test("can sort the keys at depth 3 or more too",(function(e){e.equal(qs.stringify({a:"a",z:{zj:{zjb:"zjb",zja:"zja"},zi:{zib:"zib",zia:"zia"}},b:"b"},{sort:function(e,a){return e.localeCompare(a)},encode:!1}),"a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb"),e.equal(qs.stringify({a:"a",z:{zj:{zjb:"zjb",zja:"zja"},zi:{zib:"zib",zia:"zia"}},b:"b"},{sort:null,encode:!1}),"a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b"),e.end()})),e.test("can stringify with custom encoding",(function(e){e.equal(qs.stringify({"県":"大阪府","":""},{encoder:function(e){if(0===e.length)return"";for(var a=iconv.encode(e,"shiftjis"),t=[],i=0;i<a.length;++i)t.push(a.readUInt8(i).toString(16));return"%"+t.join("%")}}),"%8c%a7=%91%e5%8d%e3%95%7b&="),e.end()})),e.test("receives the default encoder as a second argument",(function(e){e.plan(2),qs.stringify({a:1},{encoder:function(a,t){e.equal(t,utils.encode)}}),e.end()})),e.test("throws error with wrong encoder",(function(e){e.throws((function(){qs.stringify({},{encoder:"string"})}),new TypeError("Encoder has to be a function.")),e.end()})),e.test("can use custom encoder for a buffer object",{skip:"undefined"==typeof Buffer},(function(e){e.equal(qs.stringify({a:SaferBuffer.from([1])},{encoder:function(e){return"string"==typeof e?e:String.fromCharCode(e.readUInt8(0)+97)}}),"a=b"),e.end()})),e.test("serializeDate option",(function(e){var a=new Date;e.equal(qs.stringify({a:a}),"a="+a.toISOString().replace(/:/g,"%3A"),"default is toISOString");var t=new Date;t.toISOString=function(){throw new SyntaxError},e.throws((function(){t.toISOString()}),SyntaxError),e.equal(qs.stringify({a:t}),"a="+Date.prototype.toISOString.call(t).replace(/:/g,"%3A"),"toISOString works even when method is not locally present");var i=new Date(6);e.equal(qs.stringify({a:i},{serializeDate:function(e){return 7*e.getTime()}}),"a=42","custom serializeDate function called"),e.end()})),e.test("RFC 1738 spaces serialization",(function(e){e.equal(qs.stringify({a:"b c"},{format:qs.formats.RFC1738}),"a=b+c"),e.equal(qs.stringify({"a b":"c d"},{format:qs.formats.RFC1738}),"a+b=c+d"),e.end()})),e.test("RFC 3986 spaces serialization",(function(e){e.equal(qs.stringify({a:"b c"},{format:qs.formats.RFC3986}),"a=b%20c"),e.equal(qs.stringify({"a b":"c d"},{format:qs.formats.RFC3986}),"a%20b=c%20d"),e.end()})),e.test("Backward compatibility to RFC 3986",(function(e){e.equal(qs.stringify({a:"b c"}),"a=b%20c"),e.end()})),e.test("Edge cases and unknown formats",(function(e){["UFO1234",!1,1234,null,{},[]].forEach((function(a){e.throws((function(){qs.stringify({a:"b c"},{format:a})}),new TypeError("Unknown format option provided."))})),e.end()})),e.test("encodeValuesOnly",(function(e){e.equal(qs.stringify({a:"b",c:["d","e=f"],f:[["g"],["h"]]},{encodeValuesOnly:!0}),"a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h"),e.equal(qs.stringify({a:"b",c:["d","e"],f:[["g"],["h"]]}),"a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h"),e.end()})),e.test("encodeValuesOnly - strictNullHandling",(function(e){e.equal(qs.stringify({a:{b:null}},{encodeValuesOnly:!0,strictNullHandling:!0}),"a[b]"),e.end()})),e.test("throws if an invalid charset is specified",(function(e){e.throws((function(){qs.stringify({a:"b"},{charset:"foobar"})}),new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined")),e.end()})),e.test("respects a charset of iso-8859-1",(function(e){e.equal(qs.stringify({"æ":"æ"},{charset:"iso-8859-1"}),"%E6=%E6"),e.end()})),e.test("encodes unrepresentable chars as numeric entities in iso-8859-1 mode",(function(e){e.equal(qs.stringify({a:"☺"},{charset:"iso-8859-1"}),"a=%26%239786%3B"),e.end()})),e.test("respects an explicit charset of utf-8 (the default)",(function(e){e.equal(qs.stringify({a:"æ"},{charset:"utf-8"}),"a=%C3%A6"),e.end()})),e.test("adds the right sentinel when instructed to and the charset is utf-8",(function(e){e.equal(qs.stringify({a:"æ"},{charsetSentinel:!0,charset:"utf-8"}),"utf8=%E2%9C%93&a=%C3%A6"),e.end()})),e.test("adds the right sentinel when instructed to and the charset is iso-8859-1",(function(e){e.equal(qs.stringify({a:"æ"},{charsetSentinel:!0,charset:"iso-8859-1"}),"utf8=%26%2310003%3B&a=%E6"),e.end()})),e.test("does not mutate the options argument",(function(e){var a={};qs.stringify({},a),e.deepEqual(a,{}),e.end()})),e.test("strictNullHandling works with custom filter",(function(e){var a={strictNullHandling:!0,filter:function(e,a){return a}};e.equal(qs.stringify({key:null},a),"key"),e.end()})),e.test("strictNullHandling works with null serializeDate",(function(e){var a={strictNullHandling:!0,serializeDate:function(){return null}},t=new Date;e.equal(qs.stringify({key:t},a),"key"),e.end()})),e.end()}));
\ No newline at end of file
diff --git a/device_home/node_modules/qs/test/utils.js b/device_home/node_modules/qs/test/utils.js
deleted file mode 100644 (file)
index 2ab50e5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";var test=require("tape"),inspect=require("object-inspect"),SaferBuffer=require("safer-buffer").Buffer,forEach=require("for-each"),utils=require("../lib/utils");test("merge()",(function(e){e.deepEqual(utils.merge(null,!0),[null,!0],"merges true into null"),e.deepEqual(utils.merge(null,[42]),[null,42],"merges null into an array"),e.deepEqual(utils.merge({a:"b"},{a:"c"}),{a:["b","c"]},"merges two objects with the same key");var a=utils.merge({foo:"bar"},{foo:{first:"123"}});e.deepEqual(a,{foo:["bar",{first:"123"}]},"merges a standalone and an object into an array");var r=utils.merge({foo:["bar",{first:"123"}]},{foo:{second:"456"}});e.deepEqual(r,{foo:{0:"bar",1:{first:"123"},second:"456"}},"merges a standalone and two objects into an array");var t=utils.merge({foo:["bar",{first:"123",second:"456"}]},{foo:"baz"});e.deepEqual(t,{foo:["bar",{first:"123",second:"456"},"baz"]},"merges an object sandwiched by two standalones into an array");var n=utils.merge({foo:["baz"]},{foo:["bar","xyzzy"]});e.deepEqual(n,{foo:["baz","bar","xyzzy"]});var u=utils.merge({foo:"baz"},"bar");e.deepEqual(u,{foo:"baz",bar:!0}),e.test("avoids invoking array setters unnecessarily",{skip:"function"!=typeof Object.defineProperty},(function(e){var a=0,r=0,t=[];Object.defineProperty(t,0,{get:function(){return r+=1,{bar:"baz"}},set:function(){a+=1}}),utils.merge(t,[null]),e.equal(a,0),e.equal(r,1),t[0]=t[0],e.equal(a,1),e.equal(r,2),e.end()})),e.end()})),test("assign()",(function(e){var a={a:1,b:2},r={b:3,c:4},t=utils.assign(a,r);e.equal(t,a,"returns the target"),e.deepEqual(a,{a:1,b:3,c:4},"target and source are merged"),e.deepEqual(r,{b:3,c:4},"source is untouched"),e.end()})),test("combine()",(function(e){e.test("both arrays",(function(e){var a=[1],r=[2],t=utils.combine(a,r);e.deepEqual(a,[1],"a is not mutated"),e.deepEqual(r,[2],"b is not mutated"),e.notEqual(a,t,"a !== combined"),e.notEqual(r,t,"b !== combined"),e.deepEqual(t,[1,2],"combined is a + b"),e.end()})),e.test("one array, one non-array",(function(e){var a=[1],r=[2],t=utils.combine(1,r);e.deepEqual(r,[2],"b is not mutated"),e.notEqual(1,t,"aN + b !== aN"),e.notEqual(a,t,"aN + b !== a"),e.notEqual(2,t,"aN + b !== bN"),e.notEqual(r,t,"aN + b !== b"),e.deepEqual([1,2],t,"first argument is array-wrapped when not an array");var n=utils.combine(a,2);e.deepEqual(a,[1],"a is not mutated"),e.notEqual(1,n,"a + bN !== aN"),e.notEqual(a,n,"a + bN !== a"),e.notEqual(2,n,"a + bN !== bN"),e.notEqual(r,n,"a + bN !== b"),e.deepEqual([1,2],n,"second argument is array-wrapped when not an array"),e.end()})),e.test("neither is an array",(function(e){var a=utils.combine(1,2);e.notEqual(1,a,"1 + 2 !== 1"),e.notEqual(2,a,"1 + 2 !== 2"),e.deepEqual([1,2],a,"both arguments are array-wrapped when not an array"),e.end()})),e.end()})),test("isBuffer()",(function(e){forEach([null,void 0,!0,!1,"","abc",42,0,NaN,{},[],function(){},/a/g],(function(a){e.equal(utils.isBuffer(a),!1,inspect(a)+" is not a buffer")}));var a={constructor:Buffer};e.equal(utils.isBuffer(a),!1,"fake buffer is not a buffer");var r=SaferBuffer.from("abc");e.equal(utils.isBuffer(r),!0,"SaferBuffer instance is a buffer");var t=Buffer.from?Buffer.from("abc"):new Buffer("abc");e.equal(utils.isBuffer(t),!0,"real Buffer instance is a buffer"),e.end()}));
\ No newline at end of file
diff --git a/device_home/node_modules/random-bytes/HISTORY.md b/device_home/node_modules/random-bytes/HISTORY.md
deleted file mode 100755 (executable)
index 8cabd9d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-1.0.0 / 2016-01-17
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/random-bytes/README.md b/device_home/node_modules/random-bytes/README.md
deleted file mode 100755 (executable)
index df5aacc..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# random-bytes
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Generate strong pseudo-random bytes.
-
-This module is a simple wrapper around the Node.js core `crypto.randomBytes` API,
-with the following additions:
-
-  * A `Promise` interface for environments with promises.
-  * For Node.js versions that do not wait for the PRNG to be seeded, this module
-    will wait a bit.
-
-## Installation
-
-```sh
-$ npm install random-bytes
-```
-
-## API
-
-```js
-var randomBytes = require('random-bytes')
-```
-
-### randomBytes(size, callback)
-
-Generates strong pseudo-random bytes. The `size` argument is a number indicating
-the number of bytes to generate.
-
-```js
-randomBytes(12, function (error, bytes) {
-  if (error) throw error
-  // do something with the bytes
-})
-```
-
-### randomBytes(size)
-
-Generates strong pseudo-random bytes and return a `Promise`. The `size` argument is
-a number indicating the number of bytes to generate.
-
-**Note**: To use promises in Node.js _prior to 0.12_, promises must be
-"polyfilled" using `global.Promise = require('bluebird')`.
-
-```js
-randomBytes(18).then(function (string) {
-  // do something with the string
-})
-```
-
-### randomBytes.sync(size)
-
-A synchronous version of above.
-
-```js
-var bytes = randomBytes.sync(18)
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/random-bytes.svg
-[npm-url]: https://npmjs.org/package/random-bytes
-[node-version-image]: https://img.shields.io/node/v/random-bytes.svg
-[node-version-url]: http://nodejs.org/download/
-[travis-image]: https://img.shields.io/travis/crypto-utils/random-bytes/master.svg
-[travis-url]: https://travis-ci.org/crypto-utils/random-bytes
-[coveralls-image]: https://img.shields.io/coveralls/crypto-utils/random-bytes/master.svg
-[coveralls-url]: https://coveralls.io/r/crypto-utils/random-bytes?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/random-bytes.svg
-[downloads-url]: https://npmjs.org/package/random-bytes
diff --git a/device_home/node_modules/range-parser/HISTORY.md b/device_home/node_modules/range-parser/HISTORY.md
deleted file mode 100644 (file)
index 70a973d..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-1.2.1 / 2019-05-10
-==================
-
-  * Improve error when `str` is not a string
-
-1.2.0 / 2016-06-01
-==================
-
-  * Add `combine` option to combine overlapping ranges
-
-1.1.0 / 2016-05-13
-==================
-
-  * Fix incorrectly returning -1 when there is at least one valid range
-  * perf: remove internal function
-
-1.0.3 / 2015-10-29
-==================
-
-  * perf: enable strict mode
-
-1.0.2 / 2014-09-08
-==================
-
-  * Support Node.js 0.6
-
-1.0.1 / 2014-09-07
-==================
-
-  * Move repository to jshttp
-
-1.0.0 / 2013-12-11
-==================
-
-  * Add repository to package.json
-  * Add MIT license
-
-0.0.4 / 2012-06-17
-==================
-
-  * Change ret -1 for unsatisfiable and -2 when invalid
-
-0.0.3 / 2012-06-17
-==================
-
-  * Fix last-byte-pos default to len - 1
-
-0.0.2 / 2012-06-14
-==================
-
-  * Add `.type`
-
-0.0.1 / 2012-06-11
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/range-parser/README.md b/device_home/node_modules/range-parser/README.md
deleted file mode 100644 (file)
index c247e82..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-# range-parser
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Range header field parser.
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install range-parser
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var parseRange = require('range-parser')
-```
-
-### parseRange(size, header, options)
-
-Parse the given `header` string where `size` is the maximum size of the resource.
-An array of ranges will be returned or negative numbers indicating an error parsing.
-
-  * `-2` signals a malformed header string
-  * `-1` signals an unsatisfiable range
-
-<!-- eslint-disable no-undef -->
-
-```js
-// parse header from request
-var range = parseRange(size, req.headers.range)
-
-// the type of the range
-if (range.type === 'bytes') {
-  // the ranges
-  range.forEach(function (r) {
-    // do something with r.start and r.end
-  })
-}
-```
-
-#### Options
-
-These properties are accepted in the options object.
-
-##### combine
-
-Specifies if overlapping & adjacent ranges should be combined, defaults to `false`.
-When `true`, ranges will be combined and returned as if they were specified that
-way in the header.
-
-<!-- eslint-disable no-undef -->
-
-```js
-parseRange(100, 'bytes=50-55,0-10,5-10,56-60', { combine: true })
-// => [
-//      { start: 0,  end: 10 },
-//      { start: 50, end: 60 }
-//    ]
-```
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/range-parser/master
-[coveralls-url]: https://coveralls.io/r/jshttp/range-parser?branch=master
-[node-image]: https://badgen.net/npm/node/range-parser
-[node-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/range-parser
-[npm-url]: https://npmjs.org/package/range-parser
-[npm-version-image]: https://badgen.net/npm/v/range-parser
-[travis-image]: https://badgen.net/travis/jshttp/range-parser/master
-[travis-url]: https://travis-ci.org/jshttp/range-parser
diff --git a/device_home/node_modules/raw-body/HISTORY.md b/device_home/node_modules/raw-body/HISTORY.md
deleted file mode 100644 (file)
index 88c79fc..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-2.4.0 / 2019-04-17
-==================
-
-  * deps: bytes@3.1.0
-    - Add petabyte (`pb`) support
-  * deps: http-errors@1.7.2
-    - Set constructor name when possible
-    - deps: setprototypeof@1.1.1
-    - deps: statuses@'>= 1.5.0 < 2'
-  * deps: iconv-lite@0.4.24
-    - Added encoding MIK
-
-2.3.3 / 2018-05-08
-==================
-
-  * deps: http-errors@1.6.3
-    - deps: depd@~1.1.2
-    - deps: setprototypeof@1.1.0
-    - deps: statuses@'>= 1.3.1 < 2'
-  * deps: iconv-lite@0.4.23
-    - Fix loading encoding with year appended
-    - Fix deprecation warnings on Node.js 10+
-
-2.3.2 / 2017-09-09
-==================
-
-  * deps: iconv-lite@0.4.19
-    - Fix ISO-8859-1 regression
-    - Update Windows-1255
-
-2.3.1 / 2017-09-07
-==================
-
-  * deps: bytes@3.0.0
-  * deps: http-errors@1.6.2
-    - deps: depd@1.1.1
-  * perf: skip buffer decoding on overage chunk
-
-2.3.0 / 2017-08-04
-==================
-
-  * Add TypeScript definitions
-  * Use `http-errors` for standard emitted errors
-  * deps: bytes@2.5.0
-  * deps: iconv-lite@0.4.18
-    - Add support for React Native
-    - Add a warning if not loaded as utf-8
-    - Fix CESU-8 decoding in Node.js 8
-    - Improve speed of ISO-8859-1 encoding
-
-2.2.0 / 2017-01-02
-==================
-
-  * deps: iconv-lite@0.4.15
-    - Added encoding MS-31J
-    - Added encoding MS-932
-    - Added encoding MS-936
-    - Added encoding MS-949
-    - Added encoding MS-950
-    - Fix GBK/GB18030 handling of Euro character
-
-2.1.7 / 2016-06-19
-==================
-
-  * deps: bytes@2.4.0
-  * perf: remove double-cleanup on happy path
-
-2.1.6 / 2016-03-07
-==================
-
-  * deps: bytes@2.3.0
-    - Drop partial bytes on all parsed units
-    - Fix parsing byte string that looks like hex
-
-2.1.5 / 2015-11-30
-==================
-
-  * deps: bytes@2.2.0
-  * deps: iconv-lite@0.4.13
-
-2.1.4 / 2015-09-27
-==================
-
-  * Fix masking critical errors from `iconv-lite`
-  * deps: iconv-lite@0.4.12
-    - Fix CESU-8 decoding in Node.js 4.x
-
-2.1.3 / 2015-09-12
-==================
-
-  * Fix sync callback when attaching data listener causes sync read
-    - Node.js 0.10 compatibility issue
-
-2.1.2 / 2015-07-05
-==================
-
-  * Fix error stack traces to skip `makeError`
-  * deps: iconv-lite@0.4.11
-    - Add encoding CESU-8
-
-2.1.1 / 2015-06-14
-==================
-
-  * Use `unpipe` module for unpiping requests
-
-2.1.0 / 2015-05-28
-==================
-
-  * deps: iconv-lite@0.4.10
-    - Improved UTF-16 endianness detection
-    - Leading BOM is now removed when decoding
-    - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
-
-2.0.2 / 2015-05-21
-==================
-
-  * deps: bytes@2.1.0
-    - Slight optimizations
-
-2.0.1 / 2015-05-10
-==================
-
-  * Fix a false-positive when unpiping in Node.js 0.8
-
-2.0.0 / 2015-05-08
-==================
-
-  * Return a promise without callback instead of thunk
-  * deps: bytes@2.0.1
-    - units no longer case sensitive when parsing
-
-1.3.4 / 2015-04-15
-==================
-
-  * Fix hanging callback if request aborts during read
-  * deps: iconv-lite@0.4.8
-    - Add encoding alias UNICODE-1-1-UTF-7
-
-1.3.3 / 2015-02-08
-==================
-
-  * deps: iconv-lite@0.4.7
-    - Gracefully support enumerables on `Object.prototype`
-
-1.3.2 / 2015-01-20
-==================
-
-  * deps: iconv-lite@0.4.6
-    - Fix rare aliases of single-byte encodings
-
-1.3.1 / 2014-11-21
-==================
-
-  * deps: iconv-lite@0.4.5
-    - Fix Windows-31J and X-SJIS encoding support
-
-1.3.0 / 2014-07-20
-==================
-
-  * Fully unpipe the stream on error
-    - Fixes `Cannot switch to old mode now` error on Node.js 0.10+
-
-1.2.3 / 2014-07-20
-==================
-
-  * deps: iconv-lite@0.4.4
-    - Added encoding UTF-7
-
-1.2.2 / 2014-06-19
-==================
-
-  * Send invalid encoding error to callback
-
-1.2.1 / 2014-06-15
-==================
-
-  * deps: iconv-lite@0.4.3
-    - Added encodings UTF-16BE and UTF-16 with BOM
-
-1.2.0 / 2014-06-13
-==================
-
-  * Passing string as `options` interpreted as encoding
-  * Support all encodings from `iconv-lite`
-
-1.1.7 / 2014-06-12
-==================
-
-  * use `string_decoder` module from npm
-
-1.1.6 / 2014-05-27
-==================
-
-  * check encoding for old streams1
-  * support node.js < 0.10.6
-
-1.1.5 / 2014-05-14
-==================
-
-  * bump bytes
-
-1.1.4 / 2014-04-19
-==================
-
-  * allow true as an option
-  * bump bytes
-
-1.1.3 / 2014-03-02
-==================
-
-  * fix case when length=null
-
-1.1.2 / 2013-12-01
-==================
-
-  * be less strict on state.encoding check
-
-1.1.1 / 2013-11-27
-==================
-
-  * add engines
-
-1.1.0 / 2013-11-27
-==================
-
-  * add err.statusCode and err.type
-  * allow for encoding option to be true
-  * pause the stream instead of dumping on error
-  * throw if the stream's encoding is set
-
-1.0.1 / 2013-11-19
-==================
-
-  * dont support streams1, throw if dev set encoding
-
-1.0.0 / 2013-11-17
-==================
-
-  * rename `expected` option to `length`
-
-0.2.0 / 2013-11-15
-==================
-
-  * republish
-
-0.1.1 / 2013-11-15
-==================
-
-  * use bytes
-
-0.1.0 / 2013-11-11
-==================
-
-  * generator support
-
-0.0.3 / 2013-10-10
-==================
-
-  * update repo
-
-0.0.2 / 2013-09-14
-==================
-
-  * dump stream on bad headers
-  * listen to events after defining received and buffers
-
-0.0.1 / 2013-09-14
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/raw-body/README.md b/device_home/node_modules/raw-body/README.md
deleted file mode 100644 (file)
index 2ce79d2..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-# raw-body
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build status][travis-image]][travis-url]
-[![Test coverage][coveralls-image]][coveralls-url]
-
-Gets the entire buffer of a stream either as a `Buffer` or a string.
-Validates the stream's length against an expected length and maximum limit.
-Ideal for parsing request bodies.
-
-## Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install raw-body
-```
-
-### TypeScript
-
-This module includes a [TypeScript](https://www.typescriptlang.org/)
-declaration file to enable auto complete in compatible editors and type
-information for TypeScript projects. This module depends on the Node.js
-types, so install `@types/node`:
-
-```sh
-$ npm install @types/node
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var getRawBody = require('raw-body')
-```
-
-### getRawBody(stream, [options], [callback])
-
-**Returns a promise if no callback specified and global `Promise` exists.**
-
-Options:
-
-- `length` - The length of the stream.
-  If the contents of the stream do not add up to this length,
-  an `400` error code is returned.
-- `limit` - The byte limit of the body.
-  This is the number of bytes or any string format supported by
-  [bytes](https://www.npmjs.com/package/bytes),
-  for example `1000`, `'500kb'` or `'3mb'`.
-  If the body ends up being larger than this limit,
-  a `413` error code is returned.
-- `encoding` - The encoding to use to decode the body into a string.
-  By default, a `Buffer` instance will be returned when no encoding is specified.
-  Most likely, you want `utf-8`, so setting `encoding` to `true` will decode as `utf-8`.
-  You can use any type of encoding supported by [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme).
-
-You can also pass a string in place of options to just specify the encoding.
-
-If an error occurs, the stream will be paused, everything unpiped,
-and you are responsible for correctly disposing the stream.
-For HTTP requests, no handling is required if you send a response.
-For streams that use file descriptors, you should `stream.destroy()` or `stream.close()` to prevent leaks.
-
-## Errors
-
-This module creates errors depending on the error condition during reading.
-The error may be an error from the underlying Node.js implementation, but is
-otherwise an error created by this module, which has the following attributes:
-
-  * `limit` - the limit in bytes
-  * `length` and `expected` - the expected length of the stream
-  * `received` - the received bytes
-  * `encoding` - the invalid encoding
-  * `status` and `statusCode` - the corresponding status code for the error
-  * `type` - the error type
-
-### Types
-
-The errors from this module have a `type` property which allows for the progamatic
-determination of the type of error returned.
-
-#### encoding.unsupported
-
-This error will occur when the `encoding` option is specified, but the value does
-not map to an encoding supported by the [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme)
-module.
-
-#### entity.too.large
-
-This error will occur when the `limit` option is specified, but the stream has
-an entity that is larger.
-
-#### request.aborted
-
-This error will occur when the request stream is aborted by the client before
-reading the body has finished.
-
-#### request.size.invalid
-
-This error will occur when the `length` option is specified, but the stream has
-emitted more bytes.
-
-#### stream.encoding.set
-
-This error will occur when the given stream has an encoding set on it, making it
-a decoded stream. The stream should not have an encoding set and is expected to
-emit `Buffer` objects.
-
-## Examples
-
-### Simple Express example
-
-```js
-var contentType = require('content-type')
-var express = require('express')
-var getRawBody = require('raw-body')
-
-var app = express()
-
-app.use(function (req, res, next) {
-  getRawBody(req, {
-    length: req.headers['content-length'],
-    limit: '1mb',
-    encoding: contentType.parse(req).parameters.charset
-  }, function (err, string) {
-    if (err) return next(err)
-    req.text = string
-    next()
-  })
-})
-
-// now access req.text
-```
-
-### Simple Koa example
-
-```js
-var contentType = require('content-type')
-var getRawBody = require('raw-body')
-var koa = require('koa')
-
-var app = koa()
-
-app.use(function * (next) {
-  this.text = yield getRawBody(this.req, {
-    length: this.req.headers['content-length'],
-    limit: '1mb',
-    encoding: contentType.parse(this.req).parameters.charset
-  })
-  yield next
-})
-
-// now access this.text
-```
-
-### Using as a promise
-
-To use this library as a promise, simply omit the `callback` and a promise is
-returned, provided that a global `Promise` is defined.
-
-```js
-var getRawBody = require('raw-body')
-var http = require('http')
-
-var server = http.createServer(function (req, res) {
-  getRawBody(req)
-    .then(function (buf) {
-      res.statusCode = 200
-      res.end(buf.length + ' bytes submitted')
-    })
-    .catch(function (err) {
-      res.statusCode = 500
-      res.end(err.message)
-    })
-})
-
-server.listen(3000)
-```
-
-### Using with TypeScript
-
-```ts
-import * as getRawBody from 'raw-body';
-import * as http from 'http';
-
-const server = http.createServer((req, res) => {
-  getRawBody(req)
-  .then((buf) => {
-    res.statusCode = 200;
-    res.end(buf.length + ' bytes submitted');
-  })
-  .catch((err) => {
-    res.statusCode = err.statusCode;
-    res.end(err.message);
-  });
-});
-
-server.listen(3000);
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/raw-body.svg
-[npm-url]: https://npmjs.org/package/raw-body
-[node-version-image]: https://img.shields.io/node/v/raw-body.svg
-[node-version-url]: https://nodejs.org/en/download/
-[travis-image]: https://img.shields.io/travis/stream-utils/raw-body/master.svg
-[travis-url]: https://travis-ci.org/stream-utils/raw-body
-[coveralls-image]: https://img.shields.io/coveralls/stream-utils/raw-body/master.svg
-[coveralls-url]: https://coveralls.io/r/stream-utils/raw-body?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/raw-body.svg
-[downloads-url]: https://npmjs.org/package/raw-body
diff --git a/device_home/node_modules/require-main-filename/CHANGELOG.md b/device_home/node_modules/require-main-filename/CHANGELOG.md
deleted file mode 100644 (file)
index 717d59e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-<a name="2.0.0"></a>
-# [2.0.0](https://github.com/yargs/require-main-filename/compare/v1.0.2...v2.0.0) (2019-01-28)
-
-
-### Chores
-
-* drop support for Node 0.10 ([#11](https://github.com/yargs/require-main-filename/issues/11)) ([87f4e13](https://github.com/yargs/require-main-filename/commit/87f4e13))
-
-
-### BREAKING CHANGES
-
-* drop support for Node 0.10/0.12
-
-
-
-<a name="1.0.2"></a>
-## [1.0.2](https://github.com/yargs/require-main-filename/compare/v1.0.1...v1.0.2) (2017-06-16)
-
-
-### Bug Fixes
-
-* add files to package.json ([#4](https://github.com/yargs/require-main-filename/issues/4)) ([fa29988](https://github.com/yargs/require-main-filename/commit/fa29988))
diff --git a/device_home/node_modules/require-main-filename/README.md b/device_home/node_modules/require-main-filename/README.md
deleted file mode 100644 (file)
index 820d9f5..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# require-main-filename
-
-[![Build Status](https://travis-ci.org/yargs/require-main-filename.png)](https://travis-ci.org/yargs/require-main-filename)
-[![Coverage Status](https://coveralls.io/repos/yargs/require-main-filename/badge.svg?branch=master)](https://coveralls.io/r/yargs/require-main-filename?branch=master)
-[![NPM version](https://img.shields.io/npm/v/require-main-filename.svg)](https://www.npmjs.com/package/require-main-filename)
-
-`require.main.filename` is great for figuring out the entry
-point for the current application. This can be combined with a module like
-[pkg-conf](https://www.npmjs.com/package/pkg-conf) to, _as if by magic_, load
-top-level configuration.
-
-Unfortunately, `require.main.filename` sometimes fails when an application is
-executed with an alternative process manager, e.g., [iisnode](https://github.com/tjanczuk/iisnode).
-
-`require-main-filename` is a shim that addresses this problem.
-
-## Usage
-
-```js
-var main = require('require-main-filename')()
-// use main as an alternative to require.main.filename.
-```
-
-## License
-
-ISC
diff --git a/device_home/node_modules/safe-buffer/README.md b/device_home/node_modules/safe-buffer/README.md
deleted file mode 100644 (file)
index e9a81af..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]
-
-[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg
-[travis-url]: https://travis-ci.org/feross/safe-buffer
-[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg
-[npm-url]: https://npmjs.org/package/safe-buffer
-[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg
-[downloads-url]: https://npmjs.org/package/safe-buffer
-[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg
-[standard-url]: https://standardjs.com
-
-#### Safer Node.js Buffer API
-
-**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`,
-`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.**
-
-**Uses the built-in implementation when available.**
-
-## install
-
-```
-npm install safe-buffer
-```
-
-## usage
-
-The goal of this package is to provide a safe replacement for the node.js `Buffer`.
-
-It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to
-the top of your node.js modules:
-
-```js
-var Buffer = require('safe-buffer').Buffer
-
-// Existing buffer code will continue to work without issues:
-
-new Buffer('hey', 'utf8')
-new Buffer([1, 2, 3], 'utf8')
-new Buffer(obj)
-new Buffer(16) // create an uninitialized buffer (potentially unsafe)
-
-// But you can use these new explicit APIs to make clear what you want:
-
-Buffer.from('hey', 'utf8') // convert from many types to a Buffer
-Buffer.alloc(16) // create a zero-filled buffer (safe)
-Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe)
-```
-
-## api
-
-### Class Method: Buffer.from(array)
-<!-- YAML
-added: v3.0.0
--->
-
-* `array` {Array}
-
-Allocates a new `Buffer` using an `array` of octets.
-
-```js
-const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]);
-  // creates a new Buffer containing ASCII bytes
-  // ['b','u','f','f','e','r']
-```
-
-A `TypeError` will be thrown if `array` is not an `Array`.
-
-### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]])
-<!-- YAML
-added: v5.10.0
--->
-
-* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or
-  a `new ArrayBuffer()`
-* `byteOffset` {Number} Default: `0`
-* `length` {Number} Default: `arrayBuffer.length - byteOffset`
-
-When passed a reference to the `.buffer` property of a `TypedArray` instance,
-the newly created `Buffer` will share the same allocated memory as the
-TypedArray.
-
-```js
-const arr = new Uint16Array(2);
-arr[0] = 5000;
-arr[1] = 4000;
-
-const buf = Buffer.from(arr.buffer); // shares the memory with arr;
-
-console.log(buf);
-  // Prints: <Buffer 88 13 a0 0f>
-
-// changing the TypedArray changes the Buffer also
-arr[1] = 6000;
-
-console.log(buf);
-  // Prints: <Buffer 88 13 70 17>
-```
-
-The optional `byteOffset` and `length` arguments specify a memory range within
-the `arrayBuffer` that will be shared by the `Buffer`.
-
-```js
-const ab = new ArrayBuffer(10);
-const buf = Buffer.from(ab, 0, 2);
-console.log(buf.length);
-  // Prints: 2
-```
-
-A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`.
-
-### Class Method: Buffer.from(buffer)
-<!-- YAML
-added: v3.0.0
--->
-
-* `buffer` {Buffer}
-
-Copies the passed `buffer` data onto a new `Buffer` instance.
-
-```js
-const buf1 = Buffer.from('buffer');
-const buf2 = Buffer.from(buf1);
-
-buf1[0] = 0x61;
-console.log(buf1.toString());
-  // 'auffer'
-console.log(buf2.toString());
-  // 'buffer' (copy is not changed)
-```
-
-A `TypeError` will be thrown if `buffer` is not a `Buffer`.
-
-### Class Method: Buffer.from(str[, encoding])
-<!-- YAML
-added: v5.10.0
--->
-
-* `str` {String} String to encode.
-* `encoding` {String} Encoding to use, Default: `'utf8'`
-
-Creates a new `Buffer` containing the given JavaScript string `str`. If
-provided, the `encoding` parameter identifies the character encoding.
-If not provided, `encoding` defaults to `'utf8'`.
-
-```js
-const buf1 = Buffer.from('this is a tést');
-console.log(buf1.toString());
-  // prints: this is a tést
-console.log(buf1.toString('ascii'));
-  // prints: this is a tC)st
-
-const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
-console.log(buf2.toString());
-  // prints: this is a tést
-```
-
-A `TypeError` will be thrown if `str` is not a string.
-
-### Class Method: Buffer.alloc(size[, fill[, encoding]])
-<!-- YAML
-added: v5.10.0
--->
-
-* `size` {Number}
-* `fill` {Value} Default: `undefined`
-* `encoding` {String} Default: `utf8`
-
-Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the
-`Buffer` will be *zero-filled*.
-
-```js
-const buf = Buffer.alloc(5);
-console.log(buf);
-  // <Buffer 00 00 00 00 00>
-```
-
-The `size` must be less than or equal to the value of
-`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is
-`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will
-be created if a `size` less than or equal to 0 is specified.
-
-If `fill` is specified, the allocated `Buffer` will be initialized by calling
-`buf.fill(fill)`. See [`buf.fill()`][] for more information.
-
-```js
-const buf = Buffer.alloc(5, 'a');
-console.log(buf);
-  // <Buffer 61 61 61 61 61>
-```
-
-If both `fill` and `encoding` are specified, the allocated `Buffer` will be
-initialized by calling `buf.fill(fill, encoding)`. For example:
-
-```js
-const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
-console.log(buf);
-  // <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>
-```
-
-Calling `Buffer.alloc(size)` can be significantly slower than the alternative
-`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance
-contents will *never contain sensitive data*.
-
-A `TypeError` will be thrown if `size` is not a number.
-
-### Class Method: Buffer.allocUnsafe(size)
-<!-- YAML
-added: v5.10.0
--->
-
-* `size` {Number}
-
-Allocates a new *non-zero-filled* `Buffer` of `size` bytes.  The `size` must
-be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit
-architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is
-thrown. A zero-length Buffer will be created if a `size` less than or equal to
-0 is specified.
-
-The underlying memory for `Buffer` instances created in this way is *not
-initialized*. The contents of the newly created `Buffer` are unknown and
-*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such
-`Buffer` instances to zeroes.
-
-```js
-const buf = Buffer.allocUnsafe(5);
-console.log(buf);
-  // <Buffer 78 e0 82 02 01>
-  // (octets will be different, every time)
-buf.fill(0);
-console.log(buf);
-  // <Buffer 00 00 00 00 00>
-```
-
-A `TypeError` will be thrown if `size` is not a number.
-
-Note that the `Buffer` module pre-allocates an internal `Buffer` instance of
-size `Buffer.poolSize` that is used as a pool for the fast allocation of new
-`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated
-`new Buffer(size)` constructor) only when `size` is less than or equal to
-`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default
-value of `Buffer.poolSize` is `8192` but can be modified.
-
-Use of this pre-allocated internal memory pool is a key difference between
-calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`.
-Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer
-pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal
-Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The
-difference is subtle but can be important when an application requires the
-additional performance that `Buffer.allocUnsafe(size)` provides.
-
-### Class Method: Buffer.allocUnsafeSlow(size)
-<!-- YAML
-added: v5.10.0
--->
-
-* `size` {Number}
-
-Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes.  The
-`size` must be less than or equal to the value of
-`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is
-`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will
-be created if a `size` less than or equal to 0 is specified.
-
-The underlying memory for `Buffer` instances created in this way is *not
-initialized*. The contents of the newly created `Buffer` are unknown and
-*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such
-`Buffer` instances to zeroes.
-
-When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances,
-allocations under 4KB are, by default, sliced from a single pre-allocated
-`Buffer`. This allows applications to avoid the garbage collection overhead of
-creating many individually allocated Buffers. This approach improves both
-performance and memory usage by eliminating the need to track and cleanup as
-many `Persistent` objects.
-
-However, in the case where a developer may need to retain a small chunk of
-memory from a pool for an indeterminate amount of time, it may be appropriate
-to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then
-copy out the relevant bits.
-
-```js
-// need to keep around a few small chunks of memory
-const store = [];
-
-socket.on('readable', () => {
-  const data = socket.read();
-  // allocate for retained data
-  const sb = Buffer.allocUnsafeSlow(10);
-  // copy the data into the new allocation
-  data.copy(sb, 0, 0, 10);
-  store.push(sb);
-});
-```
-
-Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after*
-a developer has observed undue memory retention in their applications.
-
-A `TypeError` will be thrown if `size` is not a number.
-
-### All the Rest
-
-The rest of the `Buffer` API is exactly the same as in node.js.
-[See the docs](https://nodejs.org/api/buffer.html).
-
-
-## Related links
-
-- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660)
-- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4)
-
-## Why is `Buffer` unsafe?
-
-Today, the node.js `Buffer` constructor is overloaded to handle many different argument
-types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.),
-`ArrayBuffer`, and also `Number`.
-
-The API is optimized for convenience: you can throw any type at it, and it will try to do
-what you want.
-
-Because the Buffer constructor is so powerful, you often see code like this:
-
-```js
-// Convert UTF-8 strings to hex
-function toHex (str) {
-  return new Buffer(str).toString('hex')
-}
-```
-
-***But what happens if `toHex` is called with a `Number` argument?***
-
-### Remote Memory Disclosure
-
-If an attacker can make your program call the `Buffer` constructor with a `Number`
-argument, then they can make it allocate uninitialized memory from the node.js process.
-This could potentially disclose TLS private keys, user data, or database passwords.
-
-When the `Buffer` constructor is passed a `Number` argument, it returns an
-**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like
-this, you **MUST** overwrite the contents before returning it to the user.
-
-From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size):
-
-> `new Buffer(size)`
->
-> - `size` Number
->
-> The underlying memory for `Buffer` instances created in this way is not initialized.
-> **The contents of a newly created `Buffer` are unknown and could contain sensitive
-> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes.
-
-(Emphasis our own.)
-
-Whenever the programmer intended to create an uninitialized `Buffer` you often see code
-like this:
-
-```js
-var buf = new Buffer(16)
-
-// Immediately overwrite the uninitialized buffer with data from another buffer
-for (var i = 0; i < buf.length; i++) {
-  buf[i] = otherBuf[i]
-}
-```
-
-
-### Would this ever be a problem in real code?
-
-Yes. It's surprisingly common to forget to check the type of your variables in a
-dynamically-typed language like JavaScript.
-
-Usually the consequences of assuming the wrong type is that your program crashes with an
-uncaught exception. But the failure mode for forgetting to check the type of arguments to
-the `Buffer` constructor is more catastrophic.
-
-Here's an example of a vulnerable service that takes a JSON payload and converts it to
-hex:
-
-```js
-// Take a JSON payload {str: "some string"} and convert it to hex
-var server = http.createServer(function (req, res) {
-  var data = ''
-  req.setEncoding('utf8')
-  req.on('data', function (chunk) {
-    data += chunk
-  })
-  req.on('end', function () {
-    var body = JSON.parse(data)
-    res.end(new Buffer(body.str).toString('hex'))
-  })
-})
-
-server.listen(8080)
-```
-
-In this example, an http client just has to send:
-
-```json
-{
-  "str": 1000
-}
-```
-
-and it will get back 1,000 bytes of uninitialized memory from the server.
-
-This is a very serious bug. It's similar in severity to the
-[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process
-memory by remote attackers.
-
-
-### Which real-world packages were vulnerable?
-
-#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht)
-
-[Mathias Buus](https://github.com/mafintosh) and I
-([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages,
-[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow
-anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get
-them to reveal 20 bytes at a time of uninitialized memory from the node.js process.
-
-Here's
-[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8)
-that fixed it. We released a new fixed version, created a
-[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all
-vulnerable versions on npm so users will get a warning to upgrade to a newer version.
-
-#### [`ws`](https://www.npmjs.com/package/ws)
-
-That got us wondering if there were other vulnerable packages. Sure enough, within a short
-period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the
-most popular WebSocket implementation in node.js.
-
-If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as
-expected, then uninitialized server memory would be disclosed to the remote peer.
-
-These were the vulnerable methods:
-
-```js
-socket.send(number)
-socket.ping(number)
-socket.pong(number)
-```
-
-Here's a vulnerable socket server with some echo functionality:
-
-```js
-server.on('connection', function (socket) {
-  socket.on('message', function (message) {
-    message = JSON.parse(message)
-    if (message.type === 'echo') {
-      socket.send(message.data) // send back the user's message
-    }
-  })
-})
-```
-
-`socket.send(number)` called on the server, will disclose server memory.
-
-Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue
-was fixed, with a more detailed explanation. Props to
-[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the
-[Node Security Project disclosure](https://nodesecurity.io/advisories/67).
-
-
-### What's the solution?
-
-It's important that node.js offers a fast way to get memory otherwise performance-critical
-applications would needlessly get a lot slower.
-
-But we need a better way to *signal our intent* as programmers. **When we want
-uninitialized memory, we should request it explicitly.**
-
-Sensitive functionality should not be packed into a developer-friendly API that loosely
-accepts many different types. This type of API encourages the lazy practice of passing
-variables in without checking the type very carefully.
-
-#### A new API: `Buffer.allocUnsafe(number)`
-
-The functionality of creating buffers with uninitialized memory should be part of another
-API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that
-frequently gets user input of all sorts of different types passed into it.
-
-```js
-var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory!
-
-// Immediately overwrite the uninitialized buffer with data from another buffer
-for (var i = 0; i < buf.length; i++) {
-  buf[i] = otherBuf[i]
-}
-```
-
-
-### How do we fix node.js core?
-
-We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as
-`semver-major`) which defends against one case:
-
-```js
-var str = 16
-new Buffer(str, 'utf8')
-```
-
-In this situation, it's implied that the programmer intended the first argument to be a
-string, since they passed an encoding as a second argument. Today, node.js will allocate
-uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not
-what the programmer intended.
-
-But this is only a partial solution, since if the programmer does `new Buffer(variable)`
-(without an `encoding` parameter) there's no way to know what they intended. If `variable`
-is sometimes a number, then uninitialized memory will sometimes be returned.
-
-### What's the real long-term fix?
-
-We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when
-we need uninitialized memory. But that would break 1000s of packages.
-
-~~We believe the best solution is to:~~
-
-~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~
-
-~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~
-
-#### Update
-
-We now support adding three new APIs:
-
-- `Buffer.from(value)` - convert from any type to a buffer
-- `Buffer.alloc(size)` - create a zero-filled buffer
-- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size
-
-This solves the core problem that affected `ws` and `bittorrent-dht` which is
-`Buffer(variable)` getting tricked into taking a number argument.
-
-This way, existing code continues working and the impact on the npm ecosystem will be
-minimal. Over time, npm maintainers can migrate performance-critical code to use
-`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`.
-
-
-### Conclusion
-
-We think there's a serious design issue with the `Buffer` API as it exists today. It
-promotes insecure software by putting high-risk functionality into a convenient API
-with friendly "developer ergonomics".
-
-This wasn't merely a theoretical exercise because we found the issue in some of the
-most popular npm packages.
-
-Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of
-`buffer`.
-
-```js
-var Buffer = require('safe-buffer').Buffer
-```
-
-Eventually, we hope that node.js core can switch to this new, safer behavior. We believe
-the impact on the ecosystem would be minimal since it's not a breaking change.
-Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while
-older, insecure packages would magically become safe from this attack vector.
-
-
-## links
-
-- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514)
-- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67)
-- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68)
-
-
-## credit
-
-The original issues in `bittorrent-dht`
-([disclosure](https://nodesecurity.io/advisories/68)) and
-`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by
-[Mathias Buus](https://github.com/mafintosh) and
-[Feross Aboukhadijeh](http://feross.org/).
-
-Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues
-and for his work running the [Node Security Project](https://nodesecurity.io/).
-
-Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and
-auditing the code.
-
-
-## license
-
-MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org)
diff --git a/device_home/node_modules/safer-buffer/Porting-Buffer.md b/device_home/node_modules/safer-buffer/Porting-Buffer.md
deleted file mode 100644 (file)
index 68d86ba..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-# Porting to the Buffer.from/Buffer.alloc API
-
-<a id="overview"></a>
-## Overview
-
-- [Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x.](#variant-1) (*recommended*)
-- [Variant 2: Use a polyfill](#variant-2)
-- [Variant 3: manual detection, with safeguards](#variant-3)
-
-### Finding problematic bits of code using grep
-
-Just run `grep -nrE '[^a-zA-Z](Slow)?Buffer\s*\(' --exclude-dir node_modules`.
-
-It will find all the potentially unsafe places in your own code (with some considerably unlikely
-exceptions).
-
-### Finding problematic bits of code using Node.js 8
-
-If you’re using Node.js ≥ 8.0.0 (which is recommended), Node.js exposes multiple options that help with finding the relevant pieces of code:
-
-- `--trace-warnings` will make Node.js show a stack trace for this warning and other warnings that are printed by Node.js.
-- `--trace-deprecation` does the same thing, but only for deprecation warnings.
-- `--pending-deprecation` will show more types of deprecation warnings. In particular, it will show the `Buffer()` deprecation warning, even on Node.js 8.
-
-You can set these flags using an environment variable:
-
-```console
-$ export NODE_OPTIONS='--trace-warnings --pending-deprecation'
-$ cat example.js
-'use strict';
-const foo = new Buffer('foo');
-$ node example.js
-(node:7147) [DEP0005] DeprecationWarning: The Buffer() and new Buffer() constructors are not recommended for use due to security and usability concerns. Please use the new Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() construction methods instead.
-    at showFlaggedDeprecation (buffer.js:127:13)
-    at new Buffer (buffer.js:148:3)
-    at Object.<anonymous> (/path/to/example.js:2:13)
-    [... more stack trace lines ...]
-```
-
-### Finding problematic bits of code using linters
-
-Eslint rules [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor)
-or
-[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md)
-also find calls to deprecated `Buffer()` API. Those rules are included in some pre-sets.
-
-There is a drawback, though, that it doesn't always
-[work correctly](https://github.com/chalker/safer-buffer#why-not-safe-buffer) when `Buffer` is
-overriden e.g. with a polyfill, so recommended is a combination of this and some other method
-described above.
-
-<a id="variant-1"></a>
-## Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x.
-
-This is the recommended solution nowadays that would imply only minimal overhead.
-
-The Node.js 5.x release line has been unsupported since July 2016, and the Node.js 4.x release line reaches its End of Life in April 2018 (→ [Schedule](https://github.com/nodejs/Release#release-schedule)). This means that these versions of Node.js will *not* receive any updates, even in case of security issues, so using these release lines should be avoided, if at all possible.
-
-What you would do in this case is to convert all `new Buffer()` or `Buffer()` calls to use `Buffer.alloc()` or `Buffer.from()`, in the following way:
-
-- For `new Buffer(number)`, replace it with `Buffer.alloc(number)`.
-- For `new Buffer(string)` (or `new Buffer(string, encoding)`), replace it with `Buffer.from(string)` (or `Buffer.from(string, encoding)`).
-- For all other combinations of arguments (these are much rarer), also replace `new Buffer(...arguments)` with `Buffer.from(...arguments)`.
-
-Note that `Buffer.alloc()` is also _faster_ on the current Node.js versions than
-`new Buffer(size).fill(0)`, which is what you would otherwise need to ensure zero-filling.
-
-Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor)
-or
-[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md)
-is recommended to avoid accidential unsafe Buffer API usage.
-
-There is also a [JSCodeshift codemod](https://github.com/joyeecheung/node-dep-codemod#dep005)
-for automatically migrating Buffer constructors to `Buffer.alloc()` or `Buffer.from()`.
-Note that it currently only works with cases where the arguments are literals or where the
-constructor is invoked with two arguments.
-
-_If you currently support those older Node.js versions and dropping them would be a semver-major change
-for you, or if you support older branches of your packages, consider using [Variant 2](#variant-2)
-or [Variant 3](#variant-3) on older branches, so people using those older branches will also receive
-the fix. That way, you will eradicate potential issues caused by unguarded Buffer API usage and
-your users will not observe a runtime deprecation warning when running your code on Node.js 10._
-
-<a id="variant-2"></a>
-## Variant 2: Use a polyfill
-
-Utilize [safer-buffer](https://www.npmjs.com/package/safer-buffer) as a polyfill to support older
-Node.js versions.
-
-You would take exacly the same steps as in [Variant 1](#variant-1), but with a polyfill
-`const Buffer = require('safer-buffer').Buffer` in all files where you use the new `Buffer` api.
-
-Make sure that you do not use old `new Buffer` API — in any files where the line above is added,
-using old `new Buffer()` API will _throw_. It will be easy to notice that in CI, though.
-
-Alternatively, you could use [buffer-from](https://www.npmjs.com/package/buffer-from) and/or
-[buffer-alloc](https://www.npmjs.com/package/buffer-alloc) [ponyfills](https://ponyfill.com/) —
-those are great, the only downsides being 4 deps in the tree and slightly more code changes to
-migrate off them (as you would be using e.g. `Buffer.from` under a different name). If you need only
-`Buffer.from` polyfilled — `buffer-from` alone which comes with no extra dependencies.
-
-_Alternatively, you could use [safe-buffer](https://www.npmjs.com/package/safe-buffer) — it also
-provides a polyfill, but takes a different approach which has
-[it's drawbacks](https://github.com/chalker/safer-buffer#why-not-safe-buffer). It will allow you
-to also use the older `new Buffer()` API in your code, though — but that's arguably a benefit, as
-it is problematic, can cause issues in your code, and will start emitting runtime deprecation
-warnings starting with Node.js 10._
-
-Note that in either case, it is important that you also remove all calls to the old Buffer
-API manually — just throwing in `safe-buffer` doesn't fix the problem by itself, it just provides
-a polyfill for the new API. I have seen people doing that mistake.
-
-Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor)
-or
-[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md)
-is recommended.
-
-_Don't forget to drop the polyfill usage once you drop support for Node.js < 4.5.0._
-
-<a id="variant-3"></a>
-## Variant 3 — manual detection, with safeguards
-
-This is useful if you create Buffer instances in only a few places (e.g. one), or you have your own
-wrapper around them.
-
-### Buffer(0)
-
-This special case for creating empty buffers can be safely replaced with `Buffer.concat([])`, which
-returns the same result all the way down to Node.js 0.8.x.
-
-### Buffer(notNumber)
-
-Before:
-
-```js
-var buf = new Buffer(notNumber, encoding);
-```
-
-After:
-
-```js
-var buf;
-if (Buffer.from && Buffer.from !== Uint8Array.from) {
-  buf = Buffer.from(notNumber, encoding);
-} else {
-  if (typeof notNumber === 'number')
-    throw new Error('The "size" argument must be of type number.');
-  buf = new Buffer(notNumber, encoding);
-}
-```
-
-`encoding` is optional.
-
-Note that the `typeof notNumber` before `new Buffer` is required (for cases when `notNumber` argument is not
-hard-coded) and _is not caused by the deprecation of Buffer constructor_ — it's exactly _why_ the
-Buffer constructor is deprecated. Ecosystem packages lacking this type-check caused numereous
-security issues — situations when unsanitized user input could end up in the `Buffer(arg)` create
-problems ranging from DoS to leaking sensitive information to the attacker from the process memory.
-
-When `notNumber` argument is hardcoded (e.g. literal `"abc"` or `[0,1,2]`), the `typeof` check can
-be omitted.
-
-Also note that using TypeScript does not fix this problem for you — when libs written in
-`TypeScript` are used from JS, or when user input ends up there — it behaves exactly as pure JS, as
-all type checks are translation-time only and are not present in the actual JS code which TS
-compiles to.
-
-### Buffer(number)
-
-For Node.js 0.10.x (and below) support:
-
-```js
-var buf;
-if (Buffer.alloc) {
-  buf = Buffer.alloc(number);
-} else {
-  buf = new Buffer(number);
-  buf.fill(0);
-}
-```
-
-Otherwise (Node.js ≥ 0.12.x):
-
-```js
-const buf = Buffer.alloc ? Buffer.alloc(number) : new Buffer(number).fill(0);
-```
-
-## Regarding Buffer.allocUnsafe
-
-Be extra cautious when using `Buffer.allocUnsafe`:
- * Don't use it if you don't have a good reason to
-   * e.g. you probably won't ever see a performance difference for small buffers, in fact, those
-     might be even faster with `Buffer.alloc()`,
-   * if your code is not in the hot code path — you also probably won't notice a difference,
-   * keep in mind that zero-filling minimizes the potential risks.
- * If you use it, make sure that you never return the buffer in a partially-filled state,
-   * if you are writing to it sequentially — always truncate it to the actuall written length
-
-Errors in handling buffers allocated with `Buffer.allocUnsafe` could result in various issues,
-ranged from undefined behaviour of your code to sensitive data (user input, passwords, certs)
-leaking to the remote attacker.
-
-_Note that the same applies to `new Buffer` usage without zero-filling, depending on the Node.js
-version (and lacking type checks also adds DoS to the list of potential problems)._
-
-<a id="faq"></a>
-## FAQ
-
-<a id="design-flaws"></a>
-### What is wrong with the `Buffer` constructor?
-
-The `Buffer` constructor could be used to create a buffer in many different ways:
-
-- `new Buffer(42)` creates a `Buffer` of 42 bytes. Before Node.js 8, this buffer contained
-  *arbitrary memory* for performance reasons, which could include anything ranging from
-  program source code to passwords and encryption keys.
-- `new Buffer('abc')` creates a `Buffer` that contains the UTF-8-encoded version of
-  the string `'abc'`. A second argument could specify another encoding: For example,
-  `new Buffer(string, 'base64')` could be used to convert a Base64 string into the original
-  sequence of bytes that it represents.
-- There are several other combinations of arguments.
-
-This meant that, in code like `var buffer = new Buffer(foo);`, *it is not possible to tell
-what exactly the contents of the generated buffer are* without knowing the type of `foo`.
-
-Sometimes, the value of `foo` comes from an external source. For example, this function
-could be exposed as a service on a web server, converting a UTF-8 string into its Base64 form:
-
-```
-function stringToBase64(req, res) {
-  // The request body should have the format of `{ string: 'foobar' }`
-  const rawBytes = new Buffer(req.body.string)
-  const encoded = rawBytes.toString('base64')
-  res.end({ encoded: encoded })
-}
-```
-
-Note that this code does *not* validate the type of `req.body.string`:
-
-- `req.body.string` is expected to be a string. If this is the case, all goes well.
-- `req.body.string` is controlled by the client that sends the request.
-- If `req.body.string` is the *number* `50`, the `rawBytes` would be 50 bytes:
-  - Before Node.js 8, the content would be uninitialized
-  - After Node.js 8, the content would be `50` bytes with the value `0`
-
-Because of the missing type check, an attacker could intentionally send a number
-as part of the request. Using this, they can either:
-
-- Read uninitialized memory. This **will** leak passwords, encryption keys and other
-  kinds of sensitive information. (Information leak)
-- Force the program to allocate a large amount of memory. For example, when specifying
-  `500000000` as the input value, each request will allocate 500MB of memory.
-  This can be used to either exhaust the memory available of a program completely
-  and make it crash, or slow it down significantly. (Denial of Service)
-
-Both of these scenarios are considered serious security issues in a real-world
-web server context.
-
-when using `Buffer.from(req.body.string)` instead, passing a number will always
-throw an exception instead, giving a controlled behaviour that can always be
-handled by the program.
-
-<a id="ecosystem-usage"></a>
-### The `Buffer()` constructor has been deprecated for a while. Is this really an issue?
-
-Surveys of code in the `npm` ecosystem have shown that the `Buffer()` constructor is still
-widely used. This includes new code, and overall usage of such code has actually been
-*increasing*.
diff --git a/device_home/node_modules/safer-buffer/Readme.md b/device_home/node_modules/safer-buffer/Readme.md
deleted file mode 100644 (file)
index 14b0822..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-# safer-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![javascript style guide][standard-image]][standard-url] [![Security Responsible Disclosure][secuirty-image]][secuirty-url]
-
-[travis-image]: https://travis-ci.org/ChALkeR/safer-buffer.svg?branch=master
-[travis-url]: https://travis-ci.org/ChALkeR/safer-buffer
-[npm-image]: https://img.shields.io/npm/v/safer-buffer.svg
-[npm-url]: https://npmjs.org/package/safer-buffer
-[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg
-[standard-url]: https://standardjs.com
-[secuirty-image]: https://img.shields.io/badge/Security-Responsible%20Disclosure-green.svg
-[secuirty-url]: https://github.com/nodejs/security-wg/blob/master/processes/responsible_disclosure_template.md
-
-Modern Buffer API polyfill without footguns, working on Node.js from 0.8 to current.
-
-## How to use?
-
-First, port all `Buffer()` and `new Buffer()` calls to `Buffer.alloc()` and `Buffer.from()` API.
-
-Then, to achieve compatibility with outdated Node.js versions (`<4.5.0` and 5.x `<5.9.0`), use
-`const Buffer = require('safer-buffer').Buffer` in all files where you make calls to the new
-Buffer API. _Use `var` instead of `const` if you need that for your Node.js version range support._
-
-Also, see the
-[porting Buffer](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) guide.
-
-## Do I need it?
-
-Hopefully, not — dropping support for outdated Node.js versions should be fine nowdays, and that
-is the recommended path forward. You _do_ need to port to the `Buffer.alloc()` and `Buffer.from()`
-though.
-
-See the [porting guide](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md)
-for a better description.
-
-## Why not [safe-buffer](https://npmjs.com/safe-buffer)?
-
-_In short: while `safe-buffer` serves as a polyfill for the new API, it allows old API usage and
-itself contains footguns._
-
-`safe-buffer` could be used safely to get the new API while still keeping support for older
-Node.js versions (like this module), but while analyzing ecosystem usage of the old Buffer API
-I found out that `safe-buffer` is itself causing problems in some cases.
-
-For example, consider the following snippet:
-
-```console
-$ cat example.unsafe.js
-console.log(Buffer(20))
-$ ./node-v6.13.0-linux-x64/bin/node example.unsafe.js
-<Buffer 0a 00 00 00 00 00 00 00 28 13 de 02 00 00 00 00 05 00 00 00>
-$ standard example.unsafe.js
-standard: Use JavaScript Standard Style (https://standardjs.com)
-  /home/chalker/repo/safer-buffer/example.unsafe.js:2:13: 'Buffer()' was deprecated since v6. Use 'Buffer.alloc()' or 'Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<4.5.0') instead.
-```
-
-This is allocates and writes to console an uninitialized chunk of memory.
-[standard](https://www.npmjs.com/package/standard) linter (among others) catch that and warn people
-to avoid using unsafe API.
-
-Let's now throw in `safe-buffer`!
-
-```console
-$ cat example.safe-buffer.js
-const Buffer = require('safe-buffer').Buffer
-console.log(Buffer(20))
-$ standard example.safe-buffer.js
-$ ./node-v6.13.0-linux-x64/bin/node example.safe-buffer.js
-<Buffer 08 00 00 00 00 00 00 00 28 58 01 82 fe 7f 00 00 00 00 00 00>
-```
-
-See the problem? Adding in `safe-buffer` _magically removes the lint warning_, but the behavior
-remains identiсal to what we had before, and when launched on Node.js 6.x LTS — this dumps out
-chunks of uninitialized memory.
-_And this code will still emit runtime warnings on Node.js 10.x and above._
-
-That was done by design. I first considered changing `safe-buffer`, prohibiting old API usage or
-emitting warnings on it, but that significantly diverges from `safe-buffer` design. After some
-discussion, it was decided to move my approach into a separate package, and _this is that separate
-package_.
-
-This footgun is not imaginary — I observed top-downloaded packages doing that kind of thing,
-«fixing» the lint warning by blindly including `safe-buffer` without any actual changes.
-
-Also in some cases, even if the API _was_ migrated to use of safe Buffer API — a random pull request
-can bring unsafe Buffer API usage back to the codebase by adding new calls — and that could go
-unnoticed even if you have a linter prohibiting that (becase of the reason stated above), and even
-pass CI. _I also observed that being done in popular packages._
-
-Some examples:
- * [webdriverio](https://github.com/webdriverio/webdriverio/commit/05cbd3167c12e4930f09ef7cf93b127ba4effae4#diff-124380949022817b90b622871837d56cR31)
-   (a module with 548 759 downloads/month),
- * [websocket-stream](https://github.com/maxogden/websocket-stream/commit/c9312bd24d08271687d76da0fe3c83493871cf61)
-   (218 288 d/m, fix in [maxogden/websocket-stream#142](https://github.com/maxogden/websocket-stream/pull/142)),
- * [node-serialport](https://github.com/node-serialport/node-serialport/commit/e8d9d2b16c664224920ce1c895199b1ce2def48c)
-   (113 138 d/m, fix in [node-serialport/node-serialport#1510](https://github.com/node-serialport/node-serialport/pull/1510)),
- * [karma](https://github.com/karma-runner/karma/commit/3d94b8cf18c695104ca195334dc75ff054c74eec)
-   (3 973 193 d/m, fix in [karma-runner/karma#2947](https://github.com/karma-runner/karma/pull/2947)),
- * [spdy-transport](https://github.com/spdy-http2/spdy-transport/commit/5375ac33f4a62a4f65bcfc2827447d42a5dbe8b1)
-   (5 970 727 d/m, fix in [spdy-http2/spdy-transport#53](https://github.com/spdy-http2/spdy-transport/pull/53)).
- * And there are a lot more over the ecosystem.
-
-I filed a PR at
-[mysticatea/eslint-plugin-node#110](https://github.com/mysticatea/eslint-plugin-node/pull/110) to
-partially fix that (for cases when that lint rule is used), but it is a semver-major change for
-linter rules and presets, so it would take significant time for that to reach actual setups.
-_It also hasn't been released yet (2018-03-20)._
-
-Also, `safer-buffer` discourages the usage of `.allocUnsafe()`, which is often done by a mistake.
-It still supports it with an explicit concern barier, by placing it under
-`require('safer-buffer/dangereous')`.
-
-## But isn't throwing bad?
-
-Not really. It's an error that could be noticed and fixed early, instead of causing havoc later like
-unguarded `new Buffer()` calls that end up receiving user input can do.
-
-This package affects only the files where `var Buffer = require('safer-buffer').Buffer` was done, so
-it is really simple to keep track of things and make sure that you don't mix old API usage with that.
-Also, CI should hint anything that you might have missed.
-
-New commits, if tested, won't land new usage of unsafe Buffer API this way.
-_Node.js 10.x also deals with that by printing a runtime depecation warning._
-
-### Would it affect third-party modules?
-
-No, unless you explicitly do an awful thing like monkey-patching or overriding the built-in `Buffer`.
-Don't do that.
-
-### But I don't want throwing…
-
-That is also fine!
-
-Also, it could be better in some cases when you don't comprehensive enough test coverage.
-
-In that case — just don't override `Buffer` and use
-`var SaferBuffer = require('safer-buffer').Buffer` instead.
-
-That way, everything using `Buffer` natively would still work, but there would be two drawbacks:
-
-* `Buffer.from`/`Buffer.alloc` won't be polyfilled — use `SaferBuffer.from` and
-  `SaferBuffer.alloc` instead.
-* You are still open to accidentally using the insecure deprecated API — use a linter to catch that.
-
-Note that using a linter to catch accidential `Buffer` constructor usage in this case is strongly
-recommended. `Buffer` is not overriden in this usecase, so linters won't get confused.
-
-## «Without footguns»?
-
-Well, it is still possible to do _some_ things with `Buffer` API, e.g. accessing `.buffer` property
-on older versions and duping things from there. You shouldn't do that in your code, probabably.
-
-The intention is to remove the most significant footguns that affect lots of packages in the
-ecosystem, and to do it in the proper way.
-
-Also, this package doesn't protect against security issues affecting some Node.js versions, so for
-usage in your own production code, it is still recommended to update to a Node.js version
-[supported by upstream](https://github.com/nodejs/release#release-schedule).
diff --git a/device_home/node_modules/send/HISTORY.md b/device_home/node_modules/send/HISTORY.md
deleted file mode 100644 (file)
index d14ac06..0000000
+++ /dev/null
@@ -1,496 +0,0 @@
-0.17.1 / 2019-05-10
-===================
-
-  * Set stricter CSP header in redirect & error responses
-  * deps: range-parser@~1.2.1
-
-0.17.0 / 2019-05-03
-===================
-
-  * deps: http-errors@~1.7.2
-    - Set constructor name when possible
-    - Use `toidentifier` module to make class names
-    - deps: depd@~1.1.2
-    - deps: setprototypeof@1.1.1
-    - deps: statuses@'>= 1.5.0 < 2'
-  * deps: mime@1.6.0
-    - Add extensions for JPEG-2000 images
-    - Add new `font/*` types from IANA
-    - Add WASM mapping
-    - Update `.bdoc` to `application/bdoc`
-    - Update `.bmp` to `image/bmp`
-    - Update `.m4a` to `audio/mp4`
-    - Update `.rtf` to `application/rtf`
-    - Update `.wav` to `audio/wav`
-    - Update `.xml` to `application/xml`
-    - Update generic extensions to `application/octet-stream`:
-      `.deb`, `.dll`, `.dmg`, `.exe`, `.iso`, `.msi`
-    - Use mime-score module to resolve extension conflicts
-  * deps: ms@2.1.1
-    - Add `week`/`w` support
-    - Fix negative number handling
-  * deps: statuses@~1.5.0
-  * perf: remove redundant `path.normalize` call
-
-0.16.2 / 2018-02-07
-===================
-
-  * Fix incorrect end tag in default error & redirects
-  * deps: depd@~1.1.2
-    - perf: remove argument reassignment
-  * deps: encodeurl@~1.0.2
-    - Fix encoding `%` as last character
-  * deps: statuses@~1.4.0
-
-0.16.1 / 2017-09-29
-===================
-
-  * Fix regression in edge-case behavior for empty `path`
-
-0.16.0 / 2017-09-27
-===================
-
-  * Add `immutable` option
-  * Fix missing `</html>` in default error & redirects
-  * Use instance methods on steam to check for listeners
-  * deps: mime@1.4.1
-    - Add 70 new types for file extensions
-    - Set charset as "UTF-8" for .js and .json
-  * perf: improve path validation speed
-
-0.15.6 / 2017-09-22
-===================
-
-  * deps: debug@2.6.9
-  * perf: improve `If-Match` token parsing
-
-0.15.5 / 2017-09-20
-===================
-
-  * deps: etag@~1.8.1
-    - perf: replace regular expression with substring
-  * deps: fresh@0.5.2
-    - Fix handling of modified headers with invalid dates
-    - perf: improve ETag match loop
-    - perf: improve `If-None-Match` token parsing
-
-0.15.4 / 2017-08-05
-===================
-
-  * deps: debug@2.6.8
-  * deps: depd@~1.1.1
-    - Remove unnecessary `Buffer` loading
-  * deps: http-errors@~1.6.2
-    - deps: depd@1.1.1
-
-0.15.3 / 2017-05-16
-===================
-
-  * deps: debug@2.6.7
-    - deps: ms@2.0.0
-  * deps: ms@2.0.0
-
-0.15.2 / 2017-04-26
-===================
-
-  * deps: debug@2.6.4
-    - Fix `DEBUG_MAX_ARRAY_LENGTH`
-    - deps: ms@0.7.3
-  * deps: ms@1.0.0
-
-0.15.1 / 2017-03-04
-===================
-
-  * Fix issue when `Date.parse` does not return `NaN` on invalid date
-  * Fix strict violation in broken environments
-
-0.15.0 / 2017-02-25
-===================
-
-  * Support `If-Match` and `If-Unmodified-Since` headers
-  * Add `res` and `path` arguments to `directory` event
-  * Remove usage of `res._headers` private field
-    - Improves compatibility with Node.js 8 nightly
-  * Send complete HTML document in redirect & error responses
-  * Set default CSP header in redirect & error responses
-  * Use `res.getHeaderNames()` when available
-  * Use `res.headersSent` when available
-  * deps: debug@2.6.1
-    - Allow colors in workers
-    - Deprecated `DEBUG_FD` environment variable set to `3` or higher
-    - Fix error when running under React Native
-    - Use same color for same namespace
-    - deps: ms@0.7.2
-  * deps: etag@~1.8.0
-  * deps: fresh@0.5.0
-    - Fix false detection of `no-cache` request directive
-    - Fix incorrect result when `If-None-Match` has both `*` and ETags
-    - Fix weak `ETag` matching to match spec
-    - perf: delay reading header values until needed
-    - perf: enable strict mode
-    - perf: hoist regular expressions
-    - perf: remove duplicate conditional
-    - perf: remove unnecessary boolean coercions
-    - perf: skip checking modified time if ETag check failed
-    - perf: skip parsing `If-None-Match` when no `ETag` header
-    - perf: use `Date.parse` instead of `new Date`
-  * deps: http-errors@~1.6.1
-    - Make `message` property enumerable for `HttpError`s
-    - deps: setprototypeof@1.0.3
-
-0.14.2 / 2017-01-23
-===================
-
-  * deps: http-errors@~1.5.1
-    - deps: inherits@2.0.3
-    - deps: setprototypeof@1.0.2
-    - deps: statuses@'>= 1.3.1 < 2'
-  * deps: ms@0.7.2
-  * deps: statuses@~1.3.1
-
-0.14.1 / 2016-06-09
-===================
-
-  * Fix redirect error when `path` contains raw non-URL characters
-  * Fix redirect when `path` starts with multiple forward slashes
-
-0.14.0 / 2016-06-06
-===================
-
-  * Add `acceptRanges` option
-  * Add `cacheControl` option
-  * Attempt to combine multiple ranges into single range
-  * Correctly inherit from `Stream` class
-  * Fix `Content-Range` header in 416 responses when using `start`/`end` options
-  * Fix `Content-Range` header missing from default 416 responses
-  * Ignore non-byte `Range` headers
-  * deps: http-errors@~1.5.0
-    - Add `HttpError` export, for `err instanceof createError.HttpError`
-    - Support new code `421 Misdirected Request`
-    - Use `setprototypeof` module to replace `__proto__` setting
-    - deps: inherits@2.0.1
-    - deps: statuses@'>= 1.3.0 < 2'
-    - perf: enable strict mode
-  * deps: range-parser@~1.2.0
-    - Fix incorrectly returning -1 when there is at least one valid range
-    - perf: remove internal function
-  * deps: statuses@~1.3.0
-    - Add `421 Misdirected Request`
-    - perf: enable strict mode
-  * perf: remove argument reassignment
-
-0.13.2 / 2016-03-05
-===================
-
-  * Fix invalid `Content-Type` header when `send.mime.default_type` unset
-
-0.13.1 / 2016-01-16
-===================
-
-  * deps: depd@~1.1.0
-    - Support web browser loading
-    - perf: enable strict mode
-  * deps: destroy@~1.0.4
-    - perf: enable strict mode
-  * deps: escape-html@~1.0.3
-    - perf: enable strict mode
-    - perf: optimize string replacement
-    - perf: use faster string coercion
-  * deps: range-parser@~1.0.3
-    - perf: enable strict mode
-
-0.13.0 / 2015-06-16
-===================
-
-  * Allow Node.js HTTP server to set `Date` response header
-  * Fix incorrectly removing `Content-Location` on 304 response
-  * Improve the default redirect response headers
-  * Send appropriate headers on default error response
-  * Use `http-errors` for standard emitted errors
-  * Use `statuses` instead of `http` module for status messages
-  * deps: escape-html@1.0.2
-  * deps: etag@~1.7.0
-    - Improve stat performance by removing hashing
-  * deps: fresh@0.3.0
-    - Add weak `ETag` matching support
-  * deps: on-finished@~2.3.0
-    - Add defined behavior for HTTP `CONNECT` requests
-    - Add defined behavior for HTTP `Upgrade` requests
-    - deps: ee-first@1.1.1
-  * perf: enable strict mode
-  * perf: remove unnecessary array allocations
-
-0.12.3 / 2015-05-13
-===================
-
-  * deps: debug@~2.2.0
-    - deps: ms@0.7.1
-  * deps: depd@~1.0.1
-  * deps: etag@~1.6.0
-   - Improve support for JXcore
-   - Support "fake" stats objects in environments without `fs`
-  * deps: ms@0.7.1
-    - Prevent extraordinarily long inputs
-  * deps: on-finished@~2.2.1
-
-0.12.2 / 2015-03-13
-===================
-
-  * Throw errors early for invalid `extensions` or `index` options
-  * deps: debug@~2.1.3
-    - Fix high intensity foreground color for bold
-    - deps: ms@0.7.0
-
-0.12.1 / 2015-02-17
-===================
-
-  * Fix regression sending zero-length files
-
-0.12.0 / 2015-02-16
-===================
-
-  * Always read the stat size from the file
-  * Fix mutating passed-in `options`
-  * deps: mime@1.3.4
-
-0.11.1 / 2015-01-20
-===================
-
-  * Fix `root` path disclosure
-
-0.11.0 / 2015-01-05
-===================
-
-  * deps: debug@~2.1.1
-  * deps: etag@~1.5.1
-    - deps: crc@3.2.1
-  * deps: ms@0.7.0
-    - Add `milliseconds`
-    - Add `msecs`
-    - Add `secs`
-    - Add `mins`
-    - Add `hrs`
-    - Add `yrs`
-  * deps: on-finished@~2.2.0
-
-0.10.1 / 2014-10-22
-===================
-
-  * deps: on-finished@~2.1.1
-    - Fix handling of pipelined requests
-
-0.10.0 / 2014-10-15
-===================
-
-  * deps: debug@~2.1.0
-    - Implement `DEBUG_FD` env variable support
-  * deps: depd@~1.0.0
-  * deps: etag@~1.5.0
-    - Improve string performance
-    - Slightly improve speed for weak ETags over 1KB
-
-0.9.3 / 2014-09-24
-==================
-
-  * deps: etag@~1.4.0
-    - Support "fake" stats objects
-
-0.9.2 / 2014-09-15
-==================
-
-  * deps: depd@0.4.5
-  * deps: etag@~1.3.1
-  * deps: range-parser@~1.0.2
-
-0.9.1 / 2014-09-07
-==================
-
-  * deps: fresh@0.2.4
-
-0.9.0 / 2014-09-07
-==================
-
-  * Add `lastModified` option
-  * Use `etag` to generate `ETag` header
-  * deps: debug@~2.0.0
-
-0.8.5 / 2014-09-04
-==================
-
-  * Fix malicious path detection for empty string path
-
-0.8.4 / 2014-09-04
-==================
-
-  * Fix a path traversal issue when using `root`
-
-0.8.3 / 2014-08-16
-==================
-
-  * deps: destroy@1.0.3
-    - renamed from dethroy
-  * deps: on-finished@2.1.0
-
-0.8.2 / 2014-08-14
-==================
-
-  * Work around `fd` leak in Node.js 0.10 for `fs.ReadStream`
-  * deps: dethroy@1.0.2
-
-0.8.1 / 2014-08-05
-==================
-
-  * Fix `extensions` behavior when file already has extension
-
-0.8.0 / 2014-08-05
-==================
-
-  * Add `extensions` option
-
-0.7.4 / 2014-08-04
-==================
-
-  * Fix serving index files without root dir
-
-0.7.3 / 2014-07-29
-==================
-
-  * Fix incorrect 403 on Windows and Node.js 0.11
-
-0.7.2 / 2014-07-27
-==================
-
-  * deps: depd@0.4.4
-    - Work-around v8 generating empty stack traces
-
-0.7.1 / 2014-07-26
-==================
-
- * deps: depd@0.4.3
-   - Fix exception when global `Error.stackTraceLimit` is too low
-
-0.7.0 / 2014-07-20
-==================
-
- * Deprecate `hidden` option; use `dotfiles` option
- * Add `dotfiles` option
- * deps: debug@1.0.4
- * deps: depd@0.4.2
-   - Add `TRACE_DEPRECATION` environment variable
-   - Remove non-standard grey color from color output
-   - Support `--no-deprecation` argument
-   - Support `--trace-deprecation` argument
-
-0.6.0 / 2014-07-11
-==================
-
- * Deprecate `from` option; use `root` option
- * Deprecate `send.etag()` -- use `etag` in `options`
- * Deprecate `send.hidden()` -- use `hidden` in `options`
- * Deprecate `send.index()` -- use `index` in `options`
- * Deprecate `send.maxage()` -- use `maxAge` in `options`
- * Deprecate `send.root()` -- use `root` in `options`
- * Cap `maxAge` value to 1 year
- * deps: debug@1.0.3
-   - Add support for multiple wildcards in namespaces
-
-0.5.0 / 2014-06-28
-==================
-
- * Accept string for `maxAge` (converted by `ms`)
- * Add `headers` event
- * Include link in default redirect response
- * Use `EventEmitter.listenerCount` to count listeners
-
-0.4.3 / 2014-06-11
-==================
-
- * Do not throw un-catchable error on file open race condition
- * Use `escape-html` for HTML escaping
- * deps: debug@1.0.2
-   - fix some debugging output colors on node.js 0.8
- * deps: finished@1.2.2
- * deps: fresh@0.2.2
-
-0.4.2 / 2014-06-09
-==================
-
- * fix "event emitter leak" warnings
- * deps: debug@1.0.1
- * deps: finished@1.2.1
-
-0.4.1 / 2014-06-02
-==================
-
- * Send `max-age` in `Cache-Control` in correct format
-
-0.4.0 / 2014-05-27
-==================
-
- * Calculate ETag with md5 for reduced collisions
- * Fix wrong behavior when index file matches directory
- * Ignore stream errors after request ends
-   - Goodbye `EBADF, read`
- * Skip directories in index file search
- * deps: debug@0.8.1
-
-0.3.0 / 2014-04-24
-==================
-
- * Fix sending files with dots without root set
- * Coerce option types
- * Accept API options in options object
- * Set etags to "weak"
- * Include file path in etag
- * Make "Can't set headers after they are sent." catchable
- * Send full entity-body for multi range requests
- * Default directory access to 403 when index disabled
- * Support multiple index paths
- * Support "If-Range" header
- * Control whether to generate etags
- * deps: mime@1.2.11
-
-0.2.0 / 2014-01-29
-==================
-
- * update range-parser and fresh
-
-0.1.4 / 2013-08-11 
-==================
-
- * update fresh
-
-0.1.3 / 2013-07-08 
-==================
-
- * Revert "Fix fd leak"
-
-0.1.2 / 2013-07-03 
-==================
-
- * Fix fd leak
-
-0.1.0 / 2012-08-25 
-==================
-
-  * add options parameter to send() that is passed to fs.createReadStream() [kanongil]
-
-0.0.4 / 2012-08-16 
-==================
-
-  * allow custom "Accept-Ranges" definition
-
-0.0.3 / 2012-07-16 
-==================
-
-  * fix normalization of the root directory. Closes #3
-
-0.0.2 / 2012-07-09 
-==================
-
-  * add passing of req explicitly for now (YUCK)
-
-0.0.1 / 2010-01-03
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/send/README.md b/device_home/node_modules/send/README.md
deleted file mode 100644 (file)
index 179e8c3..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-# send
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Linux Build][travis-image]][travis-url]
-[![Windows Build][appveyor-image]][appveyor-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Send is a library for streaming files from the file system as a http response
-supporting partial responses (Ranges), conditional-GET negotiation (If-Match,
-If-Unmodified-Since, If-None-Match, If-Modified-Since), high test coverage,
-and granular events which may be leveraged to take appropriate actions in your
-application or framework.
-
-Looking to serve up entire folders mapped to URLs? Try [serve-static](https://www.npmjs.org/package/serve-static).
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```bash
-$ npm install send
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var send = require('send')
-```
-
-### send(req, path, [options])
-
-Create a new `SendStream` for the given path to send to a `res`. The `req` is
-the Node.js HTTP request and the `path` is a urlencoded path to send (urlencoded,
-not the actual file-system path).
-
-#### Options
-
-##### acceptRanges
-
-Enable or disable accepting ranged requests, defaults to true.
-Disabling this will not send `Accept-Ranges` and ignore the contents
-of the `Range` request header.
-
-##### cacheControl
-
-Enable or disable setting `Cache-Control` response header, defaults to
-true. Disabling this will ignore the `immutable` and `maxAge` options.
-
-##### dotfiles
-
-Set how "dotfiles" are treated when encountered. A dotfile is a file
-or directory that begins with a dot ("."). Note this check is done on
-the path itself without checking if the path actually exists on the
-disk. If `root` is specified, only the dotfiles above the root are
-checked (i.e. the root itself can be within a dotfile when when set
-to "deny").
-
-  - `'allow'` No special treatment for dotfiles.
-  - `'deny'` Send a 403 for any request for a dotfile.
-  - `'ignore'` Pretend like the dotfile does not exist and 404.
-
-The default value is _similar_ to `'ignore'`, with the exception that
-this default will not ignore the files within a directory that begins
-with a dot, for backward-compatibility.
-
-##### end
-
-Byte offset at which the stream ends, defaults to the length of the file
-minus 1. The end is inclusive in the stream, meaning `end: 3` will include
-the 4th byte in the stream.
-
-##### etag
-
-Enable or disable etag generation, defaults to true.
-
-##### extensions
-
-If a given file doesn't exist, try appending one of the given extensions,
-in the given order. By default, this is disabled (set to `false`). An
-example value that will serve extension-less HTML files: `['html', 'htm']`.
-This is skipped if the requested file already has an extension.
-
-##### immutable
-
-Enable or diable the `immutable` directive in the `Cache-Control` response
-header, defaults to `false`. If set to `true`, the `maxAge` option should
-also be specified to enable caching. The `immutable` directive will prevent
-supported clients from making conditional requests during the life of the
-`maxAge` option to check if the file has changed.
-
-##### index
-
-By default send supports "index.html" files, to disable this
-set `false` or to supply a new index pass a string or an array
-in preferred order.
-
-##### lastModified
-
-Enable or disable `Last-Modified` header, defaults to true. Uses the file
-system's last modified value.
-
-##### maxAge
-
-Provide a max-age in milliseconds for http caching, defaults to 0.
-This can also be a string accepted by the
-[ms](https://www.npmjs.org/package/ms#readme) module.
-
-##### root
-
-Serve files relative to `path`.
-
-##### start
-
-Byte offset at which the stream starts, defaults to 0. The start is inclusive,
-meaning `start: 2` will include the 3rd byte in the stream.
-
-#### Events
-
-The `SendStream` is an event emitter and will emit the following events:
-
-  - `error` an error occurred `(err)`
-  - `directory` a directory was requested `(res, path)`
-  - `file` a file was requested `(path, stat)`
-  - `headers` the headers are about to be set on a file `(res, path, stat)`
-  - `stream` file streaming has started `(stream)`
-  - `end` streaming has completed
-
-#### .pipe
-
-The `pipe` method is used to pipe the response into the Node.js HTTP response
-object, typically `send(req, path, options).pipe(res)`.
-
-### .mime
-
-The `mime` export is the global instance of of the
-[`mime` npm module](https://www.npmjs.com/package/mime).
-
-This is used to configure the MIME types that are associated with file extensions
-as well as other options for how to resolve the MIME type of a file (like the
-default type to use for an unknown file extension).
-
-## Error-handling
-
-By default when no `error` listeners are present an automatic response will be
-made, otherwise you have full control over the response, aka you may show a 5xx
-page etc.
-
-## Caching
-
-It does _not_ perform internal caching, you should use a reverse proxy cache
-such as Varnish for this, or those fancy things called CDNs. If your
-application is small enough that it would benefit from single-node memory
-caching, it's small enough that it does not need caching at all ;).
-
-## Debugging
-
-To enable `debug()` instrumentation output export __DEBUG__:
-
-```
-$ DEBUG=send node app
-```
-
-## Running tests
-
-```
-$ npm install
-$ npm test
-```
-
-## Examples
-
-### Serve a specific file
-
-This simple example will send a specific file to all requests.
-
-```js
-var http = require('http')
-var send = require('send')
-
-var server = http.createServer(function onRequest (req, res) {
-  send(req, '/path/to/index.html')
-    .pipe(res)
-})
-
-server.listen(3000)
-```
-
-### Serve all files from a directory
-
-This simple example will just serve up all the files in a
-given directory as the top-level. For example, a request
-`GET /foo.txt` will send back `/www/public/foo.txt`.
-
-```js
-var http = require('http')
-var parseUrl = require('parseurl')
-var send = require('send')
-
-var server = http.createServer(function onRequest (req, res) {
-  send(req, parseUrl(req).pathname, { root: '/www/public' })
-    .pipe(res)
-})
-
-server.listen(3000)
-```
-
-### Custom file types
-
-```js
-var http = require('http')
-var parseUrl = require('parseurl')
-var send = require('send')
-
-// Default unknown types to text/plain
-send.mime.default_type = 'text/plain'
-
-// Add a custom type
-send.mime.define({
-  'application/x-my-type': ['x-mt', 'x-mtt']
-})
-
-var server = http.createServer(function onRequest (req, res) {
-  send(req, parseUrl(req).pathname, { root: '/www/public' })
-    .pipe(res)
-})
-
-server.listen(3000)
-```
-
-### Custom directory index view
-
-This is a example of serving up a structure of directories with a
-custom function to render a listing of a directory.
-
-```js
-var http = require('http')
-var fs = require('fs')
-var parseUrl = require('parseurl')
-var send = require('send')
-
-// Transfer arbitrary files from within /www/example.com/public/*
-// with a custom handler for directory listing
-var server = http.createServer(function onRequest (req, res) {
-  send(req, parseUrl(req).pathname, { index: false, root: '/www/public' })
-    .once('directory', directory)
-    .pipe(res)
-})
-
-server.listen(3000)
-
-// Custom directory handler
-function directory (res, path) {
-  var stream = this
-
-  // redirect to trailing slash for consistent url
-  if (!stream.hasTrailingSlash()) {
-    return stream.redirect(path)
-  }
-
-  // get directory list
-  fs.readdir(path, function onReaddir (err, list) {
-    if (err) return stream.error(err)
-
-    // render an index for the directory
-    res.setHeader('Content-Type', 'text/plain; charset=UTF-8')
-    res.end(list.join('\n') + '\n')
-  })
-}
-```
-
-### Serving from a root directory with custom error-handling
-
-```js
-var http = require('http')
-var parseUrl = require('parseurl')
-var send = require('send')
-
-var server = http.createServer(function onRequest (req, res) {
-  // your custom error-handling logic:
-  function error (err) {
-    res.statusCode = err.status || 500
-    res.end(err.message)
-  }
-
-  // your custom headers
-  function headers (res, path, stat) {
-    // serve all files for download
-    res.setHeader('Content-Disposition', 'attachment')
-  }
-
-  // your custom directory handling logic:
-  function redirect () {
-    res.statusCode = 301
-    res.setHeader('Location', req.url + '/')
-    res.end('Redirecting to ' + req.url + '/')
-  }
-
-  // transfer arbitrary files from within
-  // /www/example.com/public/*
-  send(req, parseUrl(req).pathname, { root: '/www/public' })
-    .on('error', error)
-    .on('directory', redirect)
-    .on('headers', headers)
-    .pipe(res)
-})
-
-server.listen(3000)
-```
-
-## License
-
-[MIT](LICENSE)
-
-[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/send/master?label=windows
-[appveyor-url]: https://ci.appveyor.com/project/dougwilson/send
-[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/send/master
-[coveralls-url]: https://coveralls.io/r/pillarjs/send?branch=master
-[node-image]: https://badgen.net/npm/node/send
-[node-url]: https://nodejs.org/en/download/
-[npm-downloads-image]: https://badgen.net/npm/dm/send
-[npm-url]: https://npmjs.org/package/send
-[npm-version-image]: https://badgen.net/npm/v/send
-[travis-image]: https://badgen.net/travis/pillarjs/send/master?label=linux
-[travis-url]: https://travis-ci.org/pillarjs/send
diff --git a/device_home/node_modules/serve-static/HISTORY.md b/device_home/node_modules/serve-static/HISTORY.md
deleted file mode 100644 (file)
index 7203e4f..0000000
+++ /dev/null
@@ -1,451 +0,0 @@
-1.14.1 / 2019-05-10
-===================
-
-  * Set stricter CSP header in redirect response
-  * deps: send@0.17.1
-    - deps: range-parser@~1.2.1
-
-1.14.0 / 2019-05-07
-===================
-
-  * deps: parseurl@~1.3.3
-  * deps: send@0.17.0
-    - deps: http-errors@~1.7.2
-    - deps: mime@1.6.0
-    - deps: ms@2.1.1
-    - deps: statuses@~1.5.0
-    - perf: remove redundant `path.normalize` call
-
-1.13.2 / 2018-02-07
-===================
-
-  * Fix incorrect end tag in redirects
-  * deps: encodeurl@~1.0.2
-    - Fix encoding `%` as last character
-  * deps: send@0.16.2
-    - deps: depd@~1.1.2
-    - deps: encodeurl@~1.0.2
-    - deps: statuses@~1.4.0
-
-1.13.1 / 2017-09-29
-===================
-
-  * Fix regression when `root` is incorrectly set to a file
-  * deps: send@0.16.1
-
-1.13.0 / 2017-09-27
-===================
-
-  * deps: send@0.16.0
-    - Add 70 new types for file extensions
-    - Add `immutable` option
-    - Fix missing `</html>` in default error & redirects
-    - Set charset as "UTF-8" for .js and .json
-    - Use instance methods on steam to check for listeners
-    - deps: mime@1.4.1
-    - perf: improve path validation speed
-
-1.12.6 / 2017-09-22
-===================
-
-  * deps: send@0.15.6
-    - deps: debug@2.6.9
-    - perf: improve `If-Match` token parsing
-  * perf: improve slash collapsing
-
-1.12.5 / 2017-09-21
-===================
-
-  * deps: parseurl@~1.3.2
-    - perf: reduce overhead for full URLs
-    - perf: unroll the "fast-path" `RegExp`
-  * deps: send@0.15.5
-    - Fix handling of modified headers with invalid dates
-    - deps: etag@~1.8.1
-    - deps: fresh@0.5.2
-
-1.12.4 / 2017-08-05
-===================
-
-  * deps: send@0.15.4
-    - deps: debug@2.6.8
-    - deps: depd@~1.1.1
-    - deps: http-errors@~1.6.2
-
-1.12.3 / 2017-05-16
-===================
-
-  * deps: send@0.15.3
-    - deps: debug@2.6.7
-
-1.12.2 / 2017-04-26
-===================
-
-  * deps: send@0.15.2
-    - deps: debug@2.6.4
-
-1.12.1 / 2017-03-04
-===================
-
-  * deps: send@0.15.1
-    - Fix issue when `Date.parse` does not return `NaN` on invalid date
-    - Fix strict violation in broken environments
-
-1.12.0 / 2017-02-25
-===================
-
-  * Send complete HTML document in redirect response
-  * Set default CSP header in redirect response
-  * deps: send@0.15.0
-    - Fix false detection of `no-cache` request directive
-    - Fix incorrect result when `If-None-Match` has both `*` and ETags
-    - Fix weak `ETag` matching to match spec
-    - Remove usage of `res._headers` private field
-    - Support `If-Match` and `If-Unmodified-Since` headers
-    - Use `res.getHeaderNames()` when available
-    - Use `res.headersSent` when available
-    - deps: debug@2.6.1
-    - deps: etag@~1.8.0
-    - deps: fresh@0.5.0
-    - deps: http-errors@~1.6.1
-
-1.11.2 / 2017-01-23
-===================
-
-  * deps: send@0.14.2
-    - deps: http-errors@~1.5.1
-    - deps: ms@0.7.2
-    - deps: statuses@~1.3.1
-
-1.11.1 / 2016-06-10
-===================
-
-  * Fix redirect error when `req.url` contains raw non-URL characters
-  * deps: send@0.14.1
-
-1.11.0 / 2016-06-07
-===================
-
-  * Use status code 301 for redirects
-  * deps: send@0.14.0
-    - Add `acceptRanges` option
-    - Add `cacheControl` option
-    - Attempt to combine multiple ranges into single range
-    - Correctly inherit from `Stream` class
-    - Fix `Content-Range` header in 416 responses when using `start`/`end` options
-    - Fix `Content-Range` header missing from default 416 responses
-    - Ignore non-byte `Range` headers
-    - deps: http-errors@~1.5.0
-    - deps: range-parser@~1.2.0
-    - deps: statuses@~1.3.0
-    - perf: remove argument reassignment
-
-1.10.3 / 2016-05-30
-===================
-
-  * deps: send@0.13.2
-    - Fix invalid `Content-Type` header when `send.mime.default_type` unset
-
-1.10.2 / 2016-01-19
-===================
-
-  * deps: parseurl@~1.3.1
-    - perf: enable strict mode
-
-1.10.1 / 2016-01-16
-===================
-
-  * deps: escape-html@~1.0.3
-    - perf: enable strict mode
-    - perf: optimize string replacement
-    - perf: use faster string coercion
-  * deps: send@0.13.1
-    - deps: depd@~1.1.0
-    - deps: destroy@~1.0.4
-    - deps: escape-html@~1.0.3
-    - deps: range-parser@~1.0.3
-
-1.10.0 / 2015-06-17
-===================
-
-  * Add `fallthrough` option
-    - Allows declaring this middleware is the final destination
-    - Provides better integration with Express patterns
-  * Fix reading options from options prototype
-  * Improve the default redirect response headers
-  * deps: escape-html@1.0.2
-  * deps: send@0.13.0
-    - Allow Node.js HTTP server to set `Date` response header
-    - Fix incorrectly removing `Content-Location` on 304 response
-    - Improve the default redirect response headers
-    - Send appropriate headers on default error response
-    - Use `http-errors` for standard emitted errors
-    - Use `statuses` instead of `http` module for status messages
-    - deps: escape-html@1.0.2
-    - deps: etag@~1.7.0
-    - deps: fresh@0.3.0
-    - deps: on-finished@~2.3.0
-    - perf: enable strict mode
-    - perf: remove unnecessary array allocations
-  * perf: enable strict mode
-  * perf: remove argument reassignment
-
-1.9.3 / 2015-05-14
-==================
-
-  * deps: send@0.12.3
-    - deps: debug@~2.2.0
-    - deps: depd@~1.0.1
-    - deps: etag@~1.6.0
-    - deps: ms@0.7.1
-    - deps: on-finished@~2.2.1
-
-1.9.2 / 2015-03-14
-==================
-
-  * deps: send@0.12.2
-    - Throw errors early for invalid `extensions` or `index` options
-    - deps: debug@~2.1.3
-
-1.9.1 / 2015-02-17
-==================
-
-  * deps: send@0.12.1
-    - Fix regression sending zero-length files
-
-1.9.0 / 2015-02-16
-==================
-
-  * deps: send@0.12.0
-    - Always read the stat size from the file
-    - Fix mutating passed-in `options`
-    - deps: mime@1.3.4
-
-1.8.1 / 2015-01-20
-==================
-
-  * Fix redirect loop in Node.js 0.11.14
-  * deps: send@0.11.1
-    - Fix root path disclosure
-
-1.8.0 / 2015-01-05
-==================
-
-  * deps: send@0.11.0
-    - deps: debug@~2.1.1
-    - deps: etag@~1.5.1
-    - deps: ms@0.7.0
-    - deps: on-finished@~2.2.0
-
-1.7.2 / 2015-01-02
-==================
-
-  * Fix potential open redirect when mounted at root
-
-1.7.1 / 2014-10-22
-==================
-
-  * deps: send@0.10.1
-    - deps: on-finished@~2.1.1
-
-1.7.0 / 2014-10-15
-==================
-
-  * deps: send@0.10.0
-    - deps: debug@~2.1.0
-    - deps: depd@~1.0.0
-    - deps: etag@~1.5.0
-
-1.6.5 / 2015-02-04
-==================
-
-  * Fix potential open redirect when mounted at root
-    - Back-ported from v1.7.2
-
-1.6.4 / 2014-10-08
-==================
-
-  * Fix redirect loop when index file serving disabled
-
-1.6.3 / 2014-09-24
-==================
-
-  * deps: send@0.9.3
-    - deps: etag@~1.4.0
-
-1.6.2 / 2014-09-15
-==================
-
-  * deps: send@0.9.2
-    - deps: depd@0.4.5
-    - deps: etag@~1.3.1
-    - deps: range-parser@~1.0.2
-
-1.6.1 / 2014-09-07
-==================
-
-  * deps: send@0.9.1
-    - deps: fresh@0.2.4
-
-1.6.0 / 2014-09-07
-==================
-
-  * deps: send@0.9.0
-    - Add `lastModified` option
-    - Use `etag` to generate `ETag` header
-    - deps: debug@~2.0.0
-
-1.5.4 / 2014-09-04
-==================
-
-  * deps: send@0.8.5
-    - Fix a path traversal issue when using `root`
-    - Fix malicious path detection for empty string path
-
-1.5.3 / 2014-08-17
-==================
-
-  * deps: send@0.8.3
-
-1.5.2 / 2014-08-14
-==================
-
-  * deps: send@0.8.2
-    - Work around `fd` leak in Node.js 0.10 for `fs.ReadStream`
-
-1.5.1 / 2014-08-09
-==================
-
-  * Fix parsing of weird `req.originalUrl` values
-  * deps: parseurl@~1.3.0
-  * deps: utils-merge@1.0.0
-
-1.5.0 / 2014-08-05
-==================
-
-  * deps: send@0.8.1
-    - Add `extensions` option
-
-1.4.4 / 2014-08-04
-==================
-
-  * deps: send@0.7.4
-    - Fix serving index files without root dir
-
-1.4.3 / 2014-07-29
-==================
-
-  * deps: send@0.7.3
-    - Fix incorrect 403 on Windows and Node.js 0.11
-
-1.4.2 / 2014-07-27
-==================
-
-  * deps: send@0.7.2
-    - deps: depd@0.4.4
-
-1.4.1 / 2014-07-26
-==================
-
-  * deps: send@0.7.1
-    - deps: depd@0.4.3
-
-1.4.0 / 2014-07-21
-==================
-
-  * deps: parseurl@~1.2.0
-    - Cache URLs based on original value
-    - Remove no-longer-needed URL mis-parse work-around
-    - Simplify the "fast-path" `RegExp`
-  * deps: send@0.7.0
-    - Add `dotfiles` option
-    - deps: debug@1.0.4
-    - deps: depd@0.4.2
-
-1.3.2 / 2014-07-11
-==================
-
-  * deps: send@0.6.0
-    - Cap `maxAge` value to 1 year
-    - deps: debug@1.0.3
-
-1.3.1 / 2014-07-09
-==================
-
-  * deps: parseurl@~1.1.3
-    - faster parsing of href-only URLs
-
-1.3.0 / 2014-06-28
-==================
-
-  * Add `setHeaders` option
-  * Include HTML link in redirect response
-  * deps: send@0.5.0
-    - Accept string for `maxAge` (converted by `ms`)
-
-1.2.3 / 2014-06-11
-==================
-
-  * deps: send@0.4.3
-    - Do not throw un-catchable error on file open race condition
-    - Use `escape-html` for HTML escaping
-    - deps: debug@1.0.2
-    - deps: finished@1.2.2
-    - deps: fresh@0.2.2
-
-1.2.2 / 2014-06-09
-==================
-
-  * deps: send@0.4.2
-    - fix "event emitter leak" warnings
-    - deps: debug@1.0.1
-    - deps: finished@1.2.1
-
-1.2.1 / 2014-06-02
-==================
-
-  * use `escape-html` for escaping
-  * deps: send@0.4.1
-    - Send `max-age` in `Cache-Control` in correct format
-
-1.2.0 / 2014-05-29
-==================
-
-  * deps: send@0.4.0
-    - Calculate ETag with md5 for reduced collisions
-    - Fix wrong behavior when index file matches directory
-    - Ignore stream errors after request ends
-    - Skip directories in index file search
-    - deps: debug@0.8.1
-
-1.1.0 / 2014-04-24
-==================
-
-  * Accept options directly to `send` module
-  * deps: send@0.3.0
-
-1.0.4 / 2014-04-07
-==================
-
-  * Resolve relative paths at middleware setup
-  * Use parseurl to parse the URL from request
-
-1.0.3 / 2014-03-20
-==================
-
-  * Do not rely on connect-like environments
-
-1.0.2 / 2014-03-06
-==================
-
-  * deps: send@0.2.0
-
-1.0.1 / 2014-03-05
-==================
-
-  * Add mime export for back-compat
-
-1.0.0 / 2014-03-05
-==================
-
-  * Genesis from `connect`
diff --git a/device_home/node_modules/serve-static/README.md b/device_home/node_modules/serve-static/README.md
deleted file mode 100644 (file)
index 7cce428..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-# serve-static
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Linux Build][travis-image]][travis-url]
-[![Windows Build][appveyor-image]][appveyor-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-## Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install serve-static
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var serveStatic = require('serve-static')
-```
-
-### serveStatic(root, options)
-
-Create a new middleware function to serve files from within a given root
-directory. The file to serve will be determined by combining `req.url`
-with the provided root directory. When a file is not found, instead of
-sending a 404 response, this module will instead call `next()` to move on
-to the next middleware, allowing for stacking and fall-backs.
-
-#### Options
-
-##### acceptRanges
-
-Enable or disable accepting ranged requests, defaults to true.
-Disabling this will not send `Accept-Ranges` and ignore the contents
-of the `Range` request header.
-
-##### cacheControl
-
-Enable or disable setting `Cache-Control` response header, defaults to
-true. Disabling this will ignore the `immutable` and `maxAge` options.
-
-##### dotfiles
-
- Set how "dotfiles" are treated when encountered. A dotfile is a file
-or directory that begins with a dot ("."). Note this check is done on
-the path itself without checking if the path actually exists on the
-disk. If `root` is specified, only the dotfiles above the root are
-checked (i.e. the root itself can be within a dotfile when set
-to "deny").
-
-  - `'allow'` No special treatment for dotfiles.
-  - `'deny'` Deny a request for a dotfile and 403/`next()`.
-  - `'ignore'` Pretend like the dotfile does not exist and 404/`next()`.
-
-The default value is similar to `'ignore'`, with the exception that this
-default will not ignore the files within a directory that begins with a dot.
-
-##### etag
-
-Enable or disable etag generation, defaults to true.
-
-##### extensions
-
-Set file extension fallbacks. When set, if a file is not found, the given
-extensions will be added to the file name and search for. The first that
-exists will be served. Example: `['html', 'htm']`.
-
-The default value is `false`.
-
-##### fallthrough
-
-Set the middleware to have client errors fall-through as just unhandled
-requests, otherwise forward a client error. The difference is that client
-errors like a bad request or a request to a non-existent file will cause
-this middleware to simply `next()` to your next middleware when this value
-is `true`. When this value is `false`, these errors (even 404s), will invoke
-`next(err)`.
-
-Typically `true` is desired such that multiple physical directories can be
-mapped to the same web address or for routes to fill in non-existent files.
-
-The value `false` can be used if this middleware is mounted at a path that
-is designed to be strictly a single file system directory, which allows for
-short-circuiting 404s for less overhead. This middleware will also reply to
-all methods.
-
-The default value is `true`.
-
-##### immutable
-
-Enable or disable the `immutable` directive in the `Cache-Control` response
-header, defaults to `false`. If set to `true`, the `maxAge` option should
-also be specified to enable caching. The `immutable` directive will prevent
-supported clients from making conditional requests during the life of the
-`maxAge` option to check if the file has changed.
-
-##### index
-
-By default this module will send "index.html" files in response to a request
-on a directory. To disable this set `false` or to supply a new index pass a
-string or an array in preferred order.
-
-##### lastModified
-
-Enable or disable `Last-Modified` header, defaults to true. Uses the file
-system's last modified value.
-
-##### maxAge
-
-Provide a max-age in milliseconds for http caching, defaults to 0. This
-can also be a string accepted by the [ms](https://www.npmjs.org/package/ms#readme)
-module.
-
-##### redirect
-
-Redirect to trailing "/" when the pathname is a dir. Defaults to `true`.
-
-##### setHeaders
-
-Function to set custom headers on response. Alterations to the headers need to
-occur synchronously. The function is called as `fn(res, path, stat)`, where
-the arguments are:
-
-  - `res` the response object
-  - `path` the file path that is being sent
-  - `stat` the stat object of the file that is being sent
-
-## Examples
-
-### Serve files with vanilla node.js http server
-
-```js
-var finalhandler = require('finalhandler')
-var http = require('http')
-var serveStatic = require('serve-static')
-
-// Serve up public/ftp folder
-var serve = serveStatic('public/ftp', { 'index': ['index.html', 'index.htm'] })
-
-// Create server
-var server = http.createServer(function onRequest (req, res) {
-  serve(req, res, finalhandler(req, res))
-})
-
-// Listen
-server.listen(3000)
-```
-
-### Serve all files as downloads
-
-```js
-var contentDisposition = require('content-disposition')
-var finalhandler = require('finalhandler')
-var http = require('http')
-var serveStatic = require('serve-static')
-
-// Serve up public/ftp folder
-var serve = serveStatic('public/ftp', {
-  'index': false,
-  'setHeaders': setHeaders
-})
-
-// Set header to force download
-function setHeaders (res, path) {
-  res.setHeader('Content-Disposition', contentDisposition(path))
-}
-
-// Create server
-var server = http.createServer(function onRequest (req, res) {
-  serve(req, res, finalhandler(req, res))
-})
-
-// Listen
-server.listen(3000)
-```
-
-### Serving using express
-
-#### Simple
-
-This is a simple example of using Express.
-
-```js
-var express = require('express')
-var serveStatic = require('serve-static')
-
-var app = express()
-
-app.use(serveStatic('public/ftp', { 'index': ['default.html', 'default.htm'] }))
-app.listen(3000)
-```
-
-#### Multiple roots
-
-This example shows a simple way to search through multiple directories.
-Files are look for in `public-optimized/` first, then `public/` second as
-a fallback.
-
-```js
-var express = require('express')
-var path = require('path')
-var serveStatic = require('serve-static')
-
-var app = express()
-
-app.use(serveStatic(path.join(__dirname, 'public-optimized')))
-app.use(serveStatic(path.join(__dirname, 'public')))
-app.listen(3000)
-```
-
-#### Different settings for paths
-
-This example shows how to set a different max age depending on the served
-file type. In this example, HTML files are not cached, while everything else
-is for 1 day.
-
-```js
-var express = require('express')
-var path = require('path')
-var serveStatic = require('serve-static')
-
-var app = express()
-
-app.use(serveStatic(path.join(__dirname, 'public'), {
-  maxAge: '1d',
-  setHeaders: setCustomCacheControl
-}))
-
-app.listen(3000)
-
-function setCustomCacheControl (res, path) {
-  if (serveStatic.mime.lookup(path) === 'text/html') {
-    // Custom Cache-Control for HTML files
-    res.setHeader('Cache-Control', 'public, max-age=0')
-  }
-}
-```
-
-## License
-
-[MIT](LICENSE)
-
-[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/serve-static/master?label=windows
-[appveyor-url]: https://ci.appveyor.com/project/dougwilson/serve-static
-[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/serve-static/master
-[coveralls-url]: https://coveralls.io/r/expressjs/serve-static?branch=master
-[node-image]: https://badgen.net/npm/node/serve-static
-[node-url]: https://nodejs.org/en/download/
-[npm-downloads-image]: https://badgen.net/npm/dm/serve-static
-[npm-url]: https://npmjs.org/package/serve-static
-[npm-version-image]: https://badgen.net/npm/v/serve-static
-[travis-image]: https://badgen.net/travis/expressjs/serve-static/master?label=linux
-[travis-url]: https://travis-ci.org/expressjs/serve-static
diff --git a/device_home/node_modules/set-blocking/CHANGELOG.md b/device_home/node_modules/set-blocking/CHANGELOG.md
deleted file mode 100644 (file)
index 03bf591..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-<a name="2.0.0"></a>
-# [2.0.0](https://github.com/yargs/set-blocking/compare/v1.0.0...v2.0.0) (2016-05-17)
-
-
-### Features
-
-* add an isTTY check ([#3](https://github.com/yargs/set-blocking/issues/3)) ([66ce277](https://github.com/yargs/set-blocking/commit/66ce277))
-
-
-### BREAKING CHANGES
-
-* stdio/stderr will not be set to blocking if isTTY === false
-
-
-
-<a name="1.0.0"></a>
-# 1.0.0 (2016-05-14)
-
-
-### Features
-
-* implemented shim for stream._handle.setBlocking ([6bde0c0](https://github.com/yargs/set-blocking/commit/6bde0c0))
diff --git a/device_home/node_modules/set-blocking/README.md b/device_home/node_modules/set-blocking/README.md
deleted file mode 100644 (file)
index e93b420..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# set-blocking
-
-[![Build Status](https://travis-ci.org/yargs/set-blocking.svg)](https://travis-ci.org/yargs/set-blocking)
-[![NPM version](https://img.shields.io/npm/v/set-blocking.svg)](https://www.npmjs.com/package/set-blocking)
-[![Coverage Status](https://coveralls.io/repos/yargs/set-blocking/badge.svg?branch=)](https://coveralls.io/r/yargs/set-blocking?branch=master)
-[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version)
-
-set blocking `stdio` and `stderr` ensuring that terminal output does not truncate.
-
-```js
-const setBlocking = require('set-blocking')
-setBlocking(true)
-console.log(someLargeStringToOutput)
-```
-
-## Historical Context/Word of Warning
-
-This was created as a shim to address the bug discussed in [node #6456](https://github.com/nodejs/node/issues/6456). This bug crops up on
-newer versions of Node.js (`0.12+`), truncating terminal output.
-
-You should be mindful of the side-effects caused by using `set-blocking`:
-
-* if your module sets blocking to `true`, it will effect other modules
-  consuming your library. In [yargs](https://github.com/yargs/yargs/blob/master/yargs.js#L653) we only call
-  `setBlocking(true)` once we already know we are about to call `process.exit(code)`.
-* this patch will not apply to subprocesses spawned with `isTTY = true`, this is
-  the [default `spawn()` behavior](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options).
-
-## License
-
-ISC
diff --git a/device_home/node_modules/setprototypeof/README.md b/device_home/node_modules/setprototypeof/README.md
deleted file mode 100644 (file)
index f120044..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Polyfill for `Object.setPrototypeOf`
-
-[![NPM Version](https://img.shields.io/npm/v/setprototypeof.svg)](https://npmjs.org/package/setprototypeof)
-[![NPM Downloads](https://img.shields.io/npm/dm/setprototypeof.svg)](https://npmjs.org/package/setprototypeof)
-[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](https://github.com/standard/standard)
-
-A simple cross platform implementation to set the prototype of an instianted object.  Supports all modern browsers and at least back to IE8.
-
-## Usage:
-
-```
-$ npm install --save setprototypeof
-```
-
-```javascript
-var setPrototypeOf = require('setprototypeof')
-
-var obj = {}
-setPrototypeOf(obj, {
-  foo: function () {
-    return 'bar'
-  }
-})
-obj.foo() // bar
-```
-
-TypeScript is also supported:
-
-```typescript
-import setPrototypeOf = require('setprototypeof')
-```
diff --git a/device_home/node_modules/setprototypeof/test/index.js b/device_home/node_modules/setprototypeof/test/index.js
deleted file mode 100644 (file)
index f4a9476..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";var assert=require("assert"),setPrototypeOf=require("..");describe("setProtoOf(obj, proto)",(function(){it("should merge objects",(function(){var t={a:1,b:2},r={b:3,c:4},s=setPrototypeOf(t,r);Object.getPrototypeOf?assert.strictEqual(Object.getPrototypeOf(t),r):{__proto__:[]}instanceof Array?assert.strictEqual(t.__proto__,r):(assert.strictEqual(t.a,1),assert.strictEqual(t.b,2),assert.strictEqual(t.c,4)),assert.strictEqual(s,t)}))}));
\ No newline at end of file
diff --git a/device_home/node_modules/socket.io-adapter/Readme.md b/device_home/node_modules/socket.io-adapter/Readme.md
deleted file mode 100644 (file)
index 75cdc69..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# socket.io-adapter
-
-Default socket.io in-memory adapter class.
-
-## How to use
-
-This module is not intended for end-user usage, but can be used as an
-interface to inherit from other adapters you might want to build.
-
-As an example of an adapter that builds on top of this, please take a look
-at [socket.io-redis](https://github.com/learnboost/socket.io-redis).
-
-## License
-
-MIT
diff --git a/device_home/node_modules/socket.io-parser/CHANGELOG.md b/device_home/node_modules/socket.io-parser/CHANGELOG.md
deleted file mode 100644 (file)
index 4fe8f3a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-## [3.4.1](https://github.com/socketio/socket.io-parser/compare/3.4.0...3.4.1) (2020-05-13)
-
-
-### Bug Fixes
-
-* prevent DoS (OOM) via massive packets ([#95](https://github.com/socketio/socket.io-parser/issues/95)) ([dcb942d](https://github.com/socketio/socket.io-parser/commit/dcb942d24db97162ad16a67c2a0cf30875342d55))
diff --git a/device_home/node_modules/socket.io-parser/Readme.md b/device_home/node_modules/socket.io-parser/Readme.md
deleted file mode 100644 (file)
index 2ca7633..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-
-# socket.io-parser
-
-[![Build Status](https://secure.travis-ci.org/socketio/socket.io-parser.svg?branch=master)](http://travis-ci.org/socketio/socket.io-parser)
-[![NPM version](https://badge.fury.io/js/socket.io-parser.svg)](http://badge.fury.io/js/socket.io-parser)
-
-A socket.io encoder and decoder written in JavaScript complying with version `4`
-of [socket.io-protocol](https://github.com/socketio/socket.io-protocol).
-Used by [socket.io](https://github.com/automattic/socket.io) and
-[socket.io-client](https://github.com/automattic/socket.io-client).
-
-## Parser API
-
-  socket.io-parser is the reference implementation of socket.io-protocol. Read
-  the full API here:
-  [socket.io-protocol](https://github.com/learnboost/socket.io-protocol).
-
-## Example Usage
-
-### Encoding and decoding a packet
-
-```js
-var parser = require('socket.io-parser');
-var encoder = new parser.Encoder();
-var packet = {
-  type: parser.EVENT,
-  data: 'test-packet',
-  id: 13
-};
-encoder.encode(packet, function(encodedPackets) {
-  var decoder = new parser.Decoder();
-  decoder.on('decoded', function(decodedPacket) {
-    // decodedPacket.type == parser.EVENT
-    // decodedPacket.data == 'test-packet'
-    // decodedPacket.id == 13
-  });
-
-  for (var i = 0; i < encodedPackets.length; i++) {
-    decoder.add(encodedPackets[i]);
-  }
-});
-```
-
-### Encoding and decoding a packet with binary data
-
-```js
-var parser = require('socket.io-parser');
-var encoder = new parser.Encoder();
-var packet = {
-  type: parser.BINARY_EVENT,
-  data: {i: new Buffer(1234), j: new Blob([new ArrayBuffer(2)])}
-  id: 15
-};
-encoder.encode(packet, function(encodedPackets) {
-  var decoder = new parser.Decoder();
-  decoder.on('decoded', function(decodedPacket) {
-    // decodedPacket.type == parser.BINARY_EVENT
-    // Buffer.isBuffer(decodedPacket.data.i) == true
-    // Buffer.isBuffer(decodedPacket.data.j) == true
-    // decodedPacket.id == 15
-  });
-
-  for (var i = 0; i < encodedPackets.length; i++) {
-    decoder.add(encodedPackets[i]);
-  }
-});
-```
-See the test suite for more examples of how socket.io-parser is used.
-
-
-## License
-
-MIT
diff --git a/device_home/node_modules/socket.io/CHANGELOG.md b/device_home/node_modules/socket.io/CHANGELOG.md
deleted file mode 100644 (file)
index e8552f7..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-## [2.4.1](https://github.com/socketio/socket.io/compare/2.4.0...2.4.1) (2021-01-07)
-
-
-### Reverts
-
-* fix(security): do not allow all origins by default ([a169050](https://github.com/socketio/socket.io/commit/a1690509470e9dd5559cec4e60908ca6c23e9ba0))
-
-
-# [2.4.0](https://github.com/socketio/socket.io/compare/2.3.0...2.4.0) (2021-01-04)
-
-
-### Bug Fixes
-
-* **security:** do not allow all origins by default ([f78a575](https://github.com/socketio/socket.io/commit/f78a575f66ab693c3ea96ea88429ddb1a44c86c7))
-* properly overwrite the query sent in the handshake ([d33a619](https://github.com/socketio/socket.io/commit/d33a619905a4905c153d4fec337c74da5b533a9e))
diff --git a/device_home/node_modules/socket.io/Readme.md b/device_home/node_modules/socket.io/Readme.md
deleted file mode 100644 (file)
index 92fc1c5..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-
-# socket.io
-
-[![Backers on Open Collective](https://opencollective.com/socketio/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/socketio/sponsors/badge.svg)](#sponsors)
-[![Build Status](https://github.com/socketio/socket.io/workflows/CI/badge.svg)](https://github.com/socketio/socket.io/actions)
-[![Dependency Status](https://david-dm.org/socketio/socket.io.svg)](https://david-dm.org/socketio/socket.io)
-[![devDependency Status](https://david-dm.org/socketio/socket.io/dev-status.svg)](https://david-dm.org/socketio/socket.io#info=devDependencies)
-[![NPM version](https://badge.fury.io/js/socket.io.svg)](https://www.npmjs.com/package/socket.io)
-![Downloads](https://img.shields.io/npm/dm/socket.io.svg?style=flat)
-[![](https://slackin-socketio.now.sh/badge.svg)](https://slackin-socketio.now.sh)
-
-## Features
-
-Socket.IO enables real-time bidirectional event-based communication. It consists of:
-
-- a Node.js server (this repository)
-- a [Javascript client library](https://github.com/socketio/socket.io-client) for the browser (or a Node.js client)
-
-Some implementations in other languages are also available:
-
-- [Java](https://github.com/socketio/socket.io-client-java)
-- [C++](https://github.com/socketio/socket.io-client-cpp)
-- [Swift](https://github.com/socketio/socket.io-client-swift)
-- [Dart](https://github.com/rikulo/socket.io-client-dart)
-
-Its main features are:
-
-#### Reliability
-
-Connections are established even in the presence of:
-  - proxies and load balancers.
-  - personal firewall and antivirus software.
-
-For this purpose, it relies on [Engine.IO](https://github.com/socketio/engine.io), which first establishes a long-polling connection, then tries to upgrade to better transports that are "tested" on the side, like WebSocket. Please see the [Goals](https://github.com/socketio/engine.io#goals) section for more information.
-
-#### Auto-reconnection support
-
-Unless instructed otherwise a disconnected client will try to reconnect forever, until the server is available again. Please see the available reconnection options [here](https://github.com/socketio/socket.io-client/blob/master/docs/API.md#new-managerurl-options).
-
-#### Disconnection detection
-
-A heartbeat mechanism is implemented at the Engine.IO level, allowing both the server and the client to know when the other one is not responding anymore.
-
-That functionality is achieved with timers set on both the server and the client, with timeout values (the `pingInterval` and `pingTimeout` parameters) shared during the connection handshake. Those timers require any subsequent client calls to be directed to the same server, hence the `sticky-session` requirement when using multiples nodes.
-
-#### Binary support
-
-Any serializable data structures can be emitted, including:
-
-- [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) and [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) in the browser
-- [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) and [Buffer](https://nodejs.org/api/buffer.html) in Node.js
-
-#### Simple and convenient API
-
-Sample code:
-
-```js
-io.on('connection', socket => {
-  socket.emit('request', /* … */); // emit an event to the socket
-  io.emit('broadcast', /* … */); // emit an event to all connected sockets
-  socket.on('reply', () => { /* … */ }); // listen to the event
-});
-```
-
-#### Cross-browser
-
-Browser support is tested in Saucelabs:
-
-[![Sauce Test Status](https://saucelabs.com/browser-matrix/socket.svg)](https://saucelabs.com/u/socket)
-
-#### Multiplexing support
-
-In order to create separation of concerns within your application (for example per module, or based on permissions), Socket.IO allows you to create several `Namespaces`, which will act as separate communication channels but will share the same underlying connection.
-
-#### Room support
-
-Within each `Namespace`, you can define arbitrary channels, called `Rooms`, that sockets can join and leave. You can then broadcast to any given room, reaching every socket that has joined it.
-
-This is a useful feature to send notifications to a group of users, or to a given user connected on several devices for example.
-
-
-**Note:** Socket.IO is not a WebSocket implementation. Although Socket.IO indeed uses WebSocket as a transport when possible, it adds some metadata to each packet: the packet type, the namespace and the ack id when a message acknowledgement is needed. That is why a WebSocket client will not be able to successfully connect to a Socket.IO server, and a Socket.IO client will not be able to connect to a WebSocket server (like `ws://echo.websocket.org`) either. Please see the protocol specification [here](https://github.com/socketio/socket.io-protocol).
-
-## Installation
-
-```bash
-npm install socket.io
-```
-
-## How to use
-
-The following example attaches socket.io to a plain Node.JS
-HTTP server listening on port `3000`.
-
-```js
-const server = require('http').createServer();
-const io = require('socket.io')(server);
-io.on('connection', client => {
-  client.on('event', data => { /* … */ });
-  client.on('disconnect', () => { /* … */ });
-});
-server.listen(3000);
-```
-
-### Standalone
-
-```js
-const io = require('socket.io')();
-io.on('connection', client => { ... });
-io.listen(3000);
-```
-
-### In conjunction with Express
-
-Starting with **3.0**, express applications have become request handler
-functions that you pass to `http` or `http` `Server` instances. You need
-to pass the `Server` to `socket.io`, and not the express application
-function. Also make sure to call `.listen` on the `server`, not the `app`.
-
-```js
-const app = require('express')();
-const server = require('http').createServer(app);
-const io = require('socket.io')(server);
-io.on('connection', () => { /* … */ });
-server.listen(3000);
-```
-
-### In conjunction with Koa
-
-Like Express.JS, Koa works by exposing an application as a request
-handler function, but only by calling the `callback` method.
-
-```js
-const app = require('koa')();
-const server = require('http').createServer(app.callback());
-const io = require('socket.io')(server);
-io.on('connection', () => { /* … */ });
-server.listen(3000);
-```
-
-## Documentation
-
-Please see the documentation [here](/docs/README.md). Contributions are welcome!
-
-## Debug / logging
-
-Socket.IO is powered by [debug](https://github.com/visionmedia/debug).
-In order to see all the debug output, run your app with the environment variable
-`DEBUG` including the desired scope.
-
-To see the output from all of Socket.IO's debugging scopes you can use:
-
-```
-DEBUG=socket.io* node myapp
-```
-
-## Testing
-
-```
-npm test
-```
-This runs the `gulp` task `test`. By default the test will be run with the source code in `lib` directory.
-
-Set the environmental variable `TEST_VERSION` to `compat` to test the transpiled es5-compat version of the code.
-
-The `gulp` task `test` will always transpile the source code into es5 and export to `dist` first before running the test.
-
-
-## Backers
-
-Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/socketio#backer)]
-
-<a href="https://opencollective.com/socketio/backer/0/website" target="_blank"><img src="https://opencollective.com/socketio/backer/0/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/1/website" target="_blank"><img src="https://opencollective.com/socketio/backer/1/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/2/website" target="_blank"><img src="https://opencollective.com/socketio/backer/2/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/3/website" target="_blank"><img src="https://opencollective.com/socketio/backer/3/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/4/website" target="_blank"><img src="https://opencollective.com/socketio/backer/4/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/5/website" target="_blank"><img src="https://opencollective.com/socketio/backer/5/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/6/website" target="_blank"><img src="https://opencollective.com/socketio/backer/6/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/7/website" target="_blank"><img src="https://opencollective.com/socketio/backer/7/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/8/website" target="_blank"><img src="https://opencollective.com/socketio/backer/8/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/9/website" target="_blank"><img src="https://opencollective.com/socketio/backer/9/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/10/website" target="_blank"><img src="https://opencollective.com/socketio/backer/10/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/11/website" target="_blank"><img src="https://opencollective.com/socketio/backer/11/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/12/website" target="_blank"><img src="https://opencollective.com/socketio/backer/12/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/13/website" target="_blank"><img src="https://opencollective.com/socketio/backer/13/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/14/website" target="_blank"><img src="https://opencollective.com/socketio/backer/14/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/15/website" target="_blank"><img src="https://opencollective.com/socketio/backer/15/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/16/website" target="_blank"><img src="https://opencollective.com/socketio/backer/16/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/17/website" target="_blank"><img src="https://opencollective.com/socketio/backer/17/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/18/website" target="_blank"><img src="https://opencollective.com/socketio/backer/18/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/19/website" target="_blank"><img src="https://opencollective.com/socketio/backer/19/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/20/website" target="_blank"><img src="https://opencollective.com/socketio/backer/20/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/21/website" target="_blank"><img src="https://opencollective.com/socketio/backer/21/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/22/website" target="_blank"><img src="https://opencollective.com/socketio/backer/22/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/23/website" target="_blank"><img src="https://opencollective.com/socketio/backer/23/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/24/website" target="_blank"><img src="https://opencollective.com/socketio/backer/24/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/25/website" target="_blank"><img src="https://opencollective.com/socketio/backer/25/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/26/website" target="_blank"><img src="https://opencollective.com/socketio/backer/26/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/27/website" target="_blank"><img src="https://opencollective.com/socketio/backer/27/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/28/website" target="_blank"><img src="https://opencollective.com/socketio/backer/28/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/backer/29/website" target="_blank"><img src="https://opencollective.com/socketio/backer/29/avatar.svg"></a>
-
-
-## Sponsors
-
-Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/socketio#sponsor)]
-
-<a href="https://opencollective.com/socketio/sponsor/0/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/0/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/1/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/1/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/2/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/2/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/3/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/3/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/4/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/4/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/5/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/5/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/6/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/6/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/7/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/7/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/8/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/8/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/9/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/9/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/10/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/10/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/11/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/11/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/12/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/12/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/13/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/13/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/14/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/14/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/15/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/15/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/16/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/16/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/17/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/17/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/18/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/18/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/19/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/19/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/20/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/20/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/21/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/21/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/22/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/22/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/23/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/23/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/24/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/24/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/25/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/25/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/26/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/26/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/27/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/27/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/28/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/28/avatar.svg"></a>
-<a href="https://opencollective.com/socketio/sponsor/29/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/29/avatar.svg"></a>
-
-
-## License
-
-[MIT](LICENSE)
diff --git a/device_home/node_modules/socket.io/node_modules/socket.io-client/CHANGELOG.md b/device_home/node_modules/socket.io/node_modules/socket.io-client/CHANGELOG.md
deleted file mode 100644 (file)
index b1e87ea..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# [2.4.0](https://github.com/Automattic/socket.io-client/compare/2.3.1...2.4.0) (2021-01-04)
-
-The minor bump is matching the bump of the server, but there is no new feature in this release.
-
-
-## [2.3.1](https://github.com/socketio/socket.io-client/compare/2.3.0...2.3.1) (2020-09-30)
-
-The `debug` dependency has been reverted to `~3.1.0`, as the newer versions contains ES6 syntax which breaks in IE
-browsers.
-
-Please note that this only applied to users that bundle the Socket.IO client in their application, with webpack for
-example, as the "official" bundles (in the dist/ folder) were already transpiled with babel.
-
-For webpack users, you can also take a look at the [webpack-remove-debug](https://github.com/johngodley/webpack-remove-debug)
-plugin.
-
-### Bug Fixes
-
-* fix reconnection after opening socket asynchronously ([#1253](https://github.com/socketio/socket.io-client/issues/1253)) ([050108b](https://github.com/Automattic/socket.io-client/commit/050108b2281effda086b197cf174ee2e8e1aad79))
-
diff --git a/device_home/node_modules/socket.io/node_modules/socket.io-client/README.md b/device_home/node_modules/socket.io/node_modules/socket.io-client/README.md
deleted file mode 100644 (file)
index bf7b5de..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-
-# socket.io-client
-
-[![Build Status](https://github.com/socketio/socket.io-client/workflows/CI/badge.svg)](https://github.com/socketio/socket.io-client/actions)
-[![Dependency Status](https://david-dm.org/socketio/socket.io-client.svg)](https://david-dm.org/socketio/socket.io-client)
-[![devDependency Status](https://david-dm.org/socketio/socket.io-client/dev-status.svg)](https://david-dm.org/socketio/socket.io-client#info=devDependencies)
-[![NPM version](https://badge.fury.io/js/socket.io-client.svg)](https://www.npmjs.com/package/socket.io-client)
-![Downloads](http://img.shields.io/npm/dm/socket.io-client.svg?style=flat)
-[![](http://slack.socket.io/badge.svg?)](http://slack.socket.io)
-
-[![Sauce Test Status](https://saucelabs.com/browser-matrix/socket.svg)](https://saucelabs.com/u/socket)
-
-## How to use
-
-A standalone build of `socket.io-client` is exposed automatically by the
-socket.io server as `/socket.io/socket.io.js`. Alternatively you can
-serve the file `socket.io.js` found in the `dist` folder or include it via [CDN](https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js).
-
-```html
-<script src="/socket.io/socket.io.js"></script>
-<script>
-  var socket = io();
-  socket.on('connect', function(){});
-  socket.on('event', function(data){});
-  socket.on('disconnect', function(){});
-</script>
-```
-
-```js
-// with ES6 import
-import io from 'socket.io-client';
-
-const socket = io();
-```
-
-A slim build (without `JSON3`, a JSON polyfill for IE6/IE7, and `debug`) is also available: `socket.io.slim.js`.
-
-Socket.IO is compatible with [browserify](http://browserify.org/) and [webpack](https://webpack.js.org/) (see example [there](https://github.com/socketio/socket.io/tree/2.0.3/examples/webpack-build)).
-
-### Node.JS (server-side usage)
-
-  Add `socket.io-client` to your `package.json` and then:
-
-  ```js
-  var socket = require('socket.io-client')('http://localhost:3000');
-  socket.on('connect', function(){});
-  socket.on('event', function(data){});
-  socket.on('disconnect', function(){});
-  ```
-
-## Debug / logging
-
-In order to see all the client debug output, run the following command on the browser console – including the desired scope – and reload your app page:
-
-```
-localStorage.debug = '*';
-```
-
-And then, filter by the scopes you're interested in. See also: https://socket.io/docs/logging-and-debugging/
-
-## API
-
-See [API](/docs/API.md)
-
-## License
-
-[MIT](/LICENSE)
diff --git a/device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.dev.js.map b/device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.dev.js.map
deleted file mode 100644 (file)
index e75cb33..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap e653db9c121d4e4372ed","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./~/debug/src/browser.js","webpack:///./~/process/browser.js","webpack:///./~/debug/src/debug.js","webpack:///./~/ms/index.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/globalThis.browser.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///ws (ignored)","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["exports","module","require","log","formatArgs","save","load","useColors","storage","chrome","local","localstorage","colors","window","process","type","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","$1","formatters","j","v","JSON","stringify","err","message","args","namespace","humanize","diff","c","color","splice","index","lastC","replace","Function","prototype","apply","call","arguments","namespaces","removeItem","debug","e","r","env","DEBUG","enable","localStorage","createDebug","coerce","disable","enabled","instances","names","skips","selectColor","hash","i","charCodeAt","Math","abs","length","prevTime","self","curr","Date","ms","prev","Array","unshift","format","formatter","val","logFn","bind","destroy","init","push","indexOf","split","len","substr","instance","name","test","Error","stack"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;ACrCA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;AC5FA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC1EA;AACA;AACA;AACA;AACA;AACA;;AAEA,0GAAyG,IAAI,GAAG,IAAI,SAAS,IAAI;;AAEjI;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yEAAwE;AACxE;;AAEA;AACA,iBAAgB;AAChB;;AAEA;AACA;AACA;;AAEA;AA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E;AACd;;AAED;;;;;;;AAOA,UAASlD,IAAT,GAAgB;AACd,OAAImD,CAAJ;AACA,OAAI;AACFA,SAAIzD,QAAQQ,OAAR,CAAgB+C,KAApB;AACD,IAFD,CAEE,OAAMC,CAAN,EAAS,CAAE;;AAEb;AACA,OAAI,CAACC,CAAD,IAAM,OAAO3C,OAAP,KAAmB,WAAzB,IAAwC,SAASA,OAArD,EAA8D;AAC5D2C,SAAI3C,QAAQ4C,GAAR,CAAYC,KAAhB;AACD;;AAED,UAAOF,CAAP;AACD;;AAED;;;;AAIAzD,SAAQ4D,MAAR,CAAetD,MAAf;;AAEA;;;;;;;;;;;AAWA,UAASK,YAAT,GAAwB;AACtB,OAAI;AACF,YAAOE,OAAOgD,YAAd;AACD,IAFD,CAEE,OAAOL,CAAP,EAAU,CAAE;AACf,E;;;;;;;AClMD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;A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AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtJA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B,uBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,sFAAqF;AACrF;;AAEA;AACA;AACA;AACA;AACA,MAAK,OAAO;AACZ;AACA;AACA,IAAG,qCAAqC;AACxC;AACA;AACA,MAAK;AACL;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,oBAAoB;AAChC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7ZA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY;AACZ;;AAEA;AACA;;AAEA;AACA;;AAEA,kBAAiB,sBAAsB;AACvC;AACA;;AAEA;AACA;AACA,4CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;AC9KA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC,WAAU;AACV;;AAEA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA,IAAG;AACH;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA,kCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,8BAA6B;AAC7B,IAAG;AACH,oBAAmB,iBAAiB;AACpC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC;AACxC,MAAK,yBAAyB;AAC9B,sBAAqB,gBAAgB;AACrC;AACA;AACA,MAAK,mDAAmD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5IA,kBAAiB;;AAEjB;AACA;AACA;;;;;;;;ACHA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AClBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB,2BAA2B;AAChD;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG,OAAO;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/jBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA2F;;AAE3F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA,+CAA8C,WAAW;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAqB,8BAA8B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA6C,OAAO;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA;AACA;AACA;;;;;;;AC3uBA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA,MAAK,YAAY;AACjB;AACA;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;;;;;;AChBA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH,sCAAqC;AACrC;AACA,EAAC;;;;;;;ACRD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA,2BAA0B,iDAAiD;AAC3E;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,UAAS;AACT,4DAA2D;AAC3D;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,gIAA+H;AAC/H;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,iGAAgG;AAChG;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjaA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,iBAAiB;AACjD;AACA,EAAC;;AAED;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACpPA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,YAAW;;AAEX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+DAA8D,gBAAgB;AAC9E;;AAEA;;AAEA;;AAEA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B,qCAAqC;AAC/D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAc;AACd,MAAK;AACL,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA,+BAA8B,gBAAgB;AAC9C,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,aAAY,oBAAoB,oCAAoC;AACpE;;AAEA;;AAEA;AACA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY,YAAY;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oDAAmD;AACnD,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA,QAAO,OAAO;AACd;AACA;;AAEA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA,MAAK;;AAEL;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,EAAE;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;;;;;;;AC3lBA;AACA;AACA;AACA,aAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B,sCAAsC;;AAEhE,mBAAkB,gBAAgB;AAClC,iBAAgB,cAAc;AAC9B,qBAAoB,aAAa;;AAEjC;AACA;AACA;;AAEA;AACA;AACA,8BAA6B,SAAS;AACtC;AACA;AACA;AACA;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA,KAAI;AACJ,4BAA2B;AAC3B;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;;;AC1DD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA,0DAAyD;AACzD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA,EAAC;;;;;;;ACnGD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,cAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAM,YAAY;;AAElB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAmB;;AAEnB;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACrOA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,IAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;;;;;;AC1SA,gB;;;;;;;ACCA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA,G;;;;;;;ACRA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,mCAAmC;AACtD,MAAK;AACL,oBAAmB,qBAAqB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,+BAA+B;AAC5C;AACA;AACA;;AAEA,cAAa,4BAA4B;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB,0BAA0B;AAC3C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACrbA;;AAEA;AACA;;AAEA;;AAEA,6BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;;;;;;;;ACXA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,oBAAoB;AAC/B,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,gBAAgB;AAC3B,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"socket.io.dev.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e653db9c121d4e4372ed","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/index.js\n// module id = 0\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/url.js\n// module id = 1\n// module chunks = 0","/**\n * Parses an URI\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\n\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nvar parts = [\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\n\nmodule.exports = function parseuri(str) {\n    var src = str,\n        b = str.indexOf('['),\n        e = str.indexOf(']');\n\n    if (b != -1 && e != -1) {\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n    }\n\n    var m = re.exec(str || ''),\n        uri = {},\n        i = 14;\n\n    while (i--) {\n        uri[parts[i]] = m[i] || '';\n    }\n\n    if (b != -1 && e != -1) {\n        uri.source = src;\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n        uri.ipv6uri = true;\n    }\n\n    uri.pathNames = pathNames(uri, uri['path']);\n    uri.queryKey = queryKey(uri, uri['query']);\n\n    return uri;\n};\n\nfunction pathNames(obj, path) {\n    var regx = /\\/{2,9}/g,\n        names = path.replace(regx, \"/\").split(\"/\");\n\n    if (path.substr(0, 1) == '/' || path.length === 0) {\n        names.splice(0, 1);\n    }\n    if (path.substr(path.length - 1, 1) == '/') {\n        names.splice(names.length - 1, 1);\n    }\n\n    return names;\n}\n\nfunction queryKey(uri, query) {\n    var data = {};\n\n    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n        if ($1) {\n            data[$1] = $2;\n        }\n    });\n\n    return data;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/browser.js","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 4\n// module chunks = 0","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n\n  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  if (name[name.length - 1] === '*') {\n    return true;\n  }\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/debug.js","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ms/index.js\n// module id = 6\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 7\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 8\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 9\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 10\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 11\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    if (timeout === 0) {\n      openSub.destroy(); // prevents a race condition with the 'open' event\n    }\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/manager.js\n// module id = 12\n// module chunks = 0","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 13\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('parseqs');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n  opts = opts || {};\n\n  if (uri && 'object' === typeof uri) {\n    opts = uri;\n    uri = null;\n  }\n\n  if (uri) {\n    uri = parseuri(uri);\n    opts.hostname = uri.host;\n    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n    opts.port = uri.port;\n    if (uri.query) opts.query = uri.query;\n  } else if (opts.host) {\n    opts.hostname = parseuri(opts.host).host;\n  }\n\n  this.secure = null != opts.secure ? opts.secure\n    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\n  if (opts.hostname && !opts.port) {\n    // if no port is specified manually, use the protocol default\n    opts.port = this.secure ? '443' : '80';\n  }\n\n  this.agent = opts.agent || false;\n  this.hostname = opts.hostname ||\n    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && location.port\n      ? location.port\n      : (this.secure ? 443 : 80));\n  this.query = opts.query || {};\n  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n  this.upgrade = false !== opts.upgrade;\n  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n  this.forceJSONP = !!opts.forceJSONP;\n  this.jsonp = false !== opts.jsonp;\n  this.forceBase64 = !!opts.forceBase64;\n  this.enablesXDR = !!opts.enablesXDR;\n  this.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\n  this.readyState = '';\n  this.writeBuffer = [];\n  this.prevBufferLen = 0;\n  this.policyPort = opts.policyPort || 843;\n  this.rememberUpgrade = opts.rememberUpgrade || false;\n  this.binaryType = null;\n  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n    this.perMessageDeflate.threshold = 1024;\n  }\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx || null;\n  this.key = opts.key || null;\n  this.passphrase = opts.passphrase || null;\n  this.cert = opts.cert || null;\n  this.ca = opts.ca || null;\n  this.ciphers = opts.ciphers || null;\n  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\n    }\n  }\n\n  // set on handshake\n  this.id = null;\n  this.upgrades = null;\n  this.pingInterval = null;\n  this.pingTimeout = null;\n\n  // set on heartbeat\n  this.pingIntervalTimer = null;\n  this.pingTimeoutTimer = null;\n\n  this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('engine.io-parser');\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n  debug('creating transport \"%s\"', name);\n  var query = clone(this.query);\n\n  // append engine.io protocol identifier\n  query.EIO = parser.protocol;\n\n  // transport name\n  query.transport = name;\n\n  // per-transport options\n  var options = this.transportOptions[name] || {};\n\n  // session id if we already have one\n  if (this.id) query.sid = this.id;\n\n  var transport = new transports[name]({\n    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\n  });\n\n  return transport;\n};\n\nfunction clone (obj) {\n  var o = {};\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      o[i] = obj[i];\n    }\n  }\n  return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n  var transport;\n  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n    transport = 'websocket';\n  } else if (0 === this.transports.length) {\n    // Emit error on next tick so it can be listened to\n    var self = this;\n    setTimeout(function () {\n      self.emit('error', 'No transports available');\n    }, 0);\n    return;\n  } else {\n    transport = this.transports[0];\n  }\n  this.readyState = 'opening';\n\n  // Retry with the next transport if the transport is disabled (jsonp: false)\n  try {\n    transport = this.createTransport(transport);\n  } catch (e) {\n    this.transports.shift();\n    this.open();\n    return;\n  }\n\n  transport.open();\n  this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n  debug('setting transport %s', transport.name);\n  var self = this;\n\n  if (this.transport) {\n    debug('clearing existing transport %s', this.transport.name);\n    this.transport.removeAllListeners();\n  }\n\n  // set up transport\n  this.transport = transport;\n\n  // set up transport listeners\n  transport\n  .on('drain', function () {\n    self.onDrain();\n  })\n  .on('packet', function (packet) {\n    self.onPacket(packet);\n  })\n  .on('error', function (e) {\n    self.onError(e);\n  })\n  .on('close', function () {\n    self.onClose('transport close');\n  });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n  debug('probing transport \"%s\"', name);\n  var transport = this.createTransport(name, { probe: 1 });\n  var failed = false;\n  var self = this;\n\n  Socket.priorWebsocketSuccess = false;\n\n  function onTransportOpen () {\n    if (self.onlyBinaryUpgrades) {\n      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n      failed = failed || upgradeLosesBinary;\n    }\n    if (failed) return;\n\n    debug('probe transport \"%s\" opened', name);\n    transport.send([{ type: 'ping', data: 'probe' }]);\n    transport.once('packet', function (msg) {\n      if (failed) return;\n      if ('pong' === msg.type && 'probe' === msg.data) {\n        debug('probe transport \"%s\" pong', name);\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n        debug('pausing current transport \"%s\"', self.transport.name);\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n          debug('changing transport and sending upgrade packet');\n\n          cleanup();\n\n          self.setTransport(transport);\n          transport.send([{ type: 'upgrade' }]);\n          self.emit('upgrade', transport);\n          transport = null;\n          self.upgrading = false;\n          self.flush();\n        });\n      } else {\n        debug('probe transport \"%s\" failed', name);\n        var err = new Error('probe error');\n        err.transport = transport.name;\n        self.emit('upgradeError', err);\n      }\n    });\n  }\n\n  function freezeTransport () {\n    if (failed) return;\n\n    // Any callback called by transport should be ignored since now\n    failed = true;\n\n    cleanup();\n\n    transport.close();\n    transport = null;\n  }\n\n  // Handle any error that happens while probing\n  function onerror (err) {\n    var error = new Error('probe error: ' + err);\n    error.transport = transport.name;\n\n    freezeTransport();\n\n    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n    self.emit('upgradeError', error);\n  }\n\n  function onTransportClose () {\n    onerror('transport closed');\n  }\n\n  // When the socket is closed while we're probing\n  function onclose () {\n    onerror('socket closed');\n  }\n\n  // When the socket is upgraded while we're probing\n  function onupgrade (to) {\n    if (transport && to.name !== transport.name) {\n      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n      freezeTransport();\n    }\n  }\n\n  // Remove all listeners on the transport and on self\n  function cleanup () {\n    transport.removeListener('open', onTransportOpen);\n    transport.removeListener('error', onerror);\n    transport.removeListener('close', onTransportClose);\n    self.removeListener('close', onclose);\n    self.removeListener('upgrading', onupgrade);\n  }\n\n  transport.once('open', onTransportOpen);\n  transport.once('error', onerror);\n  transport.once('close', onTransportClose);\n\n  this.once('close', onclose);\n  this.once('upgrading', onupgrade);\n\n  transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n  debug('socket open');\n  this.readyState = 'open';\n  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n  this.emit('open');\n  this.flush();\n\n  // we check for `readyState` in case an `open`\n  // listener already closed the socket\n  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n    debug('starting upgrade probes');\n    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n      this.probe(this.upgrades[i]);\n    }\n  }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n  if ('opening' === this.readyState || 'open' === this.readyState ||\n      'closing' === this.readyState) {\n    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n    this.emit('packet', packet);\n\n    // Socket is live - any packet counts\n    this.emit('heartbeat');\n\n    switch (packet.type) {\n      case 'open':\n        this.onHandshake(JSON.parse(packet.data));\n        break;\n\n      case 'pong':\n        this.setPing();\n        this.emit('pong');\n        break;\n\n      case 'error':\n        var err = new Error('server error');\n        err.code = packet.data;\n        this.onError(err);\n        break;\n\n      case 'message':\n        this.emit('data', packet.data);\n        this.emit('message', packet.data);\n        break;\n    }\n  } else {\n    debug('packet received with socket readyState \"%s\"', this.readyState);\n  }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n  this.emit('handshake', data);\n  this.id = data.sid;\n  this.transport.query.sid = data.sid;\n  this.upgrades = this.filterUpgrades(data.upgrades);\n  this.pingInterval = data.pingInterval;\n  this.pingTimeout = data.pingTimeout;\n  this.onOpen();\n  // In case open handler closes socket\n  if ('closed' === this.readyState) return;\n  this.setPing();\n\n  // Prolong liveness of socket on heartbeat\n  this.removeListener('heartbeat', this.onHeartbeat);\n  this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n  clearTimeout(this.pingTimeoutTimer);\n  var self = this;\n  self.pingTimeoutTimer = setTimeout(function () {\n    if ('closed' === self.readyState) return;\n    self.onClose('ping timeout');\n  }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n  var self = this;\n  clearTimeout(self.pingIntervalTimer);\n  self.pingIntervalTimer = setTimeout(function () {\n    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n    self.ping();\n    self.onHeartbeat(self.pingTimeout);\n  }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n  var self = this;\n  this.sendPacket('ping', function () {\n    self.emit('ping');\n  });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n  this.writeBuffer.splice(0, this.prevBufferLen);\n\n  // setting prevBufferLen = 0 is very important\n  // for example, when upgrading, upgrade packet is sent over,\n  // and a nonzero prevBufferLen could cause problems on `drain`\n  this.prevBufferLen = 0;\n\n  if (0 === this.writeBuffer.length) {\n    this.emit('drain');\n  } else {\n    this.flush();\n  }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n  if ('closed' !== this.readyState && this.transport.writable &&\n    !this.upgrading && this.writeBuffer.length) {\n    debug('flushing %d packets in socket', this.writeBuffer.length);\n    this.transport.send(this.writeBuffer);\n    // keep track of current length of writeBuffer\n    // splice writeBuffer and callbackBuffer on `drain`\n    this.prevBufferLen = this.writeBuffer.length;\n    this.emit('flush');\n  }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n  this.sendPacket('message', msg, options, fn);\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n  if ('function' === typeof data) {\n    fn = data;\n    data = undefined;\n  }\n\n  if ('function' === typeof options) {\n    fn = options;\n    options = null;\n  }\n\n  if ('closing' === this.readyState || 'closed' === this.readyState) {\n    return;\n  }\n\n  options = options || {};\n  options.compress = false !== options.compress;\n\n  var packet = {\n    type: type,\n    data: data,\n    options: options\n  };\n  this.emit('packetCreate', packet);\n  this.writeBuffer.push(packet);\n  if (fn) this.once('flush', fn);\n  this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.readyState = 'closing';\n\n    var self = this;\n\n    if (this.writeBuffer.length) {\n      this.once('drain', function () {\n        if (this.upgrading) {\n          waitForUpgrade();\n        } else {\n          close();\n        }\n      });\n    } else if (this.upgrading) {\n      waitForUpgrade();\n    } else {\n      close();\n    }\n  }\n\n  function close () {\n    self.onClose('forced close');\n    debug('socket closing - telling transport to close');\n    self.transport.close();\n  }\n\n  function cleanupAndClose () {\n    self.removeListener('upgrade', cleanupAndClose);\n    self.removeListener('upgradeError', cleanupAndClose);\n    close();\n  }\n\n  function waitForUpgrade () {\n    // wait for upgrade to finish since we can't send packets while pausing a transport\n    self.once('upgrade', cleanupAndClose);\n    self.once('upgradeError', cleanupAndClose);\n  }\n\n  return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n  debug('socket error %j', err);\n  Socket.priorWebsocketSuccess = false;\n  this.emit('error', err);\n  this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n    debug('socket close with reason: \"%s\"', reason);\n    var self = this;\n\n    // clear timers\n    clearTimeout(this.pingIntervalTimer);\n    clearTimeout(this.pingTimeoutTimer);\n\n    // stop event from firing again for transport\n    this.transport.removeAllListeners('close');\n\n    // ensure transport won't stay open\n    this.transport.close();\n\n    // ignore further transport communication\n    this.transport.removeAllListeners();\n\n    // set ready state\n    this.readyState = 'closed';\n\n    // clear session id\n    this.id = null;\n\n    // emit close event\n    this.emit('close', reason, desc);\n\n    // clean buffers after, so users can still\n    // grab the buffers on `close` event\n    self.writeBuffer = [];\n    self.prevBufferLen = 0;\n  }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n  var filteredUpgrades = [];\n  for (var i = 0, j = upgrades.length; i < j; i++) {\n    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n  }\n  return filteredUpgrades;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 14\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./websocket');\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n  var xhr;\n  var xd = false;\n  var xs = false;\n  var jsonp = false !== opts.jsonp;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    xd = opts.hostname !== location.hostname || port !== opts.port;\n    xs = opts.secure !== isSSL;\n  }\n\n  opts.xdomain = xd;\n  opts.xscheme = xs;\n  xhr = new XMLHttpRequest(opts);\n\n  if ('open' in xhr && !opts.forceJSONP) {\n    return new XHR(opts);\n  } else {\n    if (!jsonp) throw new Error('JSONP disabled');\n    return new JSONP(opts);\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 15\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\nvar globalThis = require('./globalThis');\n\nmodule.exports = function (opts) {\n  var xdomain = opts.xdomain;\n\n  // scheme must be same when usign XDomainRequest\n  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n  var xscheme = opts.xscheme;\n\n  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n  // https://github.com/Automattic/engine.io-client/pull/217\n  var enablesXDR = opts.enablesXDR;\n\n  // XMLHttpRequest can be disabled on IE\n  try {\n    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n      return new XMLHttpRequest();\n    }\n  } catch (e) { }\n\n  // Use XDomainRequest for IE8 if enablesXDR is true\n  // because loading bar keeps flashing when using jsonp-polling\n  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n  try {\n    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n      return new XDomainRequest();\n    }\n  } catch (e) { }\n\n  if (!xdomain) {\n    try {\n      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 16\n// module chunks = 0","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n    'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n  // if XMLHttp support is disabled in IE then it will throw\n  // when trying to create\n  module.exports = false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 17\n// module chunks = 0","module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/globalThis.browser.js\n// module id = 18\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\nvar globalThis = require('../globalThis');\n\n/**\n * Module exports.\n */\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n\n/**\n * Empty function\n */\n\nfunction empty () {}\n\n/**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction XHR (opts) {\n  Polling.call(this, opts);\n  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(XHR, Polling);\n\n/**\n * XHR supports binary\n */\n\nXHR.prototype.supportsBinary = true;\n\n/**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n\nXHR.prototype.request = function (opts) {\n  opts = opts || {};\n  opts.uri = this.uri();\n  opts.xd = this.xd;\n  opts.xs = this.xs;\n  opts.agent = this.agent || false;\n  opts.supportsBinary = this.supportsBinary;\n  opts.enablesXDR = this.enablesXDR;\n  opts.withCredentials = this.withCredentials;\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n  opts.requestTimeout = this.requestTimeout;\n\n  // other options for Node.js client\n  opts.extraHeaders = this.extraHeaders;\n\n  return new Request(opts);\n};\n\n/**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n\nXHR.prototype.doWrite = function (data, fn) {\n  var isBinary = typeof data !== 'string' && data !== undefined;\n  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n  var self = this;\n  req.on('success', fn);\n  req.on('error', function (err) {\n    self.onError('xhr post error', err);\n  });\n  this.sendXhr = req;\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nXHR.prototype.doPoll = function () {\n  debug('xhr poll');\n  var req = this.request();\n  var self = this;\n  req.on('data', function (data) {\n    self.onData(data);\n  });\n  req.on('error', function (err) {\n    self.onError('xhr poll error', err);\n  });\n  this.pollXhr = req;\n};\n\n/**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Request (opts) {\n  this.method = opts.method || 'GET';\n  this.uri = opts.uri;\n  this.xd = !!opts.xd;\n  this.xs = !!opts.xs;\n  this.async = false !== opts.async;\n  this.data = undefined !== opts.data ? opts.data : null;\n  this.agent = opts.agent;\n  this.isBinary = opts.isBinary;\n  this.supportsBinary = opts.supportsBinary;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n\n  this.create();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Request.prototype);\n\n/**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n\nRequest.prototype.create = function () {\n  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n\n  var xhr = this.xhr = new XMLHttpRequest(opts);\n  var self = this;\n\n  try {\n    debug('xhr open %s: %s', this.method, this.uri);\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n        for (var i in this.extraHeaders) {\n          if (this.extraHeaders.hasOwnProperty(i)) {\n            xhr.setRequestHeader(i, this.extraHeaders[i]);\n          }\n        }\n      }\n    } catch (e) {}\n\n    if ('POST' === this.method) {\n      try {\n        if (this.isBinary) {\n          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n        } else {\n          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n        }\n      } catch (e) {}\n    }\n\n    try {\n      xhr.setRequestHeader('Accept', '*/*');\n    } catch (e) {}\n\n    // ie6 check\n    if ('withCredentials' in xhr) {\n      xhr.withCredentials = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\n    }\n\n    if (this.hasXDR()) {\n      xhr.onload = function () {\n        self.onLoad();\n      };\n      xhr.onerror = function () {\n        self.onError(xhr.responseText);\n      };\n    } else {\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\n        if (4 !== xhr.readyState) return;\n        if (200 === xhr.status || 1223 === xhr.status) {\n          self.onLoad();\n        } else {\n          // make sure the `error` event handler that's user-set\n          // does not throw in the same tick and gets caught here\n          setTimeout(function () {\n            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n    debug('xhr data %s', this.data);\n    xhr.send(this.data);\n  } catch (e) {\n    // Need to defer since .create() is called directly fhrom the constructor\n    // and thus the 'error' event can only be only bound *after* this exception\n    // occurs.  Therefore, also, we cannot throw here at all.\n    setTimeout(function () {\n      self.onError(e);\n    }, 0);\n    return;\n  }\n\n  if (typeof document !== 'undefined') {\n    this.index = Request.requestsCount++;\n    Request.requests[this.index] = this;\n  }\n};\n\n/**\n * Called upon successful response.\n *\n * @api private\n */\n\nRequest.prototype.onSuccess = function () {\n  this.emit('success');\n  this.cleanup();\n};\n\n/**\n * Called if we have data.\n *\n * @api private\n */\n\nRequest.prototype.onData = function (data) {\n  this.emit('data', data);\n  this.onSuccess();\n};\n\n/**\n * Called upon error.\n *\n * @api private\n */\n\nRequest.prototype.onError = function (err) {\n  this.emit('error', err);\n  this.cleanup(true);\n};\n\n/**\n * Cleans up house.\n *\n * @api private\n */\n\nRequest.prototype.cleanup = function (fromError) {\n  if ('undefined' === typeof this.xhr || null === this.xhr) {\n    return;\n  }\n  // xmlhttprequest\n  if (this.hasXDR()) {\n    this.xhr.onload = this.xhr.onerror = empty;\n  } else {\n    this.xhr.onreadystatechange = empty;\n  }\n\n  if (fromError) {\n    try {\n      this.xhr.abort();\n    } catch (e) {}\n  }\n\n  if (typeof document !== 'undefined') {\n    delete Request.requests[this.index];\n  }\n\n  this.xhr = null;\n};\n\n/**\n * Called upon load.\n *\n * @api private\n */\n\nRequest.prototype.onLoad = function () {\n  var data;\n  try {\n    var contentType;\n    try {\n      contentType = this.xhr.getResponseHeader('Content-Type');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\n    }\n  } catch (e) {\n    this.onError(e);\n  }\n  if (null != data) {\n    this.onData(data);\n  }\n};\n\n/**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n\nRequest.prototype.hasXDR = function () {\n  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n};\n\n/**\n * Aborts the request.\n *\n * @api public\n */\n\nRequest.prototype.abort = function () {\n  this.cleanup();\n};\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, unloadHandler, false);\n  }\n}\n\nfunction unloadHandler () {\n  for (var i in Request.requests) {\n    if (Request.requests.hasOwnProperty(i)) {\n      Request.requests[i].abort();\n    }\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 19\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:polling');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Polling;\n\n/**\n * Is XHR2 supported?\n */\n\nvar hasXHR2 = (function () {\n  var XMLHttpRequest = require('xmlhttprequest-ssl');\n  var xhr = new XMLHttpRequest({ xdomain: false });\n  return null != xhr.responseType;\n})();\n\n/**\n * Polling interface.\n *\n * @param {Object} opts\n * @api private\n */\n\nfunction Polling (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (!hasXHR2 || forceBase64) {\n    this.supportsBinary = false;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(Polling, Transport);\n\n/**\n * Transport name.\n */\n\nPolling.prototype.name = 'polling';\n\n/**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n\nPolling.prototype.doOpen = function () {\n  this.poll();\n};\n\n/**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n\nPolling.prototype.pause = function (onPause) {\n  var self = this;\n\n  this.readyState = 'pausing';\n\n  function pause () {\n    debug('paused');\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n      debug('we are currently polling - waiting to pause');\n      total++;\n      this.once('pollComplete', function () {\n        debug('pre-pause polling complete');\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n      debug('we are currently writing - waiting to pause');\n      total++;\n      this.once('drain', function () {\n        debug('pre-pause writing complete');\n        --total || pause();\n      });\n    }\n  } else {\n    pause();\n  }\n};\n\n/**\n * Starts polling cycle.\n *\n * @api public\n */\n\nPolling.prototype.poll = function () {\n  debug('polling');\n  this.polling = true;\n  this.doPoll();\n  this.emit('poll');\n};\n\n/**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n\nPolling.prototype.onData = function (data) {\n  var self = this;\n  debug('polling got data %s', data);\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState && packet.type === 'open') {\n      self.onOpen();\n    }\n\n    // if its a close packet, we close the ongoing requests\n    if ('close' === packet.type) {\n      self.onClose();\n      return false;\n    }\n\n    // otherwise bypass onData and handle the message\n    self.onPacket(packet);\n  };\n\n  // decode payload\n  parser.decodePayload(data, this.socket.binaryType, callback);\n\n  // if an event did not trigger closing\n  if ('closed' !== this.readyState) {\n    // if we got data we're not polling\n    this.polling = false;\n    this.emit('pollComplete');\n\n    if ('open' === this.readyState) {\n      this.poll();\n    } else {\n      debug('ignoring poll - transport state \"%s\"', this.readyState);\n    }\n  }\n};\n\n/**\n * For polling, send a close packet.\n *\n * @api private\n */\n\nPolling.prototype.doClose = function () {\n  var self = this;\n\n  function close () {\n    debug('writing close packet');\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n    debug('transport open - closing');\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n    debug('transport not open - deferring close');\n    this.once('open', close);\n  }\n};\n\n/**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n\nPolling.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n  var callbackfn = function () {\n    self.writable = true;\n    self.emit('drain');\n  };\n\n  parser.encodePayload(packets, this.supportsBinary, function (data) {\n    self.doWrite(data, callbackfn);\n  });\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nPolling.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'https' : 'http';\n  var port = '';\n\n  // cache busting is forced\n  if (false !== this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  if (!this.supportsBinary && !query.sid) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // avoid port if default for schema\n  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n     ('http' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 20\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('component-emitter');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n  this.path = opts.path;\n  this.hostname = opts.hostname;\n  this.port = opts.port;\n  this.secure = opts.secure;\n  this.query = opts.query;\n  this.timestampParam = opts.timestampParam;\n  this.timestampRequests = opts.timestampRequests;\n  this.readyState = '';\n  this.agent = opts.agent || false;\n  this.socket = opts.socket;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n  var err = new Error(msg);\n  err.type = 'TransportError';\n  err.description = desc;\n  this.emit('error', err);\n  return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n  if ('closed' === this.readyState || '' === this.readyState) {\n    this.readyState = 'opening';\n    this.doOpen();\n  }\n\n  return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.doClose();\n    this.onClose();\n  }\n\n  return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n  if ('open' === this.readyState) {\n    this.write(packets);\n  } else {\n    throw new Error('Transport not open');\n  }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n  this.readyState = 'open';\n  this.writable = true;\n  this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n  var packet = parser.decodePacket(data, this.socket.binaryType);\n  this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n  this.readyState = 'closed';\n  this.emit('close');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 21\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('base64-arraybuffer');\n}\n\n/**\n * Check if we are running an android browser. That requires us to use\n * ArrayBuffer with polling transports...\n *\n * http://ghinda.net/jpeg-blob-ajax-android/\n */\n\nvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\n/**\n * Check if we are running in PhantomJS.\n * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n * https://github.com/ariya/phantomjs/issues/11395\n * @type boolean\n */\nvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\n/**\n * When true, avoids using Blobs to encode payloads.\n * @type boolean\n */\nvar dontSendBlobs = isAndroid || isPhantomJS;\n\n/**\n * Current protocol version.\n */\n\nexports.protocol = 3;\n\n/**\n * Packet types.\n */\n\nvar packets = exports.packets = {\n    open:     0    // non-ws\n  , close:    1    // non-ws\n  , ping:     2\n  , pong:     3\n  , message:  4\n  , upgrade:  5\n  , noop:     6\n};\n\nvar packetslist = keys(packets);\n\n/**\n * Premade error packet.\n */\n\nvar err = { type: 'error', data: 'parser error' };\n\n/**\n * Create a blob api even for blob builder when vendor prefixes exist\n */\n\nvar Blob = require('blob');\n\n/**\n * Encodes a packet.\n *\n *     <packet type id> [ <data> ]\n *\n * Example:\n *\n *     5hello world\n *     3\n *     4\n *\n * Binary is encoded in an identical principle\n *\n * @api private\n */\n\nexports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\n    callback = utf8encode;\n    utf8encode = null;\n  }\n\n  var data = (packet.data === undefined)\n    ? undefined\n    : packet.data.buffer || packet.data;\n\n  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n    return encodeBlob(packet, supportsBinary, callback);\n  }\n\n  // might be an object with { base64: true, data: dataAsBase64String }\n  if (data && data.base64) {\n    return encodeBase64Object(packet, callback);\n  }\n\n  // Sending data as a utf-8 string\n  var encoded = packets[packet.type];\n\n  // data fragment is optional\n  if (undefined !== packet.data) {\n    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n  }\n\n  return callback('' + encoded);\n\n};\n\nfunction encodeBase64Object(packet, callback) {\n  // packet data is an object { base64: true, data: dataAsBase64String }\n  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n  return callback(message);\n}\n\n/**\n * Encode packet helpers for binary types\n */\n\nfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var data = packet.data;\n  var contentArray = new Uint8Array(data);\n  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\n  resultBuffer[0] = packets[packet.type];\n  for (var i = 0; i < contentArray.length; i++) {\n    resultBuffer[i+1] = contentArray[i];\n  }\n\n  return callback(resultBuffer.buffer);\n}\n\nfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var fr = new FileReader();\n  fr.onload = function() {\n    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n  };\n  return fr.readAsArrayBuffer(packet.data);\n}\n\nfunction encodeBlob(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  if (dontSendBlobs) {\n    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n  }\n\n  var length = new Uint8Array(1);\n  length[0] = packets[packet.type];\n  var blob = new Blob([length.buffer, packet.data]);\n\n  return callback(blob);\n}\n\n/**\n * Encodes a packet with binary data in a base64 string\n *\n * @param {Object} packet, has `type` and `data`\n * @return {String} base64 encoded message\n */\n\nexports.encodeBase64Packet = function(packet, callback) {\n  var message = 'b' + exports.packets[packet.type];\n  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n    var fr = new FileReader();\n    fr.onload = function() {\n      var b64 = fr.result.split(',')[1];\n      callback(message + b64);\n    };\n    return fr.readAsDataURL(packet.data);\n  }\n\n  var b64data;\n  try {\n    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n  } catch (e) {\n    // iPhone Safari doesn't let you apply with typed arrays\n    var typed = new Uint8Array(packet.data);\n    var basic = new Array(typed.length);\n    for (var i = 0; i < typed.length; i++) {\n      basic[i] = typed[i];\n    }\n    b64data = String.fromCharCode.apply(null, basic);\n  }\n  message += btoa(b64data);\n  return callback(message);\n};\n\n/**\n * Decodes a packet. Changes format to Blob if requested.\n *\n * @return {Object} with `type` and `data` (if any)\n * @api private\n */\n\nexports.decodePacket = function (data, binaryType, utf8decode) {\n  if (data === undefined) {\n    return err;\n  }\n  // String data\n  if (typeof data === 'string') {\n    if (data.charAt(0) === 'b') {\n      return exports.decodeBase64Packet(data.substr(1), binaryType);\n    }\n\n    if (utf8decode) {\n      data = tryDecode(data);\n      if (data === false) {\n        return err;\n      }\n    }\n    var type = data.charAt(0);\n\n    if (Number(type) != type || !packetslist[type]) {\n      return err;\n    }\n\n    if (data.length > 1) {\n      return { type: packetslist[type], data: data.substring(1) };\n    } else {\n      return { type: packetslist[type] };\n    }\n  }\n\n  var asArray = new Uint8Array(data);\n  var type = asArray[0];\n  var rest = sliceBuffer(data, 1);\n  if (Blob && binaryType === 'blob') {\n    rest = new Blob([rest]);\n  }\n  return { type: packetslist[type], data: rest };\n};\n\nfunction tryDecode(data) {\n  try {\n    data = utf8.decode(data, { strict: false });\n  } catch (e) {\n    return false;\n  }\n  return data;\n}\n\n/**\n * Decodes a packet encoded in a base64 string\n *\n * @param {String} base64 encoded message\n * @return {Object} with `type` and `data` (if any)\n */\n\nexports.decodeBase64Packet = function(msg, binaryType) {\n  var type = packetslist[msg.charAt(0)];\n  if (!base64encoder) {\n    return { type: type, data: { base64: true, data: msg.substr(1) } };\n  }\n\n  var data = base64encoder.decode(msg.substr(1));\n\n  if (binaryType === 'blob' && Blob) {\n    data = new Blob([data]);\n  }\n\n  return { type: type, data: data };\n};\n\n/**\n * Encodes multiple messages (payload).\n *\n *     <length>:data\n *\n * Example:\n *\n *     11:hello world2:hi\n *\n * If any contents are binary, they will be encoded as base64 strings. Base64\n * encoded strings are marked with a b before the length specifier\n *\n * @param {Array} packets\n * @api private\n */\n\nexports.encodePayload = function (packets, supportsBinary, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = null;\n  }\n\n  var isBinary = hasBinary(packets);\n\n  if (supportsBinary && isBinary) {\n    if (Blob && !dontSendBlobs) {\n      return exports.encodePayloadAsBlob(packets, callback);\n    }\n\n    return exports.encodePayloadAsArrayBuffer(packets, callback);\n  }\n\n  if (!packets.length) {\n    return callback('0:');\n  }\n\n  function setLengthHeader(message) {\n    return message.length + ':' + message;\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n      doneCallback(null, setLengthHeader(message));\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(results.join(''));\n  });\n};\n\n/**\n * Async array map using after\n */\n\nfunction map(ary, each, done) {\n  var result = new Array(ary.length);\n  var next = after(ary.length, done);\n\n  var eachWithIndex = function(i, el, cb) {\n    each(el, function(error, msg) {\n      result[i] = msg;\n      cb(error, result);\n    });\n  };\n\n  for (var i = 0; i < ary.length; i++) {\n    eachWithIndex(i, ary[i], next);\n  }\n}\n\n/*\n * Decodes data when a payload is maybe expected. Possible binary contents are\n * decoded from their base64 representation\n *\n * @param {String} data, callback method\n * @api public\n */\n\nexports.decodePayload = function (data, binaryType, callback) {\n  if (typeof data !== 'string') {\n    return exports.decodePayloadAsBinary(data, binaryType, callback);\n  }\n\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var packet;\n  if (data === '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n  var length = '', n, msg;\n\n  for (var i = 0, l = data.length; i < l; i++) {\n    var chr = data.charAt(i);\n\n    if (chr !== ':') {\n      length += chr;\n      continue;\n    }\n\n    if (length === '' || (length != (n = Number(length)))) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    msg = data.substr(i + 1, n);\n\n    if (length != msg.length) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    if (msg.length) {\n      packet = exports.decodePacket(msg, binaryType, false);\n\n      if (err.type === packet.type && err.data === packet.data) {\n        // parser error in individual packet - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      var ret = callback(packet, i + n, l);\n      if (false === ret) return;\n    }\n\n    // advance cursor\n    i += n;\n    length = '';\n  }\n\n  if (length !== '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n};\n\n/**\n * Encodes multiple messages (payload) as binary.\n *\n * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n * 255><data>\n *\n * Example:\n * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n *\n * @param {Array} packets\n * @return {ArrayBuffer} encoded payload\n * @api private\n */\n\nexports.encodePayloadAsArrayBuffer = function(packets, callback) {\n  if (!packets.length) {\n    return callback(new ArrayBuffer(0));\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(data) {\n      return doneCallback(null, data);\n    });\n  }\n\n  map(packets, encodeOne, function(err, encodedPackets) {\n    var totalLength = encodedPackets.reduce(function(acc, p) {\n      var len;\n      if (typeof p === 'string'){\n        len = p.length;\n      } else {\n        len = p.byteLength;\n      }\n      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n    }, 0);\n\n    var resultArray = new Uint8Array(totalLength);\n\n    var bufferIndex = 0;\n    encodedPackets.forEach(function(p) {\n      var isString = typeof p === 'string';\n      var ab = p;\n      if (isString) {\n        var view = new Uint8Array(p.length);\n        for (var i = 0; i < p.length; i++) {\n          view[i] = p.charCodeAt(i);\n        }\n        ab = view.buffer;\n      }\n\n      if (isString) { // not true binary\n        resultArray[bufferIndex++] = 0;\n      } else { // true binary\n        resultArray[bufferIndex++] = 1;\n      }\n\n      var lenStr = ab.byteLength.toString();\n      for (var i = 0; i < lenStr.length; i++) {\n        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n      }\n      resultArray[bufferIndex++] = 255;\n\n      var view = new Uint8Array(ab);\n      for (var i = 0; i < view.length; i++) {\n        resultArray[bufferIndex++] = view[i];\n      }\n    });\n\n    return callback(resultArray.buffer);\n  });\n};\n\n/**\n * Encode as Blob\n */\n\nexports.encodePayloadAsBlob = function(packets, callback) {\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(encoded) {\n      var binaryIdentifier = new Uint8Array(1);\n      binaryIdentifier[0] = 1;\n      if (typeof encoded === 'string') {\n        var view = new Uint8Array(encoded.length);\n        for (var i = 0; i < encoded.length; i++) {\n          view[i] = encoded.charCodeAt(i);\n        }\n        encoded = view.buffer;\n        binaryIdentifier[0] = 0;\n      }\n\n      var len = (encoded instanceof ArrayBuffer)\n        ? encoded.byteLength\n        : encoded.size;\n\n      var lenStr = len.toString();\n      var lengthAry = new Uint8Array(lenStr.length + 1);\n      for (var i = 0; i < lenStr.length; i++) {\n        lengthAry[i] = parseInt(lenStr[i]);\n      }\n      lengthAry[lenStr.length] = 255;\n\n      if (Blob) {\n        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n        doneCallback(null, blob);\n      }\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(new Blob(results));\n  });\n};\n\n/*\n * Decodes data when a payload is maybe expected. Strings are decoded by\n * interpreting each byte as a key code for entries marked to start with 0. See\n * description of encodePayloadAsBinary\n *\n * @param {ArrayBuffer} data, callback method\n * @api public\n */\n\nexports.decodePayloadAsBinary = function (data, binaryType, callback) {\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var bufferTail = data;\n  var buffers = [];\n\n  while (bufferTail.byteLength > 0) {\n    var tailArray = new Uint8Array(bufferTail);\n    var isString = tailArray[0] === 0;\n    var msgLength = '';\n\n    for (var i = 1; ; i++) {\n      if (tailArray[i] === 255) break;\n\n      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\n\n    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n    msgLength = parseInt(msgLength);\n\n    var msg = sliceBuffer(bufferTail, 0, msgLength);\n    if (isString) {\n      try {\n        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n      } catch (e) {\n        // iPhone Safari doesn't let you apply to typed arrays\n        var typed = new Uint8Array(msg);\n        msg = '';\n        for (var i = 0; i < typed.length; i++) {\n          msg += String.fromCharCode(typed[i]);\n        }\n      }\n    }\n\n    buffers.push(msg);\n    bufferTail = sliceBuffer(bufferTail, msgLength);\n  }\n\n  var total = buffers.length;\n  buffers.forEach(function(buffer, i) {\n    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n  });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 22\n// module chunks = 0","\n/**\n * Gets the keys for an object.\n *\n * @return {Array} keys\n * @api private\n */\n\nmodule.exports = Object.keys || function keys (obj){\n  var arr = [];\n  var has = Object.prototype.hasOwnProperty;\n\n  for (var i in obj) {\n    if (has.call(obj, i)) {\n      arr.push(i);\n    }\n  }\n  return arr;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 23\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\n  }\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 24\n// module chunks = 0","/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n  var bytes = arraybuffer.byteLength;\n  start = start || 0;\n  end = end || bytes;\n\n  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n  if (start < 0) { start += bytes; }\n  if (end < 0) { end += bytes; }\n  if (end > bytes) { end = bytes; }\n\n  if (start >= bytes || start >= end || bytes === 0) {\n    return new ArrayBuffer(0);\n  }\n\n  var abv = new Uint8Array(arraybuffer);\n  var result = new Uint8Array(end - start);\n  for (var i = start, ii = 0; i < end; i++, ii++) {\n    result[ii] = abv[i];\n  }\n  return result.buffer;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 25\n// module chunks = 0","module.exports = after\n\nfunction after(count, callback, err_cb) {\n    var bail = false\n    err_cb = err_cb || noop\n    proxy.count = count\n\n    return (count === 0) ? callback() : proxy\n\n    function proxy(err, result) {\n        if (proxy.count <= 0) {\n            throw new Error('after called too many times')\n        }\n        --proxy.count\n\n        // after first error, rest are passed to err_cb\n        if (err) {\n            bail = true\n            callback(err)\n            // future error callbacks will go to error handler\n            callback = err_cb\n        } else if (proxy.count === 0 && !bail) {\n            callback(null, result)\n        }\n    }\n}\n\nfunction noop() {}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 26\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 27\n// module chunks = 0","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(chars){\n  \"use strict\";\n\n  exports.encode = function(arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer),\n    i, len = bytes.length, base64 = \"\";\n\n    for (i = 0; i < len; i+=3) {\n      base64 += chars[bytes[i] >> 2];\n      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n      base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if ((len % 3) === 2) {\n      base64 = base64.substring(0, base64.length - 1) + \"=\";\n    } else if (len % 3 === 1) {\n      base64 = base64.substring(0, base64.length - 2) + \"==\";\n    }\n\n    return base64;\n  };\n\n  exports.decode =  function(base64) {\n    var bufferLength = base64.length * 0.75,\n    len = base64.length, i, p = 0,\n    encoded1, encoded2, encoded3, encoded4;\n\n    if (base64[base64.length - 1] === \"=\") {\n      bufferLength--;\n      if (base64[base64.length - 2] === \"=\") {\n        bufferLength--;\n      }\n    }\n\n    var arraybuffer = new ArrayBuffer(bufferLength),\n    bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i+=4) {\n      encoded1 = chars.indexOf(base64[i]);\n      encoded2 = chars.indexOf(base64[i+1]);\n      encoded3 = chars.indexOf(base64[i+2]);\n      encoded4 = chars.indexOf(base64[i+3]);\n\n      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n  };\n})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 28\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 29\n// module chunks = 0","/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\n\nexports.encode = function (obj) {\n  var str = '';\n\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      if (str.length) str += '&';\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n    }\n  }\n\n  return str;\n};\n\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\n\nexports.decode = function(qs){\n  var qry = {};\n  var pairs = qs.split('&');\n  for (var i = 0, l = pairs.length; i < l; i++) {\n    var pair = pairs[i].split('=');\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n  }\n  return qry;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 30\n// module chunks = 0","\nmodule.exports = function(a, b){\n  var fn = function(){};\n  fn.prototype = b.prototype;\n  a.prototype = new fn;\n  a.prototype.constructor = a;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 31\n// module chunks = 0","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n  , length = 64\n  , map = {}\n  , seed = 0\n  , i = 0\n  , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n  var encoded = '';\n\n  do {\n    encoded = alphabet[num % length] + encoded;\n    num = Math.floor(num / length);\n  } while (num > 0);\n\n  return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n  var decoded = 0;\n\n  for (i = 0; i < str.length; i++) {\n    decoded = decoded * length + map[str.charAt(i)];\n  }\n\n  return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n  var now = encode(+new Date());\n\n  if (now !== prev) return seed = 0, prev = now;\n  return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 32\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\nvar globalThis = require('../globalThis');\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n  Polling.call(this, opts);\n\n  this.query = this.query || {};\n\n  // define global callbacks array if not present\n  // we do this here (lazily) to avoid unneeded global pollution\n  if (!callbacks) {\n    // we need to consider multiple engines in the same page\n    callbacks = globalThis.___eio = (globalThis.___eio || []);\n  }\n\n  // callback identifier\n  this.index = callbacks.length;\n\n  // add callback to jsonp global\n  var self = this;\n  callbacks.push(function (msg) {\n    self.onData(msg);\n  });\n\n  // append to query string\n  this.query.j = this.index;\n\n  // prevent spurious errors from being emitted when the window is unloaded\n  if (typeof addEventListener === 'function') {\n    addEventListener('beforeunload', function () {\n      if (self.script) self.script.onerror = empty;\n    }, false);\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  if (this.form) {\n    this.form.parentNode.removeChild(this.form);\n    this.form = null;\n    this.iframe = null;\n  }\n\n  Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n  var self = this;\n  var script = document.createElement('script');\n\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  script.async = true;\n  script.src = this.uri();\n  script.onerror = function (e) {\n    self.onError('jsonp poll error', e);\n  };\n\n  var insertAt = document.getElementsByTagName('script')[0];\n  if (insertAt) {\n    insertAt.parentNode.insertBefore(script, insertAt);\n  } else {\n    (document.head || document.body).appendChild(script);\n  }\n  this.script = script;\n\n  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n  if (isUAgecko) {\n    setTimeout(function () {\n      var iframe = document.createElement('iframe');\n      document.body.appendChild(iframe);\n      document.body.removeChild(iframe);\n    }, 100);\n  }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n  var self = this;\n\n  if (!this.form) {\n    var form = document.createElement('form');\n    var area = document.createElement('textarea');\n    var id = this.iframeId = 'eio_iframe_' + this.index;\n    var iframe;\n\n    form.className = 'socketio';\n    form.style.position = 'absolute';\n    form.style.top = '-1000px';\n    form.style.left = '-1000px';\n    form.target = id;\n    form.method = 'POST';\n    form.setAttribute('accept-charset', 'utf-8');\n    area.name = 'd';\n    form.appendChild(area);\n    document.body.appendChild(form);\n\n    this.form = form;\n    this.area = area;\n  }\n\n  this.form.action = this.uri();\n\n  function complete () {\n    initIframe();\n    fn();\n  }\n\n  function initIframe () {\n    if (self.iframe) {\n      try {\n        self.form.removeChild(self.iframe);\n      } catch (e) {\n        self.onError('jsonp polling iframe removal error', e);\n      }\n    }\n\n    try {\n      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n      iframe = document.createElement(html);\n    } catch (e) {\n      iframe = document.createElement('iframe');\n      iframe.name = self.iframeId;\n      iframe.src = 'javascript:0';\n    }\n\n    iframe.id = self.iframeId;\n\n    self.form.appendChild(iframe);\n    self.iframe = iframe;\n  }\n\n  initIframe();\n\n  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n  data = data.replace(rEscapedNewline, '\\\\\\n');\n  this.area.value = data.replace(rNewline, '\\\\n');\n\n  try {\n    this.form.submit();\n  } catch (e) {}\n\n  if (this.iframe.attachEvent) {\n    this.iframe.onreadystatechange = function () {\n      if (self.iframe.readyState === 'complete') {\n        complete();\n      }\n    };\n  } else {\n    this.iframe.onload = complete;\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 33\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\nvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\n/**\n * Module exports.\n */\n\nmodule.exports = WS;\n\n/**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n\nfunction WS (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (forceBase64) {\n    this.supportsBinary = false;\n  }\n  this.perMessageDeflate = opts.perMessageDeflate;\n  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(WS, Transport);\n\n/**\n * Transport name.\n *\n * @api public\n */\n\nWS.prototype.name = 'websocket';\n\n/*\n * WebSockets support binary\n */\n\nWS.prototype.supportsBinary = true;\n\n/**\n * Opens socket.\n *\n * @api private\n */\n\nWS.prototype.doOpen = function () {\n  if (!this.check()) {\n    // let probe timeout\n    return;\n  }\n\n  var uri = this.uri();\n  var protocols = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\n\n    // SSL options for Node.js client\n    opts.pfx = this.pfx;\n    opts.key = this.key;\n    opts.passphrase = this.passphrase;\n    opts.cert = this.cert;\n    opts.ca = this.ca;\n    opts.ciphers = this.ciphers;\n    opts.rejectUnauthorized = this.rejectUnauthorized;\n  }\n\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(uri, protocols, opts);\n  } catch (err) {\n    return this.emit('error', err);\n  }\n\n  if (this.ws.binaryType === undefined) {\n    this.supportsBinary = false;\n  }\n\n  if (this.ws.supports && this.ws.supports.binary) {\n    this.supportsBinary = true;\n    this.ws.binaryType = 'nodebuffer';\n  } else {\n    this.ws.binaryType = 'arraybuffer';\n  }\n\n  this.addEventListeners();\n};\n\n/**\n * Adds event listeners to the socket\n *\n * @api private\n */\n\nWS.prototype.addEventListeners = function () {\n  var self = this;\n\n  this.ws.onopen = function () {\n    self.onOpen();\n  };\n  this.ws.onclose = function () {\n    self.onClose();\n  };\n  this.ws.onmessage = function (ev) {\n    self.onData(ev.data);\n  };\n  this.ws.onerror = function (e) {\n    self.onError('websocket error', e);\n  };\n};\n\n/**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n\nWS.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n\n  // encodePacket efficient as it uses WS framing\n  // no need for encodePayload\n  var total = packets.length;\n  for (var i = 0, l = total; i < l; i++) {\n    (function (packet) {\n      parser.encodePacket(packet, self.supportsBinary, function (data) {\n        if (!self.usingBrowserWebSocket) {\n          // always create a new object (GH-437)\n          var opts = {};\n          if (packet.options) {\n            opts.compress = packet.options.compress;\n          }\n\n          if (self.perMessageDeflate) {\n            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n            if (len < self.perMessageDeflate.threshold) {\n              opts.compress = false;\n            }\n          }\n        }\n\n        // Sometimes the websocket has already been closed but the browser didn't\n        // have a chance of informing us about it yet, in that case send will\n        // throw an error\n        try {\n          if (self.usingBrowserWebSocket) {\n            // TypeError is thrown when passing the second argument on Safari\n            self.ws.send(data);\n          } else {\n            self.ws.send(data, opts);\n          }\n        } catch (e) {\n          debug('websocket closed before onclose event');\n        }\n\n        --total || done();\n      });\n    })(packets[i]);\n  }\n\n  function done () {\n    self.emit('flush');\n\n    // fake drain\n    // defer to next tick to allow Socket to clear writeBuffer\n    setTimeout(function () {\n      self.writable = true;\n      self.emit('drain');\n    }, 0);\n  }\n};\n\n/**\n * Called upon close\n *\n * @api private\n */\n\nWS.prototype.onClose = function () {\n  Transport.prototype.onClose.call(this);\n};\n\n/**\n * Closes socket.\n *\n * @api private\n */\n\nWS.prototype.doClose = function () {\n  if (typeof this.ws !== 'undefined') {\n    this.ws.close();\n  }\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nWS.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'wss' : 'ws';\n  var port = '';\n\n  // avoid port if default for schema\n  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // append timestamp to URI\n  if (this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  // communicate binary support capabilities\n  if (!this.supportsBinary) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n/**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n\nWS.prototype.check = function () {\n  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 34\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// ws (ignored)\n// module id = 35\n// module chunks = 0","\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 36\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  if (!this.io.reconnecting) this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/socket.js\n// module id = 37\n// module chunks = 0","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 38\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/on.js\n// module id = 39\n// module chunks = 0","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 40\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 41\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js.map b/device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js.map
deleted file mode 100644 (file)
index d7c04a2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///socket.io.js","webpack:///webpack/bootstrap 841e359d3e4df861c732","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./~/debug/src/browser.js","webpack:///./~/process/browser.js","webpack:///./~/debug/src/debug.js","webpack:///./~/ms/index.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/globalThis.browser.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","lookup","uri","opts","undefined","io","parsed","url","source","path","sameNamespace","cache","nsps","newConnection","forceNew","multiplex","debug","Manager","query","socket","parser","managers","protocol","connect","Socket","loc","obj","location","host","charAt","test","parseuri","port","ipv6","indexOf","href","pathNames","regx","names","replace","split","substr","length","splice","queryKey","data","$0","$1","$2","re","parts","str","src","b","e","substring","exec","i","authority","ipv6uri","process","useColors","window","type","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","formatArgs","args","namespace","humanize","diff","color","index","lastC","log","_typeof","Function","prototype","apply","arguments","save","namespaces","storage","removeItem","load","r","env","DEBUG","localstorage","localStorage","Symbol","iterator","constructor","chrome","local","colors","formatters","j","v","JSON","stringify","err","message","enable","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","nextTick","Array","push","title","browser","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","selectColor","hash","charCodeAt","Math","abs","createDebug","enabled","self","curr","Date","ms","prevTime","prev","coerce","unshift","format","formatter","val","logFn","bind","destroy","init","instances","skips","instance","disable","stack","parse","String","n","parseFloat","y","d","h","s","fmtShort","round","fmtLong","plural","floor","ceil","options","isNaN","Encoder","encodeAsString","BINARY_EVENT","BINARY_ACK","attachments","nsp","payload","tryStringify","ERROR_PACKET","encodeAsBinary","callback","writeEncoding","bloblessData","deconstruction","binary","deconstructPacket","pack","packet","buffers","removeBlobs","Decoder","reconstructor","decodeString","Number","types","error","buf","next","tryParse","isPayloadValid","ERROR","isArray","BinaryReconstructor","reconPack","msg","Emitter","isBuf","CONNECT","DISCONNECT","EVENT","ACK","encode","encoding","add","base64","takeBinaryData","finishedReconstruction","binData","reconstructPacket","mixin","key","addEventListener","event","fn","_callbacks","removeEventListener","callbacks","cb","slice","hasListeners","_deconstructPacket","placeholder","_placeholder","num","newData","_reconstructPacket","toString","Object","withNativeBlob","Blob","withNativeFile","File","packetData","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","FileReader","onload","result","readAsArrayBuffer","arr","withNativeBuffer","Buffer","isBuffer","withNativeArrayBuffer","ArrayBuffer","isView","buffer","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","readyState","connecting","lastPing","packetBuffer","_parser","encoder","decoder","autoConnect","open","eio","has","hasOwnProperty","emitAll","updateSocketIds","generateId","engine","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","skipReconnect","openSub","onopen","errorSub","cleanup","timer","close","onping","onpong","ondata","ondecoded","onerror","onConnecting","encodedPackets","write","processPacketQueue","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","hostname","secure","agent","parseqs","decode","upgrade","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transports","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ca","ciphers","rejectUnauthorized","forceNode","isReactNative","product","extraHeaders","keys","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","clone","o","priorWebsocketSuccess","Transport","createTransport","EIO","transport","sid","requestTimeout","protocols","setTransport","onDrain","onPacket","onError","onClose","probe","onTransportOpen","upgradeLosesBinary","supportsBinary","failed","send","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","to","onOpen","l","onHandshake","setPing","code","filterUpgrades","onHeartbeat","ping","sendPacket","writable","compress","cleanupAndClose","waitForUpgrade","desc","filteredUpgrades","polling","xhr","xd","xs","isSSL","xdomain","xscheme","XMLHttpRequest","XHR","JSONP","websocket","hasCORS","globalThis","XDomainRequest","join","empty","Polling","Request","method","async","isBinary","create","unloadHandler","requests","abort","inherit","request","doWrite","req","sendXhr","doPoll","onData","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","onLoad","responseText","onreadystatechange","contentType","getResponseHeader","responseType","status","requestsCount","onSuccess","fromError","response","attachEvent","terminationEvent","hasXHR2","yeast","doOpen","poll","onPause","total","decodePayload","doClose","packets","callbackfn","encodePayload","schema","b64","description","decodePacket","encodeBase64Object","encodeArrayBuffer","encodeBase64Packet","contentArray","Uint8Array","resultBuffer","byteLength","encodeBlobAsArrayBuffer","fr","encodePacket","encodeBlob","dontSendBlobs","blob","tryDecode","utf8","strict","map","ary","each","done","after","eachWithIndex","el","base64encoder","hasBinary","sliceBuffer","isAndroid","isPhantomJS","pong","packetslist","utf8encode","encoded","readAsDataURL","b64data","fromCharCode","typed","basic","btoa","utf8decode","decodeBase64Packet","asArray","rest","setLengthHeader","encodeOne","doneCallback","encodePayloadAsBlob","encodePayloadAsArrayBuffer","results","decodePayloadAsBinary","chr","ret","totalLength","reduce","acc","resultArray","bufferIndex","forEach","isString","ab","view","lenStr","binaryIdentifier","size","lengthAry","bufferTail","tailArray","msgLength","toJSON","arraybuffer","start","end","bytes","abv","ii","count","err_cb","proxy","bail","ucs2decode","string","value","extra","output","counter","ucs2encode","stringFromCharCode","checkScalarValue","codePoint","toUpperCase","createByte","encodeCodePoint","symbol","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","tmp","chars","encoded1","encoded2","encoded3","encoded4","bufferLength","mapArrayBufferViews","chunk","copy","set","byteOffset","BlobBuilderConstructor","bb","BlobBuilder","part","append","getBlob","BlobConstructor","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","a","blobSupportsArrayBufferView","blobBuilderSupported","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","alphabet","decoded","now","seed","JSONPPolling","___eio","script","rNewline","rEscapedNewline","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","isUAgecko","complete","initIframe","html","iframeId","area","className","position","top","left","target","setAttribute","action","submit","WS","usingBrowserWebSocket","BrowserWebSocket","WebSocketImpl","NodeWebSocket","WebSocket","MozWebSocket","check","headers","ws","supports","addEventListeners","onmessage","ev","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","toArray","hasBin","events","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","subEvents","pop","onpacket","rootNamespaceError","onconnect","onevent","onack","ondisconnect","ack","sent","emitBuffered","list","factor","pow","rand","random","deviation"],"mappings":"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","file":"socket.io.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar url = __webpack_require__(1);\n\tvar parser = __webpack_require__(7);\n\tvar Manager = __webpack_require__(12);\n\tvar debug = __webpack_require__(3)('socket.io-client');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = lookup;\n\t\n\t/**\n\t * Managers cache.\n\t */\n\t\n\tvar cache = exports.managers = {};\n\t\n\t/**\n\t * Looks up an existing `Manager` for multiplexing.\n\t * If the user summons:\n\t *\n\t *   `io('http://localhost/a');`\n\t *   `io('http://localhost/b');`\n\t *\n\t * We reuse the existing instance based on same scheme/port/host,\n\t * and we initialize sockets for each namespace.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction lookup (uri, opts) {\n\t  if (typeof uri === 'object') {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t\n\t  opts = opts || {};\n\t\n\t  var parsed = url(uri);\n\t  var source = parsed.source;\n\t  var id = parsed.id;\n\t  var path = parsed.path;\n\t  var sameNamespace = cache[id] && path in cache[id].nsps;\n\t  var newConnection = opts.forceNew || opts['force new connection'] ||\n\t                      false === opts.multiplex || sameNamespace;\n\t\n\t  var io;\n\t\n\t  if (newConnection) {\n\t    debug('ignoring socket cache for %s', source);\n\t    io = Manager(source, opts);\n\t  } else {\n\t    if (!cache[id]) {\n\t      debug('new io instance for %s', source);\n\t      cache[id] = Manager(source, opts);\n\t    }\n\t    io = cache[id];\n\t  }\n\t  if (parsed.query && !opts.query) {\n\t    opts.query = parsed.query;\n\t  }\n\t  return io.socket(parsed.path, opts);\n\t}\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = parser.protocol;\n\t\n\t/**\n\t * `connect`.\n\t *\n\t * @param {String} uri\n\t * @api public\n\t */\n\t\n\texports.connect = lookup;\n\t\n\t/**\n\t * Expose constructors for standalone build.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Manager = __webpack_require__(12);\n\texports.Socket = __webpack_require__(37);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parseuri = __webpack_require__(2);\n\tvar debug = __webpack_require__(3)('socket.io-client:url');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = url;\n\t\n\t/**\n\t * URL parser.\n\t *\n\t * @param {String} url\n\t * @param {Object} An object meant to mimic window.location.\n\t *                 Defaults to window.location.\n\t * @api public\n\t */\n\t\n\tfunction url (uri, loc) {\n\t  var obj = uri;\n\t\n\t  // default to window.location\n\t  loc = loc || (typeof location !== 'undefined' && location);\n\t  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\t\n\t  // relative path support\n\t  if ('string' === typeof uri) {\n\t    if ('/' === uri.charAt(0)) {\n\t      if ('/' === uri.charAt(1)) {\n\t        uri = loc.protocol + uri;\n\t      } else {\n\t        uri = loc.host + uri;\n\t      }\n\t    }\n\t\n\t    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\t      debug('protocol-less url %s', uri);\n\t      if ('undefined' !== typeof loc) {\n\t        uri = loc.protocol + '//' + uri;\n\t      } else {\n\t        uri = 'https://' + uri;\n\t      }\n\t    }\n\t\n\t    // parse\n\t    debug('parse %s', uri);\n\t    obj = parseuri(uri);\n\t  }\n\t\n\t  // make sure we treat `localhost:80` and `localhost` equally\n\t  if (!obj.port) {\n\t    if (/^(http|ws)$/.test(obj.protocol)) {\n\t      obj.port = '80';\n\t    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n\t      obj.port = '443';\n\t    }\n\t  }\n\t\n\t  obj.path = obj.path || '/';\n\t\n\t  var ipv6 = obj.host.indexOf(':') !== -1;\n\t  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\t\n\t  // define unique id\n\t  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n\t  // define href\n\t  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\t\n\t  return obj;\n\t}\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Parses an URI\n\t *\n\t * @author Steven Levithan <stevenlevithan.com> (MIT license)\n\t * @api private\n\t */\n\t\n\tvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\t\n\tvar parts = [\n\t    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n\t];\n\t\n\tmodule.exports = function parseuri(str) {\n\t    var src = str,\n\t        b = str.indexOf('['),\n\t        e = str.indexOf(']');\n\t\n\t    if (b != -1 && e != -1) {\n\t        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n\t    }\n\t\n\t    var m = re.exec(str || ''),\n\t        uri = {},\n\t        i = 14;\n\t\n\t    while (i--) {\n\t        uri[parts[i]] = m[i] || '';\n\t    }\n\t\n\t    if (b != -1 && e != -1) {\n\t        uri.source = src;\n\t        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n\t        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n\t        uri.ipv6uri = true;\n\t    }\n\t\n\t    uri.pathNames = pathNames(uri, uri['path']);\n\t    uri.queryKey = queryKey(uri, uri['query']);\n\t\n\t    return uri;\n\t};\n\t\n\tfunction pathNames(obj, path) {\n\t    var regx = /\\/{2,9}/g,\n\t        names = path.replace(regx, \"/\").split(\"/\");\n\t\n\t    if (path.substr(0, 1) == '/' || path.length === 0) {\n\t        names.splice(0, 1);\n\t    }\n\t    if (path.substr(path.length - 1, 1) == '/') {\n\t        names.splice(names.length - 1, 1);\n\t    }\n\t\n\t    return names;\n\t}\n\t\n\tfunction queryKey(uri, query) {\n\t    var data = {};\n\t\n\t    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n\t        if ($1) {\n\t            data[$1] = $2;\n\t        }\n\t    });\n\t\n\t    return data;\n\t}\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar _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\t\n\t/**\n\t * This is the web browser implementation of `debug()`.\n\t *\n\t * Expose `debug()` as the module.\n\t */\n\t\n\texports = module.exports = __webpack_require__(5);\n\texports.log = log;\n\texports.formatArgs = formatArgs;\n\texports.save = save;\n\texports.load = load;\n\texports.useColors = useColors;\n\texports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();\n\t\n\t/**\n\t * Colors.\n\t */\n\t\n\texports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n\t\n\t/**\n\t * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n\t * and the Firebug extension (any Firefox version) are known\n\t * to support \"%c\" CSS customizations.\n\t *\n\t * TODO: add a `localStorage` variable to explicitly enable/disable colors\n\t */\n\t\n\tfunction useColors() {\n\t  // NB: In an Electron preload script, document will be defined but not fully\n\t  // initialized. Since we know we're in Chrome, we'll just detect this case\n\t  // explicitly\n\t  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n\t    return true;\n\t  }\n\t\n\t  // Internet Explorer and Edge do not support colors.\n\t  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t    return false;\n\t  }\n\t\n\t  // is webkit? http://stackoverflow.com/a/16459606/376773\n\t  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n\t  // is firebug? http://stackoverflow.com/a/398120/376773\n\t  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n\t  // is firefox >= v31?\n\t  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n\t  // double check webkit in userAgent just in case we are in a worker\n\t  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n\t}\n\t\n\t/**\n\t * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n\t */\n\t\n\texports.formatters.j = function (v) {\n\t  try {\n\t    return JSON.stringify(v);\n\t  } catch (err) {\n\t    return '[UnexpectedJSONParseError]: ' + err.message;\n\t  }\n\t};\n\t\n\t/**\n\t * Colorize log arguments if enabled.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction formatArgs(args) {\n\t  var useColors = this.useColors;\n\t\n\t  args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);\n\t\n\t  if (!useColors) return;\n\t\n\t  var c = 'color: ' + this.color;\n\t  args.splice(1, 0, c, 'color: inherit');\n\t\n\t  // the final \"%c\" is somewhat tricky, because there could be other\n\t  // arguments passed either before or after the %c, so we need to\n\t  // figure out the correct index to insert the CSS into\n\t  var index = 0;\n\t  var lastC = 0;\n\t  args[0].replace(/%[a-zA-Z%]/g, function (match) {\n\t    if ('%%' === match) return;\n\t    index++;\n\t    if ('%c' === match) {\n\t      // we only are interested in the *last* %c\n\t      // (the user may have provided their own)\n\t      lastC = index;\n\t    }\n\t  });\n\t\n\t  args.splice(lastC, 0, c);\n\t}\n\t\n\t/**\n\t * Invokes `console.log()` when available.\n\t * No-op when `console.log` is not a \"function\".\n\t *\n\t * @api public\n\t */\n\t\n\tfunction log() {\n\t  // this hackery is required for IE8/9, where\n\t  // the `console.log` function doesn't have 'apply'\n\t  return 'object' === (typeof console === 'undefined' ? 'undefined' : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments);\n\t}\n\t\n\t/**\n\t * Save `namespaces`.\n\t *\n\t * @param {String} namespaces\n\t * @api private\n\t */\n\t\n\tfunction save(namespaces) {\n\t  try {\n\t    if (null == namespaces) {\n\t      exports.storage.removeItem('debug');\n\t    } else {\n\t      exports.storage.debug = namespaces;\n\t    }\n\t  } catch (e) {}\n\t}\n\t\n\t/**\n\t * Load `namespaces`.\n\t *\n\t * @return {String} returns the previously persisted debug modes\n\t * @api private\n\t */\n\t\n\tfunction load() {\n\t  var r;\n\t  try {\n\t    r = exports.storage.debug;\n\t  } catch (e) {}\n\t\n\t  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\t  if (!r && typeof process !== 'undefined' && 'env' in process) {\n\t    r = process.env.DEBUG;\n\t  }\n\t\n\t  return r;\n\t}\n\t\n\t/**\n\t * Enable namespaces listed in `localStorage.debug` initially.\n\t */\n\t\n\texports.enable(load());\n\t\n\t/**\n\t * Localstorage attempts to return the localstorage.\n\t *\n\t * This is necessary because safari throws\n\t * when a user disables cookies/localstorage\n\t * and you attempt to access it.\n\t *\n\t * @return {LocalStorage}\n\t * @api private\n\t */\n\t\n\tfunction localstorage() {\n\t  try {\n\t    return window.localStorage;\n\t  } catch (e) {}\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things.  But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals.  It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t    throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t    throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t    try {\n\t        if (typeof setTimeout === 'function') {\n\t            cachedSetTimeout = setTimeout;\n\t        } else {\n\t            cachedSetTimeout = defaultSetTimout;\n\t        }\n\t    } catch (e) {\n\t        cachedSetTimeout = defaultSetTimout;\n\t    }\n\t    try {\n\t        if (typeof clearTimeout === 'function') {\n\t            cachedClearTimeout = clearTimeout;\n\t        } else {\n\t            cachedClearTimeout = defaultClearTimeout;\n\t        }\n\t    } catch (e) {\n\t        cachedClearTimeout = defaultClearTimeout;\n\t    }\n\t} ())\n\tfunction runTimeout(fun) {\n\t    if (cachedSetTimeout === setTimeout) {\n\t        //normal enviroments in sane situations\n\t        return setTimeout(fun, 0);\n\t    }\n\t    // if setTimeout wasn't available but was latter defined\n\t    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t        cachedSetTimeout = setTimeout;\n\t        return setTimeout(fun, 0);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedSetTimeout(fun, 0);\n\t    } catch(e){\n\t        try {\n\t            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t            return cachedSetTimeout.call(null, fun, 0);\n\t        } catch(e){\n\t            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t            return cachedSetTimeout.call(this, fun, 0);\n\t        }\n\t    }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t    if (cachedClearTimeout === clearTimeout) {\n\t        //normal enviroments in sane situations\n\t        return clearTimeout(marker);\n\t    }\n\t    // if clearTimeout wasn't available but was latter defined\n\t    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t        cachedClearTimeout = clearTimeout;\n\t        return clearTimeout(marker);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedClearTimeout(marker);\n\t    } catch (e){\n\t        try {\n\t            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n\t            return cachedClearTimeout.call(null, marker);\n\t        } catch (e){\n\t            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t            return cachedClearTimeout.call(this, marker);\n\t        }\n\t    }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t    if (!draining || !currentQueue) {\n\t        return;\n\t    }\n\t    draining = false;\n\t    if (currentQueue.length) {\n\t        queue = currentQueue.concat(queue);\n\t    } else {\n\t        queueIndex = -1;\n\t    }\n\t    if (queue.length) {\n\t        drainQueue();\n\t    }\n\t}\n\t\n\tfunction drainQueue() {\n\t    if (draining) {\n\t        return;\n\t    }\n\t    var timeout = runTimeout(cleanUpNextTick);\n\t    draining = true;\n\t\n\t    var len = queue.length;\n\t    while(len) {\n\t        currentQueue = queue;\n\t        queue = [];\n\t        while (++queueIndex < len) {\n\t            if (currentQueue) {\n\t                currentQueue[queueIndex].run();\n\t            }\n\t        }\n\t        queueIndex = -1;\n\t        len = queue.length;\n\t    }\n\t    currentQueue = null;\n\t    draining = false;\n\t    runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t    var args = new Array(arguments.length - 1);\n\t    if (arguments.length > 1) {\n\t        for (var i = 1; i < arguments.length; i++) {\n\t            args[i - 1] = arguments[i];\n\t        }\n\t    }\n\t    queue.push(new Item(fun, args));\n\t    if (queue.length === 1 && !draining) {\n\t        runTimeout(drainQueue);\n\t    }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t    this.fun = fun;\n\t    this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t    this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t    throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t    throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * This is the common logic for both the Node.js and web browser\n\t * implementations of `debug()`.\n\t *\n\t * Expose `debug()` as the module.\n\t */\n\t\n\texports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\n\texports.coerce = coerce;\n\texports.disable = disable;\n\texports.enable = enable;\n\texports.enabled = enabled;\n\texports.humanize = __webpack_require__(6);\n\t\n\t/**\n\t * Active `debug` instances.\n\t */\n\texports.instances = [];\n\t\n\t/**\n\t * The currently active debug mode names, and names to skip.\n\t */\n\t\n\texports.names = [];\n\texports.skips = [];\n\t\n\t/**\n\t * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t *\n\t * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t */\n\t\n\texports.formatters = {};\n\t\n\t/**\n\t * Select a color.\n\t * @param {String} namespace\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction selectColor(namespace) {\n\t  var hash = 0,\n\t      i;\n\t\n\t  for (i in namespace) {\n\t    hash = (hash << 5) - hash + namespace.charCodeAt(i);\n\t    hash |= 0; // Convert to 32bit integer\n\t  }\n\t\n\t  return exports.colors[Math.abs(hash) % exports.colors.length];\n\t}\n\t\n\t/**\n\t * Create a debugger with the given `namespace`.\n\t *\n\t * @param {String} namespace\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tfunction createDebug(namespace) {\n\t\n\t  var prevTime;\n\t\n\t  function debug() {\n\t    // disabled?\n\t    if (!debug.enabled) return;\n\t\n\t    var self = debug;\n\t\n\t    // set `diff` timestamp\n\t    var curr = +new Date();\n\t    var ms = curr - (prevTime || curr);\n\t    self.diff = ms;\n\t    self.prev = prevTime;\n\t    self.curr = curr;\n\t    prevTime = curr;\n\t\n\t    // turn the `arguments` into a proper Array\n\t    var args = new Array(arguments.length);\n\t    for (var i = 0; i < args.length; i++) {\n\t      args[i] = arguments[i];\n\t    }\n\t\n\t    args[0] = exports.coerce(args[0]);\n\t\n\t    if ('string' !== typeof args[0]) {\n\t      // anything else let's inspect with %O\n\t      args.unshift('%O');\n\t    }\n\t\n\t    // apply any `formatters` transformations\n\t    var index = 0;\n\t    args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n\t      // if we encounter an escaped % then don't increase the array index\n\t      if (match === '%%') return match;\n\t      index++;\n\t      var formatter = exports.formatters[format];\n\t      if ('function' === typeof formatter) {\n\t        var val = args[index];\n\t        match = formatter.call(self, val);\n\t\n\t        // now we need to remove `args[index]` since it's inlined in the `format`\n\t        args.splice(index, 1);\n\t        index--;\n\t      }\n\t      return match;\n\t    });\n\t\n\t    // apply env-specific formatting (colors, etc.)\n\t    exports.formatArgs.call(self, args);\n\t\n\t    var logFn = debug.log || exports.log || console.log.bind(console);\n\t    logFn.apply(self, args);\n\t  }\n\t\n\t  debug.namespace = namespace;\n\t  debug.enabled = exports.enabled(namespace);\n\t  debug.useColors = exports.useColors();\n\t  debug.color = selectColor(namespace);\n\t  debug.destroy = destroy;\n\t\n\t  // env-specific initialization logic for debug instances\n\t  if ('function' === typeof exports.init) {\n\t    exports.init(debug);\n\t  }\n\t\n\t  exports.instances.push(debug);\n\t\n\t  return debug;\n\t}\n\t\n\tfunction destroy() {\n\t  var index = exports.instances.indexOf(this);\n\t  if (index !== -1) {\n\t    exports.instances.splice(index, 1);\n\t    return true;\n\t  } else {\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Enables a debug mode by namespaces. This can include modes\n\t * separated by a colon and wildcards.\n\t *\n\t * @param {String} namespaces\n\t * @api public\n\t */\n\t\n\tfunction enable(namespaces) {\n\t  exports.save(namespaces);\n\t\n\t  exports.names = [];\n\t  exports.skips = [];\n\t\n\t  var i;\n\t  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t  var len = split.length;\n\t\n\t  for (i = 0; i < len; i++) {\n\t    if (!split[i]) continue; // ignore empty strings\n\t    namespaces = split[i].replace(/\\*/g, '.*?');\n\t    if (namespaces[0] === '-') {\n\t      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t    } else {\n\t      exports.names.push(new RegExp('^' + namespaces + '$'));\n\t    }\n\t  }\n\t\n\t  for (i = 0; i < exports.instances.length; i++) {\n\t    var instance = exports.instances[i];\n\t    instance.enabled = exports.enabled(instance.namespace);\n\t  }\n\t}\n\t\n\t/**\n\t * Disable debug output.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction disable() {\n\t  exports.enable('');\n\t}\n\t\n\t/**\n\t * Returns true if the given mode name is enabled, false otherwise.\n\t *\n\t * @param {String} name\n\t * @return {Boolean}\n\t * @api public\n\t */\n\t\n\tfunction enabled(name) {\n\t  if (name[name.length - 1] === '*') {\n\t    return true;\n\t  }\n\t  var i, len;\n\t  for (i = 0, len = exports.skips.length; i < len; i++) {\n\t    if (exports.skips[i].test(name)) {\n\t      return false;\n\t    }\n\t  }\n\t  for (i = 0, len = exports.names.length; i < len; i++) {\n\t    if (exports.names[i].test(name)) {\n\t      return true;\n\t    }\n\t  }\n\t  return false;\n\t}\n\t\n\t/**\n\t * Coerce `val`.\n\t *\n\t * @param {Mixed} val\n\t * @return {Mixed}\n\t * @api private\n\t */\n\t\n\tfunction coerce(val) {\n\t  if (val instanceof Error) return val.stack || val.message;\n\t  return val;\n\t}\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Helpers.\n\t */\n\t\n\tvar s = 1000;\n\tvar m = s * 60;\n\tvar h = m * 60;\n\tvar d = h * 24;\n\tvar y = d * 365.25;\n\t\n\t/**\n\t * Parse or format the given `val`.\n\t *\n\t * Options:\n\t *\n\t *  - `long` verbose formatting [false]\n\t *\n\t * @param {String|Number} val\n\t * @param {Object} [options]\n\t * @throws {Error} throw an error if val is not a non-empty string or a number\n\t * @return {String|Number}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(val, options) {\n\t  options = options || {};\n\t  var type = typeof val;\n\t  if (type === 'string' && val.length > 0) {\n\t    return parse(val);\n\t  } else if (type === 'number' && isNaN(val) === false) {\n\t    return options.long ? fmtLong(val) : fmtShort(val);\n\t  }\n\t  throw new Error(\n\t    'val is not a non-empty string or a valid number. val=' +\n\t      JSON.stringify(val)\n\t  );\n\t};\n\t\n\t/**\n\t * Parse the given `str` and return milliseconds.\n\t *\n\t * @param {String} str\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction parse(str) {\n\t  str = String(str);\n\t  if (str.length > 100) {\n\t    return;\n\t  }\n\t  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n\t    str\n\t  );\n\t  if (!match) {\n\t    return;\n\t  }\n\t  var n = parseFloat(match[1]);\n\t  var type = (match[2] || 'ms').toLowerCase();\n\t  switch (type) {\n\t    case 'years':\n\t    case 'year':\n\t    case 'yrs':\n\t    case 'yr':\n\t    case 'y':\n\t      return n * y;\n\t    case 'days':\n\t    case 'day':\n\t    case 'd':\n\t      return n * d;\n\t    case 'hours':\n\t    case 'hour':\n\t    case 'hrs':\n\t    case 'hr':\n\t    case 'h':\n\t      return n * h;\n\t    case 'minutes':\n\t    case 'minute':\n\t    case 'mins':\n\t    case 'min':\n\t    case 'm':\n\t      return n * m;\n\t    case 'seconds':\n\t    case 'second':\n\t    case 'secs':\n\t    case 'sec':\n\t    case 's':\n\t      return n * s;\n\t    case 'milliseconds':\n\t    case 'millisecond':\n\t    case 'msecs':\n\t    case 'msec':\n\t    case 'ms':\n\t      return n;\n\t    default:\n\t      return undefined;\n\t  }\n\t}\n\t\n\t/**\n\t * Short format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtShort(ms) {\n\t  if (ms >= d) {\n\t    return Math.round(ms / d) + 'd';\n\t  }\n\t  if (ms >= h) {\n\t    return Math.round(ms / h) + 'h';\n\t  }\n\t  if (ms >= m) {\n\t    return Math.round(ms / m) + 'm';\n\t  }\n\t  if (ms >= s) {\n\t    return Math.round(ms / s) + 's';\n\t  }\n\t  return ms + 'ms';\n\t}\n\t\n\t/**\n\t * Long format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtLong(ms) {\n\t  return plural(ms, d, 'day') ||\n\t    plural(ms, h, 'hour') ||\n\t    plural(ms, m, 'minute') ||\n\t    plural(ms, s, 'second') ||\n\t    ms + ' ms';\n\t}\n\t\n\t/**\n\t * Pluralization helper.\n\t */\n\t\n\tfunction plural(ms, n, name) {\n\t  if (ms < n) {\n\t    return;\n\t  }\n\t  if (ms < n * 1.5) {\n\t    return Math.floor(ms / n) + ' ' + name;\n\t  }\n\t  return Math.ceil(ms / n) + ' ' + name + 's';\n\t}\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar debug = __webpack_require__(3)('socket.io-parser');\n\tvar Emitter = __webpack_require__(8);\n\tvar binary = __webpack_require__(9);\n\tvar isArray = __webpack_require__(10);\n\tvar isBuf = __webpack_require__(11);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = 4;\n\t\n\t/**\n\t * Packet types.\n\t *\n\t * @api public\n\t */\n\t\n\texports.types = [\n\t  'CONNECT',\n\t  'DISCONNECT',\n\t  'EVENT',\n\t  'ACK',\n\t  'ERROR',\n\t  'BINARY_EVENT',\n\t  'BINARY_ACK'\n\t];\n\t\n\t/**\n\t * Packet type `connect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.CONNECT = 0;\n\t\n\t/**\n\t * Packet type `disconnect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.DISCONNECT = 1;\n\t\n\t/**\n\t * Packet type `event`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.EVENT = 2;\n\t\n\t/**\n\t * Packet type `ack`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ACK = 3;\n\t\n\t/**\n\t * Packet type `error`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ERROR = 4;\n\t\n\t/**\n\t * Packet type 'binary event'\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_EVENT = 5;\n\t\n\t/**\n\t * Packet type `binary ack`. For acks with binary arguments.\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_ACK = 6;\n\t\n\t/**\n\t * Encoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Encoder = Encoder;\n\t\n\t/**\n\t * Decoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Decoder = Decoder;\n\t\n\t/**\n\t * A socket.io Encoder instance\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Encoder() {}\n\t\n\tvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\t\n\t/**\n\t * Encode a packet as a single string if non-binary, or as a\n\t * buffer sequence, depending on packet type.\n\t *\n\t * @param {Object} obj - packet object\n\t * @param {Function} callback - function to handle encodings (likely engine.write)\n\t * @return Calls callback with Array of encodings\n\t * @api public\n\t */\n\t\n\tEncoder.prototype.encode = function(obj, callback){\n\t  debug('encoding packet %j', obj);\n\t\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    encodeAsBinary(obj, callback);\n\t  } else {\n\t    var encoding = encodeAsString(obj);\n\t    callback([encoding]);\n\t  }\n\t};\n\t\n\t/**\n\t * Encode packet as string.\n\t *\n\t * @param {Object} packet\n\t * @return {String} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsString(obj) {\n\t\n\t  // first is type\n\t  var str = '' + obj.type;\n\t\n\t  // attachments if we have them\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    str += obj.attachments + '-';\n\t  }\n\t\n\t  // if we have a namespace other than `/`\n\t  // we append it followed by a comma `,`\n\t  if (obj.nsp && '/' !== obj.nsp) {\n\t    str += obj.nsp + ',';\n\t  }\n\t\n\t  // immediately followed by the id\n\t  if (null != obj.id) {\n\t    str += obj.id;\n\t  }\n\t\n\t  // json data\n\t  if (null != obj.data) {\n\t    var payload = tryStringify(obj.data);\n\t    if (payload !== false) {\n\t      str += payload;\n\t    } else {\n\t      return ERROR_PACKET;\n\t    }\n\t  }\n\t\n\t  debug('encoded %j as %s', obj, str);\n\t  return str;\n\t}\n\t\n\tfunction tryStringify(str) {\n\t  try {\n\t    return JSON.stringify(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Encode packet as 'buffer sequence' by removing blobs, and\n\t * deconstructing packet into object with placeholders and\n\t * a list of buffers.\n\t *\n\t * @param {Object} packet\n\t * @return {Buffer} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsBinary(obj, callback) {\n\t\n\t  function writeEncoding(bloblessData) {\n\t    var deconstruction = binary.deconstructPacket(bloblessData);\n\t    var pack = encodeAsString(deconstruction.packet);\n\t    var buffers = deconstruction.buffers;\n\t\n\t    buffers.unshift(pack); // add packet info to beginning of data list\n\t    callback(buffers); // write all the buffers\n\t  }\n\t\n\t  binary.removeBlobs(obj, writeEncoding);\n\t}\n\t\n\t/**\n\t * A socket.io Decoder instance\n\t *\n\t * @return {Object} decoder\n\t * @api public\n\t */\n\t\n\tfunction Decoder() {\n\t  this.reconstructor = null;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter` with Decoder.\n\t */\n\t\n\tEmitter(Decoder.prototype);\n\t\n\t/**\n\t * Decodes an encoded packet string into packet JSON.\n\t *\n\t * @param {String} obj - encoded packet\n\t * @return {Object} packet\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.add = function(obj) {\n\t  var packet;\n\t  if (typeof obj === 'string') {\n\t    packet = decodeString(obj);\n\t    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n\t      this.reconstructor = new BinaryReconstructor(packet);\n\t\n\t      // no attachments, labeled binary but no binary data to follow\n\t      if (this.reconstructor.reconPack.attachments === 0) {\n\t        this.emit('decoded', packet);\n\t      }\n\t    } else { // non-binary full packet\n\t      this.emit('decoded', packet);\n\t    }\n\t  } else if (isBuf(obj) || obj.base64) { // raw binary data\n\t    if (!this.reconstructor) {\n\t      throw new Error('got binary data when not reconstructing a packet');\n\t    } else {\n\t      packet = this.reconstructor.takeBinaryData(obj);\n\t      if (packet) { // received final buffer\n\t        this.reconstructor = null;\n\t        this.emit('decoded', packet);\n\t      }\n\t    }\n\t  } else {\n\t    throw new Error('Unknown type: ' + obj);\n\t  }\n\t};\n\t\n\t/**\n\t * Decode a packet String (JSON data)\n\t *\n\t * @param {String} str\n\t * @return {Object} packet\n\t * @api private\n\t */\n\t\n\tfunction decodeString(str) {\n\t  var i = 0;\n\t  // look up type\n\t  var p = {\n\t    type: Number(str.charAt(0))\n\t  };\n\t\n\t  if (null == exports.types[p.type]) {\n\t    return error('unknown packet type ' + p.type);\n\t  }\n\t\n\t  // look up attachments if type binary\n\t  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n\t    var buf = '';\n\t    while (str.charAt(++i) !== '-') {\n\t      buf += str.charAt(i);\n\t      if (i == str.length) break;\n\t    }\n\t    if (buf != Number(buf) || str.charAt(i) !== '-') {\n\t      throw new Error('Illegal attachments');\n\t    }\n\t    p.attachments = Number(buf);\n\t  }\n\t\n\t  // look up namespace (if any)\n\t  if ('/' === str.charAt(i + 1)) {\n\t    p.nsp = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (',' === c) break;\n\t      p.nsp += c;\n\t      if (i === str.length) break;\n\t    }\n\t  } else {\n\t    p.nsp = '/';\n\t  }\n\t\n\t  // look up id\n\t  var next = str.charAt(i + 1);\n\t  if ('' !== next && Number(next) == next) {\n\t    p.id = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (null == c || Number(c) != c) {\n\t        --i;\n\t        break;\n\t      }\n\t      p.id += str.charAt(i);\n\t      if (i === str.length) break;\n\t    }\n\t    p.id = Number(p.id);\n\t  }\n\t\n\t  // look up json data\n\t  if (str.charAt(++i)) {\n\t    var payload = tryParse(str.substr(i));\n\t    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n\t    if (isPayloadValid) {\n\t      p.data = payload;\n\t    } else {\n\t      return error('invalid payload');\n\t    }\n\t  }\n\t\n\t  debug('decoded %s as %j', str, p);\n\t  return p;\n\t}\n\t\n\tfunction tryParse(str) {\n\t  try {\n\t    return JSON.parse(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Deallocates a parser's resources\n\t *\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.destroy = function() {\n\t  if (this.reconstructor) {\n\t    this.reconstructor.finishedReconstruction();\n\t  }\n\t};\n\t\n\t/**\n\t * A manager of a binary event's 'buffer sequence'. Should\n\t * be constructed whenever a packet of type BINARY_EVENT is\n\t * decoded.\n\t *\n\t * @param {Object} packet\n\t * @return {BinaryReconstructor} initialized reconstructor\n\t * @api private\n\t */\n\t\n\tfunction BinaryReconstructor(packet) {\n\t  this.reconPack = packet;\n\t  this.buffers = [];\n\t}\n\t\n\t/**\n\t * Method to be called when binary data received from connection\n\t * after a BINARY_EVENT packet.\n\t *\n\t * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n\t * @return {null | Object} returns null if more binary data is expected or\n\t *   a reconstructed packet object if all buffers have been received.\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n\t  this.buffers.push(binData);\n\t  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n\t    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n\t    this.finishedReconstruction();\n\t    return packet;\n\t  }\n\t  return null;\n\t};\n\t\n\t/**\n\t * Cleans up binary packet reconstruction variables.\n\t *\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.finishedReconstruction = function() {\n\t  this.reconPack = null;\n\t  this.buffers = [];\n\t};\n\t\n\tfunction error(msg) {\n\t  return {\n\t    type: exports.ERROR,\n\t    data: 'parser error: ' + msg\n\t  };\n\t}\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\r\n\t/**\r\n\t * Expose `Emitter`.\r\n\t */\r\n\t\r\n\tif (true) {\r\n\t  module.exports = Emitter;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialize a new `Emitter`.\r\n\t *\r\n\t * @api public\r\n\t */\r\n\t\r\n\tfunction Emitter(obj) {\r\n\t  if (obj) return mixin(obj);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Mixin the emitter properties.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\tfunction mixin(obj) {\r\n\t  for (var key in Emitter.prototype) {\r\n\t    obj[key] = Emitter.prototype[key];\r\n\t  }\r\n\t  return obj;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Listen on the given `event` with `fn`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.on =\r\n\tEmitter.prototype.addEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n\t    .push(fn);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds an `event` listener that will be invoked a single\r\n\t * time then automatically removed.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.once = function(event, fn){\r\n\t  function on() {\r\n\t    this.off(event, on);\r\n\t    fn.apply(this, arguments);\r\n\t  }\r\n\t\r\n\t  on.fn = fn;\r\n\t  this.on(event, on);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Remove the given callback for `event` or all\r\n\t * registered callbacks.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.off =\r\n\tEmitter.prototype.removeListener =\r\n\tEmitter.prototype.removeAllListeners =\r\n\tEmitter.prototype.removeEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  // all\r\n\t  if (0 == arguments.length) {\r\n\t    this._callbacks = {};\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // specific event\r\n\t  var callbacks = this._callbacks['$' + event];\r\n\t  if (!callbacks) return this;\r\n\t\r\n\t  // remove all handlers\r\n\t  if (1 == arguments.length) {\r\n\t    delete this._callbacks['$' + event];\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // remove specific handler\r\n\t  var cb;\r\n\t  for (var i = 0; i < callbacks.length; i++) {\r\n\t    cb = callbacks[i];\r\n\t    if (cb === fn || cb.fn === fn) {\r\n\t      callbacks.splice(i, 1);\r\n\t      break;\r\n\t    }\r\n\t  }\r\n\t\r\n\t  // Remove event specific arrays for event types that no\r\n\t  // one is subscribed for to avoid memory leak.\r\n\t  if (callbacks.length === 0) {\r\n\t    delete this._callbacks['$' + event];\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Emit `event` with the given args.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Mixed} ...\r\n\t * @return {Emitter}\r\n\t */\r\n\t\r\n\tEmitter.prototype.emit = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  var args = new Array(arguments.length - 1)\r\n\t    , callbacks = this._callbacks['$' + event];\r\n\t\r\n\t  for (var i = 1; i < arguments.length; i++) {\r\n\t    args[i - 1] = arguments[i];\r\n\t  }\r\n\t\r\n\t  if (callbacks) {\r\n\t    callbacks = callbacks.slice(0);\r\n\t    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n\t      callbacks[i].apply(this, args);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Return array of callbacks for `event`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Array}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.listeners = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  return this._callbacks['$' + event] || [];\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if this emitter has `event` handlers.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Boolean}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.hasListeners = function(event){\r\n\t  return !! this.listeners(event).length;\r\n\t};\r\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*global Blob,File*/\n\t\n\t/**\n\t * Module requirements\n\t */\n\t\n\tvar isArray = __webpack_require__(10);\n\tvar isBuf = __webpack_require__(11);\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\n\tvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\t\n\t/**\n\t * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n\t * Anything with blobs or files should be fed through removeBlobs before coming\n\t * here.\n\t *\n\t * @param {Object} packet - socket.io event packet\n\t * @return {Object} with deconstructed packet and list of buffers\n\t * @api public\n\t */\n\t\n\texports.deconstructPacket = function(packet) {\n\t  var buffers = [];\n\t  var packetData = packet.data;\n\t  var pack = packet;\n\t  pack.data = _deconstructPacket(packetData, buffers);\n\t  pack.attachments = buffers.length; // number of binary 'attachments'\n\t  return {packet: pack, buffers: buffers};\n\t};\n\t\n\tfunction _deconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (isBuf(data)) {\n\t    var placeholder = { _placeholder: true, num: buffers.length };\n\t    buffers.push(data);\n\t    return placeholder;\n\t  } else if (isArray(data)) {\n\t    var newData = new Array(data.length);\n\t    for (var i = 0; i < data.length; i++) {\n\t      newData[i] = _deconstructPacket(data[i], buffers);\n\t    }\n\t    return newData;\n\t  } else if (typeof data === 'object' && !(data instanceof Date)) {\n\t    var newData = {};\n\t    for (var key in data) {\n\t      newData[key] = _deconstructPacket(data[key], buffers);\n\t    }\n\t    return newData;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Reconstructs a binary packet from its placeholder packet and buffers\n\t *\n\t * @param {Object} packet - event packet with placeholders\n\t * @param {Array} buffers - binary buffers to put in placeholder positions\n\t * @return {Object} reconstructed packet\n\t * @api public\n\t */\n\t\n\texports.reconstructPacket = function(packet, buffers) {\n\t  packet.data = _reconstructPacket(packet.data, buffers);\n\t  packet.attachments = undefined; // no longer useful\n\t  return packet;\n\t};\n\t\n\tfunction _reconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (data && data._placeholder) {\n\t    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n\t  } else if (isArray(data)) {\n\t    for (var i = 0; i < data.length; i++) {\n\t      data[i] = _reconstructPacket(data[i], buffers);\n\t    }\n\t  } else if (typeof data === 'object') {\n\t    for (var key in data) {\n\t      data[key] = _reconstructPacket(data[key], buffers);\n\t    }\n\t  }\n\t\n\t  return data;\n\t}\n\t\n\t/**\n\t * Asynchronously removes Blobs or Files from data via\n\t * FileReader's readAsArrayBuffer method. Used before encoding\n\t * data as msgpack. Calls callback with the blobless data.\n\t *\n\t * @param {Object} data\n\t * @param {Function} callback\n\t * @api private\n\t */\n\t\n\texports.removeBlobs = function(data, callback) {\n\t  function _removeBlobs(obj, curKey, containingObject) {\n\t    if (!obj) return obj;\n\t\n\t    // convert any blob\n\t    if ((withNativeBlob && obj instanceof Blob) ||\n\t        (withNativeFile && obj instanceof File)) {\n\t      pendingBlobs++;\n\t\n\t      // async filereader\n\t      var fileReader = new FileReader();\n\t      fileReader.onload = function() { // this.result == arraybuffer\n\t        if (containingObject) {\n\t          containingObject[curKey] = this.result;\n\t        }\n\t        else {\n\t          bloblessData = this.result;\n\t        }\n\t\n\t        // if nothing pending its callback time\n\t        if(! --pendingBlobs) {\n\t          callback(bloblessData);\n\t        }\n\t      };\n\t\n\t      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n\t    } else if (isArray(obj)) { // handle array\n\t      for (var i = 0; i < obj.length; i++) {\n\t        _removeBlobs(obj[i], i, obj);\n\t      }\n\t    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n\t      for (var key in obj) {\n\t        _removeBlobs(obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t\n\t  var pendingBlobs = 0;\n\t  var bloblessData = data;\n\t  _removeBlobs(bloblessData);\n\t  if (!pendingBlobs) {\n\t    callback(bloblessData);\n\t  }\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = Array.isArray || function (arr) {\n\t  return toString.call(arr) == '[object Array]';\n\t};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = isBuf;\n\t\n\tvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\n\tvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\t\n\tvar isView = function (obj) {\n\t  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n\t};\n\t\n\t/**\n\t * Returns true if obj is a buffer or an arraybuffer.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction isBuf(obj) {\n\t  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n\t          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n\t}\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar eio = __webpack_require__(13);\n\tvar Socket = __webpack_require__(37);\n\tvar Emitter = __webpack_require__(8);\n\tvar parser = __webpack_require__(7);\n\tvar on = __webpack_require__(39);\n\tvar bind = __webpack_require__(40);\n\tvar debug = __webpack_require__(3)('socket.io-client:manager');\n\tvar indexOf = __webpack_require__(36);\n\tvar Backoff = __webpack_require__(41);\n\t\n\t/**\n\t * IE6+ hasOwnProperty\n\t */\n\t\n\tvar has = Object.prototype.hasOwnProperty;\n\t\n\t/**\n\t * Module exports\n\t */\n\t\n\tmodule.exports = Manager;\n\t\n\t/**\n\t * `Manager` constructor.\n\t *\n\t * @param {String} engine instance or engine uri/opts\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Manager (uri, opts) {\n\t  if (!(this instanceof Manager)) return new Manager(uri, opts);\n\t  if (uri && ('object' === typeof uri)) {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t  opts = opts || {};\n\t\n\t  opts.path = opts.path || '/socket.io';\n\t  this.nsps = {};\n\t  this.subs = [];\n\t  this.opts = opts;\n\t  this.reconnection(opts.reconnection !== false);\n\t  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n\t  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n\t  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n\t  this.randomizationFactor(opts.randomizationFactor || 0.5);\n\t  this.backoff = new Backoff({\n\t    min: this.reconnectionDelay(),\n\t    max: this.reconnectionDelayMax(),\n\t    jitter: this.randomizationFactor()\n\t  });\n\t  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n\t  this.readyState = 'closed';\n\t  this.uri = uri;\n\t  this.connecting = [];\n\t  this.lastPing = null;\n\t  this.encoding = false;\n\t  this.packetBuffer = [];\n\t  var _parser = opts.parser || parser;\n\t  this.encoder = new _parser.Encoder();\n\t  this.decoder = new _parser.Decoder();\n\t  this.autoConnect = opts.autoConnect !== false;\n\t  if (this.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Propagate given event to sockets and emit on `this`\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.emitAll = function () {\n\t  this.emit.apply(this, arguments);\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Update `socket.id` of all sockets\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.updateSocketIds = function () {\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].id = this.generateId(nsp);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * generate `socket.id` for the given `nsp`\n\t *\n\t * @param {String} nsp\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tManager.prototype.generateId = function (nsp) {\n\t  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n\t};\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Manager.prototype);\n\t\n\t/**\n\t * Sets the `reconnection` config.\n\t *\n\t * @param {Boolean} true/false if it should automatically reconnect\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnection = function (v) {\n\t  if (!arguments.length) return this._reconnection;\n\t  this._reconnection = !!v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the reconnection attempts config.\n\t *\n\t * @param {Number} max reconnection attempts before giving up\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionAttempts = function (v) {\n\t  if (!arguments.length) return this._reconnectionAttempts;\n\t  this._reconnectionAttempts = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelay = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelay;\n\t  this._reconnectionDelay = v;\n\t  this.backoff && this.backoff.setMin(v);\n\t  return this;\n\t};\n\t\n\tManager.prototype.randomizationFactor = function (v) {\n\t  if (!arguments.length) return this._randomizationFactor;\n\t  this._randomizationFactor = v;\n\t  this.backoff && this.backoff.setJitter(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the maximum delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelayMax = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelayMax;\n\t  this._reconnectionDelayMax = v;\n\t  this.backoff && this.backoff.setMax(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the connection timeout. `false` to disable\n\t *\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.timeout = function (v) {\n\t  if (!arguments.length) return this._timeout;\n\t  this._timeout = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Starts trying to reconnect if reconnection is enabled and we have not\n\t * started reconnecting yet\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.maybeReconnectOnOpen = function () {\n\t  // Only try to reconnect if it's the first time we're connecting\n\t  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n\t    // keeps reconnection from firing twice for the same reconnection loop\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Sets the current transport `socket`.\n\t *\n\t * @param {Function} optional, callback\n\t * @return {Manager} self\n\t * @api public\n\t */\n\t\n\tManager.prototype.open =\n\tManager.prototype.connect = function (fn, opts) {\n\t  debug('readyState %s', this.readyState);\n\t  if (~this.readyState.indexOf('open')) return this;\n\t\n\t  debug('opening %s', this.uri);\n\t  this.engine = eio(this.uri, this.opts);\n\t  var socket = this.engine;\n\t  var self = this;\n\t  this.readyState = 'opening';\n\t  this.skipReconnect = false;\n\t\n\t  // emit `open`\n\t  var openSub = on(socket, 'open', function () {\n\t    self.onopen();\n\t    fn && fn();\n\t  });\n\t\n\t  // emit `connect_error`\n\t  var errorSub = on(socket, 'error', function (data) {\n\t    debug('connect_error');\n\t    self.cleanup();\n\t    self.readyState = 'closed';\n\t    self.emitAll('connect_error', data);\n\t    if (fn) {\n\t      var err = new Error('Connection error');\n\t      err.data = data;\n\t      fn(err);\n\t    } else {\n\t      // Only do this if there is no fn to handle the error\n\t      self.maybeReconnectOnOpen();\n\t    }\n\t  });\n\t\n\t  // emit `connect_timeout`\n\t  if (false !== this._timeout) {\n\t    var timeout = this._timeout;\n\t    debug('connect attempt will timeout after %d', timeout);\n\t\n\t    if (timeout === 0) {\n\t      openSub.destroy(); // prevents a race condition with the 'open' event\n\t    }\n\t\n\t    // set timer\n\t    var timer = setTimeout(function () {\n\t      debug('connect attempt timed out after %d', timeout);\n\t      openSub.destroy();\n\t      socket.close();\n\t      socket.emit('error', 'timeout');\n\t      self.emitAll('connect_timeout', timeout);\n\t    }, timeout);\n\t\n\t    this.subs.push({\n\t      destroy: function () {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t\n\t  this.subs.push(openSub);\n\t  this.subs.push(errorSub);\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport open.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onopen = function () {\n\t  debug('open');\n\t\n\t  // clear old subs\n\t  this.cleanup();\n\t\n\t  // mark as open\n\t  this.readyState = 'open';\n\t  this.emit('open');\n\t\n\t  // add new subs\n\t  var socket = this.engine;\n\t  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n\t  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n\t  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n\t  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n\t  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n\t  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n\t};\n\t\n\t/**\n\t * Called upon a ping.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onping = function () {\n\t  this.lastPing = new Date();\n\t  this.emitAll('ping');\n\t};\n\t\n\t/**\n\t * Called upon a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onpong = function () {\n\t  this.emitAll('pong', new Date() - this.lastPing);\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondata = function (data) {\n\t  this.decoder.add(data);\n\t};\n\t\n\t/**\n\t * Called when parser fully decodes a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondecoded = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon socket error.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onerror = function (err) {\n\t  debug('error', err);\n\t  this.emitAll('error', err);\n\t};\n\t\n\t/**\n\t * Creates a new socket for the given `nsp`.\n\t *\n\t * @return {Socket}\n\t * @api public\n\t */\n\t\n\tManager.prototype.socket = function (nsp, opts) {\n\t  var socket = this.nsps[nsp];\n\t  if (!socket) {\n\t    socket = new Socket(this, nsp, opts);\n\t    this.nsps[nsp] = socket;\n\t    var self = this;\n\t    socket.on('connecting', onConnecting);\n\t    socket.on('connect', function () {\n\t      socket.id = self.generateId(nsp);\n\t    });\n\t\n\t    if (this.autoConnect) {\n\t      // manually call here since connecting event is fired before listening\n\t      onConnecting();\n\t    }\n\t  }\n\t\n\t  function onConnecting () {\n\t    if (!~indexOf(self.connecting, socket)) {\n\t      self.connecting.push(socket);\n\t    }\n\t  }\n\t\n\t  return socket;\n\t};\n\t\n\t/**\n\t * Called upon a socket close.\n\t *\n\t * @param {Socket} socket\n\t */\n\t\n\tManager.prototype.destroy = function (socket) {\n\t  var index = indexOf(this.connecting, socket);\n\t  if (~index) this.connecting.splice(index, 1);\n\t  if (this.connecting.length) return;\n\t\n\t  this.close();\n\t};\n\t\n\t/**\n\t * Writes a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tManager.prototype.packet = function (packet) {\n\t  debug('writing packet %j', packet);\n\t  var self = this;\n\t  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\t\n\t  if (!self.encoding) {\n\t    // encode, then write to engine with result\n\t    self.encoding = true;\n\t    this.encoder.encode(packet, function (encodedPackets) {\n\t      for (var i = 0; i < encodedPackets.length; i++) {\n\t        self.engine.write(encodedPackets[i], packet.options);\n\t      }\n\t      self.encoding = false;\n\t      self.processPacketQueue();\n\t    });\n\t  } else { // add packet to the queue\n\t    self.packetBuffer.push(packet);\n\t  }\n\t};\n\t\n\t/**\n\t * If packet buffer is non-empty, begins encoding the\n\t * next packet in line.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.processPacketQueue = function () {\n\t  if (this.packetBuffer.length > 0 && !this.encoding) {\n\t    var pack = this.packetBuffer.shift();\n\t    this.packet(pack);\n\t  }\n\t};\n\t\n\t/**\n\t * Clean up transport subscriptions and packet buffer.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.cleanup = function () {\n\t  debug('cleanup');\n\t\n\t  var subsLength = this.subs.length;\n\t  for (var i = 0; i < subsLength; i++) {\n\t    var sub = this.subs.shift();\n\t    sub.destroy();\n\t  }\n\t\n\t  this.packetBuffer = [];\n\t  this.encoding = false;\n\t  this.lastPing = null;\n\t\n\t  this.decoder.destroy();\n\t};\n\t\n\t/**\n\t * Close the current socket.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.close =\n\tManager.prototype.disconnect = function () {\n\t  debug('disconnect');\n\t  this.skipReconnect = true;\n\t  this.reconnecting = false;\n\t  if ('opening' === this.readyState) {\n\t    // `onclose` will not fire because\n\t    // an open event never happened\n\t    this.cleanup();\n\t  }\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  if (this.engine) this.engine.close();\n\t};\n\t\n\t/**\n\t * Called upon engine close.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onclose = function (reason) {\n\t  debug('onclose');\n\t\n\t  this.cleanup();\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  this.emit('close', reason);\n\t\n\t  if (this._reconnection && !this.skipReconnect) {\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Attempt a reconnection.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.reconnect = function () {\n\t  if (this.reconnecting || this.skipReconnect) return this;\n\t\n\t  var self = this;\n\t\n\t  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\t    debug('reconnect failed');\n\t    this.backoff.reset();\n\t    this.emitAll('reconnect_failed');\n\t    this.reconnecting = false;\n\t  } else {\n\t    var delay = this.backoff.duration();\n\t    debug('will wait %dms before reconnect attempt', delay);\n\t\n\t    this.reconnecting = true;\n\t    var timer = setTimeout(function () {\n\t      if (self.skipReconnect) return;\n\t\n\t      debug('attempting reconnect');\n\t      self.emitAll('reconnect_attempt', self.backoff.attempts);\n\t      self.emitAll('reconnecting', self.backoff.attempts);\n\t\n\t      // check again for the case socket closed in above events\n\t      if (self.skipReconnect) return;\n\t\n\t      self.open(function (err) {\n\t        if (err) {\n\t          debug('reconnect attempt error');\n\t          self.reconnecting = false;\n\t          self.reconnect();\n\t          self.emitAll('reconnect_error', err.data);\n\t        } else {\n\t          debug('reconnect success');\n\t          self.onreconnect();\n\t        }\n\t      });\n\t    }, delay);\n\t\n\t    this.subs.push({\n\t      destroy: function () {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful reconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onreconnect = function () {\n\t  var attempt = this.backoff.attempts;\n\t  this.reconnecting = false;\n\t  this.backoff.reset();\n\t  this.updateSocketIds();\n\t  this.emitAll('reconnect', attempt);\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\tmodule.exports = __webpack_require__(14);\n\t\n\t/**\n\t * Exports parser\n\t *\n\t * @api public\n\t *\n\t */\n\tmodule.exports.parser = __webpack_require__(22);\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar transports = __webpack_require__(15);\n\tvar Emitter = __webpack_require__(8);\n\tvar debug = __webpack_require__(3)('engine.io-client:socket');\n\tvar index = __webpack_require__(36);\n\tvar parser = __webpack_require__(22);\n\tvar parseuri = __webpack_require__(2);\n\tvar parseqs = __webpack_require__(30);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Socket;\n\t\n\t/**\n\t * Socket constructor.\n\t *\n\t * @param {String|Object} uri or options\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Socket (uri, opts) {\n\t  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\t\n\t  opts = opts || {};\n\t\n\t  if (uri && 'object' === typeof uri) {\n\t    opts = uri;\n\t    uri = null;\n\t  }\n\t\n\t  if (uri) {\n\t    uri = parseuri(uri);\n\t    opts.hostname = uri.host;\n\t    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n\t    opts.port = uri.port;\n\t    if (uri.query) opts.query = uri.query;\n\t  } else if (opts.host) {\n\t    opts.hostname = parseuri(opts.host).host;\n\t  }\n\t\n\t  this.secure = null != opts.secure ? opts.secure\n\t    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\t\n\t  if (opts.hostname && !opts.port) {\n\t    // if no port is specified manually, use the protocol default\n\t    opts.port = this.secure ? '443' : '80';\n\t  }\n\t\n\t  this.agent = opts.agent || false;\n\t  this.hostname = opts.hostname ||\n\t    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n\t  this.port = opts.port || (typeof location !== 'undefined' && location.port\n\t      ? location.port\n\t      : (this.secure ? 443 : 80));\n\t  this.query = opts.query || {};\n\t  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n\t  this.upgrade = false !== opts.upgrade;\n\t  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n\t  this.forceJSONP = !!opts.forceJSONP;\n\t  this.jsonp = false !== opts.jsonp;\n\t  this.forceBase64 = !!opts.forceBase64;\n\t  this.enablesXDR = !!opts.enablesXDR;\n\t  this.withCredentials = false !== opts.withCredentials;\n\t  this.timestampParam = opts.timestampParam || 't';\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.transports = opts.transports || ['polling', 'websocket'];\n\t  this.transportOptions = opts.transportOptions || {};\n\t  this.readyState = '';\n\t  this.writeBuffer = [];\n\t  this.prevBufferLen = 0;\n\t  this.policyPort = opts.policyPort || 843;\n\t  this.rememberUpgrade = opts.rememberUpgrade || false;\n\t  this.binaryType = null;\n\t  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n\t  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\t\n\t  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n\t  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n\t    this.perMessageDeflate.threshold = 1024;\n\t  }\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx || null;\n\t  this.key = opts.key || null;\n\t  this.passphrase = opts.passphrase || null;\n\t  this.cert = opts.cert || null;\n\t  this.ca = opts.ca || null;\n\t  this.ciphers = opts.ciphers || null;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n\t  this.forceNode = !!opts.forceNode;\n\t\n\t  // detect ReactNative environment\n\t  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\t\n\t  // other options for Node.js or ReactNative client\n\t  if (typeof self === 'undefined' || this.isReactNative) {\n\t    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n\t      this.extraHeaders = opts.extraHeaders;\n\t    }\n\t\n\t    if (opts.localAddress) {\n\t      this.localAddress = opts.localAddress;\n\t    }\n\t  }\n\t\n\t  // set on handshake\n\t  this.id = null;\n\t  this.upgrades = null;\n\t  this.pingInterval = null;\n\t  this.pingTimeout = null;\n\t\n\t  // set on heartbeat\n\t  this.pingIntervalTimer = null;\n\t  this.pingTimeoutTimer = null;\n\t\n\t  this.open();\n\t}\n\t\n\tSocket.priorWebsocketSuccess = false;\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.protocol = parser.protocol; // this is an int\n\t\n\t/**\n\t * Expose deps for legacy compatibility\n\t * and standalone browser access.\n\t */\n\t\n\tSocket.Socket = Socket;\n\tSocket.Transport = __webpack_require__(21);\n\tSocket.transports = __webpack_require__(15);\n\tSocket.parser = __webpack_require__(22);\n\t\n\t/**\n\t * Creates transport of the given type.\n\t *\n\t * @param {String} transport name\n\t * @return {Transport}\n\t * @api private\n\t */\n\t\n\tSocket.prototype.createTransport = function (name) {\n\t  debug('creating transport \"%s\"', name);\n\t  var query = clone(this.query);\n\t\n\t  // append engine.io protocol identifier\n\t  query.EIO = parser.protocol;\n\t\n\t  // transport name\n\t  query.transport = name;\n\t\n\t  // per-transport options\n\t  var options = this.transportOptions[name] || {};\n\t\n\t  // session id if we already have one\n\t  if (this.id) query.sid = this.id;\n\t\n\t  var transport = new transports[name]({\n\t    query: query,\n\t    socket: this,\n\t    agent: options.agent || this.agent,\n\t    hostname: options.hostname || this.hostname,\n\t    port: options.port || this.port,\n\t    secure: options.secure || this.secure,\n\t    path: options.path || this.path,\n\t    forceJSONP: options.forceJSONP || this.forceJSONP,\n\t    jsonp: options.jsonp || this.jsonp,\n\t    forceBase64: options.forceBase64 || this.forceBase64,\n\t    enablesXDR: options.enablesXDR || this.enablesXDR,\n\t    withCredentials: options.withCredentials || this.withCredentials,\n\t    timestampRequests: options.timestampRequests || this.timestampRequests,\n\t    timestampParam: options.timestampParam || this.timestampParam,\n\t    policyPort: options.policyPort || this.policyPort,\n\t    pfx: options.pfx || this.pfx,\n\t    key: options.key || this.key,\n\t    passphrase: options.passphrase || this.passphrase,\n\t    cert: options.cert || this.cert,\n\t    ca: options.ca || this.ca,\n\t    ciphers: options.ciphers || this.ciphers,\n\t    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n\t    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n\t    extraHeaders: options.extraHeaders || this.extraHeaders,\n\t    forceNode: options.forceNode || this.forceNode,\n\t    localAddress: options.localAddress || this.localAddress,\n\t    requestTimeout: options.requestTimeout || this.requestTimeout,\n\t    protocols: options.protocols || void (0),\n\t    isReactNative: this.isReactNative\n\t  });\n\t\n\t  return transport;\n\t};\n\t\n\tfunction clone (obj) {\n\t  var o = {};\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      o[i] = obj[i];\n\t    }\n\t  }\n\t  return o;\n\t}\n\t\n\t/**\n\t * Initializes transport to use and starts probe.\n\t *\n\t * @api private\n\t */\n\tSocket.prototype.open = function () {\n\t  var transport;\n\t  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n\t    transport = 'websocket';\n\t  } else if (0 === this.transports.length) {\n\t    // Emit error on next tick so it can be listened to\n\t    var self = this;\n\t    setTimeout(function () {\n\t      self.emit('error', 'No transports available');\n\t    }, 0);\n\t    return;\n\t  } else {\n\t    transport = this.transports[0];\n\t  }\n\t  this.readyState = 'opening';\n\t\n\t  // Retry with the next transport if the transport is disabled (jsonp: false)\n\t  try {\n\t    transport = this.createTransport(transport);\n\t  } catch (e) {\n\t    this.transports.shift();\n\t    this.open();\n\t    return;\n\t  }\n\t\n\t  transport.open();\n\t  this.setTransport(transport);\n\t};\n\t\n\t/**\n\t * Sets the current transport. Disables the existing one (if any).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setTransport = function (transport) {\n\t  debug('setting transport %s', transport.name);\n\t  var self = this;\n\t\n\t  if (this.transport) {\n\t    debug('clearing existing transport %s', this.transport.name);\n\t    this.transport.removeAllListeners();\n\t  }\n\t\n\t  // set up transport\n\t  this.transport = transport;\n\t\n\t  // set up transport listeners\n\t  transport\n\t  .on('drain', function () {\n\t    self.onDrain();\n\t  })\n\t  .on('packet', function (packet) {\n\t    self.onPacket(packet);\n\t  })\n\t  .on('error', function (e) {\n\t    self.onError(e);\n\t  })\n\t  .on('close', function () {\n\t    self.onClose('transport close');\n\t  });\n\t};\n\t\n\t/**\n\t * Probes a transport.\n\t *\n\t * @param {String} transport name\n\t * @api private\n\t */\n\t\n\tSocket.prototype.probe = function (name) {\n\t  debug('probing transport \"%s\"', name);\n\t  var transport = this.createTransport(name, { probe: 1 });\n\t  var failed = false;\n\t  var self = this;\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t\n\t  function onTransportOpen () {\n\t    if (self.onlyBinaryUpgrades) {\n\t      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n\t      failed = failed || upgradeLosesBinary;\n\t    }\n\t    if (failed) return;\n\t\n\t    debug('probe transport \"%s\" opened', name);\n\t    transport.send([{ type: 'ping', data: 'probe' }]);\n\t    transport.once('packet', function (msg) {\n\t      if (failed) return;\n\t      if ('pong' === msg.type && 'probe' === msg.data) {\n\t        debug('probe transport \"%s\" pong', name);\n\t        self.upgrading = true;\n\t        self.emit('upgrading', transport);\n\t        if (!transport) return;\n\t        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\t\n\t        debug('pausing current transport \"%s\"', self.transport.name);\n\t        self.transport.pause(function () {\n\t          if (failed) return;\n\t          if ('closed' === self.readyState) return;\n\t          debug('changing transport and sending upgrade packet');\n\t\n\t          cleanup();\n\t\n\t          self.setTransport(transport);\n\t          transport.send([{ type: 'upgrade' }]);\n\t          self.emit('upgrade', transport);\n\t          transport = null;\n\t          self.upgrading = false;\n\t          self.flush();\n\t        });\n\t      } else {\n\t        debug('probe transport \"%s\" failed', name);\n\t        var err = new Error('probe error');\n\t        err.transport = transport.name;\n\t        self.emit('upgradeError', err);\n\t      }\n\t    });\n\t  }\n\t\n\t  function freezeTransport () {\n\t    if (failed) return;\n\t\n\t    // Any callback called by transport should be ignored since now\n\t    failed = true;\n\t\n\t    cleanup();\n\t\n\t    transport.close();\n\t    transport = null;\n\t  }\n\t\n\t  // Handle any error that happens while probing\n\t  function onerror (err) {\n\t    var error = new Error('probe error: ' + err);\n\t    error.transport = transport.name;\n\t\n\t    freezeTransport();\n\t\n\t    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\t\n\t    self.emit('upgradeError', error);\n\t  }\n\t\n\t  function onTransportClose () {\n\t    onerror('transport closed');\n\t  }\n\t\n\t  // When the socket is closed while we're probing\n\t  function onclose () {\n\t    onerror('socket closed');\n\t  }\n\t\n\t  // When the socket is upgraded while we're probing\n\t  function onupgrade (to) {\n\t    if (transport && to.name !== transport.name) {\n\t      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n\t      freezeTransport();\n\t    }\n\t  }\n\t\n\t  // Remove all listeners on the transport and on self\n\t  function cleanup () {\n\t    transport.removeListener('open', onTransportOpen);\n\t    transport.removeListener('error', onerror);\n\t    transport.removeListener('close', onTransportClose);\n\t    self.removeListener('close', onclose);\n\t    self.removeListener('upgrading', onupgrade);\n\t  }\n\t\n\t  transport.once('open', onTransportOpen);\n\t  transport.once('error', onerror);\n\t  transport.once('close', onTransportClose);\n\t\n\t  this.once('close', onclose);\n\t  this.once('upgrading', onupgrade);\n\t\n\t  transport.open();\n\t};\n\t\n\t/**\n\t * Called when connection is deemed open.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.onOpen = function () {\n\t  debug('socket open');\n\t  this.readyState = 'open';\n\t  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n\t  this.emit('open');\n\t  this.flush();\n\t\n\t  // we check for `readyState` in case an `open`\n\t  // listener already closed the socket\n\t  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\t    debug('starting upgrade probes');\n\t    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n\t      this.probe(this.upgrades[i]);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Handles a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onPacket = function (packet) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState ||\n\t      'closing' === this.readyState) {\n\t    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\t\n\t    this.emit('packet', packet);\n\t\n\t    // Socket is live - any packet counts\n\t    this.emit('heartbeat');\n\t\n\t    switch (packet.type) {\n\t      case 'open':\n\t        this.onHandshake(JSON.parse(packet.data));\n\t        break;\n\t\n\t      case 'pong':\n\t        this.setPing();\n\t        this.emit('pong');\n\t        break;\n\t\n\t      case 'error':\n\t        var err = new Error('server error');\n\t        err.code = packet.data;\n\t        this.onError(err);\n\t        break;\n\t\n\t      case 'message':\n\t        this.emit('data', packet.data);\n\t        this.emit('message', packet.data);\n\t        break;\n\t    }\n\t  } else {\n\t    debug('packet received with socket readyState \"%s\"', this.readyState);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon handshake completion.\n\t *\n\t * @param {Object} handshake obj\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHandshake = function (data) {\n\t  this.emit('handshake', data);\n\t  this.id = data.sid;\n\t  this.transport.query.sid = data.sid;\n\t  this.upgrades = this.filterUpgrades(data.upgrades);\n\t  this.pingInterval = data.pingInterval;\n\t  this.pingTimeout = data.pingTimeout;\n\t  this.onOpen();\n\t  // In case open handler closes socket\n\t  if ('closed' === this.readyState) return;\n\t  this.setPing();\n\t\n\t  // Prolong liveness of socket on heartbeat\n\t  this.removeListener('heartbeat', this.onHeartbeat);\n\t  this.on('heartbeat', this.onHeartbeat);\n\t};\n\t\n\t/**\n\t * Resets ping timeout.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHeartbeat = function (timeout) {\n\t  clearTimeout(this.pingTimeoutTimer);\n\t  var self = this;\n\t  self.pingTimeoutTimer = setTimeout(function () {\n\t    if ('closed' === self.readyState) return;\n\t    self.onClose('ping timeout');\n\t  }, timeout || (self.pingInterval + self.pingTimeout));\n\t};\n\t\n\t/**\n\t * Pings server every `this.pingInterval` and expects response\n\t * within `this.pingTimeout` or closes connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setPing = function () {\n\t  var self = this;\n\t  clearTimeout(self.pingIntervalTimer);\n\t  self.pingIntervalTimer = setTimeout(function () {\n\t    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n\t    self.ping();\n\t    self.onHeartbeat(self.pingTimeout);\n\t  }, self.pingInterval);\n\t};\n\t\n\t/**\n\t* Sends a ping packet.\n\t*\n\t* @api private\n\t*/\n\t\n\tSocket.prototype.ping = function () {\n\t  var self = this;\n\t  this.sendPacket('ping', function () {\n\t    self.emit('ping');\n\t  });\n\t};\n\t\n\t/**\n\t * Called on `drain` event\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onDrain = function () {\n\t  this.writeBuffer.splice(0, this.prevBufferLen);\n\t\n\t  // setting prevBufferLen = 0 is very important\n\t  // for example, when upgrading, upgrade packet is sent over,\n\t  // and a nonzero prevBufferLen could cause problems on `drain`\n\t  this.prevBufferLen = 0;\n\t\n\t  if (0 === this.writeBuffer.length) {\n\t    this.emit('drain');\n\t  } else {\n\t    this.flush();\n\t  }\n\t};\n\t\n\t/**\n\t * Flush write buffers.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.flush = function () {\n\t  if ('closed' !== this.readyState && this.transport.writable &&\n\t    !this.upgrading && this.writeBuffer.length) {\n\t    debug('flushing %d packets in socket', this.writeBuffer.length);\n\t    this.transport.send(this.writeBuffer);\n\t    // keep track of current length of writeBuffer\n\t    // splice writeBuffer and callbackBuffer on `drain`\n\t    this.prevBufferLen = this.writeBuffer.length;\n\t    this.emit('flush');\n\t  }\n\t};\n\t\n\t/**\n\t * Sends a message.\n\t *\n\t * @param {String} message.\n\t * @param {Function} callback function.\n\t * @param {Object} options.\n\t * @return {Socket} for chaining.\n\t * @api public\n\t */\n\t\n\tSocket.prototype.write =\n\tSocket.prototype.send = function (msg, options, fn) {\n\t  this.sendPacket('message', msg, options, fn);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {String} packet type.\n\t * @param {String} data.\n\t * @param {Object} options.\n\t * @param {Function} callback function.\n\t * @api private\n\t */\n\t\n\tSocket.prototype.sendPacket = function (type, data, options, fn) {\n\t  if ('function' === typeof data) {\n\t    fn = data;\n\t    data = undefined;\n\t  }\n\t\n\t  if ('function' === typeof options) {\n\t    fn = options;\n\t    options = null;\n\t  }\n\t\n\t  if ('closing' === this.readyState || 'closed' === this.readyState) {\n\t    return;\n\t  }\n\t\n\t  options = options || {};\n\t  options.compress = false !== options.compress;\n\t\n\t  var packet = {\n\t    type: type,\n\t    data: data,\n\t    options: options\n\t  };\n\t  this.emit('packetCreate', packet);\n\t  this.writeBuffer.push(packet);\n\t  if (fn) this.once('flush', fn);\n\t  this.flush();\n\t};\n\t\n\t/**\n\t * Closes the connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.readyState = 'closing';\n\t\n\t    var self = this;\n\t\n\t    if (this.writeBuffer.length) {\n\t      this.once('drain', function () {\n\t        if (this.upgrading) {\n\t          waitForUpgrade();\n\t        } else {\n\t          close();\n\t        }\n\t      });\n\t    } else if (this.upgrading) {\n\t      waitForUpgrade();\n\t    } else {\n\t      close();\n\t    }\n\t  }\n\t\n\t  function close () {\n\t    self.onClose('forced close');\n\t    debug('socket closing - telling transport to close');\n\t    self.transport.close();\n\t  }\n\t\n\t  function cleanupAndClose () {\n\t    self.removeListener('upgrade', cleanupAndClose);\n\t    self.removeListener('upgradeError', cleanupAndClose);\n\t    close();\n\t  }\n\t\n\t  function waitForUpgrade () {\n\t    // wait for upgrade to finish since we can't send packets while pausing a transport\n\t    self.once('upgrade', cleanupAndClose);\n\t    self.once('upgradeError', cleanupAndClose);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport error\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onError = function (err) {\n\t  debug('socket error %j', err);\n\t  Socket.priorWebsocketSuccess = false;\n\t  this.emit('error', err);\n\t  this.onClose('transport error', err);\n\t};\n\t\n\t/**\n\t * Called upon transport close.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onClose = function (reason, desc) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\t    debug('socket close with reason: \"%s\"', reason);\n\t    var self = this;\n\t\n\t    // clear timers\n\t    clearTimeout(this.pingIntervalTimer);\n\t    clearTimeout(this.pingTimeoutTimer);\n\t\n\t    // stop event from firing again for transport\n\t    this.transport.removeAllListeners('close');\n\t\n\t    // ensure transport won't stay open\n\t    this.transport.close();\n\t\n\t    // ignore further transport communication\n\t    this.transport.removeAllListeners();\n\t\n\t    // set ready state\n\t    this.readyState = 'closed';\n\t\n\t    // clear session id\n\t    this.id = null;\n\t\n\t    // emit close event\n\t    this.emit('close', reason, desc);\n\t\n\t    // clean buffers after, so users can still\n\t    // grab the buffers on `close` event\n\t    self.writeBuffer = [];\n\t    self.prevBufferLen = 0;\n\t  }\n\t};\n\t\n\t/**\n\t * Filters upgrades, returning only those matching client transports.\n\t *\n\t * @param {Array} server upgrades\n\t * @api private\n\t *\n\t */\n\t\n\tSocket.prototype.filterUpgrades = function (upgrades) {\n\t  var filteredUpgrades = [];\n\t  for (var i = 0, j = upgrades.length; i < j; i++) {\n\t    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n\t  }\n\t  return filteredUpgrades;\n\t};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(16);\n\tvar XHR = __webpack_require__(19);\n\tvar JSONP = __webpack_require__(33);\n\tvar websocket = __webpack_require__(34);\n\t\n\t/**\n\t * Export transports.\n\t */\n\t\n\texports.polling = polling;\n\texports.websocket = websocket;\n\t\n\t/**\n\t * Polling transport polymorphic constructor.\n\t * Decides on xhr vs jsonp based on feature detection.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction polling (opts) {\n\t  var xhr;\n\t  var xd = false;\n\t  var xs = false;\n\t  var jsonp = false !== opts.jsonp;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    xd = opts.hostname !== location.hostname || port !== opts.port;\n\t    xs = opts.secure !== isSSL;\n\t  }\n\t\n\t  opts.xdomain = xd;\n\t  opts.xscheme = xs;\n\t  xhr = new XMLHttpRequest(opts);\n\t\n\t  if ('open' in xhr && !opts.forceJSONP) {\n\t    return new XHR(opts);\n\t  } else {\n\t    if (!jsonp) throw new Error('JSONP disabled');\n\t    return new JSONP(opts);\n\t  }\n\t}\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// browser shim for xmlhttprequest module\n\t\n\tvar hasCORS = __webpack_require__(17);\n\tvar globalThis = __webpack_require__(18);\n\t\n\tmodule.exports = function (opts) {\n\t  var xdomain = opts.xdomain;\n\t\n\t  // scheme must be same when usign XDomainRequest\n\t  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t  var xscheme = opts.xscheme;\n\t\n\t  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n\t  // https://github.com/Automattic/engine.io-client/pull/217\n\t  var enablesXDR = opts.enablesXDR;\n\t\n\t  // XMLHttpRequest can be disabled on IE\n\t  try {\n\t    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n\t      return new XMLHttpRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  // Use XDomainRequest for IE8 if enablesXDR is true\n\t  // because loading bar keeps flashing when using jsonp-polling\n\t  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n\t  try {\n\t    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n\t      return new XDomainRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  if (!xdomain) {\n\t    try {\n\t      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n\t    } catch (e) { }\n\t  }\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t *\n\t * Logic borrowed from Modernizr:\n\t *\n\t *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n\t */\n\t\n\ttry {\n\t  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n\t    'withCredentials' in new XMLHttpRequest();\n\t} catch (err) {\n\t  // if XMLHttp support is disabled in IE then it will throw\n\t  // when trying to create\n\t  module.exports = false;\n\t}\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = (function () {\n\t  if (typeof self !== 'undefined') {\n\t    return self;\n\t  } else if (typeof window !== 'undefined') {\n\t    return window;\n\t  } else {\n\t    return Function('return this')(); // eslint-disable-line no-new-func\n\t  }\n\t})();\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global attachEvent */\n\t\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(16);\n\tvar Polling = __webpack_require__(20);\n\tvar Emitter = __webpack_require__(8);\n\tvar inherit = __webpack_require__(31);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling-xhr');\n\tvar globalThis = __webpack_require__(18);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = XHR;\n\tmodule.exports.Request = Request;\n\t\n\t/**\n\t * Empty function\n\t */\n\t\n\tfunction empty () {}\n\t\n\t/**\n\t * XHR Polling constructor.\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction XHR (opts) {\n\t  Polling.call(this, opts);\n\t  this.requestTimeout = opts.requestTimeout;\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n\t      port !== opts.port;\n\t    this.xs = opts.secure !== isSSL;\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(XHR, Polling);\n\t\n\t/**\n\t * XHR supports binary\n\t */\n\t\n\tXHR.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Creates a request.\n\t *\n\t * @param {String} method\n\t * @api private\n\t */\n\t\n\tXHR.prototype.request = function (opts) {\n\t  opts = opts || {};\n\t  opts.uri = this.uri();\n\t  opts.xd = this.xd;\n\t  opts.xs = this.xs;\n\t  opts.agent = this.agent || false;\n\t  opts.supportsBinary = this.supportsBinary;\n\t  opts.enablesXDR = this.enablesXDR;\n\t  opts.withCredentials = this.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  opts.requestTimeout = this.requestTimeout;\n\t\n\t  // other options for Node.js client\n\t  opts.extraHeaders = this.extraHeaders;\n\t\n\t  return new Request(opts);\n\t};\n\t\n\t/**\n\t * Sends data.\n\t *\n\t * @param {String} data to send.\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doWrite = function (data, fn) {\n\t  var isBinary = typeof data !== 'string' && data !== undefined;\n\t  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n\t  var self = this;\n\t  req.on('success', fn);\n\t  req.on('error', function (err) {\n\t    self.onError('xhr post error', err);\n\t  });\n\t  this.sendXhr = req;\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doPoll = function () {\n\t  debug('xhr poll');\n\t  var req = this.request();\n\t  var self = this;\n\t  req.on('data', function (data) {\n\t    self.onData(data);\n\t  });\n\t  req.on('error', function (err) {\n\t    self.onError('xhr poll error', err);\n\t  });\n\t  this.pollXhr = req;\n\t};\n\t\n\t/**\n\t * Request constructor\n\t *\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Request (opts) {\n\t  this.method = opts.method || 'GET';\n\t  this.uri = opts.uri;\n\t  this.xd = !!opts.xd;\n\t  this.xs = !!opts.xs;\n\t  this.async = false !== opts.async;\n\t  this.data = undefined !== opts.data ? opts.data : null;\n\t  this.agent = opts.agent;\n\t  this.isBinary = opts.isBinary;\n\t  this.supportsBinary = opts.supportsBinary;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t  this.requestTimeout = opts.requestTimeout;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  this.create();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Request.prototype);\n\t\n\t/**\n\t * Creates the XHR object and sends the request.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.create = function () {\n\t  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t\n\t  var xhr = this.xhr = new XMLHttpRequest(opts);\n\t  var self = this;\n\t\n\t  try {\n\t    debug('xhr open %s: %s', this.method, this.uri);\n\t    xhr.open(this.method, this.uri, this.async);\n\t    try {\n\t      if (this.extraHeaders) {\n\t        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n\t        for (var i in this.extraHeaders) {\n\t          if (this.extraHeaders.hasOwnProperty(i)) {\n\t            xhr.setRequestHeader(i, this.extraHeaders[i]);\n\t          }\n\t        }\n\t      }\n\t    } catch (e) {}\n\t\n\t    if ('POST' === this.method) {\n\t      try {\n\t        if (this.isBinary) {\n\t          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n\t        } else {\n\t          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n\t        }\n\t      } catch (e) {}\n\t    }\n\t\n\t    try {\n\t      xhr.setRequestHeader('Accept', '*/*');\n\t    } catch (e) {}\n\t\n\t    // ie6 check\n\t    if ('withCredentials' in xhr) {\n\t      xhr.withCredentials = this.withCredentials;\n\t    }\n\t\n\t    if (this.requestTimeout) {\n\t      xhr.timeout = this.requestTimeout;\n\t    }\n\t\n\t    if (this.hasXDR()) {\n\t      xhr.onload = function () {\n\t        self.onLoad();\n\t      };\n\t      xhr.onerror = function () {\n\t        self.onError(xhr.responseText);\n\t      };\n\t    } else {\n\t      xhr.onreadystatechange = function () {\n\t        if (xhr.readyState === 2) {\n\t          try {\n\t            var contentType = xhr.getResponseHeader('Content-Type');\n\t            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t              xhr.responseType = 'arraybuffer';\n\t            }\n\t          } catch (e) {}\n\t        }\n\t        if (4 !== xhr.readyState) return;\n\t        if (200 === xhr.status || 1223 === xhr.status) {\n\t          self.onLoad();\n\t        } else {\n\t          // make sure the `error` event handler that's user-set\n\t          // does not throw in the same tick and gets caught here\n\t          setTimeout(function () {\n\t            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n\t          }, 0);\n\t        }\n\t      };\n\t    }\n\t\n\t    debug('xhr data %s', this.data);\n\t    xhr.send(this.data);\n\t  } catch (e) {\n\t    // Need to defer since .create() is called directly fhrom the constructor\n\t    // and thus the 'error' event can only be only bound *after* this exception\n\t    // occurs.  Therefore, also, we cannot throw here at all.\n\t    setTimeout(function () {\n\t      self.onError(e);\n\t    }, 0);\n\t    return;\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    this.index = Request.requestsCount++;\n\t    Request.requests[this.index] = this;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful response.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onSuccess = function () {\n\t  this.emit('success');\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Called if we have data.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onData = function (data) {\n\t  this.emit('data', data);\n\t  this.onSuccess();\n\t};\n\t\n\t/**\n\t * Called upon error.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onError = function (err) {\n\t  this.emit('error', err);\n\t  this.cleanup(true);\n\t};\n\t\n\t/**\n\t * Cleans up house.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.cleanup = function (fromError) {\n\t  if ('undefined' === typeof this.xhr || null === this.xhr) {\n\t    return;\n\t  }\n\t  // xmlhttprequest\n\t  if (this.hasXDR()) {\n\t    this.xhr.onload = this.xhr.onerror = empty;\n\t  } else {\n\t    this.xhr.onreadystatechange = empty;\n\t  }\n\t\n\t  if (fromError) {\n\t    try {\n\t      this.xhr.abort();\n\t    } catch (e) {}\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    delete Request.requests[this.index];\n\t  }\n\t\n\t  this.xhr = null;\n\t};\n\t\n\t/**\n\t * Called upon load.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onLoad = function () {\n\t  var data;\n\t  try {\n\t    var contentType;\n\t    try {\n\t      contentType = this.xhr.getResponseHeader('Content-Type');\n\t    } catch (e) {}\n\t    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t      data = this.xhr.response || this.xhr.responseText;\n\t    } else {\n\t      data = this.xhr.responseText;\n\t    }\n\t  } catch (e) {\n\t    this.onError(e);\n\t  }\n\t  if (null != data) {\n\t    this.onData(data);\n\t  }\n\t};\n\t\n\t/**\n\t * Check if it has XDomainRequest.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.hasXDR = function () {\n\t  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n\t};\n\t\n\t/**\n\t * Aborts the request.\n\t *\n\t * @api public\n\t */\n\t\n\tRequest.prototype.abort = function () {\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Aborts pending requests when unloading the window. This is needed to prevent\n\t * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n\t * emitted.\n\t */\n\t\n\tRequest.requestsCount = 0;\n\tRequest.requests = {};\n\t\n\tif (typeof document !== 'undefined') {\n\t  if (typeof attachEvent === 'function') {\n\t    attachEvent('onunload', unloadHandler);\n\t  } else if (typeof addEventListener === 'function') {\n\t    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n\t    addEventListener(terminationEvent, unloadHandler, false);\n\t  }\n\t}\n\t\n\tfunction unloadHandler () {\n\t  for (var i in Request.requests) {\n\t    if (Request.requests.hasOwnProperty(i)) {\n\t      Request.requests[i].abort();\n\t    }\n\t  }\n\t}\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(21);\n\tvar parseqs = __webpack_require__(30);\n\tvar parser = __webpack_require__(22);\n\tvar inherit = __webpack_require__(31);\n\tvar yeast = __webpack_require__(32);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Polling;\n\t\n\t/**\n\t * Is XHR2 supported?\n\t */\n\t\n\tvar hasXHR2 = (function () {\n\t  var XMLHttpRequest = __webpack_require__(16);\n\t  var xhr = new XMLHttpRequest({ xdomain: false });\n\t  return null != xhr.responseType;\n\t})();\n\t\n\t/**\n\t * Polling interface.\n\t *\n\t * @param {Object} opts\n\t * @api private\n\t */\n\t\n\tfunction Polling (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (!hasXHR2 || forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(Polling, Transport);\n\t\n\t/**\n\t * Transport name.\n\t */\n\t\n\tPolling.prototype.name = 'polling';\n\t\n\t/**\n\t * Opens the socket (triggers polling). We write a PING message to determine\n\t * when the transport is open.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doOpen = function () {\n\t  this.poll();\n\t};\n\t\n\t/**\n\t * Pauses polling.\n\t *\n\t * @param {Function} callback upon buffers are flushed and transport is paused\n\t * @api private\n\t */\n\t\n\tPolling.prototype.pause = function (onPause) {\n\t  var self = this;\n\t\n\t  this.readyState = 'pausing';\n\t\n\t  function pause () {\n\t    debug('paused');\n\t    self.readyState = 'paused';\n\t    onPause();\n\t  }\n\t\n\t  if (this.polling || !this.writable) {\n\t    var total = 0;\n\t\n\t    if (this.polling) {\n\t      debug('we are currently polling - waiting to pause');\n\t      total++;\n\t      this.once('pollComplete', function () {\n\t        debug('pre-pause polling complete');\n\t        --total || pause();\n\t      });\n\t    }\n\t\n\t    if (!this.writable) {\n\t      debug('we are currently writing - waiting to pause');\n\t      total++;\n\t      this.once('drain', function () {\n\t        debug('pre-pause writing complete');\n\t        --total || pause();\n\t      });\n\t    }\n\t  } else {\n\t    pause();\n\t  }\n\t};\n\t\n\t/**\n\t * Starts polling cycle.\n\t *\n\t * @api public\n\t */\n\t\n\tPolling.prototype.poll = function () {\n\t  debug('polling');\n\t  this.polling = true;\n\t  this.doPoll();\n\t  this.emit('poll');\n\t};\n\t\n\t/**\n\t * Overloads onData to detect payloads.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.onData = function (data) {\n\t  var self = this;\n\t  debug('polling got data %s', data);\n\t  var callback = function (packet, index, total) {\n\t    // if its the first message we consider the transport open\n\t    if ('opening' === self.readyState && packet.type === 'open') {\n\t      self.onOpen();\n\t    }\n\t\n\t    // if its a close packet, we close the ongoing requests\n\t    if ('close' === packet.type) {\n\t      self.onClose();\n\t      return false;\n\t    }\n\t\n\t    // otherwise bypass onData and handle the message\n\t    self.onPacket(packet);\n\t  };\n\t\n\t  // decode payload\n\t  parser.decodePayload(data, this.socket.binaryType, callback);\n\t\n\t  // if an event did not trigger closing\n\t  if ('closed' !== this.readyState) {\n\t    // if we got data we're not polling\n\t    this.polling = false;\n\t    this.emit('pollComplete');\n\t\n\t    if ('open' === this.readyState) {\n\t      this.poll();\n\t    } else {\n\t      debug('ignoring poll - transport state \"%s\"', this.readyState);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * For polling, send a close packet.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doClose = function () {\n\t  var self = this;\n\t\n\t  function close () {\n\t    debug('writing close packet');\n\t    self.write([{ type: 'close' }]);\n\t  }\n\t\n\t  if ('open' === this.readyState) {\n\t    debug('transport open - closing');\n\t    close();\n\t  } else {\n\t    // in case we're trying to close while\n\t    // handshaking is in progress (GH-164)\n\t    debug('transport not open - deferring close');\n\t    this.once('open', close);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes a packets payload.\n\t *\n\t * @param {Array} data packets\n\t * @param {Function} drain callback\n\t * @api private\n\t */\n\t\n\tPolling.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t  var callbackfn = function () {\n\t    self.writable = true;\n\t    self.emit('drain');\n\t  };\n\t\n\t  parser.encodePayload(packets, this.supportsBinary, function (data) {\n\t    self.doWrite(data, callbackfn);\n\t  });\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'https' : 'http';\n\t  var port = '';\n\t\n\t  // cache busting is forced\n\t  if (false !== this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  if (!this.supportsBinary && !query.sid) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n\t     ('http' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(22);\n\tvar Emitter = __webpack_require__(8);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Transport;\n\t\n\t/**\n\t * Transport abstract constructor.\n\t *\n\t * @param {Object} options.\n\t * @api private\n\t */\n\t\n\tfunction Transport (opts) {\n\t  this.path = opts.path;\n\t  this.hostname = opts.hostname;\n\t  this.port = opts.port;\n\t  this.secure = opts.secure;\n\t  this.query = opts.query;\n\t  this.timestampParam = opts.timestampParam;\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.readyState = '';\n\t  this.agent = opts.agent || false;\n\t  this.socket = opts.socket;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t  this.forceNode = opts.forceNode;\n\t\n\t  // results of ReactNative environment detection\n\t  this.isReactNative = opts.isReactNative;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t  this.localAddress = opts.localAddress;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Transport.prototype);\n\t\n\t/**\n\t * Emits an error.\n\t *\n\t * @param {String} str\n\t * @return {Transport} for chaining\n\t * @api public\n\t */\n\t\n\tTransport.prototype.onError = function (msg, desc) {\n\t  var err = new Error(msg);\n\t  err.type = 'TransportError';\n\t  err.description = desc;\n\t  this.emit('error', err);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Opens the transport.\n\t *\n\t * @api public\n\t */\n\t\n\tTransport.prototype.open = function () {\n\t  if ('closed' === this.readyState || '' === this.readyState) {\n\t    this.readyState = 'opening';\n\t    this.doOpen();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Closes the transport.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.doClose();\n\t    this.onClose();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends multiple packets.\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\tTransport.prototype.send = function (packets) {\n\t  if ('open' === this.readyState) {\n\t    this.write(packets);\n\t  } else {\n\t    throw new Error('Transport not open');\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon open\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onOpen = function () {\n\t  this.readyState = 'open';\n\t  this.writable = true;\n\t  this.emit('open');\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @param {String} data\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onData = function (data) {\n\t  var packet = parser.decodePacket(data, this.socket.binaryType);\n\t  this.onPacket(packet);\n\t};\n\t\n\t/**\n\t * Called with a decoded packet.\n\t */\n\t\n\tTransport.prototype.onPacket = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon close.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onClose = function () {\n\t  this.readyState = 'closed';\n\t  this.emit('close');\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar keys = __webpack_require__(23);\n\tvar hasBinary = __webpack_require__(24);\n\tvar sliceBuffer = __webpack_require__(25);\n\tvar after = __webpack_require__(26);\n\tvar utf8 = __webpack_require__(27);\n\t\n\tvar base64encoder;\n\tif (typeof ArrayBuffer !== 'undefined') {\n\t  base64encoder = __webpack_require__(28);\n\t}\n\t\n\t/**\n\t * Check if we are running an android browser. That requires us to use\n\t * ArrayBuffer with polling transports...\n\t *\n\t * http://ghinda.net/jpeg-blob-ajax-android/\n\t */\n\t\n\tvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Check if we are running in PhantomJS.\n\t * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n\t * https://github.com/ariya/phantomjs/issues/11395\n\t * @type boolean\n\t */\n\tvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\t\n\t/**\n\t * When true, avoids using Blobs to encode payloads.\n\t * @type boolean\n\t */\n\tvar dontSendBlobs = isAndroid || isPhantomJS;\n\t\n\t/**\n\t * Current protocol version.\n\t */\n\t\n\texports.protocol = 3;\n\t\n\t/**\n\t * Packet types.\n\t */\n\t\n\tvar packets = exports.packets = {\n\t    open:     0    // non-ws\n\t  , close:    1    // non-ws\n\t  , ping:     2\n\t  , pong:     3\n\t  , message:  4\n\t  , upgrade:  5\n\t  , noop:     6\n\t};\n\t\n\tvar packetslist = keys(packets);\n\t\n\t/**\n\t * Premade error packet.\n\t */\n\t\n\tvar err = { type: 'error', data: 'parser error' };\n\t\n\t/**\n\t * Create a blob api even for blob builder when vendor prefixes exist\n\t */\n\t\n\tvar Blob = __webpack_require__(29);\n\t\n\t/**\n\t * Encodes a packet.\n\t *\n\t *     <packet type id> [ <data> ]\n\t *\n\t * Example:\n\t *\n\t *     5hello world\n\t *     3\n\t *     4\n\t *\n\t * Binary is encoded in an identical principle\n\t *\n\t * @api private\n\t */\n\t\n\texports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = false;\n\t  }\n\t\n\t  if (typeof utf8encode === 'function') {\n\t    callback = utf8encode;\n\t    utf8encode = null;\n\t  }\n\t\n\t  var data = (packet.data === undefined)\n\t    ? undefined\n\t    : packet.data.buffer || packet.data;\n\t\n\t  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n\t    return encodeArrayBuffer(packet, supportsBinary, callback);\n\t  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n\t    return encodeBlob(packet, supportsBinary, callback);\n\t  }\n\t\n\t  // might be an object with { base64: true, data: dataAsBase64String }\n\t  if (data && data.base64) {\n\t    return encodeBase64Object(packet, callback);\n\t  }\n\t\n\t  // Sending data as a utf-8 string\n\t  var encoded = packets[packet.type];\n\t\n\t  // data fragment is optional\n\t  if (undefined !== packet.data) {\n\t    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n\t  }\n\t\n\t  return callback('' + encoded);\n\t\n\t};\n\t\n\tfunction encodeBase64Object(packet, callback) {\n\t  // packet data is an object { base64: true, data: dataAsBase64String }\n\t  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n\t  return callback(message);\n\t}\n\t\n\t/**\n\t * Encode packet helpers for binary types\n\t */\n\t\n\tfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var data = packet.data;\n\t  var contentArray = new Uint8Array(data);\n\t  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\t\n\t  resultBuffer[0] = packets[packet.type];\n\t  for (var i = 0; i < contentArray.length; i++) {\n\t    resultBuffer[i+1] = contentArray[i];\n\t  }\n\t\n\t  return callback(resultBuffer.buffer);\n\t}\n\t\n\tfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var fr = new FileReader();\n\t  fr.onload = function() {\n\t    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n\t  };\n\t  return fr.readAsArrayBuffer(packet.data);\n\t}\n\t\n\tfunction encodeBlob(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  if (dontSendBlobs) {\n\t    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n\t  }\n\t\n\t  var length = new Uint8Array(1);\n\t  length[0] = packets[packet.type];\n\t  var blob = new Blob([length.buffer, packet.data]);\n\t\n\t  return callback(blob);\n\t}\n\t\n\t/**\n\t * Encodes a packet with binary data in a base64 string\n\t *\n\t * @param {Object} packet, has `type` and `data`\n\t * @return {String} base64 encoded message\n\t */\n\t\n\texports.encodeBase64Packet = function(packet, callback) {\n\t  var message = 'b' + exports.packets[packet.type];\n\t  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n\t    var fr = new FileReader();\n\t    fr.onload = function() {\n\t      var b64 = fr.result.split(',')[1];\n\t      callback(message + b64);\n\t    };\n\t    return fr.readAsDataURL(packet.data);\n\t  }\n\t\n\t  var b64data;\n\t  try {\n\t    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n\t  } catch (e) {\n\t    // iPhone Safari doesn't let you apply with typed arrays\n\t    var typed = new Uint8Array(packet.data);\n\t    var basic = new Array(typed.length);\n\t    for (var i = 0; i < typed.length; i++) {\n\t      basic[i] = typed[i];\n\t    }\n\t    b64data = String.fromCharCode.apply(null, basic);\n\t  }\n\t  message += btoa(b64data);\n\t  return callback(message);\n\t};\n\t\n\t/**\n\t * Decodes a packet. Changes format to Blob if requested.\n\t *\n\t * @return {Object} with `type` and `data` (if any)\n\t * @api private\n\t */\n\t\n\texports.decodePacket = function (data, binaryType, utf8decode) {\n\t  if (data === undefined) {\n\t    return err;\n\t  }\n\t  // String data\n\t  if (typeof data === 'string') {\n\t    if (data.charAt(0) === 'b') {\n\t      return exports.decodeBase64Packet(data.substr(1), binaryType);\n\t    }\n\t\n\t    if (utf8decode) {\n\t      data = tryDecode(data);\n\t      if (data === false) {\n\t        return err;\n\t      }\n\t    }\n\t    var type = data.charAt(0);\n\t\n\t    if (Number(type) != type || !packetslist[type]) {\n\t      return err;\n\t    }\n\t\n\t    if (data.length > 1) {\n\t      return { type: packetslist[type], data: data.substring(1) };\n\t    } else {\n\t      return { type: packetslist[type] };\n\t    }\n\t  }\n\t\n\t  var asArray = new Uint8Array(data);\n\t  var type = asArray[0];\n\t  var rest = sliceBuffer(data, 1);\n\t  if (Blob && binaryType === 'blob') {\n\t    rest = new Blob([rest]);\n\t  }\n\t  return { type: packetslist[type], data: rest };\n\t};\n\t\n\tfunction tryDecode(data) {\n\t  try {\n\t    data = utf8.decode(data, { strict: false });\n\t  } catch (e) {\n\t    return false;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Decodes a packet encoded in a base64 string\n\t *\n\t * @param {String} base64 encoded message\n\t * @return {Object} with `type` and `data` (if any)\n\t */\n\t\n\texports.decodeBase64Packet = function(msg, binaryType) {\n\t  var type = packetslist[msg.charAt(0)];\n\t  if (!base64encoder) {\n\t    return { type: type, data: { base64: true, data: msg.substr(1) } };\n\t  }\n\t\n\t  var data = base64encoder.decode(msg.substr(1));\n\t\n\t  if (binaryType === 'blob' && Blob) {\n\t    data = new Blob([data]);\n\t  }\n\t\n\t  return { type: type, data: data };\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload).\n\t *\n\t *     <length>:data\n\t *\n\t * Example:\n\t *\n\t *     11:hello world2:hi\n\t *\n\t * If any contents are binary, they will be encoded as base64 strings. Base64\n\t * encoded strings are marked with a b before the length specifier\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\texports.encodePayload = function (packets, supportsBinary, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = null;\n\t  }\n\t\n\t  var isBinary = hasBinary(packets);\n\t\n\t  if (supportsBinary && isBinary) {\n\t    if (Blob && !dontSendBlobs) {\n\t      return exports.encodePayloadAsBlob(packets, callback);\n\t    }\n\t\n\t    return exports.encodePayloadAsArrayBuffer(packets, callback);\n\t  }\n\t\n\t  if (!packets.length) {\n\t    return callback('0:');\n\t  }\n\t\n\t  function setLengthHeader(message) {\n\t    return message.length + ':' + message;\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n\t      doneCallback(null, setLengthHeader(message));\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(results.join(''));\n\t  });\n\t};\n\t\n\t/**\n\t * Async array map using after\n\t */\n\t\n\tfunction map(ary, each, done) {\n\t  var result = new Array(ary.length);\n\t  var next = after(ary.length, done);\n\t\n\t  var eachWithIndex = function(i, el, cb) {\n\t    each(el, function(error, msg) {\n\t      result[i] = msg;\n\t      cb(error, result);\n\t    });\n\t  };\n\t\n\t  for (var i = 0; i < ary.length; i++) {\n\t    eachWithIndex(i, ary[i], next);\n\t  }\n\t}\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Possible binary contents are\n\t * decoded from their base64 representation\n\t *\n\t * @param {String} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayload = function (data, binaryType, callback) {\n\t  if (typeof data !== 'string') {\n\t    return exports.decodePayloadAsBinary(data, binaryType, callback);\n\t  }\n\t\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var packet;\n\t  if (data === '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t  var length = '', n, msg;\n\t\n\t  for (var i = 0, l = data.length; i < l; i++) {\n\t    var chr = data.charAt(i);\n\t\n\t    if (chr !== ':') {\n\t      length += chr;\n\t      continue;\n\t    }\n\t\n\t    if (length === '' || (length != (n = Number(length)))) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    msg = data.substr(i + 1, n);\n\t\n\t    if (length != msg.length) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    if (msg.length) {\n\t      packet = exports.decodePacket(msg, binaryType, false);\n\t\n\t      if (err.type === packet.type && err.data === packet.data) {\n\t        // parser error in individual packet - ignoring payload\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      var ret = callback(packet, i + n, l);\n\t      if (false === ret) return;\n\t    }\n\t\n\t    // advance cursor\n\t    i += n;\n\t    length = '';\n\t  }\n\t\n\t  if (length !== '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload) as binary.\n\t *\n\t * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n\t * 255><data>\n\t *\n\t * Example:\n\t * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n\t *\n\t * @param {Array} packets\n\t * @return {ArrayBuffer} encoded payload\n\t * @api private\n\t */\n\t\n\texports.encodePayloadAsArrayBuffer = function(packets, callback) {\n\t  if (!packets.length) {\n\t    return callback(new ArrayBuffer(0));\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(data) {\n\t      return doneCallback(null, data);\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, encodedPackets) {\n\t    var totalLength = encodedPackets.reduce(function(acc, p) {\n\t      var len;\n\t      if (typeof p === 'string'){\n\t        len = p.length;\n\t      } else {\n\t        len = p.byteLength;\n\t      }\n\t      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n\t    }, 0);\n\t\n\t    var resultArray = new Uint8Array(totalLength);\n\t\n\t    var bufferIndex = 0;\n\t    encodedPackets.forEach(function(p) {\n\t      var isString = typeof p === 'string';\n\t      var ab = p;\n\t      if (isString) {\n\t        var view = new Uint8Array(p.length);\n\t        for (var i = 0; i < p.length; i++) {\n\t          view[i] = p.charCodeAt(i);\n\t        }\n\t        ab = view.buffer;\n\t      }\n\t\n\t      if (isString) { // not true binary\n\t        resultArray[bufferIndex++] = 0;\n\t      } else { // true binary\n\t        resultArray[bufferIndex++] = 1;\n\t      }\n\t\n\t      var lenStr = ab.byteLength.toString();\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n\t      }\n\t      resultArray[bufferIndex++] = 255;\n\t\n\t      var view = new Uint8Array(ab);\n\t      for (var i = 0; i < view.length; i++) {\n\t        resultArray[bufferIndex++] = view[i];\n\t      }\n\t    });\n\t\n\t    return callback(resultArray.buffer);\n\t  });\n\t};\n\t\n\t/**\n\t * Encode as Blob\n\t */\n\t\n\texports.encodePayloadAsBlob = function(packets, callback) {\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(encoded) {\n\t      var binaryIdentifier = new Uint8Array(1);\n\t      binaryIdentifier[0] = 1;\n\t      if (typeof encoded === 'string') {\n\t        var view = new Uint8Array(encoded.length);\n\t        for (var i = 0; i < encoded.length; i++) {\n\t          view[i] = encoded.charCodeAt(i);\n\t        }\n\t        encoded = view.buffer;\n\t        binaryIdentifier[0] = 0;\n\t      }\n\t\n\t      var len = (encoded instanceof ArrayBuffer)\n\t        ? encoded.byteLength\n\t        : encoded.size;\n\t\n\t      var lenStr = len.toString();\n\t      var lengthAry = new Uint8Array(lenStr.length + 1);\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        lengthAry[i] = parseInt(lenStr[i]);\n\t      }\n\t      lengthAry[lenStr.length] = 255;\n\t\n\t      if (Blob) {\n\t        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n\t        doneCallback(null, blob);\n\t      }\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(new Blob(results));\n\t  });\n\t};\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Strings are decoded by\n\t * interpreting each byte as a key code for entries marked to start with 0. See\n\t * description of encodePayloadAsBinary\n\t *\n\t * @param {ArrayBuffer} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayloadAsBinary = function (data, binaryType, callback) {\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var bufferTail = data;\n\t  var buffers = [];\n\t\n\t  while (bufferTail.byteLength > 0) {\n\t    var tailArray = new Uint8Array(bufferTail);\n\t    var isString = tailArray[0] === 0;\n\t    var msgLength = '';\n\t\n\t    for (var i = 1; ; i++) {\n\t      if (tailArray[i] === 255) break;\n\t\n\t      // 310 = char length of Number.MAX_VALUE\n\t      if (msgLength.length > 310) {\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      msgLength += tailArray[i];\n\t    }\n\t\n\t    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n\t    msgLength = parseInt(msgLength);\n\t\n\t    var msg = sliceBuffer(bufferTail, 0, msgLength);\n\t    if (isString) {\n\t      try {\n\t        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n\t      } catch (e) {\n\t        // iPhone Safari doesn't let you apply to typed arrays\n\t        var typed = new Uint8Array(msg);\n\t        msg = '';\n\t        for (var i = 0; i < typed.length; i++) {\n\t          msg += String.fromCharCode(typed[i]);\n\t        }\n\t      }\n\t    }\n\t\n\t    buffers.push(msg);\n\t    bufferTail = sliceBuffer(bufferTail, msgLength);\n\t  }\n\t\n\t  var total = buffers.length;\n\t  buffers.forEach(function(buffer, i) {\n\t    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n\t  });\n\t};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Gets the keys for an object.\n\t *\n\t * @return {Array} keys\n\t * @api private\n\t */\n\t\n\tmodule.exports = Object.keys || function keys (obj){\n\t  var arr = [];\n\t  var has = Object.prototype.hasOwnProperty;\n\t\n\t  for (var i in obj) {\n\t    if (has.call(obj, i)) {\n\t      arr.push(i);\n\t    }\n\t  }\n\t  return arr;\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global Blob File */\n\t\n\t/*\n\t * Module requirements.\n\t */\n\t\n\tvar isArray = __webpack_require__(10);\n\t\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' ||\n\t                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\n\tvar withNativeFile = typeof File === 'function' ||\n\t                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = hasBinary;\n\t\n\t/**\n\t * Checks for binary data.\n\t *\n\t * Supports Buffer, ArrayBuffer, Blob and File.\n\t *\n\t * @param {Object} anything\n\t * @api public\n\t */\n\t\n\tfunction hasBinary (obj) {\n\t  if (!obj || typeof obj !== 'object') {\n\t    return false;\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      if (hasBinary(obj[i])) {\n\t        return true;\n\t      }\n\t    }\n\t    return false;\n\t  }\n\t\n\t  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n\t    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n\t    (withNativeBlob && obj instanceof Blob) ||\n\t    (withNativeFile && obj instanceof File)\n\t  ) {\n\t    return true;\n\t  }\n\t\n\t  // see: https://github.com/Automattic/has-binary/pull/4\n\t  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n\t    return hasBinary(obj.toJSON(), true);\n\t  }\n\t\n\t  for (var key in obj) {\n\t    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * An abstraction for slicing an arraybuffer even when\n\t * ArrayBuffer.prototype.slice is not supported\n\t *\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(arraybuffer, start, end) {\n\t  var bytes = arraybuffer.byteLength;\n\t  start = start || 0;\n\t  end = end || bytes;\n\t\n\t  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\t\n\t  if (start < 0) { start += bytes; }\n\t  if (end < 0) { end += bytes; }\n\t  if (end > bytes) { end = bytes; }\n\t\n\t  if (start >= bytes || start >= end || bytes === 0) {\n\t    return new ArrayBuffer(0);\n\t  }\n\t\n\t  var abv = new Uint8Array(arraybuffer);\n\t  var result = new Uint8Array(end - start);\n\t  for (var i = start, ii = 0; i < end; i++, ii++) {\n\t    result[ii] = abv[i];\n\t  }\n\t  return result.buffer;\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = after\n\t\n\tfunction after(count, callback, err_cb) {\n\t    var bail = false\n\t    err_cb = err_cb || noop\n\t    proxy.count = count\n\t\n\t    return (count === 0) ? callback() : proxy\n\t\n\t    function proxy(err, result) {\n\t        if (proxy.count <= 0) {\n\t            throw new Error('after called too many times')\n\t        }\n\t        --proxy.count\n\t\n\t        // after first error, rest are passed to err_cb\n\t        if (err) {\n\t            bail = true\n\t            callback(err)\n\t            // future error callbacks will go to error handler\n\t            callback = err_cb\n\t        } else if (proxy.count === 0 && !bail) {\n\t            callback(null, result)\n\t        }\n\t    }\n\t}\n\t\n\tfunction noop() {}\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\t\n\tvar stringFromCharCode = String.fromCharCode;\n\t\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\t\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\t\n\tfunction checkScalarValue(codePoint, strict) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tif (strict) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t\t' is not a scalar value'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\t\n\tfunction encodeCodePoint(codePoint, strict) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t}\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\t\n\tfunction utf8encode(string, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t\t}\n\t\treturn byteString;\n\t}\n\t\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\t\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\t\n\tfunction decodeSymbol(strict) {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\t\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\t\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\t\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\t\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\t\n\tmodule.exports = {\n\t\tversion: '2.1.2',\n\t\tencode: utf8encode,\n\t\tdecode: utf8decode\n\t};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t/*\n\t * base64-arraybuffer\n\t * https://github.com/niklasvh/base64-arraybuffer\n\t *\n\t * Copyright (c) 2012 Niklas von Hertzen\n\t * Licensed under the MIT license.\n\t */\n\t(function(chars){\n\t  \"use strict\";\n\t\n\t  exports.encode = function(arraybuffer) {\n\t    var bytes = new Uint8Array(arraybuffer),\n\t    i, len = bytes.length, base64 = \"\";\n\t\n\t    for (i = 0; i < len; i+=3) {\n\t      base64 += chars[bytes[i] >> 2];\n\t      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n\t      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n\t      base64 += chars[bytes[i + 2] & 63];\n\t    }\n\t\n\t    if ((len % 3) === 2) {\n\t      base64 = base64.substring(0, base64.length - 1) + \"=\";\n\t    } else if (len % 3 === 1) {\n\t      base64 = base64.substring(0, base64.length - 2) + \"==\";\n\t    }\n\t\n\t    return base64;\n\t  };\n\t\n\t  exports.decode =  function(base64) {\n\t    var bufferLength = base64.length * 0.75,\n\t    len = base64.length, i, p = 0,\n\t    encoded1, encoded2, encoded3, encoded4;\n\t\n\t    if (base64[base64.length - 1] === \"=\") {\n\t      bufferLength--;\n\t      if (base64[base64.length - 2] === \"=\") {\n\t        bufferLength--;\n\t      }\n\t    }\n\t\n\t    var arraybuffer = new ArrayBuffer(bufferLength),\n\t    bytes = new Uint8Array(arraybuffer);\n\t\n\t    for (i = 0; i < len; i+=4) {\n\t      encoded1 = chars.indexOf(base64[i]);\n\t      encoded2 = chars.indexOf(base64[i+1]);\n\t      encoded3 = chars.indexOf(base64[i+2]);\n\t      encoded4 = chars.indexOf(base64[i+3]);\n\t\n\t      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n\t      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n\t      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n\t    }\n\t\n\t    return arraybuffer;\n\t  };\n\t})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Create a blob builder even when vendor prefixes exist\r\n\t */\r\n\t\r\n\tvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n\t  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n\t  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n\t  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n\t  false;\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor is supported\r\n\t */\r\n\t\r\n\tvar blobSupported = (function() {\r\n\t  try {\r\n\t    var a = new Blob(['hi']);\r\n\t    return a.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor supports ArrayBufferViews\r\n\t * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n\t */\r\n\t\r\n\tvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n\t  try {\r\n\t    var b = new Blob([new Uint8Array([1,2])]);\r\n\t    return b.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if BlobBuilder is supported\r\n\t */\r\n\t\r\n\tvar blobBuilderSupported = BlobBuilder\r\n\t  && BlobBuilder.prototype.append\r\n\t  && BlobBuilder.prototype.getBlob;\r\n\t\r\n\t/**\r\n\t * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n\t * Used by BlobBuilder constructor and old browsers that didn't\r\n\t * support it in the Blob constructor.\r\n\t */\r\n\t\r\n\tfunction mapArrayBufferViews(ary) {\r\n\t  return ary.map(function(chunk) {\r\n\t    if (chunk.buffer instanceof ArrayBuffer) {\r\n\t      var buf = chunk.buffer;\r\n\t\r\n\t      // if this is a subarray, make a copy so we only\r\n\t      // include the subarray region from the underlying buffer\r\n\t      if (chunk.byteLength !== buf.byteLength) {\r\n\t        var copy = new Uint8Array(chunk.byteLength);\r\n\t        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n\t        buf = copy.buffer;\r\n\t      }\r\n\t\r\n\t      return buf;\r\n\t    }\r\n\t\r\n\t    return chunk;\r\n\t  });\r\n\t}\r\n\t\r\n\tfunction BlobBuilderConstructor(ary, options) {\r\n\t  options = options || {};\r\n\t\r\n\t  var bb = new BlobBuilder();\r\n\t  mapArrayBufferViews(ary).forEach(function(part) {\r\n\t    bb.append(part);\r\n\t  });\r\n\t\r\n\t  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n\t};\r\n\t\r\n\tfunction BlobConstructor(ary, options) {\r\n\t  return new Blob(mapArrayBufferViews(ary), options || {});\r\n\t};\r\n\t\r\n\tif (typeof Blob !== 'undefined') {\r\n\t  BlobBuilderConstructor.prototype = Blob.prototype;\r\n\t  BlobConstructor.prototype = Blob.prototype;\r\n\t}\r\n\t\r\n\tmodule.exports = (function() {\r\n\t  if (blobSupported) {\r\n\t    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n\t  } else if (blobBuilderSupported) {\r\n\t    return BlobBuilderConstructor;\r\n\t  } else {\r\n\t    return undefined;\r\n\t  }\r\n\t})();\r\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Compiles a querystring\n\t * Returns string representation of the object\n\t *\n\t * @param {Object}\n\t * @api private\n\t */\n\t\n\texports.encode = function (obj) {\n\t  var str = '';\n\t\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      if (str.length) str += '&';\n\t      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n\t    }\n\t  }\n\t\n\t  return str;\n\t};\n\t\n\t/**\n\t * Parses a simple querystring into an object\n\t *\n\t * @param {String} qs\n\t * @api private\n\t */\n\t\n\texports.decode = function(qs){\n\t  var qry = {};\n\t  var pairs = qs.split('&');\n\t  for (var i = 0, l = pairs.length; i < l; i++) {\n\t    var pair = pairs[i].split('=');\n\t    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n\t  }\n\t  return qry;\n\t};\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = function(a, b){\n\t  var fn = function(){};\n\t  fn.prototype = b.prototype;\n\t  a.prototype = new fn;\n\t  a.prototype.constructor = a;\n\t};\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n\t  , length = 64\n\t  , map = {}\n\t  , seed = 0\n\t  , i = 0\n\t  , prev;\n\t\n\t/**\n\t * Return a string representing the specified number.\n\t *\n\t * @param {Number} num The number to convert.\n\t * @returns {String} The string representation of the number.\n\t * @api public\n\t */\n\tfunction encode(num) {\n\t  var encoded = '';\n\t\n\t  do {\n\t    encoded = alphabet[num % length] + encoded;\n\t    num = Math.floor(num / length);\n\t  } while (num > 0);\n\t\n\t  return encoded;\n\t}\n\t\n\t/**\n\t * Return the integer value specified by the given string.\n\t *\n\t * @param {String} str The string to convert.\n\t * @returns {Number} The integer value represented by the string.\n\t * @api public\n\t */\n\tfunction decode(str) {\n\t  var decoded = 0;\n\t\n\t  for (i = 0; i < str.length; i++) {\n\t    decoded = decoded * length + map[str.charAt(i)];\n\t  }\n\t\n\t  return decoded;\n\t}\n\t\n\t/**\n\t * Yeast: A tiny growing id generator.\n\t *\n\t * @returns {String} A unique id.\n\t * @api public\n\t */\n\tfunction yeast() {\n\t  var now = encode(+new Date());\n\t\n\t  if (now !== prev) return seed = 0, prev = now;\n\t  return now +'.'+ encode(seed++);\n\t}\n\t\n\t//\n\t// Map each character to its index.\n\t//\n\tfor (; i < length; i++) map[alphabet[i]] = i;\n\t\n\t//\n\t// Expose the `yeast`, `encode` and `decode` functions.\n\t//\n\tyeast.encode = encode;\n\tyeast.decode = decode;\n\tmodule.exports = yeast;\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar Polling = __webpack_require__(20);\n\tvar inherit = __webpack_require__(31);\n\tvar globalThis = __webpack_require__(18);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = JSONPPolling;\n\t\n\t/**\n\t * Cached regular expressions.\n\t */\n\t\n\tvar rNewline = /\\n/g;\n\tvar rEscapedNewline = /\\\\n/g;\n\t\n\t/**\n\t * Global JSONP callbacks.\n\t */\n\t\n\tvar callbacks;\n\t\n\t/**\n\t * Noop.\n\t */\n\t\n\tfunction empty () { }\n\t\n\t/**\n\t * JSONP Polling constructor.\n\t *\n\t * @param {Object} opts.\n\t * @api public\n\t */\n\t\n\tfunction JSONPPolling (opts) {\n\t  Polling.call(this, opts);\n\t\n\t  this.query = this.query || {};\n\t\n\t  // define global callbacks array if not present\n\t  // we do this here (lazily) to avoid unneeded global pollution\n\t  if (!callbacks) {\n\t    // we need to consider multiple engines in the same page\n\t    callbacks = globalThis.___eio = (globalThis.___eio || []);\n\t  }\n\t\n\t  // callback identifier\n\t  this.index = callbacks.length;\n\t\n\t  // add callback to jsonp global\n\t  var self = this;\n\t  callbacks.push(function (msg) {\n\t    self.onData(msg);\n\t  });\n\t\n\t  // append to query string\n\t  this.query.j = this.index;\n\t\n\t  // prevent spurious errors from being emitted when the window is unloaded\n\t  if (typeof addEventListener === 'function') {\n\t    addEventListener('beforeunload', function () {\n\t      if (self.script) self.script.onerror = empty;\n\t    }, false);\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(JSONPPolling, Polling);\n\t\n\t/*\n\t * JSONP only supports binary as base64 encoded strings\n\t */\n\t\n\tJSONPPolling.prototype.supportsBinary = false;\n\t\n\t/**\n\t * Closes the socket.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doClose = function () {\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  if (this.form) {\n\t    this.form.parentNode.removeChild(this.form);\n\t    this.form = null;\n\t    this.iframe = null;\n\t  }\n\t\n\t  Polling.prototype.doClose.call(this);\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doPoll = function () {\n\t  var self = this;\n\t  var script = document.createElement('script');\n\t\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  script.async = true;\n\t  script.src = this.uri();\n\t  script.onerror = function (e) {\n\t    self.onError('jsonp poll error', e);\n\t  };\n\t\n\t  var insertAt = document.getElementsByTagName('script')[0];\n\t  if (insertAt) {\n\t    insertAt.parentNode.insertBefore(script, insertAt);\n\t  } else {\n\t    (document.head || document.body).appendChild(script);\n\t  }\n\t  this.script = script;\n\t\n\t  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\t\n\t  if (isUAgecko) {\n\t    setTimeout(function () {\n\t      var iframe = document.createElement('iframe');\n\t      document.body.appendChild(iframe);\n\t      document.body.removeChild(iframe);\n\t    }, 100);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes with a hidden iframe.\n\t *\n\t * @param {String} data to send\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doWrite = function (data, fn) {\n\t  var self = this;\n\t\n\t  if (!this.form) {\n\t    var form = document.createElement('form');\n\t    var area = document.createElement('textarea');\n\t    var id = this.iframeId = 'eio_iframe_' + this.index;\n\t    var iframe;\n\t\n\t    form.className = 'socketio';\n\t    form.style.position = 'absolute';\n\t    form.style.top = '-1000px';\n\t    form.style.left = '-1000px';\n\t    form.target = id;\n\t    form.method = 'POST';\n\t    form.setAttribute('accept-charset', 'utf-8');\n\t    area.name = 'd';\n\t    form.appendChild(area);\n\t    document.body.appendChild(form);\n\t\n\t    this.form = form;\n\t    this.area = area;\n\t  }\n\t\n\t  this.form.action = this.uri();\n\t\n\t  function complete () {\n\t    initIframe();\n\t    fn();\n\t  }\n\t\n\t  function initIframe () {\n\t    if (self.iframe) {\n\t      try {\n\t        self.form.removeChild(self.iframe);\n\t      } catch (e) {\n\t        self.onError('jsonp polling iframe removal error', e);\n\t      }\n\t    }\n\t\n\t    try {\n\t      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n\t      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n\t      iframe = document.createElement(html);\n\t    } catch (e) {\n\t      iframe = document.createElement('iframe');\n\t      iframe.name = self.iframeId;\n\t      iframe.src = 'javascript:0';\n\t    }\n\t\n\t    iframe.id = self.iframeId;\n\t\n\t    self.form.appendChild(iframe);\n\t    self.iframe = iframe;\n\t  }\n\t\n\t  initIframe();\n\t\n\t  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n\t  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n\t  data = data.replace(rEscapedNewline, '\\\\\\n');\n\t  this.area.value = data.replace(rNewline, '\\\\n');\n\t\n\t  try {\n\t    this.form.submit();\n\t  } catch (e) {}\n\t\n\t  if (this.iframe.attachEvent) {\n\t    this.iframe.onreadystatechange = function () {\n\t      if (self.iframe.readyState === 'complete') {\n\t        complete();\n\t      }\n\t    };\n\t  } else {\n\t    this.iframe.onload = complete;\n\t  }\n\t};\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(21);\n\tvar parser = __webpack_require__(22);\n\tvar parseqs = __webpack_require__(30);\n\tvar inherit = __webpack_require__(31);\n\tvar yeast = __webpack_require__(32);\n\tvar debug = __webpack_require__(3)('engine.io-client:websocket');\n\t\n\tvar BrowserWebSocket, NodeWebSocket;\n\t\n\tif (typeof WebSocket !== 'undefined') {\n\t  BrowserWebSocket = WebSocket;\n\t} else if (typeof self !== 'undefined') {\n\t  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n\t}\n\t\n\tif (typeof window === 'undefined') {\n\t  try {\n\t    NodeWebSocket = __webpack_require__(35);\n\t  } catch (e) { }\n\t}\n\t\n\t/**\n\t * Get either the `WebSocket` or `MozWebSocket` globals\n\t * in the browser or try to resolve WebSocket-compatible\n\t * interface exposed by `ws` for Node-like environment.\n\t */\n\t\n\tvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = WS;\n\t\n\t/**\n\t * WebSocket transport constructor.\n\t *\n\t * @api {Object} connection options\n\t * @api public\n\t */\n\t\n\tfunction WS (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  this.perMessageDeflate = opts.perMessageDeflate;\n\t  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n\t  this.protocols = opts.protocols;\n\t  if (!this.usingBrowserWebSocket) {\n\t    WebSocketImpl = NodeWebSocket;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(WS, Transport);\n\t\n\t/**\n\t * Transport name.\n\t *\n\t * @api public\n\t */\n\t\n\tWS.prototype.name = 'websocket';\n\t\n\t/*\n\t * WebSockets support binary\n\t */\n\t\n\tWS.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Opens socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doOpen = function () {\n\t  if (!this.check()) {\n\t    // let probe timeout\n\t    return;\n\t  }\n\t\n\t  var uri = this.uri();\n\t  var protocols = this.protocols;\n\t\n\t  var opts = {};\n\t\n\t  if (!this.isReactNative) {\n\t    opts.agent = this.agent;\n\t    opts.perMessageDeflate = this.perMessageDeflate;\n\t\n\t    // SSL options for Node.js client\n\t    opts.pfx = this.pfx;\n\t    opts.key = this.key;\n\t    opts.passphrase = this.passphrase;\n\t    opts.cert = this.cert;\n\t    opts.ca = this.ca;\n\t    opts.ciphers = this.ciphers;\n\t    opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  }\n\t\n\t  if (this.extraHeaders) {\n\t    opts.headers = this.extraHeaders;\n\t  }\n\t  if (this.localAddress) {\n\t    opts.localAddress = this.localAddress;\n\t  }\n\t\n\t  try {\n\t    this.ws =\n\t      this.usingBrowserWebSocket && !this.isReactNative\n\t        ? protocols\n\t          ? new WebSocketImpl(uri, protocols)\n\t          : new WebSocketImpl(uri)\n\t        : new WebSocketImpl(uri, protocols, opts);\n\t  } catch (err) {\n\t    return this.emit('error', err);\n\t  }\n\t\n\t  if (this.ws.binaryType === undefined) {\n\t    this.supportsBinary = false;\n\t  }\n\t\n\t  if (this.ws.supports && this.ws.supports.binary) {\n\t    this.supportsBinary = true;\n\t    this.ws.binaryType = 'nodebuffer';\n\t  } else {\n\t    this.ws.binaryType = 'arraybuffer';\n\t  }\n\t\n\t  this.addEventListeners();\n\t};\n\t\n\t/**\n\t * Adds event listeners to the socket\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.addEventListeners = function () {\n\t  var self = this;\n\t\n\t  this.ws.onopen = function () {\n\t    self.onOpen();\n\t  };\n\t  this.ws.onclose = function () {\n\t    self.onClose();\n\t  };\n\t  this.ws.onmessage = function (ev) {\n\t    self.onData(ev.data);\n\t  };\n\t  this.ws.onerror = function (e) {\n\t    self.onError('websocket error', e);\n\t  };\n\t};\n\t\n\t/**\n\t * Writes data to socket.\n\t *\n\t * @param {Array} array of packets.\n\t * @api private\n\t */\n\t\n\tWS.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t\n\t  // encodePacket efficient as it uses WS framing\n\t  // no need for encodePayload\n\t  var total = packets.length;\n\t  for (var i = 0, l = total; i < l; i++) {\n\t    (function (packet) {\n\t      parser.encodePacket(packet, self.supportsBinary, function (data) {\n\t        if (!self.usingBrowserWebSocket) {\n\t          // always create a new object (GH-437)\n\t          var opts = {};\n\t          if (packet.options) {\n\t            opts.compress = packet.options.compress;\n\t          }\n\t\n\t          if (self.perMessageDeflate) {\n\t            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n\t            if (len < self.perMessageDeflate.threshold) {\n\t              opts.compress = false;\n\t            }\n\t          }\n\t        }\n\t\n\t        // Sometimes the websocket has already been closed but the browser didn't\n\t        // have a chance of informing us about it yet, in that case send will\n\t        // throw an error\n\t        try {\n\t          if (self.usingBrowserWebSocket) {\n\t            // TypeError is thrown when passing the second argument on Safari\n\t            self.ws.send(data);\n\t          } else {\n\t            self.ws.send(data, opts);\n\t          }\n\t        } catch (e) {\n\t          debug('websocket closed before onclose event');\n\t        }\n\t\n\t        --total || done();\n\t      });\n\t    })(packets[i]);\n\t  }\n\t\n\t  function done () {\n\t    self.emit('flush');\n\t\n\t    // fake drain\n\t    // defer to next tick to allow Socket to clear writeBuffer\n\t    setTimeout(function () {\n\t      self.writable = true;\n\t      self.emit('drain');\n\t    }, 0);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon close\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.onClose = function () {\n\t  Transport.prototype.onClose.call(this);\n\t};\n\t\n\t/**\n\t * Closes socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doClose = function () {\n\t  if (typeof this.ws !== 'undefined') {\n\t    this.ws.close();\n\t  }\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'wss' : 'ws';\n\t  var port = '';\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n\t    ('ws' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // append timestamp to URI\n\t  if (this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  // communicate binary support capabilities\n\t  if (!this.supportsBinary) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\t\n\t/**\n\t * Feature detection for WebSocket.\n\t *\n\t * @return {Boolean} whether this transport is available.\n\t * @api public\n\t */\n\t\n\tWS.prototype.check = function () {\n\t  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n\t};\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\n\t/* (ignored) */\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n\t\n\tvar indexOf = [].indexOf;\n\t\n\tmodule.exports = function(arr, obj){\n\t  if (indexOf) return arr.indexOf(obj);\n\t  for (var i = 0; i < arr.length; ++i) {\n\t    if (arr[i] === obj) return i;\n\t  }\n\t  return -1;\n\t};\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(7);\n\tvar Emitter = __webpack_require__(8);\n\tvar toArray = __webpack_require__(38);\n\tvar on = __webpack_require__(39);\n\tvar bind = __webpack_require__(40);\n\tvar debug = __webpack_require__(3)('socket.io-client:socket');\n\tvar parseqs = __webpack_require__(30);\n\tvar hasBin = __webpack_require__(24);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = Socket;\n\t\n\t/**\n\t * Internal events (blacklisted).\n\t * These events can't be emitted by the user.\n\t *\n\t * @api private\n\t */\n\t\n\tvar events = {\n\t  connect: 1,\n\t  connect_error: 1,\n\t  connect_timeout: 1,\n\t  connecting: 1,\n\t  disconnect: 1,\n\t  error: 1,\n\t  reconnect: 1,\n\t  reconnect_attempt: 1,\n\t  reconnect_failed: 1,\n\t  reconnect_error: 1,\n\t  reconnecting: 1,\n\t  ping: 1,\n\t  pong: 1\n\t};\n\t\n\t/**\n\t * Shortcut to `Emitter#emit`.\n\t */\n\t\n\tvar emit = Emitter.prototype.emit;\n\t\n\t/**\n\t * `Socket` constructor.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Socket (io, nsp, opts) {\n\t  this.io = io;\n\t  this.nsp = nsp;\n\t  this.json = this; // compat\n\t  this.ids = 0;\n\t  this.acks = {};\n\t  this.receiveBuffer = [];\n\t  this.sendBuffer = [];\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  this.flags = {};\n\t  if (opts && opts.query) {\n\t    this.query = opts.query;\n\t  }\n\t  if (this.io.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Subscribe to open, close and packet events\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.subEvents = function () {\n\t  if (this.subs) return;\n\t\n\t  var io = this.io;\n\t  this.subs = [\n\t    on(io, 'open', bind(this, 'onopen')),\n\t    on(io, 'packet', bind(this, 'onpacket')),\n\t    on(io, 'close', bind(this, 'onclose'))\n\t  ];\n\t};\n\t\n\t/**\n\t * \"Opens\" the socket.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.open =\n\tSocket.prototype.connect = function () {\n\t  if (this.connected) return this;\n\t\n\t  this.subEvents();\n\t  if (!this.io.reconnecting) this.io.open(); // ensure open\n\t  if ('open' === this.io.readyState) this.onopen();\n\t  this.emit('connecting');\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a `message` event.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.send = function () {\n\t  var args = toArray(arguments);\n\t  args.unshift('message');\n\t  this.emit.apply(this, args);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Override `emit`.\n\t * If the event is in `events`, it's emitted normally.\n\t *\n\t * @param {String} event name\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.emit = function (ev) {\n\t  if (events.hasOwnProperty(ev)) {\n\t    emit.apply(this, arguments);\n\t    return this;\n\t  }\n\t\n\t  var args = toArray(arguments);\n\t  var packet = {\n\t    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n\t    data: args\n\t  };\n\t\n\t  packet.options = {};\n\t  packet.options.compress = !this.flags || false !== this.flags.compress;\n\t\n\t  // event ack callback\n\t  if ('function' === typeof args[args.length - 1]) {\n\t    debug('emitting packet with ack id %d', this.ids);\n\t    this.acks[this.ids] = args.pop();\n\t    packet.id = this.ids++;\n\t  }\n\t\n\t  if (this.connected) {\n\t    this.packet(packet);\n\t  } else {\n\t    this.sendBuffer.push(packet);\n\t  }\n\t\n\t  this.flags = {};\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.packet = function (packet) {\n\t  packet.nsp = this.nsp;\n\t  this.io.packet(packet);\n\t};\n\t\n\t/**\n\t * Called upon engine `open`.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onopen = function () {\n\t  debug('transport is open - connecting');\n\t\n\t  // write connect packet if necessary\n\t  if ('/' !== this.nsp) {\n\t    if (this.query) {\n\t      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\t      debug('sending connect packet with query %s', query);\n\t      this.packet({type: parser.CONNECT, query: query});\n\t    } else {\n\t      this.packet({type: parser.CONNECT});\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon engine `close`.\n\t *\n\t * @param {String} reason\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onclose = function (reason) {\n\t  debug('close (%s)', reason);\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  delete this.id;\n\t  this.emit('disconnect', reason);\n\t};\n\t\n\t/**\n\t * Called with socket packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onpacket = function (packet) {\n\t  var sameNamespace = packet.nsp === this.nsp;\n\t  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\t\n\t  if (!sameNamespace && !rootNamespaceError) return;\n\t\n\t  switch (packet.type) {\n\t    case parser.CONNECT:\n\t      this.onconnect();\n\t      break;\n\t\n\t    case parser.EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.BINARY_EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.BINARY_ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.DISCONNECT:\n\t      this.ondisconnect();\n\t      break;\n\t\n\t    case parser.ERROR:\n\t      this.emit('error', packet.data);\n\t      break;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon a server event.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onevent = function (packet) {\n\t  var args = packet.data || [];\n\t  debug('emitting event %j', args);\n\t\n\t  if (null != packet.id) {\n\t    debug('attaching ack callback to event');\n\t    args.push(this.ack(packet.id));\n\t  }\n\t\n\t  if (this.connected) {\n\t    emit.apply(this, args);\n\t  } else {\n\t    this.receiveBuffer.push(args);\n\t  }\n\t};\n\t\n\t/**\n\t * Produces an ack callback to emit with an event.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ack = function (id) {\n\t  var self = this;\n\t  var sent = false;\n\t  return function () {\n\t    // prevent double callbacks\n\t    if (sent) return;\n\t    sent = true;\n\t    var args = toArray(arguments);\n\t    debug('sending ack %j', args);\n\t\n\t    self.packet({\n\t      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n\t      id: id,\n\t      data: args\n\t    });\n\t  };\n\t};\n\t\n\t/**\n\t * Called upon a server acknowlegement.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onack = function (packet) {\n\t  var ack = this.acks[packet.id];\n\t  if ('function' === typeof ack) {\n\t    debug('calling ack %s with %j', packet.id, packet.data);\n\t    ack.apply(this, packet.data);\n\t    delete this.acks[packet.id];\n\t  } else {\n\t    debug('bad ack %s', packet.id);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon server connect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onconnect = function () {\n\t  this.connected = true;\n\t  this.disconnected = false;\n\t  this.emit('connect');\n\t  this.emitBuffered();\n\t};\n\t\n\t/**\n\t * Emit buffered events (received and emitted).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.emitBuffered = function () {\n\t  var i;\n\t  for (i = 0; i < this.receiveBuffer.length; i++) {\n\t    emit.apply(this, this.receiveBuffer[i]);\n\t  }\n\t  this.receiveBuffer = [];\n\t\n\t  for (i = 0; i < this.sendBuffer.length; i++) {\n\t    this.packet(this.sendBuffer[i]);\n\t  }\n\t  this.sendBuffer = [];\n\t};\n\t\n\t/**\n\t * Called upon server disconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ondisconnect = function () {\n\t  debug('server disconnect (%s)', this.nsp);\n\t  this.destroy();\n\t  this.onclose('io server disconnect');\n\t};\n\t\n\t/**\n\t * Called upon forced client/server side disconnections,\n\t * this method ensures the manager stops tracking us and\n\t * that reconnections don't get triggered for this.\n\t *\n\t * @api private.\n\t */\n\t\n\tSocket.prototype.destroy = function () {\n\t  if (this.subs) {\n\t    // clean subscriptions to avoid reconnections\n\t    for (var i = 0; i < this.subs.length; i++) {\n\t      this.subs[i].destroy();\n\t    }\n\t    this.subs = null;\n\t  }\n\t\n\t  this.io.destroy(this);\n\t};\n\t\n\t/**\n\t * Disconnects the socket manually.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.close =\n\tSocket.prototype.disconnect = function () {\n\t  if (this.connected) {\n\t    debug('performing disconnect (%s)', this.nsp);\n\t    this.packet({ type: parser.DISCONNECT });\n\t  }\n\t\n\t  // remove socket from pool\n\t  this.destroy();\n\t\n\t  if (this.connected) {\n\t    // fire events\n\t    this.onclose('io client disconnect');\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the compress flag.\n\t *\n\t * @param {Boolean} if `true`, compresses the sending data\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.compress = function (compress) {\n\t  this.flags.compress = compress;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the binary flag\n\t *\n\t * @param {Boolean} whether the emitted data contains binary\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.binary = function (binary) {\n\t  this.flags.binary = binary;\n\t  return this;\n\t};\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = toArray\n\t\n\tfunction toArray(list, index) {\n\t    var array = []\n\t\n\t    index = index || 0\n\t\n\t    for (var i = index || 0; i < list.length; i++) {\n\t        array[i - index] = list[i]\n\t    }\n\t\n\t    return array\n\t}\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = on;\n\t\n\t/**\n\t * Helper for subscriptions.\n\t *\n\t * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n\t * @param {String} event name\n\t * @param {Function} callback\n\t * @api public\n\t */\n\t\n\tfunction on (obj, ev, fn) {\n\t  obj.on(ev, fn);\n\t  return {\n\t    destroy: function () {\n\t      obj.removeListener(ev, fn);\n\t    }\n\t  };\n\t}\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Slice reference.\n\t */\n\t\n\tvar slice = [].slice;\n\t\n\t/**\n\t * Bind `obj` to `fn`.\n\t *\n\t * @param {Object} obj\n\t * @param {Function|String} fn or string\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(obj, fn){\n\t  if ('string' == typeof fn) fn = obj[fn];\n\t  if ('function' != typeof fn) throw new Error('bind() requires a function');\n\t  var args = slice.call(arguments, 2);\n\t  return function(){\n\t    return fn.apply(obj, args.concat(slice.call(arguments)));\n\t  }\n\t};\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Expose `Backoff`.\n\t */\n\t\n\tmodule.exports = Backoff;\n\t\n\t/**\n\t * Initialize backoff timer with `opts`.\n\t *\n\t * - `min` initial timeout in milliseconds [100]\n\t * - `max` max timeout [10000]\n\t * - `jitter` [0]\n\t * - `factor` [2]\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction Backoff(opts) {\n\t  opts = opts || {};\n\t  this.ms = opts.min || 100;\n\t  this.max = opts.max || 10000;\n\t  this.factor = opts.factor || 2;\n\t  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n\t  this.attempts = 0;\n\t}\n\t\n\t/**\n\t * Return the backoff duration.\n\t *\n\t * @return {Number}\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.duration = function(){\n\t  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n\t  if (this.jitter) {\n\t    var rand =  Math.random();\n\t    var deviation = Math.floor(rand * this.jitter * ms);\n\t    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n\t  }\n\t  return Math.min(ms, this.max) | 0;\n\t};\n\t\n\t/**\n\t * Reset the number of attempts.\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.reset = function(){\n\t  this.attempts = 0;\n\t};\n\t\n\t/**\n\t * Set the minimum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMin = function(min){\n\t  this.ms = min;\n\t};\n\t\n\t/**\n\t * Set the maximum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMax = function(max){\n\t  this.max = max;\n\t};\n\t\n\t/**\n\t * Set the jitter\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setJitter = function(jitter){\n\t  this.jitter = jitter;\n\t};\n\t\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// socket.io.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 841e359d3e4df861c732","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/index.js\n// module id = 0\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/url.js\n// module id = 1\n// module chunks = 0","/**\n * Parses an URI\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\n\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nvar parts = [\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\n\nmodule.exports = function parseuri(str) {\n    var src = str,\n        b = str.indexOf('['),\n        e = str.indexOf(']');\n\n    if (b != -1 && e != -1) {\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n    }\n\n    var m = re.exec(str || ''),\n        uri = {},\n        i = 14;\n\n    while (i--) {\n        uri[parts[i]] = m[i] || '';\n    }\n\n    if (b != -1 && e != -1) {\n        uri.source = src;\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n        uri.ipv6uri = true;\n    }\n\n    uri.pathNames = pathNames(uri, uri['path']);\n    uri.queryKey = queryKey(uri, uri['query']);\n\n    return uri;\n};\n\nfunction pathNames(obj, path) {\n    var regx = /\\/{2,9}/g,\n        names = path.replace(regx, \"/\").split(\"/\");\n\n    if (path.substr(0, 1) == '/' || path.length === 0) {\n        names.splice(0, 1);\n    }\n    if (path.substr(path.length - 1, 1) == '/') {\n        names.splice(names.length - 1, 1);\n    }\n\n    return names;\n}\n\nfunction queryKey(uri, query) {\n    var data = {};\n\n    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n        if ($1) {\n            data[$1] = $2;\n        }\n    });\n\n    return data;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/browser.js","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 4\n// module chunks = 0","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n\n  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  if (name[name.length - 1] === '*') {\n    return true;\n  }\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/debug.js","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ms/index.js\n// module id = 6\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 7\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 8\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 9\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 10\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 11\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    if (timeout === 0) {\n      openSub.destroy(); // prevents a race condition with the 'open' event\n    }\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/manager.js\n// module id = 12\n// module chunks = 0","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 13\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('parseqs');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n  opts = opts || {};\n\n  if (uri && 'object' === typeof uri) {\n    opts = uri;\n    uri = null;\n  }\n\n  if (uri) {\n    uri = parseuri(uri);\n    opts.hostname = uri.host;\n    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n    opts.port = uri.port;\n    if (uri.query) opts.query = uri.query;\n  } else if (opts.host) {\n    opts.hostname = parseuri(opts.host).host;\n  }\n\n  this.secure = null != opts.secure ? opts.secure\n    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\n  if (opts.hostname && !opts.port) {\n    // if no port is specified manually, use the protocol default\n    opts.port = this.secure ? '443' : '80';\n  }\n\n  this.agent = opts.agent || false;\n  this.hostname = opts.hostname ||\n    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && location.port\n      ? location.port\n      : (this.secure ? 443 : 80));\n  this.query = opts.query || {};\n  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n  this.upgrade = false !== opts.upgrade;\n  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n  this.forceJSONP = !!opts.forceJSONP;\n  this.jsonp = false !== opts.jsonp;\n  this.forceBase64 = !!opts.forceBase64;\n  this.enablesXDR = !!opts.enablesXDR;\n  this.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\n  this.readyState = '';\n  this.writeBuffer = [];\n  this.prevBufferLen = 0;\n  this.policyPort = opts.policyPort || 843;\n  this.rememberUpgrade = opts.rememberUpgrade || false;\n  this.binaryType = null;\n  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n    this.perMessageDeflate.threshold = 1024;\n  }\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx || null;\n  this.key = opts.key || null;\n  this.passphrase = opts.passphrase || null;\n  this.cert = opts.cert || null;\n  this.ca = opts.ca || null;\n  this.ciphers = opts.ciphers || null;\n  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\n    }\n  }\n\n  // set on handshake\n  this.id = null;\n  this.upgrades = null;\n  this.pingInterval = null;\n  this.pingTimeout = null;\n\n  // set on heartbeat\n  this.pingIntervalTimer = null;\n  this.pingTimeoutTimer = null;\n\n  this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('engine.io-parser');\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n  debug('creating transport \"%s\"', name);\n  var query = clone(this.query);\n\n  // append engine.io protocol identifier\n  query.EIO = parser.protocol;\n\n  // transport name\n  query.transport = name;\n\n  // per-transport options\n  var options = this.transportOptions[name] || {};\n\n  // session id if we already have one\n  if (this.id) query.sid = this.id;\n\n  var transport = new transports[name]({\n    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\n  });\n\n  return transport;\n};\n\nfunction clone (obj) {\n  var o = {};\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      o[i] = obj[i];\n    }\n  }\n  return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n  var transport;\n  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n    transport = 'websocket';\n  } else if (0 === this.transports.length) {\n    // Emit error on next tick so it can be listened to\n    var self = this;\n    setTimeout(function () {\n      self.emit('error', 'No transports available');\n    }, 0);\n    return;\n  } else {\n    transport = this.transports[0];\n  }\n  this.readyState = 'opening';\n\n  // Retry with the next transport if the transport is disabled (jsonp: false)\n  try {\n    transport = this.createTransport(transport);\n  } catch (e) {\n    this.transports.shift();\n    this.open();\n    return;\n  }\n\n  transport.open();\n  this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n  debug('setting transport %s', transport.name);\n  var self = this;\n\n  if (this.transport) {\n    debug('clearing existing transport %s', this.transport.name);\n    this.transport.removeAllListeners();\n  }\n\n  // set up transport\n  this.transport = transport;\n\n  // set up transport listeners\n  transport\n  .on('drain', function () {\n    self.onDrain();\n  })\n  .on('packet', function (packet) {\n    self.onPacket(packet);\n  })\n  .on('error', function (e) {\n    self.onError(e);\n  })\n  .on('close', function () {\n    self.onClose('transport close');\n  });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n  debug('probing transport \"%s\"', name);\n  var transport = this.createTransport(name, { probe: 1 });\n  var failed = false;\n  var self = this;\n\n  Socket.priorWebsocketSuccess = false;\n\n  function onTransportOpen () {\n    if (self.onlyBinaryUpgrades) {\n      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n      failed = failed || upgradeLosesBinary;\n    }\n    if (failed) return;\n\n    debug('probe transport \"%s\" opened', name);\n    transport.send([{ type: 'ping', data: 'probe' }]);\n    transport.once('packet', function (msg) {\n      if (failed) return;\n      if ('pong' === msg.type && 'probe' === msg.data) {\n        debug('probe transport \"%s\" pong', name);\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n        debug('pausing current transport \"%s\"', self.transport.name);\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n          debug('changing transport and sending upgrade packet');\n\n          cleanup();\n\n          self.setTransport(transport);\n          transport.send([{ type: 'upgrade' }]);\n          self.emit('upgrade', transport);\n          transport = null;\n          self.upgrading = false;\n          self.flush();\n        });\n      } else {\n        debug('probe transport \"%s\" failed', name);\n        var err = new Error('probe error');\n        err.transport = transport.name;\n        self.emit('upgradeError', err);\n      }\n    });\n  }\n\n  function freezeTransport () {\n    if (failed) return;\n\n    // Any callback called by transport should be ignored since now\n    failed = true;\n\n    cleanup();\n\n    transport.close();\n    transport = null;\n  }\n\n  // Handle any error that happens while probing\n  function onerror (err) {\n    var error = new Error('probe error: ' + err);\n    error.transport = transport.name;\n\n    freezeTransport();\n\n    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n    self.emit('upgradeError', error);\n  }\n\n  function onTransportClose () {\n    onerror('transport closed');\n  }\n\n  // When the socket is closed while we're probing\n  function onclose () {\n    onerror('socket closed');\n  }\n\n  // When the socket is upgraded while we're probing\n  function onupgrade (to) {\n    if (transport && to.name !== transport.name) {\n      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n      freezeTransport();\n    }\n  }\n\n  // Remove all listeners on the transport and on self\n  function cleanup () {\n    transport.removeListener('open', onTransportOpen);\n    transport.removeListener('error', onerror);\n    transport.removeListener('close', onTransportClose);\n    self.removeListener('close', onclose);\n    self.removeListener('upgrading', onupgrade);\n  }\n\n  transport.once('open', onTransportOpen);\n  transport.once('error', onerror);\n  transport.once('close', onTransportClose);\n\n  this.once('close', onclose);\n  this.once('upgrading', onupgrade);\n\n  transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n  debug('socket open');\n  this.readyState = 'open';\n  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n  this.emit('open');\n  this.flush();\n\n  // we check for `readyState` in case an `open`\n  // listener already closed the socket\n  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n    debug('starting upgrade probes');\n    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n      this.probe(this.upgrades[i]);\n    }\n  }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n  if ('opening' === this.readyState || 'open' === this.readyState ||\n      'closing' === this.readyState) {\n    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n    this.emit('packet', packet);\n\n    // Socket is live - any packet counts\n    this.emit('heartbeat');\n\n    switch (packet.type) {\n      case 'open':\n        this.onHandshake(JSON.parse(packet.data));\n        break;\n\n      case 'pong':\n        this.setPing();\n        this.emit('pong');\n        break;\n\n      case 'error':\n        var err = new Error('server error');\n        err.code = packet.data;\n        this.onError(err);\n        break;\n\n      case 'message':\n        this.emit('data', packet.data);\n        this.emit('message', packet.data);\n        break;\n    }\n  } else {\n    debug('packet received with socket readyState \"%s\"', this.readyState);\n  }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n  this.emit('handshake', data);\n  this.id = data.sid;\n  this.transport.query.sid = data.sid;\n  this.upgrades = this.filterUpgrades(data.upgrades);\n  this.pingInterval = data.pingInterval;\n  this.pingTimeout = data.pingTimeout;\n  this.onOpen();\n  // In case open handler closes socket\n  if ('closed' === this.readyState) return;\n  this.setPing();\n\n  // Prolong liveness of socket on heartbeat\n  this.removeListener('heartbeat', this.onHeartbeat);\n  this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n  clearTimeout(this.pingTimeoutTimer);\n  var self = this;\n  self.pingTimeoutTimer = setTimeout(function () {\n    if ('closed' === self.readyState) return;\n    self.onClose('ping timeout');\n  }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n  var self = this;\n  clearTimeout(self.pingIntervalTimer);\n  self.pingIntervalTimer = setTimeout(function () {\n    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n    self.ping();\n    self.onHeartbeat(self.pingTimeout);\n  }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n  var self = this;\n  this.sendPacket('ping', function () {\n    self.emit('ping');\n  });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n  this.writeBuffer.splice(0, this.prevBufferLen);\n\n  // setting prevBufferLen = 0 is very important\n  // for example, when upgrading, upgrade packet is sent over,\n  // and a nonzero prevBufferLen could cause problems on `drain`\n  this.prevBufferLen = 0;\n\n  if (0 === this.writeBuffer.length) {\n    this.emit('drain');\n  } else {\n    this.flush();\n  }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n  if ('closed' !== this.readyState && this.transport.writable &&\n    !this.upgrading && this.writeBuffer.length) {\n    debug('flushing %d packets in socket', this.writeBuffer.length);\n    this.transport.send(this.writeBuffer);\n    // keep track of current length of writeBuffer\n    // splice writeBuffer and callbackBuffer on `drain`\n    this.prevBufferLen = this.writeBuffer.length;\n    this.emit('flush');\n  }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n  this.sendPacket('message', msg, options, fn);\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n  if ('function' === typeof data) {\n    fn = data;\n    data = undefined;\n  }\n\n  if ('function' === typeof options) {\n    fn = options;\n    options = null;\n  }\n\n  if ('closing' === this.readyState || 'closed' === this.readyState) {\n    return;\n  }\n\n  options = options || {};\n  options.compress = false !== options.compress;\n\n  var packet = {\n    type: type,\n    data: data,\n    options: options\n  };\n  this.emit('packetCreate', packet);\n  this.writeBuffer.push(packet);\n  if (fn) this.once('flush', fn);\n  this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.readyState = 'closing';\n\n    var self = this;\n\n    if (this.writeBuffer.length) {\n      this.once('drain', function () {\n        if (this.upgrading) {\n          waitForUpgrade();\n        } else {\n          close();\n        }\n      });\n    } else if (this.upgrading) {\n      waitForUpgrade();\n    } else {\n      close();\n    }\n  }\n\n  function close () {\n    self.onClose('forced close');\n    debug('socket closing - telling transport to close');\n    self.transport.close();\n  }\n\n  function cleanupAndClose () {\n    self.removeListener('upgrade', cleanupAndClose);\n    self.removeListener('upgradeError', cleanupAndClose);\n    close();\n  }\n\n  function waitForUpgrade () {\n    // wait for upgrade to finish since we can't send packets while pausing a transport\n    self.once('upgrade', cleanupAndClose);\n    self.once('upgradeError', cleanupAndClose);\n  }\n\n  return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n  debug('socket error %j', err);\n  Socket.priorWebsocketSuccess = false;\n  this.emit('error', err);\n  this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n    debug('socket close with reason: \"%s\"', reason);\n    var self = this;\n\n    // clear timers\n    clearTimeout(this.pingIntervalTimer);\n    clearTimeout(this.pingTimeoutTimer);\n\n    // stop event from firing again for transport\n    this.transport.removeAllListeners('close');\n\n    // ensure transport won't stay open\n    this.transport.close();\n\n    // ignore further transport communication\n    this.transport.removeAllListeners();\n\n    // set ready state\n    this.readyState = 'closed';\n\n    // clear session id\n    this.id = null;\n\n    // emit close event\n    this.emit('close', reason, desc);\n\n    // clean buffers after, so users can still\n    // grab the buffers on `close` event\n    self.writeBuffer = [];\n    self.prevBufferLen = 0;\n  }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n  var filteredUpgrades = [];\n  for (var i = 0, j = upgrades.length; i < j; i++) {\n    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n  }\n  return filteredUpgrades;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 14\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./websocket');\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n  var xhr;\n  var xd = false;\n  var xs = false;\n  var jsonp = false !== opts.jsonp;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    xd = opts.hostname !== location.hostname || port !== opts.port;\n    xs = opts.secure !== isSSL;\n  }\n\n  opts.xdomain = xd;\n  opts.xscheme = xs;\n  xhr = new XMLHttpRequest(opts);\n\n  if ('open' in xhr && !opts.forceJSONP) {\n    return new XHR(opts);\n  } else {\n    if (!jsonp) throw new Error('JSONP disabled');\n    return new JSONP(opts);\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 15\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\nvar globalThis = require('./globalThis');\n\nmodule.exports = function (opts) {\n  var xdomain = opts.xdomain;\n\n  // scheme must be same when usign XDomainRequest\n  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n  var xscheme = opts.xscheme;\n\n  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n  // https://github.com/Automattic/engine.io-client/pull/217\n  var enablesXDR = opts.enablesXDR;\n\n  // XMLHttpRequest can be disabled on IE\n  try {\n    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n      return new XMLHttpRequest();\n    }\n  } catch (e) { }\n\n  // Use XDomainRequest for IE8 if enablesXDR is true\n  // because loading bar keeps flashing when using jsonp-polling\n  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n  try {\n    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n      return new XDomainRequest();\n    }\n  } catch (e) { }\n\n  if (!xdomain) {\n    try {\n      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 16\n// module chunks = 0","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n    'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n  // if XMLHttp support is disabled in IE then it will throw\n  // when trying to create\n  module.exports = false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 17\n// module chunks = 0","module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/globalThis.browser.js\n// module id = 18\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\nvar globalThis = require('../globalThis');\n\n/**\n * Module exports.\n */\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n\n/**\n * Empty function\n */\n\nfunction empty () {}\n\n/**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction XHR (opts) {\n  Polling.call(this, opts);\n  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(XHR, Polling);\n\n/**\n * XHR supports binary\n */\n\nXHR.prototype.supportsBinary = true;\n\n/**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n\nXHR.prototype.request = function (opts) {\n  opts = opts || {};\n  opts.uri = this.uri();\n  opts.xd = this.xd;\n  opts.xs = this.xs;\n  opts.agent = this.agent || false;\n  opts.supportsBinary = this.supportsBinary;\n  opts.enablesXDR = this.enablesXDR;\n  opts.withCredentials = this.withCredentials;\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n  opts.requestTimeout = this.requestTimeout;\n\n  // other options for Node.js client\n  opts.extraHeaders = this.extraHeaders;\n\n  return new Request(opts);\n};\n\n/**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n\nXHR.prototype.doWrite = function (data, fn) {\n  var isBinary = typeof data !== 'string' && data !== undefined;\n  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n  var self = this;\n  req.on('success', fn);\n  req.on('error', function (err) {\n    self.onError('xhr post error', err);\n  });\n  this.sendXhr = req;\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nXHR.prototype.doPoll = function () {\n  debug('xhr poll');\n  var req = this.request();\n  var self = this;\n  req.on('data', function (data) {\n    self.onData(data);\n  });\n  req.on('error', function (err) {\n    self.onError('xhr poll error', err);\n  });\n  this.pollXhr = req;\n};\n\n/**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Request (opts) {\n  this.method = opts.method || 'GET';\n  this.uri = opts.uri;\n  this.xd = !!opts.xd;\n  this.xs = !!opts.xs;\n  this.async = false !== opts.async;\n  this.data = undefined !== opts.data ? opts.data : null;\n  this.agent = opts.agent;\n  this.isBinary = opts.isBinary;\n  this.supportsBinary = opts.supportsBinary;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n\n  this.create();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Request.prototype);\n\n/**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n\nRequest.prototype.create = function () {\n  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n\n  var xhr = this.xhr = new XMLHttpRequest(opts);\n  var self = this;\n\n  try {\n    debug('xhr open %s: %s', this.method, this.uri);\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n        for (var i in this.extraHeaders) {\n          if (this.extraHeaders.hasOwnProperty(i)) {\n            xhr.setRequestHeader(i, this.extraHeaders[i]);\n          }\n        }\n      }\n    } catch (e) {}\n\n    if ('POST' === this.method) {\n      try {\n        if (this.isBinary) {\n          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n        } else {\n          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n        }\n      } catch (e) {}\n    }\n\n    try {\n      xhr.setRequestHeader('Accept', '*/*');\n    } catch (e) {}\n\n    // ie6 check\n    if ('withCredentials' in xhr) {\n      xhr.withCredentials = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\n    }\n\n    if (this.hasXDR()) {\n      xhr.onload = function () {\n        self.onLoad();\n      };\n      xhr.onerror = function () {\n        self.onError(xhr.responseText);\n      };\n    } else {\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\n        if (4 !== xhr.readyState) return;\n        if (200 === xhr.status || 1223 === xhr.status) {\n          self.onLoad();\n        } else {\n          // make sure the `error` event handler that's user-set\n          // does not throw in the same tick and gets caught here\n          setTimeout(function () {\n            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n    debug('xhr data %s', this.data);\n    xhr.send(this.data);\n  } catch (e) {\n    // Need to defer since .create() is called directly fhrom the constructor\n    // and thus the 'error' event can only be only bound *after* this exception\n    // occurs.  Therefore, also, we cannot throw here at all.\n    setTimeout(function () {\n      self.onError(e);\n    }, 0);\n    return;\n  }\n\n  if (typeof document !== 'undefined') {\n    this.index = Request.requestsCount++;\n    Request.requests[this.index] = this;\n  }\n};\n\n/**\n * Called upon successful response.\n *\n * @api private\n */\n\nRequest.prototype.onSuccess = function () {\n  this.emit('success');\n  this.cleanup();\n};\n\n/**\n * Called if we have data.\n *\n * @api private\n */\n\nRequest.prototype.onData = function (data) {\n  this.emit('data', data);\n  this.onSuccess();\n};\n\n/**\n * Called upon error.\n *\n * @api private\n */\n\nRequest.prototype.onError = function (err) {\n  this.emit('error', err);\n  this.cleanup(true);\n};\n\n/**\n * Cleans up house.\n *\n * @api private\n */\n\nRequest.prototype.cleanup = function (fromError) {\n  if ('undefined' === typeof this.xhr || null === this.xhr) {\n    return;\n  }\n  // xmlhttprequest\n  if (this.hasXDR()) {\n    this.xhr.onload = this.xhr.onerror = empty;\n  } else {\n    this.xhr.onreadystatechange = empty;\n  }\n\n  if (fromError) {\n    try {\n      this.xhr.abort();\n    } catch (e) {}\n  }\n\n  if (typeof document !== 'undefined') {\n    delete Request.requests[this.index];\n  }\n\n  this.xhr = null;\n};\n\n/**\n * Called upon load.\n *\n * @api private\n */\n\nRequest.prototype.onLoad = function () {\n  var data;\n  try {\n    var contentType;\n    try {\n      contentType = this.xhr.getResponseHeader('Content-Type');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\n    }\n  } catch (e) {\n    this.onError(e);\n  }\n  if (null != data) {\n    this.onData(data);\n  }\n};\n\n/**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n\nRequest.prototype.hasXDR = function () {\n  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n};\n\n/**\n * Aborts the request.\n *\n * @api public\n */\n\nRequest.prototype.abort = function () {\n  this.cleanup();\n};\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, unloadHandler, false);\n  }\n}\n\nfunction unloadHandler () {\n  for (var i in Request.requests) {\n    if (Request.requests.hasOwnProperty(i)) {\n      Request.requests[i].abort();\n    }\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 19\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:polling');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Polling;\n\n/**\n * Is XHR2 supported?\n */\n\nvar hasXHR2 = (function () {\n  var XMLHttpRequest = require('xmlhttprequest-ssl');\n  var xhr = new XMLHttpRequest({ xdomain: false });\n  return null != xhr.responseType;\n})();\n\n/**\n * Polling interface.\n *\n * @param {Object} opts\n * @api private\n */\n\nfunction Polling (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (!hasXHR2 || forceBase64) {\n    this.supportsBinary = false;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(Polling, Transport);\n\n/**\n * Transport name.\n */\n\nPolling.prototype.name = 'polling';\n\n/**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n\nPolling.prototype.doOpen = function () {\n  this.poll();\n};\n\n/**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n\nPolling.prototype.pause = function (onPause) {\n  var self = this;\n\n  this.readyState = 'pausing';\n\n  function pause () {\n    debug('paused');\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n      debug('we are currently polling - waiting to pause');\n      total++;\n      this.once('pollComplete', function () {\n        debug('pre-pause polling complete');\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n      debug('we are currently writing - waiting to pause');\n      total++;\n      this.once('drain', function () {\n        debug('pre-pause writing complete');\n        --total || pause();\n      });\n    }\n  } else {\n    pause();\n  }\n};\n\n/**\n * Starts polling cycle.\n *\n * @api public\n */\n\nPolling.prototype.poll = function () {\n  debug('polling');\n  this.polling = true;\n  this.doPoll();\n  this.emit('poll');\n};\n\n/**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n\nPolling.prototype.onData = function (data) {\n  var self = this;\n  debug('polling got data %s', data);\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState && packet.type === 'open') {\n      self.onOpen();\n    }\n\n    // if its a close packet, we close the ongoing requests\n    if ('close' === packet.type) {\n      self.onClose();\n      return false;\n    }\n\n    // otherwise bypass onData and handle the message\n    self.onPacket(packet);\n  };\n\n  // decode payload\n  parser.decodePayload(data, this.socket.binaryType, callback);\n\n  // if an event did not trigger closing\n  if ('closed' !== this.readyState) {\n    // if we got data we're not polling\n    this.polling = false;\n    this.emit('pollComplete');\n\n    if ('open' === this.readyState) {\n      this.poll();\n    } else {\n      debug('ignoring poll - transport state \"%s\"', this.readyState);\n    }\n  }\n};\n\n/**\n * For polling, send a close packet.\n *\n * @api private\n */\n\nPolling.prototype.doClose = function () {\n  var self = this;\n\n  function close () {\n    debug('writing close packet');\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n    debug('transport open - closing');\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n    debug('transport not open - deferring close');\n    this.once('open', close);\n  }\n};\n\n/**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n\nPolling.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n  var callbackfn = function () {\n    self.writable = true;\n    self.emit('drain');\n  };\n\n  parser.encodePayload(packets, this.supportsBinary, function (data) {\n    self.doWrite(data, callbackfn);\n  });\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nPolling.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'https' : 'http';\n  var port = '';\n\n  // cache busting is forced\n  if (false !== this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  if (!this.supportsBinary && !query.sid) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // avoid port if default for schema\n  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n     ('http' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 20\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('component-emitter');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n  this.path = opts.path;\n  this.hostname = opts.hostname;\n  this.port = opts.port;\n  this.secure = opts.secure;\n  this.query = opts.query;\n  this.timestampParam = opts.timestampParam;\n  this.timestampRequests = opts.timestampRequests;\n  this.readyState = '';\n  this.agent = opts.agent || false;\n  this.socket = opts.socket;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n  var err = new Error(msg);\n  err.type = 'TransportError';\n  err.description = desc;\n  this.emit('error', err);\n  return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n  if ('closed' === this.readyState || '' === this.readyState) {\n    this.readyState = 'opening';\n    this.doOpen();\n  }\n\n  return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.doClose();\n    this.onClose();\n  }\n\n  return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n  if ('open' === this.readyState) {\n    this.write(packets);\n  } else {\n    throw new Error('Transport not open');\n  }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n  this.readyState = 'open';\n  this.writable = true;\n  this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n  var packet = parser.decodePacket(data, this.socket.binaryType);\n  this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n  this.readyState = 'closed';\n  this.emit('close');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 21\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('base64-arraybuffer');\n}\n\n/**\n * Check if we are running an android browser. That requires us to use\n * ArrayBuffer with polling transports...\n *\n * http://ghinda.net/jpeg-blob-ajax-android/\n */\n\nvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\n/**\n * Check if we are running in PhantomJS.\n * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n * https://github.com/ariya/phantomjs/issues/11395\n * @type boolean\n */\nvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\n/**\n * When true, avoids using Blobs to encode payloads.\n * @type boolean\n */\nvar dontSendBlobs = isAndroid || isPhantomJS;\n\n/**\n * Current protocol version.\n */\n\nexports.protocol = 3;\n\n/**\n * Packet types.\n */\n\nvar packets = exports.packets = {\n    open:     0    // non-ws\n  , close:    1    // non-ws\n  , ping:     2\n  , pong:     3\n  , message:  4\n  , upgrade:  5\n  , noop:     6\n};\n\nvar packetslist = keys(packets);\n\n/**\n * Premade error packet.\n */\n\nvar err = { type: 'error', data: 'parser error' };\n\n/**\n * Create a blob api even for blob builder when vendor prefixes exist\n */\n\nvar Blob = require('blob');\n\n/**\n * Encodes a packet.\n *\n *     <packet type id> [ <data> ]\n *\n * Example:\n *\n *     5hello world\n *     3\n *     4\n *\n * Binary is encoded in an identical principle\n *\n * @api private\n */\n\nexports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\n    callback = utf8encode;\n    utf8encode = null;\n  }\n\n  var data = (packet.data === undefined)\n    ? undefined\n    : packet.data.buffer || packet.data;\n\n  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n    return encodeBlob(packet, supportsBinary, callback);\n  }\n\n  // might be an object with { base64: true, data: dataAsBase64String }\n  if (data && data.base64) {\n    return encodeBase64Object(packet, callback);\n  }\n\n  // Sending data as a utf-8 string\n  var encoded = packets[packet.type];\n\n  // data fragment is optional\n  if (undefined !== packet.data) {\n    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n  }\n\n  return callback('' + encoded);\n\n};\n\nfunction encodeBase64Object(packet, callback) {\n  // packet data is an object { base64: true, data: dataAsBase64String }\n  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n  return callback(message);\n}\n\n/**\n * Encode packet helpers for binary types\n */\n\nfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var data = packet.data;\n  var contentArray = new Uint8Array(data);\n  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\n  resultBuffer[0] = packets[packet.type];\n  for (var i = 0; i < contentArray.length; i++) {\n    resultBuffer[i+1] = contentArray[i];\n  }\n\n  return callback(resultBuffer.buffer);\n}\n\nfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var fr = new FileReader();\n  fr.onload = function() {\n    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n  };\n  return fr.readAsArrayBuffer(packet.data);\n}\n\nfunction encodeBlob(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  if (dontSendBlobs) {\n    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n  }\n\n  var length = new Uint8Array(1);\n  length[0] = packets[packet.type];\n  var blob = new Blob([length.buffer, packet.data]);\n\n  return callback(blob);\n}\n\n/**\n * Encodes a packet with binary data in a base64 string\n *\n * @param {Object} packet, has `type` and `data`\n * @return {String} base64 encoded message\n */\n\nexports.encodeBase64Packet = function(packet, callback) {\n  var message = 'b' + exports.packets[packet.type];\n  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n    var fr = new FileReader();\n    fr.onload = function() {\n      var b64 = fr.result.split(',')[1];\n      callback(message + b64);\n    };\n    return fr.readAsDataURL(packet.data);\n  }\n\n  var b64data;\n  try {\n    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n  } catch (e) {\n    // iPhone Safari doesn't let you apply with typed arrays\n    var typed = new Uint8Array(packet.data);\n    var basic = new Array(typed.length);\n    for (var i = 0; i < typed.length; i++) {\n      basic[i] = typed[i];\n    }\n    b64data = String.fromCharCode.apply(null, basic);\n  }\n  message += btoa(b64data);\n  return callback(message);\n};\n\n/**\n * Decodes a packet. Changes format to Blob if requested.\n *\n * @return {Object} with `type` and `data` (if any)\n * @api private\n */\n\nexports.decodePacket = function (data, binaryType, utf8decode) {\n  if (data === undefined) {\n    return err;\n  }\n  // String data\n  if (typeof data === 'string') {\n    if (data.charAt(0) === 'b') {\n      return exports.decodeBase64Packet(data.substr(1), binaryType);\n    }\n\n    if (utf8decode) {\n      data = tryDecode(data);\n      if (data === false) {\n        return err;\n      }\n    }\n    var type = data.charAt(0);\n\n    if (Number(type) != type || !packetslist[type]) {\n      return err;\n    }\n\n    if (data.length > 1) {\n      return { type: packetslist[type], data: data.substring(1) };\n    } else {\n      return { type: packetslist[type] };\n    }\n  }\n\n  var asArray = new Uint8Array(data);\n  var type = asArray[0];\n  var rest = sliceBuffer(data, 1);\n  if (Blob && binaryType === 'blob') {\n    rest = new Blob([rest]);\n  }\n  return { type: packetslist[type], data: rest };\n};\n\nfunction tryDecode(data) {\n  try {\n    data = utf8.decode(data, { strict: false });\n  } catch (e) {\n    return false;\n  }\n  return data;\n}\n\n/**\n * Decodes a packet encoded in a base64 string\n *\n * @param {String} base64 encoded message\n * @return {Object} with `type` and `data` (if any)\n */\n\nexports.decodeBase64Packet = function(msg, binaryType) {\n  var type = packetslist[msg.charAt(0)];\n  if (!base64encoder) {\n    return { type: type, data: { base64: true, data: msg.substr(1) } };\n  }\n\n  var data = base64encoder.decode(msg.substr(1));\n\n  if (binaryType === 'blob' && Blob) {\n    data = new Blob([data]);\n  }\n\n  return { type: type, data: data };\n};\n\n/**\n * Encodes multiple messages (payload).\n *\n *     <length>:data\n *\n * Example:\n *\n *     11:hello world2:hi\n *\n * If any contents are binary, they will be encoded as base64 strings. Base64\n * encoded strings are marked with a b before the length specifier\n *\n * @param {Array} packets\n * @api private\n */\n\nexports.encodePayload = function (packets, supportsBinary, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = null;\n  }\n\n  var isBinary = hasBinary(packets);\n\n  if (supportsBinary && isBinary) {\n    if (Blob && !dontSendBlobs) {\n      return exports.encodePayloadAsBlob(packets, callback);\n    }\n\n    return exports.encodePayloadAsArrayBuffer(packets, callback);\n  }\n\n  if (!packets.length) {\n    return callback('0:');\n  }\n\n  function setLengthHeader(message) {\n    return message.length + ':' + message;\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n      doneCallback(null, setLengthHeader(message));\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(results.join(''));\n  });\n};\n\n/**\n * Async array map using after\n */\n\nfunction map(ary, each, done) {\n  var result = new Array(ary.length);\n  var next = after(ary.length, done);\n\n  var eachWithIndex = function(i, el, cb) {\n    each(el, function(error, msg) {\n      result[i] = msg;\n      cb(error, result);\n    });\n  };\n\n  for (var i = 0; i < ary.length; i++) {\n    eachWithIndex(i, ary[i], next);\n  }\n}\n\n/*\n * Decodes data when a payload is maybe expected. Possible binary contents are\n * decoded from their base64 representation\n *\n * @param {String} data, callback method\n * @api public\n */\n\nexports.decodePayload = function (data, binaryType, callback) {\n  if (typeof data !== 'string') {\n    return exports.decodePayloadAsBinary(data, binaryType, callback);\n  }\n\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var packet;\n  if (data === '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n  var length = '', n, msg;\n\n  for (var i = 0, l = data.length; i < l; i++) {\n    var chr = data.charAt(i);\n\n    if (chr !== ':') {\n      length += chr;\n      continue;\n    }\n\n    if (length === '' || (length != (n = Number(length)))) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    msg = data.substr(i + 1, n);\n\n    if (length != msg.length) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    if (msg.length) {\n      packet = exports.decodePacket(msg, binaryType, false);\n\n      if (err.type === packet.type && err.data === packet.data) {\n        // parser error in individual packet - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      var ret = callback(packet, i + n, l);\n      if (false === ret) return;\n    }\n\n    // advance cursor\n    i += n;\n    length = '';\n  }\n\n  if (length !== '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n};\n\n/**\n * Encodes multiple messages (payload) as binary.\n *\n * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n * 255><data>\n *\n * Example:\n * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n *\n * @param {Array} packets\n * @return {ArrayBuffer} encoded payload\n * @api private\n */\n\nexports.encodePayloadAsArrayBuffer = function(packets, callback) {\n  if (!packets.length) {\n    return callback(new ArrayBuffer(0));\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(data) {\n      return doneCallback(null, data);\n    });\n  }\n\n  map(packets, encodeOne, function(err, encodedPackets) {\n    var totalLength = encodedPackets.reduce(function(acc, p) {\n      var len;\n      if (typeof p === 'string'){\n        len = p.length;\n      } else {\n        len = p.byteLength;\n      }\n      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n    }, 0);\n\n    var resultArray = new Uint8Array(totalLength);\n\n    var bufferIndex = 0;\n    encodedPackets.forEach(function(p) {\n      var isString = typeof p === 'string';\n      var ab = p;\n      if (isString) {\n        var view = new Uint8Array(p.length);\n        for (var i = 0; i < p.length; i++) {\n          view[i] = p.charCodeAt(i);\n        }\n        ab = view.buffer;\n      }\n\n      if (isString) { // not true binary\n        resultArray[bufferIndex++] = 0;\n      } else { // true binary\n        resultArray[bufferIndex++] = 1;\n      }\n\n      var lenStr = ab.byteLength.toString();\n      for (var i = 0; i < lenStr.length; i++) {\n        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n      }\n      resultArray[bufferIndex++] = 255;\n\n      var view = new Uint8Array(ab);\n      for (var i = 0; i < view.length; i++) {\n        resultArray[bufferIndex++] = view[i];\n      }\n    });\n\n    return callback(resultArray.buffer);\n  });\n};\n\n/**\n * Encode as Blob\n */\n\nexports.encodePayloadAsBlob = function(packets, callback) {\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(encoded) {\n      var binaryIdentifier = new Uint8Array(1);\n      binaryIdentifier[0] = 1;\n      if (typeof encoded === 'string') {\n        var view = new Uint8Array(encoded.length);\n        for (var i = 0; i < encoded.length; i++) {\n          view[i] = encoded.charCodeAt(i);\n        }\n        encoded = view.buffer;\n        binaryIdentifier[0] = 0;\n      }\n\n      var len = (encoded instanceof ArrayBuffer)\n        ? encoded.byteLength\n        : encoded.size;\n\n      var lenStr = len.toString();\n      var lengthAry = new Uint8Array(lenStr.length + 1);\n      for (var i = 0; i < lenStr.length; i++) {\n        lengthAry[i] = parseInt(lenStr[i]);\n      }\n      lengthAry[lenStr.length] = 255;\n\n      if (Blob) {\n        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n        doneCallback(null, blob);\n      }\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(new Blob(results));\n  });\n};\n\n/*\n * Decodes data when a payload is maybe expected. Strings are decoded by\n * interpreting each byte as a key code for entries marked to start with 0. See\n * description of encodePayloadAsBinary\n *\n * @param {ArrayBuffer} data, callback method\n * @api public\n */\n\nexports.decodePayloadAsBinary = function (data, binaryType, callback) {\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var bufferTail = data;\n  var buffers = [];\n\n  while (bufferTail.byteLength > 0) {\n    var tailArray = new Uint8Array(bufferTail);\n    var isString = tailArray[0] === 0;\n    var msgLength = '';\n\n    for (var i = 1; ; i++) {\n      if (tailArray[i] === 255) break;\n\n      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\n\n    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n    msgLength = parseInt(msgLength);\n\n    var msg = sliceBuffer(bufferTail, 0, msgLength);\n    if (isString) {\n      try {\n        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n      } catch (e) {\n        // iPhone Safari doesn't let you apply to typed arrays\n        var typed = new Uint8Array(msg);\n        msg = '';\n        for (var i = 0; i < typed.length; i++) {\n          msg += String.fromCharCode(typed[i]);\n        }\n      }\n    }\n\n    buffers.push(msg);\n    bufferTail = sliceBuffer(bufferTail, msgLength);\n  }\n\n  var total = buffers.length;\n  buffers.forEach(function(buffer, i) {\n    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n  });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 22\n// module chunks = 0","\n/**\n * Gets the keys for an object.\n *\n * @return {Array} keys\n * @api private\n */\n\nmodule.exports = Object.keys || function keys (obj){\n  var arr = [];\n  var has = Object.prototype.hasOwnProperty;\n\n  for (var i in obj) {\n    if (has.call(obj, i)) {\n      arr.push(i);\n    }\n  }\n  return arr;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 23\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\n  }\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 24\n// module chunks = 0","/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n  var bytes = arraybuffer.byteLength;\n  start = start || 0;\n  end = end || bytes;\n\n  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n  if (start < 0) { start += bytes; }\n  if (end < 0) { end += bytes; }\n  if (end > bytes) { end = bytes; }\n\n  if (start >= bytes || start >= end || bytes === 0) {\n    return new ArrayBuffer(0);\n  }\n\n  var abv = new Uint8Array(arraybuffer);\n  var result = new Uint8Array(end - start);\n  for (var i = start, ii = 0; i < end; i++, ii++) {\n    result[ii] = abv[i];\n  }\n  return result.buffer;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 25\n// module chunks = 0","module.exports = after\n\nfunction after(count, callback, err_cb) {\n    var bail = false\n    err_cb = err_cb || noop\n    proxy.count = count\n\n    return (count === 0) ? callback() : proxy\n\n    function proxy(err, result) {\n        if (proxy.count <= 0) {\n            throw new Error('after called too many times')\n        }\n        --proxy.count\n\n        // after first error, rest are passed to err_cb\n        if (err) {\n            bail = true\n            callback(err)\n            // future error callbacks will go to error handler\n            callback = err_cb\n        } else if (proxy.count === 0 && !bail) {\n            callback(null, result)\n        }\n    }\n}\n\nfunction noop() {}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 26\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 27\n// module chunks = 0","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(chars){\n  \"use strict\";\n\n  exports.encode = function(arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer),\n    i, len = bytes.length, base64 = \"\";\n\n    for (i = 0; i < len; i+=3) {\n      base64 += chars[bytes[i] >> 2];\n      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n      base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if ((len % 3) === 2) {\n      base64 = base64.substring(0, base64.length - 1) + \"=\";\n    } else if (len % 3 === 1) {\n      base64 = base64.substring(0, base64.length - 2) + \"==\";\n    }\n\n    return base64;\n  };\n\n  exports.decode =  function(base64) {\n    var bufferLength = base64.length * 0.75,\n    len = base64.length, i, p = 0,\n    encoded1, encoded2, encoded3, encoded4;\n\n    if (base64[base64.length - 1] === \"=\") {\n      bufferLength--;\n      if (base64[base64.length - 2] === \"=\") {\n        bufferLength--;\n      }\n    }\n\n    var arraybuffer = new ArrayBuffer(bufferLength),\n    bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i+=4) {\n      encoded1 = chars.indexOf(base64[i]);\n      encoded2 = chars.indexOf(base64[i+1]);\n      encoded3 = chars.indexOf(base64[i+2]);\n      encoded4 = chars.indexOf(base64[i+3]);\n\n      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n  };\n})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 28\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 29\n// module chunks = 0","/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\n\nexports.encode = function (obj) {\n  var str = '';\n\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      if (str.length) str += '&';\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n    }\n  }\n\n  return str;\n};\n\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\n\nexports.decode = function(qs){\n  var qry = {};\n  var pairs = qs.split('&');\n  for (var i = 0, l = pairs.length; i < l; i++) {\n    var pair = pairs[i].split('=');\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n  }\n  return qry;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 30\n// module chunks = 0","\nmodule.exports = function(a, b){\n  var fn = function(){};\n  fn.prototype = b.prototype;\n  a.prototype = new fn;\n  a.prototype.constructor = a;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 31\n// module chunks = 0","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n  , length = 64\n  , map = {}\n  , seed = 0\n  , i = 0\n  , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n  var encoded = '';\n\n  do {\n    encoded = alphabet[num % length] + encoded;\n    num = Math.floor(num / length);\n  } while (num > 0);\n\n  return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n  var decoded = 0;\n\n  for (i = 0; i < str.length; i++) {\n    decoded = decoded * length + map[str.charAt(i)];\n  }\n\n  return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n  var now = encode(+new Date());\n\n  if (now !== prev) return seed = 0, prev = now;\n  return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 32\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\nvar globalThis = require('../globalThis');\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n  Polling.call(this, opts);\n\n  this.query = this.query || {};\n\n  // define global callbacks array if not present\n  // we do this here (lazily) to avoid unneeded global pollution\n  if (!callbacks) {\n    // we need to consider multiple engines in the same page\n    callbacks = globalThis.___eio = (globalThis.___eio || []);\n  }\n\n  // callback identifier\n  this.index = callbacks.length;\n\n  // add callback to jsonp global\n  var self = this;\n  callbacks.push(function (msg) {\n    self.onData(msg);\n  });\n\n  // append to query string\n  this.query.j = this.index;\n\n  // prevent spurious errors from being emitted when the window is unloaded\n  if (typeof addEventListener === 'function') {\n    addEventListener('beforeunload', function () {\n      if (self.script) self.script.onerror = empty;\n    }, false);\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  if (this.form) {\n    this.form.parentNode.removeChild(this.form);\n    this.form = null;\n    this.iframe = null;\n  }\n\n  Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n  var self = this;\n  var script = document.createElement('script');\n\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  script.async = true;\n  script.src = this.uri();\n  script.onerror = function (e) {\n    self.onError('jsonp poll error', e);\n  };\n\n  var insertAt = document.getElementsByTagName('script')[0];\n  if (insertAt) {\n    insertAt.parentNode.insertBefore(script, insertAt);\n  } else {\n    (document.head || document.body).appendChild(script);\n  }\n  this.script = script;\n\n  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n  if (isUAgecko) {\n    setTimeout(function () {\n      var iframe = document.createElement('iframe');\n      document.body.appendChild(iframe);\n      document.body.removeChild(iframe);\n    }, 100);\n  }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n  var self = this;\n\n  if (!this.form) {\n    var form = document.createElement('form');\n    var area = document.createElement('textarea');\n    var id = this.iframeId = 'eio_iframe_' + this.index;\n    var iframe;\n\n    form.className = 'socketio';\n    form.style.position = 'absolute';\n    form.style.top = '-1000px';\n    form.style.left = '-1000px';\n    form.target = id;\n    form.method = 'POST';\n    form.setAttribute('accept-charset', 'utf-8');\n    area.name = 'd';\n    form.appendChild(area);\n    document.body.appendChild(form);\n\n    this.form = form;\n    this.area = area;\n  }\n\n  this.form.action = this.uri();\n\n  function complete () {\n    initIframe();\n    fn();\n  }\n\n  function initIframe () {\n    if (self.iframe) {\n      try {\n        self.form.removeChild(self.iframe);\n      } catch (e) {\n        self.onError('jsonp polling iframe removal error', e);\n      }\n    }\n\n    try {\n      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n      iframe = document.createElement(html);\n    } catch (e) {\n      iframe = document.createElement('iframe');\n      iframe.name = self.iframeId;\n      iframe.src = 'javascript:0';\n    }\n\n    iframe.id = self.iframeId;\n\n    self.form.appendChild(iframe);\n    self.iframe = iframe;\n  }\n\n  initIframe();\n\n  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n  data = data.replace(rEscapedNewline, '\\\\\\n');\n  this.area.value = data.replace(rNewline, '\\\\n');\n\n  try {\n    this.form.submit();\n  } catch (e) {}\n\n  if (this.iframe.attachEvent) {\n    this.iframe.onreadystatechange = function () {\n      if (self.iframe.readyState === 'complete') {\n        complete();\n      }\n    };\n  } else {\n    this.iframe.onload = complete;\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 33\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\nvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\n/**\n * Module exports.\n */\n\nmodule.exports = WS;\n\n/**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n\nfunction WS (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (forceBase64) {\n    this.supportsBinary = false;\n  }\n  this.perMessageDeflate = opts.perMessageDeflate;\n  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(WS, Transport);\n\n/**\n * Transport name.\n *\n * @api public\n */\n\nWS.prototype.name = 'websocket';\n\n/*\n * WebSockets support binary\n */\n\nWS.prototype.supportsBinary = true;\n\n/**\n * Opens socket.\n *\n * @api private\n */\n\nWS.prototype.doOpen = function () {\n  if (!this.check()) {\n    // let probe timeout\n    return;\n  }\n\n  var uri = this.uri();\n  var protocols = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\n\n    // SSL options for Node.js client\n    opts.pfx = this.pfx;\n    opts.key = this.key;\n    opts.passphrase = this.passphrase;\n    opts.cert = this.cert;\n    opts.ca = this.ca;\n    opts.ciphers = this.ciphers;\n    opts.rejectUnauthorized = this.rejectUnauthorized;\n  }\n\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(uri, protocols, opts);\n  } catch (err) {\n    return this.emit('error', err);\n  }\n\n  if (this.ws.binaryType === undefined) {\n    this.supportsBinary = false;\n  }\n\n  if (this.ws.supports && this.ws.supports.binary) {\n    this.supportsBinary = true;\n    this.ws.binaryType = 'nodebuffer';\n  } else {\n    this.ws.binaryType = 'arraybuffer';\n  }\n\n  this.addEventListeners();\n};\n\n/**\n * Adds event listeners to the socket\n *\n * @api private\n */\n\nWS.prototype.addEventListeners = function () {\n  var self = this;\n\n  this.ws.onopen = function () {\n    self.onOpen();\n  };\n  this.ws.onclose = function () {\n    self.onClose();\n  };\n  this.ws.onmessage = function (ev) {\n    self.onData(ev.data);\n  };\n  this.ws.onerror = function (e) {\n    self.onError('websocket error', e);\n  };\n};\n\n/**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n\nWS.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n\n  // encodePacket efficient as it uses WS framing\n  // no need for encodePayload\n  var total = packets.length;\n  for (var i = 0, l = total; i < l; i++) {\n    (function (packet) {\n      parser.encodePacket(packet, self.supportsBinary, function (data) {\n        if (!self.usingBrowserWebSocket) {\n          // always create a new object (GH-437)\n          var opts = {};\n          if (packet.options) {\n            opts.compress = packet.options.compress;\n          }\n\n          if (self.perMessageDeflate) {\n            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n            if (len < self.perMessageDeflate.threshold) {\n              opts.compress = false;\n            }\n          }\n        }\n\n        // Sometimes the websocket has already been closed but the browser didn't\n        // have a chance of informing us about it yet, in that case send will\n        // throw an error\n        try {\n          if (self.usingBrowserWebSocket) {\n            // TypeError is thrown when passing the second argument on Safari\n            self.ws.send(data);\n          } else {\n            self.ws.send(data, opts);\n          }\n        } catch (e) {\n          debug('websocket closed before onclose event');\n        }\n\n        --total || done();\n      });\n    })(packets[i]);\n  }\n\n  function done () {\n    self.emit('flush');\n\n    // fake drain\n    // defer to next tick to allow Socket to clear writeBuffer\n    setTimeout(function () {\n      self.writable = true;\n      self.emit('drain');\n    }, 0);\n  }\n};\n\n/**\n * Called upon close\n *\n * @api private\n */\n\nWS.prototype.onClose = function () {\n  Transport.prototype.onClose.call(this);\n};\n\n/**\n * Closes socket.\n *\n * @api private\n */\n\nWS.prototype.doClose = function () {\n  if (typeof this.ws !== 'undefined') {\n    this.ws.close();\n  }\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nWS.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'wss' : 'ws';\n  var port = '';\n\n  // avoid port if default for schema\n  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // append timestamp to URI\n  if (this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  // communicate binary support capabilities\n  if (!this.supportsBinary) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n/**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n\nWS.prototype.check = function () {\n  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 34\n// module chunks = 0","\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 36\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  if (!this.io.reconnecting) this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/socket.js\n// module id = 37\n// module chunks = 0","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 38\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/on.js\n// module id = 39\n// module chunks = 0","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 40\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 41\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.dev.js.map b/device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.dev.js.map
deleted file mode 100644 (file)
index e55be08..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 47422d5bf02356bd34bb","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./support/noop.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/globalThis.browser.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///ws (ignored)","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["url","require","parser","Manager","debug","module","exports","lookup","cache","managers","uri","opts","undefined","parsed","source","id","path","sameNamespace","nsps","newConnection","forceNew","multiplex","io","query","socket","protocol","connect","Socket","parseuri","loc","obj","location","host","charAt","test","port","ipv6","indexOf","href","eio","Emitter","on","bind","Backoff","has","Object","prototype","hasOwnProperty","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","min","max","jitter","timeout","readyState","connecting","lastPing","encoding","packetBuffer","_parser","encoder","Encoder","decoder","Decoder","autoConnect","open","emitAll","emit","apply","arguments","nsp","call","updateSocketIds","generateId","engine","v","length","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","fn","self","skipReconnect","openSub","onopen","errorSub","data","cleanup","err","Error","destroy","timer","setTimeout","close","push","clearTimeout","onping","Date","onpong","ondata","add","ondecoded","packet","onerror","onConnecting","index","splice","type","encode","encodedPackets","i","write","options","processPacketQueue","pack","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","toArray","parseqs","hasBin","events","connect_error","connect_timeout","error","reconnect_attempt","reconnect_failed","reconnect_error","ping","pong","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","subEvents","send","args","unshift","ev","binary","BINARY_EVENT","EVENT","compress","pop","CONNECT","onpacket","rootNamespaceError","ERROR","onconnect","onevent","ACK","onack","BINARY_ACK","DISCONNECT","ondisconnect","ack","sent","emitBuffered","removeListener"],"mappings":"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AEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;;;AAGA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B,uBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,sFAAqF;AACrF;;AAEA;AACA;AACA;AACA;AACA,MAAK,OAAO;AACZ;AACA;AACA,IAAG,qCAAqC;AACxC;AACA;AACA,MAAK;AACL;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,oBAAoB;AAChC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7ZA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY;AACZ;;AAEA;AACA;;AAEA;AACA;;AAEA,kBAAiB,sBAAsB;AACvC;AACA;;AAEA;AACA;AACA,4CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;AC9KA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC,WAAU;AACV;;AAEA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA,IAAG;AACH;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA,kCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,8BAA6B;AAC7B,IAAG;AACH,oBAAmB,iBAAiB;AACpC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA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AAL,CAAagF,KAAb;AACA,QAAKzD,eAAL;AACA,QAAKN,OAAL,CAAa,WAAb,EAA0BqE,OAA1B;AACD,EAND,C;;;;;;;ACzjBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA2F;;AAE3F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;;AAEA,+CAA8C,WAAW;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA,sBAAqB,8BAA8B;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;;AAEA;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8CAA6C,OAAO;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA;AACA;AACA;;;;;;;AC3uBA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA,MAAK,YAAY;AACjB;AACA;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;;;;;;AChBA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH,sCAAqC;AACrC;AACA,EAAC;;;;;;;ACRD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA,2BAA0B,iDAAiD;AAC3E;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,UAAS;AACT,4DAA2D;AAC3D;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,gIAA+H;AAC/H;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;;AAGA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,iGAAgG;AAChG;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjaA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,iBAAiB;AACjD;AACA,EAAC;;AAED;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,kBAAiB,gBAAgB;AACjC;;AAEA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACpPA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,YAAW;;AAEX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+DAA8D,gBAAgB;AAC9E;;AAEA;;AAEA;;AAEA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B,qCAAqC;AAC/D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAc;AACd,MAAK;AACL,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA,+BAA8B,gBAAgB;AAC9C,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,aAAY,oBAAoB,oCAAoC;AACpE;;AAEA;;AAEA;AACA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY,YAAY;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oDAAmD;AACnD,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA,QAAO,OAAO;AACd;AACA;;AAEA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA,MAAK;;AAEL;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,EAAE;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;;;;;;;AC3lBA;AACA;AACA;AACA,aAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B,sCAAsC;;AAEhE,mBAAkB,gBAAgB;AAClC,iBAAgB,cAAc;AAC9B,qBAAoB,aAAa;;AAEjC;AACA;AACA;;AAEA;AACA;AACA,8BAA6B,SAAS;AACtC;AACA;AACA;AACA;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA,KAAI;AACJ,4BAA2B;AAC3B;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;;;AC1DD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA,0DAAyD;AACzD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA,EAAC;;;;;;;ACnGD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,cAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAM,YAAY;;AAElB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAmB;;AAEnB;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACrOA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,IAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;;AAET;;AAEA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AA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A4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;;;;;;;;;ACXA;;;;AAIAlK,QAAOC,OAAP,GAAiBmC,EAAjB;;AAEA;;;;;;;;;AASA,UAASA,EAAT,CAAaX,GAAb,EAAkBwI,EAAlB,EAAsBtE,EAAtB,EAA0B;AACxBlE,OAAIW,EAAJ,CAAO6H,EAAP,EAAWtE,EAAX;AACA,UAAO;AACLU,cAAS,mBAAY;AACnB5E,WAAI4J,cAAJ,CAAmBpB,EAAnB,EAAuBtE,EAAvB;AACD;AAHI,IAAP;AAKD,E;;;;;;ACvBD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,gBAAgB;AAC3B,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"socket.io.slim.dev.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 47422d5bf02356bd34bb","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/index.js","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/url.js","/**\n * Parses an URI\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\n\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nvar parts = [\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\n\nmodule.exports = function parseuri(str) {\n    var src = str,\n        b = str.indexOf('['),\n        e = str.indexOf(']');\n\n    if (b != -1 && e != -1) {\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n    }\n\n    var m = re.exec(str || ''),\n        uri = {},\n        i = 14;\n\n    while (i--) {\n        uri[parts[i]] = m[i] || '';\n    }\n\n    if (b != -1 && e != -1) {\n        uri.source = src;\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n        uri.ipv6uri = true;\n    }\n\n    uri.pathNames = pathNames(uri, uri['path']);\n    uri.queryKey = queryKey(uri, uri['query']);\n\n    return uri;\n};\n\nfunction pathNames(obj, path) {\n    var regx = /\\/{2,9}/g,\n        names = path.replace(regx, \"/\").split(\"/\");\n\n    if (path.substr(0, 1) == '/' || path.length === 0) {\n        names.splice(0, 1);\n    }\n    if (path.substr(path.length - 1, 1) == '/') {\n        names.splice(names.length - 1, 1);\n    }\n\n    return names;\n}\n\nfunction queryKey(uri, query) {\n    var data = {};\n\n    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n        if ($1) {\n            data[$1] = $2;\n        }\n    });\n\n    return data;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","\nmodule.exports = function () { return function () {}; };\n\n\n\n// WEBPACK FOOTER //\n// ./support/noop.js","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 4\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 5\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 6\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 7\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 8\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n\n  if (~this.readyState.indexOf('open')) return this;\n\n\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n\n\n    if (timeout === 0) {\n      openSub.destroy(); // prevents a race condition with the 'open' event\n    }\n\n    // set timer\n    var timer = setTimeout(function () {\n\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/manager.js","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 10\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('parseqs');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n  opts = opts || {};\n\n  if (uri && 'object' === typeof uri) {\n    opts = uri;\n    uri = null;\n  }\n\n  if (uri) {\n    uri = parseuri(uri);\n    opts.hostname = uri.host;\n    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n    opts.port = uri.port;\n    if (uri.query) opts.query = uri.query;\n  } else if (opts.host) {\n    opts.hostname = parseuri(opts.host).host;\n  }\n\n  this.secure = null != opts.secure ? opts.secure\n    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\n  if (opts.hostname && !opts.port) {\n    // if no port is specified manually, use the protocol default\n    opts.port = this.secure ? '443' : '80';\n  }\n\n  this.agent = opts.agent || false;\n  this.hostname = opts.hostname ||\n    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && location.port\n      ? location.port\n      : (this.secure ? 443 : 80));\n  this.query = opts.query || {};\n  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n  this.upgrade = false !== opts.upgrade;\n  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n  this.forceJSONP = !!opts.forceJSONP;\n  this.jsonp = false !== opts.jsonp;\n  this.forceBase64 = !!opts.forceBase64;\n  this.enablesXDR = !!opts.enablesXDR;\n  this.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\n  this.readyState = '';\n  this.writeBuffer = [];\n  this.prevBufferLen = 0;\n  this.policyPort = opts.policyPort || 843;\n  this.rememberUpgrade = opts.rememberUpgrade || false;\n  this.binaryType = null;\n  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n    this.perMessageDeflate.threshold = 1024;\n  }\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx || null;\n  this.key = opts.key || null;\n  this.passphrase = opts.passphrase || null;\n  this.cert = opts.cert || null;\n  this.ca = opts.ca || null;\n  this.ciphers = opts.ciphers || null;\n  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\n    }\n  }\n\n  // set on handshake\n  this.id = null;\n  this.upgrades = null;\n  this.pingInterval = null;\n  this.pingTimeout = null;\n\n  // set on heartbeat\n  this.pingIntervalTimer = null;\n  this.pingTimeoutTimer = null;\n\n  this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('engine.io-parser');\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n\n  var query = clone(this.query);\n\n  // append engine.io protocol identifier\n  query.EIO = parser.protocol;\n\n  // transport name\n  query.transport = name;\n\n  // per-transport options\n  var options = this.transportOptions[name] || {};\n\n  // session id if we already have one\n  if (this.id) query.sid = this.id;\n\n  var transport = new transports[name]({\n    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\n  });\n\n  return transport;\n};\n\nfunction clone (obj) {\n  var o = {};\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      o[i] = obj[i];\n    }\n  }\n  return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n  var transport;\n  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n    transport = 'websocket';\n  } else if (0 === this.transports.length) {\n    // Emit error on next tick so it can be listened to\n    var self = this;\n    setTimeout(function () {\n      self.emit('error', 'No transports available');\n    }, 0);\n    return;\n  } else {\n    transport = this.transports[0];\n  }\n  this.readyState = 'opening';\n\n  // Retry with the next transport if the transport is disabled (jsonp: false)\n  try {\n    transport = this.createTransport(transport);\n  } catch (e) {\n    this.transports.shift();\n    this.open();\n    return;\n  }\n\n  transport.open();\n  this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n\n  var self = this;\n\n  if (this.transport) {\n\n    this.transport.removeAllListeners();\n  }\n\n  // set up transport\n  this.transport = transport;\n\n  // set up transport listeners\n  transport\n  .on('drain', function () {\n    self.onDrain();\n  })\n  .on('packet', function (packet) {\n    self.onPacket(packet);\n  })\n  .on('error', function (e) {\n    self.onError(e);\n  })\n  .on('close', function () {\n    self.onClose('transport close');\n  });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n\n  var transport = this.createTransport(name, { probe: 1 });\n  var failed = false;\n  var self = this;\n\n  Socket.priorWebsocketSuccess = false;\n\n  function onTransportOpen () {\n    if (self.onlyBinaryUpgrades) {\n      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n      failed = failed || upgradeLosesBinary;\n    }\n    if (failed) return;\n\n\n    transport.send([{ type: 'ping', data: 'probe' }]);\n    transport.once('packet', function (msg) {\n      if (failed) return;\n      if ('pong' === msg.type && 'probe' === msg.data) {\n\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n\n\n          cleanup();\n\n          self.setTransport(transport);\n          transport.send([{ type: 'upgrade' }]);\n          self.emit('upgrade', transport);\n          transport = null;\n          self.upgrading = false;\n          self.flush();\n        });\n      } else {\n\n        var err = new Error('probe error');\n        err.transport = transport.name;\n        self.emit('upgradeError', err);\n      }\n    });\n  }\n\n  function freezeTransport () {\n    if (failed) return;\n\n    // Any callback called by transport should be ignored since now\n    failed = true;\n\n    cleanup();\n\n    transport.close();\n    transport = null;\n  }\n\n  // Handle any error that happens while probing\n  function onerror (err) {\n    var error = new Error('probe error: ' + err);\n    error.transport = transport.name;\n\n    freezeTransport();\n\n\n\n    self.emit('upgradeError', error);\n  }\n\n  function onTransportClose () {\n    onerror('transport closed');\n  }\n\n  // When the socket is closed while we're probing\n  function onclose () {\n    onerror('socket closed');\n  }\n\n  // When the socket is upgraded while we're probing\n  function onupgrade (to) {\n    if (transport && to.name !== transport.name) {\n\n      freezeTransport();\n    }\n  }\n\n  // Remove all listeners on the transport and on self\n  function cleanup () {\n    transport.removeListener('open', onTransportOpen);\n    transport.removeListener('error', onerror);\n    transport.removeListener('close', onTransportClose);\n    self.removeListener('close', onclose);\n    self.removeListener('upgrading', onupgrade);\n  }\n\n  transport.once('open', onTransportOpen);\n  transport.once('error', onerror);\n  transport.once('close', onTransportClose);\n\n  this.once('close', onclose);\n  this.once('upgrading', onupgrade);\n\n  transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n\n  this.readyState = 'open';\n  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n  this.emit('open');\n  this.flush();\n\n  // we check for `readyState` in case an `open`\n  // listener already closed the socket\n  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\n    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n      this.probe(this.upgrades[i]);\n    }\n  }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n  if ('opening' === this.readyState || 'open' === this.readyState ||\n      'closing' === this.readyState) {\n\n\n    this.emit('packet', packet);\n\n    // Socket is live - any packet counts\n    this.emit('heartbeat');\n\n    switch (packet.type) {\n      case 'open':\n        this.onHandshake(JSON.parse(packet.data));\n        break;\n\n      case 'pong':\n        this.setPing();\n        this.emit('pong');\n        break;\n\n      case 'error':\n        var err = new Error('server error');\n        err.code = packet.data;\n        this.onError(err);\n        break;\n\n      case 'message':\n        this.emit('data', packet.data);\n        this.emit('message', packet.data);\n        break;\n    }\n  } else {\n\n  }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n  this.emit('handshake', data);\n  this.id = data.sid;\n  this.transport.query.sid = data.sid;\n  this.upgrades = this.filterUpgrades(data.upgrades);\n  this.pingInterval = data.pingInterval;\n  this.pingTimeout = data.pingTimeout;\n  this.onOpen();\n  // In case open handler closes socket\n  if ('closed' === this.readyState) return;\n  this.setPing();\n\n  // Prolong liveness of socket on heartbeat\n  this.removeListener('heartbeat', this.onHeartbeat);\n  this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n  clearTimeout(this.pingTimeoutTimer);\n  var self = this;\n  self.pingTimeoutTimer = setTimeout(function () {\n    if ('closed' === self.readyState) return;\n    self.onClose('ping timeout');\n  }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n  var self = this;\n  clearTimeout(self.pingIntervalTimer);\n  self.pingIntervalTimer = setTimeout(function () {\n\n    self.ping();\n    self.onHeartbeat(self.pingTimeout);\n  }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n  var self = this;\n  this.sendPacket('ping', function () {\n    self.emit('ping');\n  });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n  this.writeBuffer.splice(0, this.prevBufferLen);\n\n  // setting prevBufferLen = 0 is very important\n  // for example, when upgrading, upgrade packet is sent over,\n  // and a nonzero prevBufferLen could cause problems on `drain`\n  this.prevBufferLen = 0;\n\n  if (0 === this.writeBuffer.length) {\n    this.emit('drain');\n  } else {\n    this.flush();\n  }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n  if ('closed' !== this.readyState && this.transport.writable &&\n    !this.upgrading && this.writeBuffer.length) {\n\n    this.transport.send(this.writeBuffer);\n    // keep track of current length of writeBuffer\n    // splice writeBuffer and callbackBuffer on `drain`\n    this.prevBufferLen = this.writeBuffer.length;\n    this.emit('flush');\n  }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n  this.sendPacket('message', msg, options, fn);\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n  if ('function' === typeof data) {\n    fn = data;\n    data = undefined;\n  }\n\n  if ('function' === typeof options) {\n    fn = options;\n    options = null;\n  }\n\n  if ('closing' === this.readyState || 'closed' === this.readyState) {\n    return;\n  }\n\n  options = options || {};\n  options.compress = false !== options.compress;\n\n  var packet = {\n    type: type,\n    data: data,\n    options: options\n  };\n  this.emit('packetCreate', packet);\n  this.writeBuffer.push(packet);\n  if (fn) this.once('flush', fn);\n  this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.readyState = 'closing';\n\n    var self = this;\n\n    if (this.writeBuffer.length) {\n      this.once('drain', function () {\n        if (this.upgrading) {\n          waitForUpgrade();\n        } else {\n          close();\n        }\n      });\n    } else if (this.upgrading) {\n      waitForUpgrade();\n    } else {\n      close();\n    }\n  }\n\n  function close () {\n    self.onClose('forced close');\n\n    self.transport.close();\n  }\n\n  function cleanupAndClose () {\n    self.removeListener('upgrade', cleanupAndClose);\n    self.removeListener('upgradeError', cleanupAndClose);\n    close();\n  }\n\n  function waitForUpgrade () {\n    // wait for upgrade to finish since we can't send packets while pausing a transport\n    self.once('upgrade', cleanupAndClose);\n    self.once('upgradeError', cleanupAndClose);\n  }\n\n  return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n\n  Socket.priorWebsocketSuccess = false;\n  this.emit('error', err);\n  this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\n    var self = this;\n\n    // clear timers\n    clearTimeout(this.pingIntervalTimer);\n    clearTimeout(this.pingTimeoutTimer);\n\n    // stop event from firing again for transport\n    this.transport.removeAllListeners('close');\n\n    // ensure transport won't stay open\n    this.transport.close();\n\n    // ignore further transport communication\n    this.transport.removeAllListeners();\n\n    // set ready state\n    this.readyState = 'closed';\n\n    // clear session id\n    this.id = null;\n\n    // emit close event\n    this.emit('close', reason, desc);\n\n    // clean buffers after, so users can still\n    // grab the buffers on `close` event\n    self.writeBuffer = [];\n    self.prevBufferLen = 0;\n  }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n  var filteredUpgrades = [];\n  for (var i = 0, j = upgrades.length; i < j; i++) {\n    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n  }\n  return filteredUpgrades;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 11\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./websocket');\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n  var xhr;\n  var xd = false;\n  var xs = false;\n  var jsonp = false !== opts.jsonp;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    xd = opts.hostname !== location.hostname || port !== opts.port;\n    xs = opts.secure !== isSSL;\n  }\n\n  opts.xdomain = xd;\n  opts.xscheme = xs;\n  xhr = new XMLHttpRequest(opts);\n\n  if ('open' in xhr && !opts.forceJSONP) {\n    return new XHR(opts);\n  } else {\n    if (!jsonp) throw new Error('JSONP disabled');\n    return new JSONP(opts);\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 12\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\nvar globalThis = require('./globalThis');\n\nmodule.exports = function (opts) {\n  var xdomain = opts.xdomain;\n\n  // scheme must be same when usign XDomainRequest\n  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n  var xscheme = opts.xscheme;\n\n  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n  // https://github.com/Automattic/engine.io-client/pull/217\n  var enablesXDR = opts.enablesXDR;\n\n  // XMLHttpRequest can be disabled on IE\n  try {\n    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n      return new XMLHttpRequest();\n    }\n  } catch (e) { }\n\n  // Use XDomainRequest for IE8 if enablesXDR is true\n  // because loading bar keeps flashing when using jsonp-polling\n  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n  try {\n    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n      return new XDomainRequest();\n    }\n  } catch (e) { }\n\n  if (!xdomain) {\n    try {\n      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 13\n// module chunks = 0","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n    'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n  // if XMLHttp support is disabled in IE then it will throw\n  // when trying to create\n  module.exports = false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 14\n// module chunks = 0","module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/globalThis.browser.js\n// module id = 15\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\nvar globalThis = require('../globalThis');\n\n/**\n * Module exports.\n */\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n\n/**\n * Empty function\n */\n\nfunction empty () {}\n\n/**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction XHR (opts) {\n  Polling.call(this, opts);\n  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(XHR, Polling);\n\n/**\n * XHR supports binary\n */\n\nXHR.prototype.supportsBinary = true;\n\n/**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n\nXHR.prototype.request = function (opts) {\n  opts = opts || {};\n  opts.uri = this.uri();\n  opts.xd = this.xd;\n  opts.xs = this.xs;\n  opts.agent = this.agent || false;\n  opts.supportsBinary = this.supportsBinary;\n  opts.enablesXDR = this.enablesXDR;\n  opts.withCredentials = this.withCredentials;\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n  opts.requestTimeout = this.requestTimeout;\n\n  // other options for Node.js client\n  opts.extraHeaders = this.extraHeaders;\n\n  return new Request(opts);\n};\n\n/**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n\nXHR.prototype.doWrite = function (data, fn) {\n  var isBinary = typeof data !== 'string' && data !== undefined;\n  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n  var self = this;\n  req.on('success', fn);\n  req.on('error', function (err) {\n    self.onError('xhr post error', err);\n  });\n  this.sendXhr = req;\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nXHR.prototype.doPoll = function () {\n\n  var req = this.request();\n  var self = this;\n  req.on('data', function (data) {\n    self.onData(data);\n  });\n  req.on('error', function (err) {\n    self.onError('xhr poll error', err);\n  });\n  this.pollXhr = req;\n};\n\n/**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Request (opts) {\n  this.method = opts.method || 'GET';\n  this.uri = opts.uri;\n  this.xd = !!opts.xd;\n  this.xs = !!opts.xs;\n  this.async = false !== opts.async;\n  this.data = undefined !== opts.data ? opts.data : null;\n  this.agent = opts.agent;\n  this.isBinary = opts.isBinary;\n  this.supportsBinary = opts.supportsBinary;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n\n  this.create();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Request.prototype);\n\n/**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n\nRequest.prototype.create = function () {\n  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n\n  var xhr = this.xhr = new XMLHttpRequest(opts);\n  var self = this;\n\n  try {\n\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n        for (var i in this.extraHeaders) {\n          if (this.extraHeaders.hasOwnProperty(i)) {\n            xhr.setRequestHeader(i, this.extraHeaders[i]);\n          }\n        }\n      }\n    } catch (e) {}\n\n    if ('POST' === this.method) {\n      try {\n        if (this.isBinary) {\n          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n        } else {\n          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n        }\n      } catch (e) {}\n    }\n\n    try {\n      xhr.setRequestHeader('Accept', '*/*');\n    } catch (e) {}\n\n    // ie6 check\n    if ('withCredentials' in xhr) {\n      xhr.withCredentials = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\n    }\n\n    if (this.hasXDR()) {\n      xhr.onload = function () {\n        self.onLoad();\n      };\n      xhr.onerror = function () {\n        self.onError(xhr.responseText);\n      };\n    } else {\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\n        if (4 !== xhr.readyState) return;\n        if (200 === xhr.status || 1223 === xhr.status) {\n          self.onLoad();\n        } else {\n          // make sure the `error` event handler that's user-set\n          // does not throw in the same tick and gets caught here\n          setTimeout(function () {\n            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n\n    xhr.send(this.data);\n  } catch (e) {\n    // Need to defer since .create() is called directly fhrom the constructor\n    // and thus the 'error' event can only be only bound *after* this exception\n    // occurs.  Therefore, also, we cannot throw here at all.\n    setTimeout(function () {\n      self.onError(e);\n    }, 0);\n    return;\n  }\n\n  if (typeof document !== 'undefined') {\n    this.index = Request.requestsCount++;\n    Request.requests[this.index] = this;\n  }\n};\n\n/**\n * Called upon successful response.\n *\n * @api private\n */\n\nRequest.prototype.onSuccess = function () {\n  this.emit('success');\n  this.cleanup();\n};\n\n/**\n * Called if we have data.\n *\n * @api private\n */\n\nRequest.prototype.onData = function (data) {\n  this.emit('data', data);\n  this.onSuccess();\n};\n\n/**\n * Called upon error.\n *\n * @api private\n */\n\nRequest.prototype.onError = function (err) {\n  this.emit('error', err);\n  this.cleanup(true);\n};\n\n/**\n * Cleans up house.\n *\n * @api private\n */\n\nRequest.prototype.cleanup = function (fromError) {\n  if ('undefined' === typeof this.xhr || null === this.xhr) {\n    return;\n  }\n  // xmlhttprequest\n  if (this.hasXDR()) {\n    this.xhr.onload = this.xhr.onerror = empty;\n  } else {\n    this.xhr.onreadystatechange = empty;\n  }\n\n  if (fromError) {\n    try {\n      this.xhr.abort();\n    } catch (e) {}\n  }\n\n  if (typeof document !== 'undefined') {\n    delete Request.requests[this.index];\n  }\n\n  this.xhr = null;\n};\n\n/**\n * Called upon load.\n *\n * @api private\n */\n\nRequest.prototype.onLoad = function () {\n  var data;\n  try {\n    var contentType;\n    try {\n      contentType = this.xhr.getResponseHeader('Content-Type');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\n    }\n  } catch (e) {\n    this.onError(e);\n  }\n  if (null != data) {\n    this.onData(data);\n  }\n};\n\n/**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n\nRequest.prototype.hasXDR = function () {\n  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n};\n\n/**\n * Aborts the request.\n *\n * @api public\n */\n\nRequest.prototype.abort = function () {\n  this.cleanup();\n};\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, unloadHandler, false);\n  }\n}\n\nfunction unloadHandler () {\n  for (var i in Request.requests) {\n    if (Request.requests.hasOwnProperty(i)) {\n      Request.requests[i].abort();\n    }\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:polling');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Polling;\n\n/**\n * Is XHR2 supported?\n */\n\nvar hasXHR2 = (function () {\n  var XMLHttpRequest = require('xmlhttprequest-ssl');\n  var xhr = new XMLHttpRequest({ xdomain: false });\n  return null != xhr.responseType;\n})();\n\n/**\n * Polling interface.\n *\n * @param {Object} opts\n * @api private\n */\n\nfunction Polling (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (!hasXHR2 || forceBase64) {\n    this.supportsBinary = false;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(Polling, Transport);\n\n/**\n * Transport name.\n */\n\nPolling.prototype.name = 'polling';\n\n/**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n\nPolling.prototype.doOpen = function () {\n  this.poll();\n};\n\n/**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n\nPolling.prototype.pause = function (onPause) {\n  var self = this;\n\n  this.readyState = 'pausing';\n\n  function pause () {\n\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n\n      total++;\n      this.once('pollComplete', function () {\n\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n\n      total++;\n      this.once('drain', function () {\n\n        --total || pause();\n      });\n    }\n  } else {\n    pause();\n  }\n};\n\n/**\n * Starts polling cycle.\n *\n * @api public\n */\n\nPolling.prototype.poll = function () {\n\n  this.polling = true;\n  this.doPoll();\n  this.emit('poll');\n};\n\n/**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n\nPolling.prototype.onData = function (data) {\n  var self = this;\n\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState && packet.type === 'open') {\n      self.onOpen();\n    }\n\n    // if its a close packet, we close the ongoing requests\n    if ('close' === packet.type) {\n      self.onClose();\n      return false;\n    }\n\n    // otherwise bypass onData and handle the message\n    self.onPacket(packet);\n  };\n\n  // decode payload\n  parser.decodePayload(data, this.socket.binaryType, callback);\n\n  // if an event did not trigger closing\n  if ('closed' !== this.readyState) {\n    // if we got data we're not polling\n    this.polling = false;\n    this.emit('pollComplete');\n\n    if ('open' === this.readyState) {\n      this.poll();\n    } else {\n\n    }\n  }\n};\n\n/**\n * For polling, send a close packet.\n *\n * @api private\n */\n\nPolling.prototype.doClose = function () {\n  var self = this;\n\n  function close () {\n\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n\n    this.once('open', close);\n  }\n};\n\n/**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n\nPolling.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n  var callbackfn = function () {\n    self.writable = true;\n    self.emit('drain');\n  };\n\n  parser.encodePayload(packets, this.supportsBinary, function (data) {\n    self.doWrite(data, callbackfn);\n  });\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nPolling.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'https' : 'http';\n  var port = '';\n\n  // cache busting is forced\n  if (false !== this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  if (!this.supportsBinary && !query.sid) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // avoid port if default for schema\n  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n     ('http' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('component-emitter');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n  this.path = opts.path;\n  this.hostname = opts.hostname;\n  this.port = opts.port;\n  this.secure = opts.secure;\n  this.query = opts.query;\n  this.timestampParam = opts.timestampParam;\n  this.timestampRequests = opts.timestampRequests;\n  this.readyState = '';\n  this.agent = opts.agent || false;\n  this.socket = opts.socket;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n  var err = new Error(msg);\n  err.type = 'TransportError';\n  err.description = desc;\n  this.emit('error', err);\n  return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n  if ('closed' === this.readyState || '' === this.readyState) {\n    this.readyState = 'opening';\n    this.doOpen();\n  }\n\n  return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.doClose();\n    this.onClose();\n  }\n\n  return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n  if ('open' === this.readyState) {\n    this.write(packets);\n  } else {\n    throw new Error('Transport not open');\n  }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n  this.readyState = 'open';\n  this.writable = true;\n  this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n  var packet = parser.decodePacket(data, this.socket.binaryType);\n  this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n  this.readyState = 'closed';\n  this.emit('close');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 18\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('base64-arraybuffer');\n}\n\n/**\n * Check if we are running an android browser. That requires us to use\n * ArrayBuffer with polling transports...\n *\n * http://ghinda.net/jpeg-blob-ajax-android/\n */\n\nvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\n/**\n * Check if we are running in PhantomJS.\n * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n * https://github.com/ariya/phantomjs/issues/11395\n * @type boolean\n */\nvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\n/**\n * When true, avoids using Blobs to encode payloads.\n * @type boolean\n */\nvar dontSendBlobs = isAndroid || isPhantomJS;\n\n/**\n * Current protocol version.\n */\n\nexports.protocol = 3;\n\n/**\n * Packet types.\n */\n\nvar packets = exports.packets = {\n    open:     0    // non-ws\n  , close:    1    // non-ws\n  , ping:     2\n  , pong:     3\n  , message:  4\n  , upgrade:  5\n  , noop:     6\n};\n\nvar packetslist = keys(packets);\n\n/**\n * Premade error packet.\n */\n\nvar err = { type: 'error', data: 'parser error' };\n\n/**\n * Create a blob api even for blob builder when vendor prefixes exist\n */\n\nvar Blob = require('blob');\n\n/**\n * Encodes a packet.\n *\n *     <packet type id> [ <data> ]\n *\n * Example:\n *\n *     5hello world\n *     3\n *     4\n *\n * Binary is encoded in an identical principle\n *\n * @api private\n */\n\nexports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\n    callback = utf8encode;\n    utf8encode = null;\n  }\n\n  var data = (packet.data === undefined)\n    ? undefined\n    : packet.data.buffer || packet.data;\n\n  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n    return encodeBlob(packet, supportsBinary, callback);\n  }\n\n  // might be an object with { base64: true, data: dataAsBase64String }\n  if (data && data.base64) {\n    return encodeBase64Object(packet, callback);\n  }\n\n  // Sending data as a utf-8 string\n  var encoded = packets[packet.type];\n\n  // data fragment is optional\n  if (undefined !== packet.data) {\n    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n  }\n\n  return callback('' + encoded);\n\n};\n\nfunction encodeBase64Object(packet, callback) {\n  // packet data is an object { base64: true, data: dataAsBase64String }\n  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n  return callback(message);\n}\n\n/**\n * Encode packet helpers for binary types\n */\n\nfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var data = packet.data;\n  var contentArray = new Uint8Array(data);\n  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\n  resultBuffer[0] = packets[packet.type];\n  for (var i = 0; i < contentArray.length; i++) {\n    resultBuffer[i+1] = contentArray[i];\n  }\n\n  return callback(resultBuffer.buffer);\n}\n\nfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var fr = new FileReader();\n  fr.onload = function() {\n    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n  };\n  return fr.readAsArrayBuffer(packet.data);\n}\n\nfunction encodeBlob(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  if (dontSendBlobs) {\n    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n  }\n\n  var length = new Uint8Array(1);\n  length[0] = packets[packet.type];\n  var blob = new Blob([length.buffer, packet.data]);\n\n  return callback(blob);\n}\n\n/**\n * Encodes a packet with binary data in a base64 string\n *\n * @param {Object} packet, has `type` and `data`\n * @return {String} base64 encoded message\n */\n\nexports.encodeBase64Packet = function(packet, callback) {\n  var message = 'b' + exports.packets[packet.type];\n  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n    var fr = new FileReader();\n    fr.onload = function() {\n      var b64 = fr.result.split(',')[1];\n      callback(message + b64);\n    };\n    return fr.readAsDataURL(packet.data);\n  }\n\n  var b64data;\n  try {\n    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n  } catch (e) {\n    // iPhone Safari doesn't let you apply with typed arrays\n    var typed = new Uint8Array(packet.data);\n    var basic = new Array(typed.length);\n    for (var i = 0; i < typed.length; i++) {\n      basic[i] = typed[i];\n    }\n    b64data = String.fromCharCode.apply(null, basic);\n  }\n  message += btoa(b64data);\n  return callback(message);\n};\n\n/**\n * Decodes a packet. Changes format to Blob if requested.\n *\n * @return {Object} with `type` and `data` (if any)\n * @api private\n */\n\nexports.decodePacket = function (data, binaryType, utf8decode) {\n  if (data === undefined) {\n    return err;\n  }\n  // String data\n  if (typeof data === 'string') {\n    if (data.charAt(0) === 'b') {\n      return exports.decodeBase64Packet(data.substr(1), binaryType);\n    }\n\n    if (utf8decode) {\n      data = tryDecode(data);\n      if (data === false) {\n        return err;\n      }\n    }\n    var type = data.charAt(0);\n\n    if (Number(type) != type || !packetslist[type]) {\n      return err;\n    }\n\n    if (data.length > 1) {\n      return { type: packetslist[type], data: data.substring(1) };\n    } else {\n      return { type: packetslist[type] };\n    }\n  }\n\n  var asArray = new Uint8Array(data);\n  var type = asArray[0];\n  var rest = sliceBuffer(data, 1);\n  if (Blob && binaryType === 'blob') {\n    rest = new Blob([rest]);\n  }\n  return { type: packetslist[type], data: rest };\n};\n\nfunction tryDecode(data) {\n  try {\n    data = utf8.decode(data, { strict: false });\n  } catch (e) {\n    return false;\n  }\n  return data;\n}\n\n/**\n * Decodes a packet encoded in a base64 string\n *\n * @param {String} base64 encoded message\n * @return {Object} with `type` and `data` (if any)\n */\n\nexports.decodeBase64Packet = function(msg, binaryType) {\n  var type = packetslist[msg.charAt(0)];\n  if (!base64encoder) {\n    return { type: type, data: { base64: true, data: msg.substr(1) } };\n  }\n\n  var data = base64encoder.decode(msg.substr(1));\n\n  if (binaryType === 'blob' && Blob) {\n    data = new Blob([data]);\n  }\n\n  return { type: type, data: data };\n};\n\n/**\n * Encodes multiple messages (payload).\n *\n *     <length>:data\n *\n * Example:\n *\n *     11:hello world2:hi\n *\n * If any contents are binary, they will be encoded as base64 strings. Base64\n * encoded strings are marked with a b before the length specifier\n *\n * @param {Array} packets\n * @api private\n */\n\nexports.encodePayload = function (packets, supportsBinary, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = null;\n  }\n\n  var isBinary = hasBinary(packets);\n\n  if (supportsBinary && isBinary) {\n    if (Blob && !dontSendBlobs) {\n      return exports.encodePayloadAsBlob(packets, callback);\n    }\n\n    return exports.encodePayloadAsArrayBuffer(packets, callback);\n  }\n\n  if (!packets.length) {\n    return callback('0:');\n  }\n\n  function setLengthHeader(message) {\n    return message.length + ':' + message;\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n      doneCallback(null, setLengthHeader(message));\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(results.join(''));\n  });\n};\n\n/**\n * Async array map using after\n */\n\nfunction map(ary, each, done) {\n  var result = new Array(ary.length);\n  var next = after(ary.length, done);\n\n  var eachWithIndex = function(i, el, cb) {\n    each(el, function(error, msg) {\n      result[i] = msg;\n      cb(error, result);\n    });\n  };\n\n  for (var i = 0; i < ary.length; i++) {\n    eachWithIndex(i, ary[i], next);\n  }\n}\n\n/*\n * Decodes data when a payload is maybe expected. Possible binary contents are\n * decoded from their base64 representation\n *\n * @param {String} data, callback method\n * @api public\n */\n\nexports.decodePayload = function (data, binaryType, callback) {\n  if (typeof data !== 'string') {\n    return exports.decodePayloadAsBinary(data, binaryType, callback);\n  }\n\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var packet;\n  if (data === '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n  var length = '', n, msg;\n\n  for (var i = 0, l = data.length; i < l; i++) {\n    var chr = data.charAt(i);\n\n    if (chr !== ':') {\n      length += chr;\n      continue;\n    }\n\n    if (length === '' || (length != (n = Number(length)))) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    msg = data.substr(i + 1, n);\n\n    if (length != msg.length) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    if (msg.length) {\n      packet = exports.decodePacket(msg, binaryType, false);\n\n      if (err.type === packet.type && err.data === packet.data) {\n        // parser error in individual packet - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      var ret = callback(packet, i + n, l);\n      if (false === ret) return;\n    }\n\n    // advance cursor\n    i += n;\n    length = '';\n  }\n\n  if (length !== '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n};\n\n/**\n * Encodes multiple messages (payload) as binary.\n *\n * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n * 255><data>\n *\n * Example:\n * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n *\n * @param {Array} packets\n * @return {ArrayBuffer} encoded payload\n * @api private\n */\n\nexports.encodePayloadAsArrayBuffer = function(packets, callback) {\n  if (!packets.length) {\n    return callback(new ArrayBuffer(0));\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(data) {\n      return doneCallback(null, data);\n    });\n  }\n\n  map(packets, encodeOne, function(err, encodedPackets) {\n    var totalLength = encodedPackets.reduce(function(acc, p) {\n      var len;\n      if (typeof p === 'string'){\n        len = p.length;\n      } else {\n        len = p.byteLength;\n      }\n      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n    }, 0);\n\n    var resultArray = new Uint8Array(totalLength);\n\n    var bufferIndex = 0;\n    encodedPackets.forEach(function(p) {\n      var isString = typeof p === 'string';\n      var ab = p;\n      if (isString) {\n        var view = new Uint8Array(p.length);\n        for (var i = 0; i < p.length; i++) {\n          view[i] = p.charCodeAt(i);\n        }\n        ab = view.buffer;\n      }\n\n      if (isString) { // not true binary\n        resultArray[bufferIndex++] = 0;\n      } else { // true binary\n        resultArray[bufferIndex++] = 1;\n      }\n\n      var lenStr = ab.byteLength.toString();\n      for (var i = 0; i < lenStr.length; i++) {\n        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n      }\n      resultArray[bufferIndex++] = 255;\n\n      var view = new Uint8Array(ab);\n      for (var i = 0; i < view.length; i++) {\n        resultArray[bufferIndex++] = view[i];\n      }\n    });\n\n    return callback(resultArray.buffer);\n  });\n};\n\n/**\n * Encode as Blob\n */\n\nexports.encodePayloadAsBlob = function(packets, callback) {\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(encoded) {\n      var binaryIdentifier = new Uint8Array(1);\n      binaryIdentifier[0] = 1;\n      if (typeof encoded === 'string') {\n        var view = new Uint8Array(encoded.length);\n        for (var i = 0; i < encoded.length; i++) {\n          view[i] = encoded.charCodeAt(i);\n        }\n        encoded = view.buffer;\n        binaryIdentifier[0] = 0;\n      }\n\n      var len = (encoded instanceof ArrayBuffer)\n        ? encoded.byteLength\n        : encoded.size;\n\n      var lenStr = len.toString();\n      var lengthAry = new Uint8Array(lenStr.length + 1);\n      for (var i = 0; i < lenStr.length; i++) {\n        lengthAry[i] = parseInt(lenStr[i]);\n      }\n      lengthAry[lenStr.length] = 255;\n\n      if (Blob) {\n        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n        doneCallback(null, blob);\n      }\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(new Blob(results));\n  });\n};\n\n/*\n * Decodes data when a payload is maybe expected. Strings are decoded by\n * interpreting each byte as a key code for entries marked to start with 0. See\n * description of encodePayloadAsBinary\n *\n * @param {ArrayBuffer} data, callback method\n * @api public\n */\n\nexports.decodePayloadAsBinary = function (data, binaryType, callback) {\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var bufferTail = data;\n  var buffers = [];\n\n  while (bufferTail.byteLength > 0) {\n    var tailArray = new Uint8Array(bufferTail);\n    var isString = tailArray[0] === 0;\n    var msgLength = '';\n\n    for (var i = 1; ; i++) {\n      if (tailArray[i] === 255) break;\n\n      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\n\n    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n    msgLength = parseInt(msgLength);\n\n    var msg = sliceBuffer(bufferTail, 0, msgLength);\n    if (isString) {\n      try {\n        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n      } catch (e) {\n        // iPhone Safari doesn't let you apply to typed arrays\n        var typed = new Uint8Array(msg);\n        msg = '';\n        for (var i = 0; i < typed.length; i++) {\n          msg += String.fromCharCode(typed[i]);\n        }\n      }\n    }\n\n    buffers.push(msg);\n    bufferTail = sliceBuffer(bufferTail, msgLength);\n  }\n\n  var total = buffers.length;\n  buffers.forEach(function(buffer, i) {\n    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n  });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 19\n// module chunks = 0","\n/**\n * Gets the keys for an object.\n *\n * @return {Array} keys\n * @api private\n */\n\nmodule.exports = Object.keys || function keys (obj){\n  var arr = [];\n  var has = Object.prototype.hasOwnProperty;\n\n  for (var i in obj) {\n    if (has.call(obj, i)) {\n      arr.push(i);\n    }\n  }\n  return arr;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 20\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\n  }\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 21\n// module chunks = 0","/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n  var bytes = arraybuffer.byteLength;\n  start = start || 0;\n  end = end || bytes;\n\n  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n  if (start < 0) { start += bytes; }\n  if (end < 0) { end += bytes; }\n  if (end > bytes) { end = bytes; }\n\n  if (start >= bytes || start >= end || bytes === 0) {\n    return new ArrayBuffer(0);\n  }\n\n  var abv = new Uint8Array(arraybuffer);\n  var result = new Uint8Array(end - start);\n  for (var i = start, ii = 0; i < end; i++, ii++) {\n    result[ii] = abv[i];\n  }\n  return result.buffer;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 22\n// module chunks = 0","module.exports = after\n\nfunction after(count, callback, err_cb) {\n    var bail = false\n    err_cb = err_cb || noop\n    proxy.count = count\n\n    return (count === 0) ? callback() : proxy\n\n    function proxy(err, result) {\n        if (proxy.count <= 0) {\n            throw new Error('after called too many times')\n        }\n        --proxy.count\n\n        // after first error, rest are passed to err_cb\n        if (err) {\n            bail = true\n            callback(err)\n            // future error callbacks will go to error handler\n            callback = err_cb\n        } else if (proxy.count === 0 && !bail) {\n            callback(null, result)\n        }\n    }\n}\n\nfunction noop() {}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 23\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 24\n// module chunks = 0","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(chars){\n  \"use strict\";\n\n  exports.encode = function(arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer),\n    i, len = bytes.length, base64 = \"\";\n\n    for (i = 0; i < len; i+=3) {\n      base64 += chars[bytes[i] >> 2];\n      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n      base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if ((len % 3) === 2) {\n      base64 = base64.substring(0, base64.length - 1) + \"=\";\n    } else if (len % 3 === 1) {\n      base64 = base64.substring(0, base64.length - 2) + \"==\";\n    }\n\n    return base64;\n  };\n\n  exports.decode =  function(base64) {\n    var bufferLength = base64.length * 0.75,\n    len = base64.length, i, p = 0,\n    encoded1, encoded2, encoded3, encoded4;\n\n    if (base64[base64.length - 1] === \"=\") {\n      bufferLength--;\n      if (base64[base64.length - 2] === \"=\") {\n        bufferLength--;\n      }\n    }\n\n    var arraybuffer = new ArrayBuffer(bufferLength),\n    bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i+=4) {\n      encoded1 = chars.indexOf(base64[i]);\n      encoded2 = chars.indexOf(base64[i+1]);\n      encoded3 = chars.indexOf(base64[i+2]);\n      encoded4 = chars.indexOf(base64[i+3]);\n\n      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n  };\n})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 25\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 26\n// module chunks = 0","/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\n\nexports.encode = function (obj) {\n  var str = '';\n\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      if (str.length) str += '&';\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n    }\n  }\n\n  return str;\n};\n\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\n\nexports.decode = function(qs){\n  var qry = {};\n  var pairs = qs.split('&');\n  for (var i = 0, l = pairs.length; i < l; i++) {\n    var pair = pairs[i].split('=');\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n  }\n  return qry;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 27\n// module chunks = 0","\nmodule.exports = function(a, b){\n  var fn = function(){};\n  fn.prototype = b.prototype;\n  a.prototype = new fn;\n  a.prototype.constructor = a;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 28\n// module chunks = 0","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n  , length = 64\n  , map = {}\n  , seed = 0\n  , i = 0\n  , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n  var encoded = '';\n\n  do {\n    encoded = alphabet[num % length] + encoded;\n    num = Math.floor(num / length);\n  } while (num > 0);\n\n  return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n  var decoded = 0;\n\n  for (i = 0; i < str.length; i++) {\n    decoded = decoded * length + map[str.charAt(i)];\n  }\n\n  return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n  var now = encode(+new Date());\n\n  if (now !== prev) return seed = 0, prev = now;\n  return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 29\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\nvar globalThis = require('../globalThis');\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n  Polling.call(this, opts);\n\n  this.query = this.query || {};\n\n  // define global callbacks array if not present\n  // we do this here (lazily) to avoid unneeded global pollution\n  if (!callbacks) {\n    // we need to consider multiple engines in the same page\n    callbacks = globalThis.___eio = (globalThis.___eio || []);\n  }\n\n  // callback identifier\n  this.index = callbacks.length;\n\n  // add callback to jsonp global\n  var self = this;\n  callbacks.push(function (msg) {\n    self.onData(msg);\n  });\n\n  // append to query string\n  this.query.j = this.index;\n\n  // prevent spurious errors from being emitted when the window is unloaded\n  if (typeof addEventListener === 'function') {\n    addEventListener('beforeunload', function () {\n      if (self.script) self.script.onerror = empty;\n    }, false);\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  if (this.form) {\n    this.form.parentNode.removeChild(this.form);\n    this.form = null;\n    this.iframe = null;\n  }\n\n  Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n  var self = this;\n  var script = document.createElement('script');\n\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  script.async = true;\n  script.src = this.uri();\n  script.onerror = function (e) {\n    self.onError('jsonp poll error', e);\n  };\n\n  var insertAt = document.getElementsByTagName('script')[0];\n  if (insertAt) {\n    insertAt.parentNode.insertBefore(script, insertAt);\n  } else {\n    (document.head || document.body).appendChild(script);\n  }\n  this.script = script;\n\n  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n  if (isUAgecko) {\n    setTimeout(function () {\n      var iframe = document.createElement('iframe');\n      document.body.appendChild(iframe);\n      document.body.removeChild(iframe);\n    }, 100);\n  }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n  var self = this;\n\n  if (!this.form) {\n    var form = document.createElement('form');\n    var area = document.createElement('textarea');\n    var id = this.iframeId = 'eio_iframe_' + this.index;\n    var iframe;\n\n    form.className = 'socketio';\n    form.style.position = 'absolute';\n    form.style.top = '-1000px';\n    form.style.left = '-1000px';\n    form.target = id;\n    form.method = 'POST';\n    form.setAttribute('accept-charset', 'utf-8');\n    area.name = 'd';\n    form.appendChild(area);\n    document.body.appendChild(form);\n\n    this.form = form;\n    this.area = area;\n  }\n\n  this.form.action = this.uri();\n\n  function complete () {\n    initIframe();\n    fn();\n  }\n\n  function initIframe () {\n    if (self.iframe) {\n      try {\n        self.form.removeChild(self.iframe);\n      } catch (e) {\n        self.onError('jsonp polling iframe removal error', e);\n      }\n    }\n\n    try {\n      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n      iframe = document.createElement(html);\n    } catch (e) {\n      iframe = document.createElement('iframe');\n      iframe.name = self.iframeId;\n      iframe.src = 'javascript:0';\n    }\n\n    iframe.id = self.iframeId;\n\n    self.form.appendChild(iframe);\n    self.iframe = iframe;\n  }\n\n  initIframe();\n\n  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n  data = data.replace(rEscapedNewline, '\\\\\\n');\n  this.area.value = data.replace(rNewline, '\\\\n');\n\n  try {\n    this.form.submit();\n  } catch (e) {}\n\n  if (this.iframe.attachEvent) {\n    this.iframe.onreadystatechange = function () {\n      if (self.iframe.readyState === 'complete') {\n        complete();\n      }\n    };\n  } else {\n    this.iframe.onload = complete;\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 30\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\nvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\n/**\n * Module exports.\n */\n\nmodule.exports = WS;\n\n/**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n\nfunction WS (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (forceBase64) {\n    this.supportsBinary = false;\n  }\n  this.perMessageDeflate = opts.perMessageDeflate;\n  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(WS, Transport);\n\n/**\n * Transport name.\n *\n * @api public\n */\n\nWS.prototype.name = 'websocket';\n\n/*\n * WebSockets support binary\n */\n\nWS.prototype.supportsBinary = true;\n\n/**\n * Opens socket.\n *\n * @api private\n */\n\nWS.prototype.doOpen = function () {\n  if (!this.check()) {\n    // let probe timeout\n    return;\n  }\n\n  var uri = this.uri();\n  var protocols = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\n\n    // SSL options for Node.js client\n    opts.pfx = this.pfx;\n    opts.key = this.key;\n    opts.passphrase = this.passphrase;\n    opts.cert = this.cert;\n    opts.ca = this.ca;\n    opts.ciphers = this.ciphers;\n    opts.rejectUnauthorized = this.rejectUnauthorized;\n  }\n\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(uri, protocols, opts);\n  } catch (err) {\n    return this.emit('error', err);\n  }\n\n  if (this.ws.binaryType === undefined) {\n    this.supportsBinary = false;\n  }\n\n  if (this.ws.supports && this.ws.supports.binary) {\n    this.supportsBinary = true;\n    this.ws.binaryType = 'nodebuffer';\n  } else {\n    this.ws.binaryType = 'arraybuffer';\n  }\n\n  this.addEventListeners();\n};\n\n/**\n * Adds event listeners to the socket\n *\n * @api private\n */\n\nWS.prototype.addEventListeners = function () {\n  var self = this;\n\n  this.ws.onopen = function () {\n    self.onOpen();\n  };\n  this.ws.onclose = function () {\n    self.onClose();\n  };\n  this.ws.onmessage = function (ev) {\n    self.onData(ev.data);\n  };\n  this.ws.onerror = function (e) {\n    self.onError('websocket error', e);\n  };\n};\n\n/**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n\nWS.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n\n  // encodePacket efficient as it uses WS framing\n  // no need for encodePayload\n  var total = packets.length;\n  for (var i = 0, l = total; i < l; i++) {\n    (function (packet) {\n      parser.encodePacket(packet, self.supportsBinary, function (data) {\n        if (!self.usingBrowserWebSocket) {\n          // always create a new object (GH-437)\n          var opts = {};\n          if (packet.options) {\n            opts.compress = packet.options.compress;\n          }\n\n          if (self.perMessageDeflate) {\n            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n            if (len < self.perMessageDeflate.threshold) {\n              opts.compress = false;\n            }\n          }\n        }\n\n        // Sometimes the websocket has already been closed but the browser didn't\n        // have a chance of informing us about it yet, in that case send will\n        // throw an error\n        try {\n          if (self.usingBrowserWebSocket) {\n            // TypeError is thrown when passing the second argument on Safari\n            self.ws.send(data);\n          } else {\n            self.ws.send(data, opts);\n          }\n        } catch (e) {\n\n        }\n\n        --total || done();\n      });\n    })(packets[i]);\n  }\n\n  function done () {\n    self.emit('flush');\n\n    // fake drain\n    // defer to next tick to allow Socket to clear writeBuffer\n    setTimeout(function () {\n      self.writable = true;\n      self.emit('drain');\n    }, 0);\n  }\n};\n\n/**\n * Called upon close\n *\n * @api private\n */\n\nWS.prototype.onClose = function () {\n  Transport.prototype.onClose.call(this);\n};\n\n/**\n * Closes socket.\n *\n * @api private\n */\n\nWS.prototype.doClose = function () {\n  if (typeof this.ws !== 'undefined') {\n    this.ws.close();\n  }\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nWS.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'wss' : 'ws';\n  var port = '';\n\n  // avoid port if default for schema\n  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // append timestamp to URI\n  if (this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  // communicate binary support capabilities\n  if (!this.supportsBinary) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n/**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n\nWS.prototype.check = function () {\n  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 31\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// ws (ignored)\n// module id = 32\n// module chunks = 0","\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 33\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  if (!this.io.reconnecting) this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n\n\n  if (null != packet.id) {\n\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/socket.js","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 35\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/on.js","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 37\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 38\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.js.map b/device_home/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.js.map
deleted file mode 100644 (file)
index 848cee8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///socket.io.slim.js","webpack:///webpack/bootstrap b1396182394c549233a5","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./support/noop.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/globalThis.browser.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","lookup","uri","opts","_typeof","undefined","io","parsed","url","source","path","sameNamespace","cache","nsps","newConnection","forceNew","multiplex","Manager","query","socket","Symbol","iterator","obj","constructor","prototype","parser","managers","protocol","connect","Socket","loc","location","host","charAt","test","parseuri","port","ipv6","indexOf","href","pathNames","regx","names","replace","split","substr","length","splice","queryKey","data","$0","$1","$2","re","parts","str","src","b","e","substring","exec","i","authority","ipv6uri","Encoder","encodeAsString","type","BINARY_EVENT","BINARY_ACK","attachments","nsp","payload","tryStringify","ERROR_PACKET","JSON","stringify","encodeAsBinary","callback","writeEncoding","bloblessData","deconstruction","binary","deconstructPacket","pack","packet","buffers","unshift","removeBlobs","Decoder","reconstructor","decodeString","Number","types","error","buf","Error","next","tryParse","isPayloadValid","ERROR","isArray","parse","BinaryReconstructor","reconPack","msg","Emitter","isBuf","CONNECT","DISCONNECT","EVENT","ACK","encode","encoding","add","emit","base64","takeBinaryData","destroy","finishedReconstruction","binData","push","reconstructPacket","mixin","key","on","addEventListener","event","fn","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","args","Array","slice","len","listeners","hasListeners","_deconstructPacket","placeholder","_placeholder","num","newData","Date","_reconstructPacket","toString","Object","withNativeBlob","Blob","withNativeFile","File","packetData","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","FileReader","onload","result","readAsArrayBuffer","arr","withNativeBuffer","Buffer","isBuffer","withNativeArrayBuffer","ArrayBuffer","isView","buffer","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","timeout","readyState","connecting","lastPing","packetBuffer","_parser","encoder","decoder","autoConnect","open","eio","bind","has","hasOwnProperty","emitAll","updateSocketIds","generateId","engine","v","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","self","skipReconnect","openSub","onopen","errorSub","cleanup","err","timer","setTimeout","close","clearTimeout","onping","onpong","ondata","ondecoded","onerror","onConnecting","index","encodedPackets","write","options","processPacketQueue","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","hostname","secure","agent","parseqs","decode","upgrade","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transports","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ca","ciphers","rejectUnauthorized","forceNode","isReactNative","navigator","product","toLowerCase","extraHeaders","keys","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","clone","o","priorWebsocketSuccess","Transport","createTransport","name","EIO","transport","sid","requestTimeout","protocols","setTransport","onDrain","onPacket","onError","onClose","probe","onTransportOpen","upgradeLosesBinary","supportsBinary","failed","send","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","to","onOpen","l","onHandshake","setPing","code","filterUpgrades","onHeartbeat","ping","sendPacket","writable","compress","cleanupAndClose","waitForUpgrade","desc","filteredUpgrades","j","polling","xhr","xd","xs","isSSL","xdomain","xscheme","XMLHttpRequest","XHR","JSONP","websocket","hasCORS","globalThis","XDomainRequest","concat","join","window","Function","empty","Polling","Request","method","async","isBinary","create","unloadHandler","requests","abort","inherit","request","doWrite","req","sendXhr","doPoll","onData","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","onLoad","responseText","onreadystatechange","contentType","getResponseHeader","responseType","status","document","requestsCount","onSuccess","fromError","response","attachEvent","terminationEvent","hasXHR2","yeast","doOpen","poll","onPause","total","decodePayload","doClose","packets","callbackfn","encodePayload","schema","b64","description","decodePacket","encodeBase64Object","message","encodeArrayBuffer","encodeBase64Packet","contentArray","Uint8Array","resultBuffer","byteLength","encodeBlobAsArrayBuffer","fr","encodePacket","encodeBlob","dontSendBlobs","blob","tryDecode","utf8","strict","map","ary","each","done","after","eachWithIndex","el","base64encoder","hasBinary","sliceBuffer","isAndroid","userAgent","isPhantomJS","pong","noop","packetslist","utf8encode","encoded","String","readAsDataURL","b64data","fromCharCode","typed","basic","btoa","utf8decode","decodeBase64Packet","asArray","rest","setLengthHeader","encodeOne","doneCallback","encodePayloadAsBlob","encodePayloadAsArrayBuffer","results","decodePayloadAsBinary","n","chr","ret","totalLength","reduce","acc","resultArray","bufferIndex","forEach","isString","ab","view","charCodeAt","lenStr","parseInt","binaryIdentifier","size","lengthAry","bufferTail","tailArray","msgLength","toJSON","arraybuffer","start","end","bytes","abv","ii","count","err_cb","proxy","bail","ucs2decode","string","value","extra","output","counter","ucs2encode","array","stringFromCharCode","checkScalarValue","codePoint","toUpperCase","createByte","encodeCodePoint","symbol","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","tmp","version","chars","encoded1","encoded2","encoded3","encoded4","bufferLength","mapArrayBufferViews","chunk","copy","set","byteOffset","BlobBuilderConstructor","bb","BlobBuilder","part","append","getBlob","BlobConstructor","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","a","blobSupportsArrayBufferView","blobBuilderSupported","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","alphabet","Math","floor","decoded","now","prev","seed","JSONPPolling","___eio","script","rNewline","rEscapedNewline","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","isUAgecko","complete","initIframe","html","iframeId","area","className","style","position","top","left","target","setAttribute","action","submit","WS","usingBrowserWebSocket","BrowserWebSocket","WebSocketImpl","NodeWebSocket","WebSocket","MozWebSocket","check","headers","ws","supports","addEventListeners","onmessage","ev","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","toArray","hasBin","events","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","subEvents","pop","onpacket","rootNamespaceError","onconnect","onevent","onack","ondisconnect","ack","sent","emitBuffered","list","ms","factor","pow","rand","random","deviation"],"mappings":"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","file":"socket.io.slim.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _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\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar url = __webpack_require__(1);\n\tvar parser = __webpack_require__(4);\n\tvar Manager = __webpack_require__(9);\n\tvar debug = __webpack_require__(3)('socket.io-client');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = lookup;\n\t\n\t/**\n\t * Managers cache.\n\t */\n\t\n\tvar cache = exports.managers = {};\n\t\n\t/**\n\t * Looks up an existing `Manager` for multiplexing.\n\t * If the user summons:\n\t *\n\t *   `io('http://localhost/a');`\n\t *   `io('http://localhost/b');`\n\t *\n\t * We reuse the existing instance based on same scheme/port/host,\n\t * and we initialize sockets for each namespace.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction lookup(uri, opts) {\n\t  if ((typeof uri === 'undefined' ? 'undefined' : _typeof(uri)) === 'object') {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t\n\t  opts = opts || {};\n\t\n\t  var parsed = url(uri);\n\t  var source = parsed.source;\n\t  var id = parsed.id;\n\t  var path = parsed.path;\n\t  var sameNamespace = cache[id] && path in cache[id].nsps;\n\t  var newConnection = opts.forceNew || opts['force new connection'] || false === opts.multiplex || sameNamespace;\n\t\n\t  var io;\n\t\n\t  if (newConnection) {\n\t\n\t    io = Manager(source, opts);\n\t  } else {\n\t    if (!cache[id]) {\n\t\n\t      cache[id] = Manager(source, opts);\n\t    }\n\t    io = cache[id];\n\t  }\n\t  if (parsed.query && !opts.query) {\n\t    opts.query = parsed.query;\n\t  }\n\t  return io.socket(parsed.path, opts);\n\t}\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = parser.protocol;\n\t\n\t/**\n\t * `connect`.\n\t *\n\t * @param {String} uri\n\t * @api public\n\t */\n\t\n\texports.connect = lookup;\n\t\n\t/**\n\t * Expose constructors for standalone build.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Manager = __webpack_require__(9);\n\texports.Socket = __webpack_require__(34);\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parseuri = __webpack_require__(2);\n\tvar debug = __webpack_require__(3)('socket.io-client:url');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = url;\n\t\n\t/**\n\t * URL parser.\n\t *\n\t * @param {String} url\n\t * @param {Object} An object meant to mimic window.location.\n\t *                 Defaults to window.location.\n\t * @api public\n\t */\n\t\n\tfunction url(uri, loc) {\n\t  var obj = uri;\n\t\n\t  // default to window.location\n\t  loc = loc || typeof location !== 'undefined' && location;\n\t  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\t\n\t  // relative path support\n\t  if ('string' === typeof uri) {\n\t    if ('/' === uri.charAt(0)) {\n\t      if ('/' === uri.charAt(1)) {\n\t        uri = loc.protocol + uri;\n\t      } else {\n\t        uri = loc.host + uri;\n\t      }\n\t    }\n\t\n\t    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\t\n\t      if ('undefined' !== typeof loc) {\n\t        uri = loc.protocol + '//' + uri;\n\t      } else {\n\t        uri = 'https://' + uri;\n\t      }\n\t    }\n\t\n\t    // parse\n\t\n\t    obj = parseuri(uri);\n\t  }\n\t\n\t  // make sure we treat `localhost:80` and `localhost` equally\n\t  if (!obj.port) {\n\t    if (/^(http|ws)$/.test(obj.protocol)) {\n\t      obj.port = '80';\n\t    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n\t      obj.port = '443';\n\t    }\n\t  }\n\t\n\t  obj.path = obj.path || '/';\n\t\n\t  var ipv6 = obj.host.indexOf(':') !== -1;\n\t  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\t\n\t  // define unique id\n\t  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n\t  // define href\n\t  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : ':' + obj.port);\n\t\n\t  return obj;\n\t}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Parses an URI\n\t *\n\t * @author Steven Levithan <stevenlevithan.com> (MIT license)\n\t * @api private\n\t */\n\t\n\tvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\t\n\tvar parts = [\n\t    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n\t];\n\t\n\tmodule.exports = function parseuri(str) {\n\t    var src = str,\n\t        b = str.indexOf('['),\n\t        e = str.indexOf(']');\n\t\n\t    if (b != -1 && e != -1) {\n\t        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n\t    }\n\t\n\t    var m = re.exec(str || ''),\n\t        uri = {},\n\t        i = 14;\n\t\n\t    while (i--) {\n\t        uri[parts[i]] = m[i] || '';\n\t    }\n\t\n\t    if (b != -1 && e != -1) {\n\t        uri.source = src;\n\t        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n\t        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n\t        uri.ipv6uri = true;\n\t    }\n\t\n\t    uri.pathNames = pathNames(uri, uri['path']);\n\t    uri.queryKey = queryKey(uri, uri['query']);\n\t\n\t    return uri;\n\t};\n\t\n\tfunction pathNames(obj, path) {\n\t    var regx = /\\/{2,9}/g,\n\t        names = path.replace(regx, \"/\").split(\"/\");\n\t\n\t    if (path.substr(0, 1) == '/' || path.length === 0) {\n\t        names.splice(0, 1);\n\t    }\n\t    if (path.substr(path.length - 1, 1) == '/') {\n\t        names.splice(names.length - 1, 1);\n\t    }\n\t\n\t    return names;\n\t}\n\t\n\tfunction queryKey(uri, query) {\n\t    var data = {};\n\t\n\t    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n\t        if ($1) {\n\t            data[$1] = $2;\n\t        }\n\t    });\n\t\n\t    return data;\n\t}\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = function () {\n\t  return function () {};\n\t};\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar debug = __webpack_require__(3)('socket.io-parser');\n\tvar Emitter = __webpack_require__(5);\n\tvar binary = __webpack_require__(6);\n\tvar isArray = __webpack_require__(7);\n\tvar isBuf = __webpack_require__(8);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = 4;\n\t\n\t/**\n\t * Packet types.\n\t *\n\t * @api public\n\t */\n\t\n\texports.types = [\n\t  'CONNECT',\n\t  'DISCONNECT',\n\t  'EVENT',\n\t  'ACK',\n\t  'ERROR',\n\t  'BINARY_EVENT',\n\t  'BINARY_ACK'\n\t];\n\t\n\t/**\n\t * Packet type `connect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.CONNECT = 0;\n\t\n\t/**\n\t * Packet type `disconnect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.DISCONNECT = 1;\n\t\n\t/**\n\t * Packet type `event`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.EVENT = 2;\n\t\n\t/**\n\t * Packet type `ack`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ACK = 3;\n\t\n\t/**\n\t * Packet type `error`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ERROR = 4;\n\t\n\t/**\n\t * Packet type 'binary event'\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_EVENT = 5;\n\t\n\t/**\n\t * Packet type `binary ack`. For acks with binary arguments.\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_ACK = 6;\n\t\n\t/**\n\t * Encoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Encoder = Encoder;\n\t\n\t/**\n\t * Decoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Decoder = Decoder;\n\t\n\t/**\n\t * A socket.io Encoder instance\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Encoder() {}\n\t\n\tvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\t\n\t/**\n\t * Encode a packet as a single string if non-binary, or as a\n\t * buffer sequence, depending on packet type.\n\t *\n\t * @param {Object} obj - packet object\n\t * @param {Function} callback - function to handle encodings (likely engine.write)\n\t * @return Calls callback with Array of encodings\n\t * @api public\n\t */\n\t\n\tEncoder.prototype.encode = function(obj, callback){\n\t\n\t\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    encodeAsBinary(obj, callback);\n\t  } else {\n\t    var encoding = encodeAsString(obj);\n\t    callback([encoding]);\n\t  }\n\t};\n\t\n\t/**\n\t * Encode packet as string.\n\t *\n\t * @param {Object} packet\n\t * @return {String} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsString(obj) {\n\t\n\t  // first is type\n\t  var str = '' + obj.type;\n\t\n\t  // attachments if we have them\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    str += obj.attachments + '-';\n\t  }\n\t\n\t  // if we have a namespace other than `/`\n\t  // we append it followed by a comma `,`\n\t  if (obj.nsp && '/' !== obj.nsp) {\n\t    str += obj.nsp + ',';\n\t  }\n\t\n\t  // immediately followed by the id\n\t  if (null != obj.id) {\n\t    str += obj.id;\n\t  }\n\t\n\t  // json data\n\t  if (null != obj.data) {\n\t    var payload = tryStringify(obj.data);\n\t    if (payload !== false) {\n\t      str += payload;\n\t    } else {\n\t      return ERROR_PACKET;\n\t    }\n\t  }\n\t\n\t\n\t  return str;\n\t}\n\t\n\tfunction tryStringify(str) {\n\t  try {\n\t    return JSON.stringify(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Encode packet as 'buffer sequence' by removing blobs, and\n\t * deconstructing packet into object with placeholders and\n\t * a list of buffers.\n\t *\n\t * @param {Object} packet\n\t * @return {Buffer} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsBinary(obj, callback) {\n\t\n\t  function writeEncoding(bloblessData) {\n\t    var deconstruction = binary.deconstructPacket(bloblessData);\n\t    var pack = encodeAsString(deconstruction.packet);\n\t    var buffers = deconstruction.buffers;\n\t\n\t    buffers.unshift(pack); // add packet info to beginning of data list\n\t    callback(buffers); // write all the buffers\n\t  }\n\t\n\t  binary.removeBlobs(obj, writeEncoding);\n\t}\n\t\n\t/**\n\t * A socket.io Decoder instance\n\t *\n\t * @return {Object} decoder\n\t * @api public\n\t */\n\t\n\tfunction Decoder() {\n\t  this.reconstructor = null;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter` with Decoder.\n\t */\n\t\n\tEmitter(Decoder.prototype);\n\t\n\t/**\n\t * Decodes an encoded packet string into packet JSON.\n\t *\n\t * @param {String} obj - encoded packet\n\t * @return {Object} packet\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.add = function(obj) {\n\t  var packet;\n\t  if (typeof obj === 'string') {\n\t    packet = decodeString(obj);\n\t    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n\t      this.reconstructor = new BinaryReconstructor(packet);\n\t\n\t      // no attachments, labeled binary but no binary data to follow\n\t      if (this.reconstructor.reconPack.attachments === 0) {\n\t        this.emit('decoded', packet);\n\t      }\n\t    } else { // non-binary full packet\n\t      this.emit('decoded', packet);\n\t    }\n\t  } else if (isBuf(obj) || obj.base64) { // raw binary data\n\t    if (!this.reconstructor) {\n\t      throw new Error('got binary data when not reconstructing a packet');\n\t    } else {\n\t      packet = this.reconstructor.takeBinaryData(obj);\n\t      if (packet) { // received final buffer\n\t        this.reconstructor = null;\n\t        this.emit('decoded', packet);\n\t      }\n\t    }\n\t  } else {\n\t    throw new Error('Unknown type: ' + obj);\n\t  }\n\t};\n\t\n\t/**\n\t * Decode a packet String (JSON data)\n\t *\n\t * @param {String} str\n\t * @return {Object} packet\n\t * @api private\n\t */\n\t\n\tfunction decodeString(str) {\n\t  var i = 0;\n\t  // look up type\n\t  var p = {\n\t    type: Number(str.charAt(0))\n\t  };\n\t\n\t  if (null == exports.types[p.type]) {\n\t    return error('unknown packet type ' + p.type);\n\t  }\n\t\n\t  // look up attachments if type binary\n\t  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n\t    var buf = '';\n\t    while (str.charAt(++i) !== '-') {\n\t      buf += str.charAt(i);\n\t      if (i == str.length) break;\n\t    }\n\t    if (buf != Number(buf) || str.charAt(i) !== '-') {\n\t      throw new Error('Illegal attachments');\n\t    }\n\t    p.attachments = Number(buf);\n\t  }\n\t\n\t  // look up namespace (if any)\n\t  if ('/' === str.charAt(i + 1)) {\n\t    p.nsp = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (',' === c) break;\n\t      p.nsp += c;\n\t      if (i === str.length) break;\n\t    }\n\t  } else {\n\t    p.nsp = '/';\n\t  }\n\t\n\t  // look up id\n\t  var next = str.charAt(i + 1);\n\t  if ('' !== next && Number(next) == next) {\n\t    p.id = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (null == c || Number(c) != c) {\n\t        --i;\n\t        break;\n\t      }\n\t      p.id += str.charAt(i);\n\t      if (i === str.length) break;\n\t    }\n\t    p.id = Number(p.id);\n\t  }\n\t\n\t  // look up json data\n\t  if (str.charAt(++i)) {\n\t    var payload = tryParse(str.substr(i));\n\t    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n\t    if (isPayloadValid) {\n\t      p.data = payload;\n\t    } else {\n\t      return error('invalid payload');\n\t    }\n\t  }\n\t\n\t\n\t  return p;\n\t}\n\t\n\tfunction tryParse(str) {\n\t  try {\n\t    return JSON.parse(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Deallocates a parser's resources\n\t *\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.destroy = function() {\n\t  if (this.reconstructor) {\n\t    this.reconstructor.finishedReconstruction();\n\t  }\n\t};\n\t\n\t/**\n\t * A manager of a binary event's 'buffer sequence'. Should\n\t * be constructed whenever a packet of type BINARY_EVENT is\n\t * decoded.\n\t *\n\t * @param {Object} packet\n\t * @return {BinaryReconstructor} initialized reconstructor\n\t * @api private\n\t */\n\t\n\tfunction BinaryReconstructor(packet) {\n\t  this.reconPack = packet;\n\t  this.buffers = [];\n\t}\n\t\n\t/**\n\t * Method to be called when binary data received from connection\n\t * after a BINARY_EVENT packet.\n\t *\n\t * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n\t * @return {null | Object} returns null if more binary data is expected or\n\t *   a reconstructed packet object if all buffers have been received.\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n\t  this.buffers.push(binData);\n\t  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n\t    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n\t    this.finishedReconstruction();\n\t    return packet;\n\t  }\n\t  return null;\n\t};\n\t\n\t/**\n\t * Cleans up binary packet reconstruction variables.\n\t *\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.finishedReconstruction = function() {\n\t  this.reconPack = null;\n\t  this.buffers = [];\n\t};\n\t\n\tfunction error(msg) {\n\t  return {\n\t    type: exports.ERROR,\n\t    data: 'parser error: ' + msg\n\t  };\n\t}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\r\n\t/**\r\n\t * Expose `Emitter`.\r\n\t */\r\n\t\r\n\tif (true) {\r\n\t  module.exports = Emitter;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialize a new `Emitter`.\r\n\t *\r\n\t * @api public\r\n\t */\r\n\t\r\n\tfunction Emitter(obj) {\r\n\t  if (obj) return mixin(obj);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Mixin the emitter properties.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\tfunction mixin(obj) {\r\n\t  for (var key in Emitter.prototype) {\r\n\t    obj[key] = Emitter.prototype[key];\r\n\t  }\r\n\t  return obj;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Listen on the given `event` with `fn`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.on =\r\n\tEmitter.prototype.addEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n\t    .push(fn);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds an `event` listener that will be invoked a single\r\n\t * time then automatically removed.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.once = function(event, fn){\r\n\t  function on() {\r\n\t    this.off(event, on);\r\n\t    fn.apply(this, arguments);\r\n\t  }\r\n\t\r\n\t  on.fn = fn;\r\n\t  this.on(event, on);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Remove the given callback for `event` or all\r\n\t * registered callbacks.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.off =\r\n\tEmitter.prototype.removeListener =\r\n\tEmitter.prototype.removeAllListeners =\r\n\tEmitter.prototype.removeEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  // all\r\n\t  if (0 == arguments.length) {\r\n\t    this._callbacks = {};\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // specific event\r\n\t  var callbacks = this._callbacks['$' + event];\r\n\t  if (!callbacks) return this;\r\n\t\r\n\t  // remove all handlers\r\n\t  if (1 == arguments.length) {\r\n\t    delete this._callbacks['$' + event];\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // remove specific handler\r\n\t  var cb;\r\n\t  for (var i = 0; i < callbacks.length; i++) {\r\n\t    cb = callbacks[i];\r\n\t    if (cb === fn || cb.fn === fn) {\r\n\t      callbacks.splice(i, 1);\r\n\t      break;\r\n\t    }\r\n\t  }\r\n\t\r\n\t  // Remove event specific arrays for event types that no\r\n\t  // one is subscribed for to avoid memory leak.\r\n\t  if (callbacks.length === 0) {\r\n\t    delete this._callbacks['$' + event];\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Emit `event` with the given args.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Mixed} ...\r\n\t * @return {Emitter}\r\n\t */\r\n\t\r\n\tEmitter.prototype.emit = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  var args = new Array(arguments.length - 1)\r\n\t    , callbacks = this._callbacks['$' + event];\r\n\t\r\n\t  for (var i = 1; i < arguments.length; i++) {\r\n\t    args[i - 1] = arguments[i];\r\n\t  }\r\n\t\r\n\t  if (callbacks) {\r\n\t    callbacks = callbacks.slice(0);\r\n\t    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n\t      callbacks[i].apply(this, args);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Return array of callbacks for `event`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Array}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.listeners = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  return this._callbacks['$' + event] || [];\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if this emitter has `event` handlers.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Boolean}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.hasListeners = function(event){\r\n\t  return !! this.listeners(event).length;\r\n\t};\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*global Blob,File*/\n\t\n\t/**\n\t * Module requirements\n\t */\n\t\n\tvar isArray = __webpack_require__(7);\n\tvar isBuf = __webpack_require__(8);\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\n\tvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\t\n\t/**\n\t * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n\t * Anything with blobs or files should be fed through removeBlobs before coming\n\t * here.\n\t *\n\t * @param {Object} packet - socket.io event packet\n\t * @return {Object} with deconstructed packet and list of buffers\n\t * @api public\n\t */\n\t\n\texports.deconstructPacket = function(packet) {\n\t  var buffers = [];\n\t  var packetData = packet.data;\n\t  var pack = packet;\n\t  pack.data = _deconstructPacket(packetData, buffers);\n\t  pack.attachments = buffers.length; // number of binary 'attachments'\n\t  return {packet: pack, buffers: buffers};\n\t};\n\t\n\tfunction _deconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (isBuf(data)) {\n\t    var placeholder = { _placeholder: true, num: buffers.length };\n\t    buffers.push(data);\n\t    return placeholder;\n\t  } else if (isArray(data)) {\n\t    var newData = new Array(data.length);\n\t    for (var i = 0; i < data.length; i++) {\n\t      newData[i] = _deconstructPacket(data[i], buffers);\n\t    }\n\t    return newData;\n\t  } else if (typeof data === 'object' && !(data instanceof Date)) {\n\t    var newData = {};\n\t    for (var key in data) {\n\t      newData[key] = _deconstructPacket(data[key], buffers);\n\t    }\n\t    return newData;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Reconstructs a binary packet from its placeholder packet and buffers\n\t *\n\t * @param {Object} packet - event packet with placeholders\n\t * @param {Array} buffers - binary buffers to put in placeholder positions\n\t * @return {Object} reconstructed packet\n\t * @api public\n\t */\n\t\n\texports.reconstructPacket = function(packet, buffers) {\n\t  packet.data = _reconstructPacket(packet.data, buffers);\n\t  packet.attachments = undefined; // no longer useful\n\t  return packet;\n\t};\n\t\n\tfunction _reconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (data && data._placeholder) {\n\t    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n\t  } else if (isArray(data)) {\n\t    for (var i = 0; i < data.length; i++) {\n\t      data[i] = _reconstructPacket(data[i], buffers);\n\t    }\n\t  } else if (typeof data === 'object') {\n\t    for (var key in data) {\n\t      data[key] = _reconstructPacket(data[key], buffers);\n\t    }\n\t  }\n\t\n\t  return data;\n\t}\n\t\n\t/**\n\t * Asynchronously removes Blobs or Files from data via\n\t * FileReader's readAsArrayBuffer method. Used before encoding\n\t * data as msgpack. Calls callback with the blobless data.\n\t *\n\t * @param {Object} data\n\t * @param {Function} callback\n\t * @api private\n\t */\n\t\n\texports.removeBlobs = function(data, callback) {\n\t  function _removeBlobs(obj, curKey, containingObject) {\n\t    if (!obj) return obj;\n\t\n\t    // convert any blob\n\t    if ((withNativeBlob && obj instanceof Blob) ||\n\t        (withNativeFile && obj instanceof File)) {\n\t      pendingBlobs++;\n\t\n\t      // async filereader\n\t      var fileReader = new FileReader();\n\t      fileReader.onload = function() { // this.result == arraybuffer\n\t        if (containingObject) {\n\t          containingObject[curKey] = this.result;\n\t        }\n\t        else {\n\t          bloblessData = this.result;\n\t        }\n\t\n\t        // if nothing pending its callback time\n\t        if(! --pendingBlobs) {\n\t          callback(bloblessData);\n\t        }\n\t      };\n\t\n\t      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n\t    } else if (isArray(obj)) { // handle array\n\t      for (var i = 0; i < obj.length; i++) {\n\t        _removeBlobs(obj[i], i, obj);\n\t      }\n\t    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n\t      for (var key in obj) {\n\t        _removeBlobs(obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t\n\t  var pendingBlobs = 0;\n\t  var bloblessData = data;\n\t  _removeBlobs(bloblessData);\n\t  if (!pendingBlobs) {\n\t    callback(bloblessData);\n\t  }\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = Array.isArray || function (arr) {\n\t  return toString.call(arr) == '[object Array]';\n\t};\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = isBuf;\n\t\n\tvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\n\tvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\t\n\tvar isView = function (obj) {\n\t  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n\t};\n\t\n\t/**\n\t * Returns true if obj is a buffer or an arraybuffer.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction isBuf(obj) {\n\t  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n\t          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n\t}\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _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\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar eio = __webpack_require__(10);\n\tvar Socket = __webpack_require__(34);\n\tvar Emitter = __webpack_require__(5);\n\tvar parser = __webpack_require__(4);\n\tvar on = __webpack_require__(36);\n\tvar bind = __webpack_require__(37);\n\tvar debug = __webpack_require__(3)('socket.io-client:manager');\n\tvar indexOf = __webpack_require__(33);\n\tvar Backoff = __webpack_require__(38);\n\t\n\t/**\n\t * IE6+ hasOwnProperty\n\t */\n\t\n\tvar has = Object.prototype.hasOwnProperty;\n\t\n\t/**\n\t * Module exports\n\t */\n\t\n\tmodule.exports = Manager;\n\t\n\t/**\n\t * `Manager` constructor.\n\t *\n\t * @param {String} engine instance or engine uri/opts\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Manager(uri, opts) {\n\t  if (!(this instanceof Manager)) return new Manager(uri, opts);\n\t  if (uri && 'object' === (typeof uri === 'undefined' ? 'undefined' : _typeof(uri))) {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t  opts = opts || {};\n\t\n\t  opts.path = opts.path || '/socket.io';\n\t  this.nsps = {};\n\t  this.subs = [];\n\t  this.opts = opts;\n\t  this.reconnection(opts.reconnection !== false);\n\t  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n\t  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n\t  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n\t  this.randomizationFactor(opts.randomizationFactor || 0.5);\n\t  this.backoff = new Backoff({\n\t    min: this.reconnectionDelay(),\n\t    max: this.reconnectionDelayMax(),\n\t    jitter: this.randomizationFactor()\n\t  });\n\t  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n\t  this.readyState = 'closed';\n\t  this.uri = uri;\n\t  this.connecting = [];\n\t  this.lastPing = null;\n\t  this.encoding = false;\n\t  this.packetBuffer = [];\n\t  var _parser = opts.parser || parser;\n\t  this.encoder = new _parser.Encoder();\n\t  this.decoder = new _parser.Decoder();\n\t  this.autoConnect = opts.autoConnect !== false;\n\t  if (this.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Propagate given event to sockets and emit on `this`\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.emitAll = function () {\n\t  this.emit.apply(this, arguments);\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Update `socket.id` of all sockets\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.updateSocketIds = function () {\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].id = this.generateId(nsp);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * generate `socket.id` for the given `nsp`\n\t *\n\t * @param {String} nsp\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tManager.prototype.generateId = function (nsp) {\n\t  return (nsp === '/' ? '' : nsp + '#') + this.engine.id;\n\t};\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Manager.prototype);\n\t\n\t/**\n\t * Sets the `reconnection` config.\n\t *\n\t * @param {Boolean} true/false if it should automatically reconnect\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnection = function (v) {\n\t  if (!arguments.length) return this._reconnection;\n\t  this._reconnection = !!v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the reconnection attempts config.\n\t *\n\t * @param {Number} max reconnection attempts before giving up\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionAttempts = function (v) {\n\t  if (!arguments.length) return this._reconnectionAttempts;\n\t  this._reconnectionAttempts = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelay = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelay;\n\t  this._reconnectionDelay = v;\n\t  this.backoff && this.backoff.setMin(v);\n\t  return this;\n\t};\n\t\n\tManager.prototype.randomizationFactor = function (v) {\n\t  if (!arguments.length) return this._randomizationFactor;\n\t  this._randomizationFactor = v;\n\t  this.backoff && this.backoff.setJitter(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the maximum delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelayMax = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelayMax;\n\t  this._reconnectionDelayMax = v;\n\t  this.backoff && this.backoff.setMax(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the connection timeout. `false` to disable\n\t *\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.timeout = function (v) {\n\t  if (!arguments.length) return this._timeout;\n\t  this._timeout = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Starts trying to reconnect if reconnection is enabled and we have not\n\t * started reconnecting yet\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.maybeReconnectOnOpen = function () {\n\t  // Only try to reconnect if it's the first time we're connecting\n\t  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n\t    // keeps reconnection from firing twice for the same reconnection loop\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Sets the current transport `socket`.\n\t *\n\t * @param {Function} optional, callback\n\t * @return {Manager} self\n\t * @api public\n\t */\n\t\n\tManager.prototype.open = Manager.prototype.connect = function (fn, opts) {\n\t\n\t  if (~this.readyState.indexOf('open')) return this;\n\t\n\t  this.engine = eio(this.uri, this.opts);\n\t  var socket = this.engine;\n\t  var self = this;\n\t  this.readyState = 'opening';\n\t  this.skipReconnect = false;\n\t\n\t  // emit `open`\n\t  var openSub = on(socket, 'open', function () {\n\t    self.onopen();\n\t    fn && fn();\n\t  });\n\t\n\t  // emit `connect_error`\n\t  var errorSub = on(socket, 'error', function (data) {\n\t\n\t    self.cleanup();\n\t    self.readyState = 'closed';\n\t    self.emitAll('connect_error', data);\n\t    if (fn) {\n\t      var err = new Error('Connection error');\n\t      err.data = data;\n\t      fn(err);\n\t    } else {\n\t      // Only do this if there is no fn to handle the error\n\t      self.maybeReconnectOnOpen();\n\t    }\n\t  });\n\t\n\t  // emit `connect_timeout`\n\t  if (false !== this._timeout) {\n\t    var timeout = this._timeout;\n\t\n\t    if (timeout === 0) {\n\t      openSub.destroy(); // prevents a race condition with the 'open' event\n\t    }\n\t\n\t    // set timer\n\t    var timer = setTimeout(function () {\n\t\n\t      openSub.destroy();\n\t      socket.close();\n\t      socket.emit('error', 'timeout');\n\t      self.emitAll('connect_timeout', timeout);\n\t    }, timeout);\n\t\n\t    this.subs.push({\n\t      destroy: function destroy() {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t\n\t  this.subs.push(openSub);\n\t  this.subs.push(errorSub);\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport open.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onopen = function () {\n\t\n\t  // clear old subs\n\t  this.cleanup();\n\t\n\t  // mark as open\n\t  this.readyState = 'open';\n\t  this.emit('open');\n\t\n\t  // add new subs\n\t  var socket = this.engine;\n\t  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n\t  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n\t  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n\t  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n\t  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n\t  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n\t};\n\t\n\t/**\n\t * Called upon a ping.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onping = function () {\n\t  this.lastPing = new Date();\n\t  this.emitAll('ping');\n\t};\n\t\n\t/**\n\t * Called upon a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onpong = function () {\n\t  this.emitAll('pong', new Date() - this.lastPing);\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondata = function (data) {\n\t  this.decoder.add(data);\n\t};\n\t\n\t/**\n\t * Called when parser fully decodes a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondecoded = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon socket error.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onerror = function (err) {\n\t\n\t  this.emitAll('error', err);\n\t};\n\t\n\t/**\n\t * Creates a new socket for the given `nsp`.\n\t *\n\t * @return {Socket}\n\t * @api public\n\t */\n\t\n\tManager.prototype.socket = function (nsp, opts) {\n\t  var socket = this.nsps[nsp];\n\t  if (!socket) {\n\t    socket = new Socket(this, nsp, opts);\n\t    this.nsps[nsp] = socket;\n\t    var self = this;\n\t    socket.on('connecting', onConnecting);\n\t    socket.on('connect', function () {\n\t      socket.id = self.generateId(nsp);\n\t    });\n\t\n\t    if (this.autoConnect) {\n\t      // manually call here since connecting event is fired before listening\n\t      onConnecting();\n\t    }\n\t  }\n\t\n\t  function onConnecting() {\n\t    if (!~indexOf(self.connecting, socket)) {\n\t      self.connecting.push(socket);\n\t    }\n\t  }\n\t\n\t  return socket;\n\t};\n\t\n\t/**\n\t * Called upon a socket close.\n\t *\n\t * @param {Socket} socket\n\t */\n\t\n\tManager.prototype.destroy = function (socket) {\n\t  var index = indexOf(this.connecting, socket);\n\t  if (~index) this.connecting.splice(index, 1);\n\t  if (this.connecting.length) return;\n\t\n\t  this.close();\n\t};\n\t\n\t/**\n\t * Writes a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tManager.prototype.packet = function (packet) {\n\t\n\t  var self = this;\n\t  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\t\n\t  if (!self.encoding) {\n\t    // encode, then write to engine with result\n\t    self.encoding = true;\n\t    this.encoder.encode(packet, function (encodedPackets) {\n\t      for (var i = 0; i < encodedPackets.length; i++) {\n\t        self.engine.write(encodedPackets[i], packet.options);\n\t      }\n\t      self.encoding = false;\n\t      self.processPacketQueue();\n\t    });\n\t  } else {\n\t    // add packet to the queue\n\t    self.packetBuffer.push(packet);\n\t  }\n\t};\n\t\n\t/**\n\t * If packet buffer is non-empty, begins encoding the\n\t * next packet in line.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.processPacketQueue = function () {\n\t  if (this.packetBuffer.length > 0 && !this.encoding) {\n\t    var pack = this.packetBuffer.shift();\n\t    this.packet(pack);\n\t  }\n\t};\n\t\n\t/**\n\t * Clean up transport subscriptions and packet buffer.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.cleanup = function () {\n\t\n\t  var subsLength = this.subs.length;\n\t  for (var i = 0; i < subsLength; i++) {\n\t    var sub = this.subs.shift();\n\t    sub.destroy();\n\t  }\n\t\n\t  this.packetBuffer = [];\n\t  this.encoding = false;\n\t  this.lastPing = null;\n\t\n\t  this.decoder.destroy();\n\t};\n\t\n\t/**\n\t * Close the current socket.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.close = Manager.prototype.disconnect = function () {\n\t\n\t  this.skipReconnect = true;\n\t  this.reconnecting = false;\n\t  if ('opening' === this.readyState) {\n\t    // `onclose` will not fire because\n\t    // an open event never happened\n\t    this.cleanup();\n\t  }\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  if (this.engine) this.engine.close();\n\t};\n\t\n\t/**\n\t * Called upon engine close.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onclose = function (reason) {\n\t\n\t  this.cleanup();\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  this.emit('close', reason);\n\t\n\t  if (this._reconnection && !this.skipReconnect) {\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Attempt a reconnection.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.reconnect = function () {\n\t  if (this.reconnecting || this.skipReconnect) return this;\n\t\n\t  var self = this;\n\t\n\t  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\t\n\t    this.backoff.reset();\n\t    this.emitAll('reconnect_failed');\n\t    this.reconnecting = false;\n\t  } else {\n\t    var delay = this.backoff.duration();\n\t\n\t    this.reconnecting = true;\n\t    var timer = setTimeout(function () {\n\t      if (self.skipReconnect) return;\n\t\n\t      self.emitAll('reconnect_attempt', self.backoff.attempts);\n\t      self.emitAll('reconnecting', self.backoff.attempts);\n\t\n\t      // check again for the case socket closed in above events\n\t      if (self.skipReconnect) return;\n\t\n\t      self.open(function (err) {\n\t        if (err) {\n\t\n\t          self.reconnecting = false;\n\t          self.reconnect();\n\t          self.emitAll('reconnect_error', err.data);\n\t        } else {\n\t\n\t          self.onreconnect();\n\t        }\n\t      });\n\t    }, delay);\n\t\n\t    this.subs.push({\n\t      destroy: function destroy() {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful reconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onreconnect = function () {\n\t  var attempt = this.backoff.attempts;\n\t  this.reconnecting = false;\n\t  this.backoff.reset();\n\t  this.updateSocketIds();\n\t  this.emitAll('reconnect', attempt);\n\t};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\tmodule.exports = __webpack_require__(11);\n\t\n\t/**\n\t * Exports parser\n\t *\n\t * @api public\n\t *\n\t */\n\tmodule.exports.parser = __webpack_require__(19);\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar transports = __webpack_require__(12);\n\tvar Emitter = __webpack_require__(5);\n\tvar debug = __webpack_require__(3)('engine.io-client:socket');\n\tvar index = __webpack_require__(33);\n\tvar parser = __webpack_require__(19);\n\tvar parseuri = __webpack_require__(2);\n\tvar parseqs = __webpack_require__(27);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Socket;\n\t\n\t/**\n\t * Socket constructor.\n\t *\n\t * @param {String|Object} uri or options\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Socket (uri, opts) {\n\t  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\t\n\t  opts = opts || {};\n\t\n\t  if (uri && 'object' === typeof uri) {\n\t    opts = uri;\n\t    uri = null;\n\t  }\n\t\n\t  if (uri) {\n\t    uri = parseuri(uri);\n\t    opts.hostname = uri.host;\n\t    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n\t    opts.port = uri.port;\n\t    if (uri.query) opts.query = uri.query;\n\t  } else if (opts.host) {\n\t    opts.hostname = parseuri(opts.host).host;\n\t  }\n\t\n\t  this.secure = null != opts.secure ? opts.secure\n\t    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\t\n\t  if (opts.hostname && !opts.port) {\n\t    // if no port is specified manually, use the protocol default\n\t    opts.port = this.secure ? '443' : '80';\n\t  }\n\t\n\t  this.agent = opts.agent || false;\n\t  this.hostname = opts.hostname ||\n\t    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n\t  this.port = opts.port || (typeof location !== 'undefined' && location.port\n\t      ? location.port\n\t      : (this.secure ? 443 : 80));\n\t  this.query = opts.query || {};\n\t  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n\t  this.upgrade = false !== opts.upgrade;\n\t  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n\t  this.forceJSONP = !!opts.forceJSONP;\n\t  this.jsonp = false !== opts.jsonp;\n\t  this.forceBase64 = !!opts.forceBase64;\n\t  this.enablesXDR = !!opts.enablesXDR;\n\t  this.withCredentials = false !== opts.withCredentials;\n\t  this.timestampParam = opts.timestampParam || 't';\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.transports = opts.transports || ['polling', 'websocket'];\n\t  this.transportOptions = opts.transportOptions || {};\n\t  this.readyState = '';\n\t  this.writeBuffer = [];\n\t  this.prevBufferLen = 0;\n\t  this.policyPort = opts.policyPort || 843;\n\t  this.rememberUpgrade = opts.rememberUpgrade || false;\n\t  this.binaryType = null;\n\t  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n\t  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\t\n\t  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n\t  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n\t    this.perMessageDeflate.threshold = 1024;\n\t  }\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx || null;\n\t  this.key = opts.key || null;\n\t  this.passphrase = opts.passphrase || null;\n\t  this.cert = opts.cert || null;\n\t  this.ca = opts.ca || null;\n\t  this.ciphers = opts.ciphers || null;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n\t  this.forceNode = !!opts.forceNode;\n\t\n\t  // detect ReactNative environment\n\t  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\t\n\t  // other options for Node.js or ReactNative client\n\t  if (typeof self === 'undefined' || this.isReactNative) {\n\t    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n\t      this.extraHeaders = opts.extraHeaders;\n\t    }\n\t\n\t    if (opts.localAddress) {\n\t      this.localAddress = opts.localAddress;\n\t    }\n\t  }\n\t\n\t  // set on handshake\n\t  this.id = null;\n\t  this.upgrades = null;\n\t  this.pingInterval = null;\n\t  this.pingTimeout = null;\n\t\n\t  // set on heartbeat\n\t  this.pingIntervalTimer = null;\n\t  this.pingTimeoutTimer = null;\n\t\n\t  this.open();\n\t}\n\t\n\tSocket.priorWebsocketSuccess = false;\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.protocol = parser.protocol; // this is an int\n\t\n\t/**\n\t * Expose deps for legacy compatibility\n\t * and standalone browser access.\n\t */\n\t\n\tSocket.Socket = Socket;\n\tSocket.Transport = __webpack_require__(18);\n\tSocket.transports = __webpack_require__(12);\n\tSocket.parser = __webpack_require__(19);\n\t\n\t/**\n\t * Creates transport of the given type.\n\t *\n\t * @param {String} transport name\n\t * @return {Transport}\n\t * @api private\n\t */\n\t\n\tSocket.prototype.createTransport = function (name) {\n\t\n\t  var query = clone(this.query);\n\t\n\t  // append engine.io protocol identifier\n\t  query.EIO = parser.protocol;\n\t\n\t  // transport name\n\t  query.transport = name;\n\t\n\t  // per-transport options\n\t  var options = this.transportOptions[name] || {};\n\t\n\t  // session id if we already have one\n\t  if (this.id) query.sid = this.id;\n\t\n\t  var transport = new transports[name]({\n\t    query: query,\n\t    socket: this,\n\t    agent: options.agent || this.agent,\n\t    hostname: options.hostname || this.hostname,\n\t    port: options.port || this.port,\n\t    secure: options.secure || this.secure,\n\t    path: options.path || this.path,\n\t    forceJSONP: options.forceJSONP || this.forceJSONP,\n\t    jsonp: options.jsonp || this.jsonp,\n\t    forceBase64: options.forceBase64 || this.forceBase64,\n\t    enablesXDR: options.enablesXDR || this.enablesXDR,\n\t    withCredentials: options.withCredentials || this.withCredentials,\n\t    timestampRequests: options.timestampRequests || this.timestampRequests,\n\t    timestampParam: options.timestampParam || this.timestampParam,\n\t    policyPort: options.policyPort || this.policyPort,\n\t    pfx: options.pfx || this.pfx,\n\t    key: options.key || this.key,\n\t    passphrase: options.passphrase || this.passphrase,\n\t    cert: options.cert || this.cert,\n\t    ca: options.ca || this.ca,\n\t    ciphers: options.ciphers || this.ciphers,\n\t    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n\t    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n\t    extraHeaders: options.extraHeaders || this.extraHeaders,\n\t    forceNode: options.forceNode || this.forceNode,\n\t    localAddress: options.localAddress || this.localAddress,\n\t    requestTimeout: options.requestTimeout || this.requestTimeout,\n\t    protocols: options.protocols || void (0),\n\t    isReactNative: this.isReactNative\n\t  });\n\t\n\t  return transport;\n\t};\n\t\n\tfunction clone (obj) {\n\t  var o = {};\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      o[i] = obj[i];\n\t    }\n\t  }\n\t  return o;\n\t}\n\t\n\t/**\n\t * Initializes transport to use and starts probe.\n\t *\n\t * @api private\n\t */\n\tSocket.prototype.open = function () {\n\t  var transport;\n\t  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n\t    transport = 'websocket';\n\t  } else if (0 === this.transports.length) {\n\t    // Emit error on next tick so it can be listened to\n\t    var self = this;\n\t    setTimeout(function () {\n\t      self.emit('error', 'No transports available');\n\t    }, 0);\n\t    return;\n\t  } else {\n\t    transport = this.transports[0];\n\t  }\n\t  this.readyState = 'opening';\n\t\n\t  // Retry with the next transport if the transport is disabled (jsonp: false)\n\t  try {\n\t    transport = this.createTransport(transport);\n\t  } catch (e) {\n\t    this.transports.shift();\n\t    this.open();\n\t    return;\n\t  }\n\t\n\t  transport.open();\n\t  this.setTransport(transport);\n\t};\n\t\n\t/**\n\t * Sets the current transport. Disables the existing one (if any).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setTransport = function (transport) {\n\t\n\t  var self = this;\n\t\n\t  if (this.transport) {\n\t\n\t    this.transport.removeAllListeners();\n\t  }\n\t\n\t  // set up transport\n\t  this.transport = transport;\n\t\n\t  // set up transport listeners\n\t  transport\n\t  .on('drain', function () {\n\t    self.onDrain();\n\t  })\n\t  .on('packet', function (packet) {\n\t    self.onPacket(packet);\n\t  })\n\t  .on('error', function (e) {\n\t    self.onError(e);\n\t  })\n\t  .on('close', function () {\n\t    self.onClose('transport close');\n\t  });\n\t};\n\t\n\t/**\n\t * Probes a transport.\n\t *\n\t * @param {String} transport name\n\t * @api private\n\t */\n\t\n\tSocket.prototype.probe = function (name) {\n\t\n\t  var transport = this.createTransport(name, { probe: 1 });\n\t  var failed = false;\n\t  var self = this;\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t\n\t  function onTransportOpen () {\n\t    if (self.onlyBinaryUpgrades) {\n\t      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n\t      failed = failed || upgradeLosesBinary;\n\t    }\n\t    if (failed) return;\n\t\n\t\n\t    transport.send([{ type: 'ping', data: 'probe' }]);\n\t    transport.once('packet', function (msg) {\n\t      if (failed) return;\n\t      if ('pong' === msg.type && 'probe' === msg.data) {\n\t\n\t        self.upgrading = true;\n\t        self.emit('upgrading', transport);\n\t        if (!transport) return;\n\t        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\t\n\t\n\t        self.transport.pause(function () {\n\t          if (failed) return;\n\t          if ('closed' === self.readyState) return;\n\t\n\t\n\t          cleanup();\n\t\n\t          self.setTransport(transport);\n\t          transport.send([{ type: 'upgrade' }]);\n\t          self.emit('upgrade', transport);\n\t          transport = null;\n\t          self.upgrading = false;\n\t          self.flush();\n\t        });\n\t      } else {\n\t\n\t        var err = new Error('probe error');\n\t        err.transport = transport.name;\n\t        self.emit('upgradeError', err);\n\t      }\n\t    });\n\t  }\n\t\n\t  function freezeTransport () {\n\t    if (failed) return;\n\t\n\t    // Any callback called by transport should be ignored since now\n\t    failed = true;\n\t\n\t    cleanup();\n\t\n\t    transport.close();\n\t    transport = null;\n\t  }\n\t\n\t  // Handle any error that happens while probing\n\t  function onerror (err) {\n\t    var error = new Error('probe error: ' + err);\n\t    error.transport = transport.name;\n\t\n\t    freezeTransport();\n\t\n\t\n\t\n\t    self.emit('upgradeError', error);\n\t  }\n\t\n\t  function onTransportClose () {\n\t    onerror('transport closed');\n\t  }\n\t\n\t  // When the socket is closed while we're probing\n\t  function onclose () {\n\t    onerror('socket closed');\n\t  }\n\t\n\t  // When the socket is upgraded while we're probing\n\t  function onupgrade (to) {\n\t    if (transport && to.name !== transport.name) {\n\t\n\t      freezeTransport();\n\t    }\n\t  }\n\t\n\t  // Remove all listeners on the transport and on self\n\t  function cleanup () {\n\t    transport.removeListener('open', onTransportOpen);\n\t    transport.removeListener('error', onerror);\n\t    transport.removeListener('close', onTransportClose);\n\t    self.removeListener('close', onclose);\n\t    self.removeListener('upgrading', onupgrade);\n\t  }\n\t\n\t  transport.once('open', onTransportOpen);\n\t  transport.once('error', onerror);\n\t  transport.once('close', onTransportClose);\n\t\n\t  this.once('close', onclose);\n\t  this.once('upgrading', onupgrade);\n\t\n\t  transport.open();\n\t};\n\t\n\t/**\n\t * Called when connection is deemed open.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.onOpen = function () {\n\t\n\t  this.readyState = 'open';\n\t  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n\t  this.emit('open');\n\t  this.flush();\n\t\n\t  // we check for `readyState` in case an `open`\n\t  // listener already closed the socket\n\t  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\t\n\t    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n\t      this.probe(this.upgrades[i]);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Handles a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onPacket = function (packet) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState ||\n\t      'closing' === this.readyState) {\n\t\n\t\n\t    this.emit('packet', packet);\n\t\n\t    // Socket is live - any packet counts\n\t    this.emit('heartbeat');\n\t\n\t    switch (packet.type) {\n\t      case 'open':\n\t        this.onHandshake(JSON.parse(packet.data));\n\t        break;\n\t\n\t      case 'pong':\n\t        this.setPing();\n\t        this.emit('pong');\n\t        break;\n\t\n\t      case 'error':\n\t        var err = new Error('server error');\n\t        err.code = packet.data;\n\t        this.onError(err);\n\t        break;\n\t\n\t      case 'message':\n\t        this.emit('data', packet.data);\n\t        this.emit('message', packet.data);\n\t        break;\n\t    }\n\t  } else {\n\t\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon handshake completion.\n\t *\n\t * @param {Object} handshake obj\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHandshake = function (data) {\n\t  this.emit('handshake', data);\n\t  this.id = data.sid;\n\t  this.transport.query.sid = data.sid;\n\t  this.upgrades = this.filterUpgrades(data.upgrades);\n\t  this.pingInterval = data.pingInterval;\n\t  this.pingTimeout = data.pingTimeout;\n\t  this.onOpen();\n\t  // In case open handler closes socket\n\t  if ('closed' === this.readyState) return;\n\t  this.setPing();\n\t\n\t  // Prolong liveness of socket on heartbeat\n\t  this.removeListener('heartbeat', this.onHeartbeat);\n\t  this.on('heartbeat', this.onHeartbeat);\n\t};\n\t\n\t/**\n\t * Resets ping timeout.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHeartbeat = function (timeout) {\n\t  clearTimeout(this.pingTimeoutTimer);\n\t  var self = this;\n\t  self.pingTimeoutTimer = setTimeout(function () {\n\t    if ('closed' === self.readyState) return;\n\t    self.onClose('ping timeout');\n\t  }, timeout || (self.pingInterval + self.pingTimeout));\n\t};\n\t\n\t/**\n\t * Pings server every `this.pingInterval` and expects response\n\t * within `this.pingTimeout` or closes connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setPing = function () {\n\t  var self = this;\n\t  clearTimeout(self.pingIntervalTimer);\n\t  self.pingIntervalTimer = setTimeout(function () {\n\t\n\t    self.ping();\n\t    self.onHeartbeat(self.pingTimeout);\n\t  }, self.pingInterval);\n\t};\n\t\n\t/**\n\t* Sends a ping packet.\n\t*\n\t* @api private\n\t*/\n\t\n\tSocket.prototype.ping = function () {\n\t  var self = this;\n\t  this.sendPacket('ping', function () {\n\t    self.emit('ping');\n\t  });\n\t};\n\t\n\t/**\n\t * Called on `drain` event\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onDrain = function () {\n\t  this.writeBuffer.splice(0, this.prevBufferLen);\n\t\n\t  // setting prevBufferLen = 0 is very important\n\t  // for example, when upgrading, upgrade packet is sent over,\n\t  // and a nonzero prevBufferLen could cause problems on `drain`\n\t  this.prevBufferLen = 0;\n\t\n\t  if (0 === this.writeBuffer.length) {\n\t    this.emit('drain');\n\t  } else {\n\t    this.flush();\n\t  }\n\t};\n\t\n\t/**\n\t * Flush write buffers.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.flush = function () {\n\t  if ('closed' !== this.readyState && this.transport.writable &&\n\t    !this.upgrading && this.writeBuffer.length) {\n\t\n\t    this.transport.send(this.writeBuffer);\n\t    // keep track of current length of writeBuffer\n\t    // splice writeBuffer and callbackBuffer on `drain`\n\t    this.prevBufferLen = this.writeBuffer.length;\n\t    this.emit('flush');\n\t  }\n\t};\n\t\n\t/**\n\t * Sends a message.\n\t *\n\t * @param {String} message.\n\t * @param {Function} callback function.\n\t * @param {Object} options.\n\t * @return {Socket} for chaining.\n\t * @api public\n\t */\n\t\n\tSocket.prototype.write =\n\tSocket.prototype.send = function (msg, options, fn) {\n\t  this.sendPacket('message', msg, options, fn);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {String} packet type.\n\t * @param {String} data.\n\t * @param {Object} options.\n\t * @param {Function} callback function.\n\t * @api private\n\t */\n\t\n\tSocket.prototype.sendPacket = function (type, data, options, fn) {\n\t  if ('function' === typeof data) {\n\t    fn = data;\n\t    data = undefined;\n\t  }\n\t\n\t  if ('function' === typeof options) {\n\t    fn = options;\n\t    options = null;\n\t  }\n\t\n\t  if ('closing' === this.readyState || 'closed' === this.readyState) {\n\t    return;\n\t  }\n\t\n\t  options = options || {};\n\t  options.compress = false !== options.compress;\n\t\n\t  var packet = {\n\t    type: type,\n\t    data: data,\n\t    options: options\n\t  };\n\t  this.emit('packetCreate', packet);\n\t  this.writeBuffer.push(packet);\n\t  if (fn) this.once('flush', fn);\n\t  this.flush();\n\t};\n\t\n\t/**\n\t * Closes the connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.readyState = 'closing';\n\t\n\t    var self = this;\n\t\n\t    if (this.writeBuffer.length) {\n\t      this.once('drain', function () {\n\t        if (this.upgrading) {\n\t          waitForUpgrade();\n\t        } else {\n\t          close();\n\t        }\n\t      });\n\t    } else if (this.upgrading) {\n\t      waitForUpgrade();\n\t    } else {\n\t      close();\n\t    }\n\t  }\n\t\n\t  function close () {\n\t    self.onClose('forced close');\n\t\n\t    self.transport.close();\n\t  }\n\t\n\t  function cleanupAndClose () {\n\t    self.removeListener('upgrade', cleanupAndClose);\n\t    self.removeListener('upgradeError', cleanupAndClose);\n\t    close();\n\t  }\n\t\n\t  function waitForUpgrade () {\n\t    // wait for upgrade to finish since we can't send packets while pausing a transport\n\t    self.once('upgrade', cleanupAndClose);\n\t    self.once('upgradeError', cleanupAndClose);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport error\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onError = function (err) {\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t  this.emit('error', err);\n\t  this.onClose('transport error', err);\n\t};\n\t\n\t/**\n\t * Called upon transport close.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onClose = function (reason, desc) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\t\n\t    var self = this;\n\t\n\t    // clear timers\n\t    clearTimeout(this.pingIntervalTimer);\n\t    clearTimeout(this.pingTimeoutTimer);\n\t\n\t    // stop event from firing again for transport\n\t    this.transport.removeAllListeners('close');\n\t\n\t    // ensure transport won't stay open\n\t    this.transport.close();\n\t\n\t    // ignore further transport communication\n\t    this.transport.removeAllListeners();\n\t\n\t    // set ready state\n\t    this.readyState = 'closed';\n\t\n\t    // clear session id\n\t    this.id = null;\n\t\n\t    // emit close event\n\t    this.emit('close', reason, desc);\n\t\n\t    // clean buffers after, so users can still\n\t    // grab the buffers on `close` event\n\t    self.writeBuffer = [];\n\t    self.prevBufferLen = 0;\n\t  }\n\t};\n\t\n\t/**\n\t * Filters upgrades, returning only those matching client transports.\n\t *\n\t * @param {Array} server upgrades\n\t * @api private\n\t *\n\t */\n\t\n\tSocket.prototype.filterUpgrades = function (upgrades) {\n\t  var filteredUpgrades = [];\n\t  for (var i = 0, j = upgrades.length; i < j; i++) {\n\t    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n\t  }\n\t  return filteredUpgrades;\n\t};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(13);\n\tvar XHR = __webpack_require__(16);\n\tvar JSONP = __webpack_require__(30);\n\tvar websocket = __webpack_require__(31);\n\t\n\t/**\n\t * Export transports.\n\t */\n\t\n\texports.polling = polling;\n\texports.websocket = websocket;\n\t\n\t/**\n\t * Polling transport polymorphic constructor.\n\t * Decides on xhr vs jsonp based on feature detection.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction polling (opts) {\n\t  var xhr;\n\t  var xd = false;\n\t  var xs = false;\n\t  var jsonp = false !== opts.jsonp;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    xd = opts.hostname !== location.hostname || port !== opts.port;\n\t    xs = opts.secure !== isSSL;\n\t  }\n\t\n\t  opts.xdomain = xd;\n\t  opts.xscheme = xs;\n\t  xhr = new XMLHttpRequest(opts);\n\t\n\t  if ('open' in xhr && !opts.forceJSONP) {\n\t    return new XHR(opts);\n\t  } else {\n\t    if (!jsonp) throw new Error('JSONP disabled');\n\t    return new JSONP(opts);\n\t  }\n\t}\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// browser shim for xmlhttprequest module\n\t\n\tvar hasCORS = __webpack_require__(14);\n\tvar globalThis = __webpack_require__(15);\n\t\n\tmodule.exports = function (opts) {\n\t  var xdomain = opts.xdomain;\n\t\n\t  // scheme must be same when usign XDomainRequest\n\t  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t  var xscheme = opts.xscheme;\n\t\n\t  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n\t  // https://github.com/Automattic/engine.io-client/pull/217\n\t  var enablesXDR = opts.enablesXDR;\n\t\n\t  // XMLHttpRequest can be disabled on IE\n\t  try {\n\t    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n\t      return new XMLHttpRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  // Use XDomainRequest for IE8 if enablesXDR is true\n\t  // because loading bar keeps flashing when using jsonp-polling\n\t  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n\t  try {\n\t    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n\t      return new XDomainRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  if (!xdomain) {\n\t    try {\n\t      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n\t    } catch (e) { }\n\t  }\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t *\n\t * Logic borrowed from Modernizr:\n\t *\n\t *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n\t */\n\t\n\ttry {\n\t  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n\t    'withCredentials' in new XMLHttpRequest();\n\t} catch (err) {\n\t  // if XMLHttp support is disabled in IE then it will throw\n\t  // when trying to create\n\t  module.exports = false;\n\t}\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = (function () {\n\t  if (typeof self !== 'undefined') {\n\t    return self;\n\t  } else if (typeof window !== 'undefined') {\n\t    return window;\n\t  } else {\n\t    return Function('return this')(); // eslint-disable-line no-new-func\n\t  }\n\t})();\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global attachEvent */\n\t\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(13);\n\tvar Polling = __webpack_require__(17);\n\tvar Emitter = __webpack_require__(5);\n\tvar inherit = __webpack_require__(28);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling-xhr');\n\tvar globalThis = __webpack_require__(15);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = XHR;\n\tmodule.exports.Request = Request;\n\t\n\t/**\n\t * Empty function\n\t */\n\t\n\tfunction empty () {}\n\t\n\t/**\n\t * XHR Polling constructor.\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction XHR (opts) {\n\t  Polling.call(this, opts);\n\t  this.requestTimeout = opts.requestTimeout;\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n\t      port !== opts.port;\n\t    this.xs = opts.secure !== isSSL;\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(XHR, Polling);\n\t\n\t/**\n\t * XHR supports binary\n\t */\n\t\n\tXHR.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Creates a request.\n\t *\n\t * @param {String} method\n\t * @api private\n\t */\n\t\n\tXHR.prototype.request = function (opts) {\n\t  opts = opts || {};\n\t  opts.uri = this.uri();\n\t  opts.xd = this.xd;\n\t  opts.xs = this.xs;\n\t  opts.agent = this.agent || false;\n\t  opts.supportsBinary = this.supportsBinary;\n\t  opts.enablesXDR = this.enablesXDR;\n\t  opts.withCredentials = this.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  opts.requestTimeout = this.requestTimeout;\n\t\n\t  // other options for Node.js client\n\t  opts.extraHeaders = this.extraHeaders;\n\t\n\t  return new Request(opts);\n\t};\n\t\n\t/**\n\t * Sends data.\n\t *\n\t * @param {String} data to send.\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doWrite = function (data, fn) {\n\t  var isBinary = typeof data !== 'string' && data !== undefined;\n\t  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n\t  var self = this;\n\t  req.on('success', fn);\n\t  req.on('error', function (err) {\n\t    self.onError('xhr post error', err);\n\t  });\n\t  this.sendXhr = req;\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doPoll = function () {\n\t\n\t  var req = this.request();\n\t  var self = this;\n\t  req.on('data', function (data) {\n\t    self.onData(data);\n\t  });\n\t  req.on('error', function (err) {\n\t    self.onError('xhr poll error', err);\n\t  });\n\t  this.pollXhr = req;\n\t};\n\t\n\t/**\n\t * Request constructor\n\t *\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Request (opts) {\n\t  this.method = opts.method || 'GET';\n\t  this.uri = opts.uri;\n\t  this.xd = !!opts.xd;\n\t  this.xs = !!opts.xs;\n\t  this.async = false !== opts.async;\n\t  this.data = undefined !== opts.data ? opts.data : null;\n\t  this.agent = opts.agent;\n\t  this.isBinary = opts.isBinary;\n\t  this.supportsBinary = opts.supportsBinary;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t  this.requestTimeout = opts.requestTimeout;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  this.create();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Request.prototype);\n\t\n\t/**\n\t * Creates the XHR object and sends the request.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.create = function () {\n\t  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t\n\t  var xhr = this.xhr = new XMLHttpRequest(opts);\n\t  var self = this;\n\t\n\t  try {\n\t\n\t    xhr.open(this.method, this.uri, this.async);\n\t    try {\n\t      if (this.extraHeaders) {\n\t        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n\t        for (var i in this.extraHeaders) {\n\t          if (this.extraHeaders.hasOwnProperty(i)) {\n\t            xhr.setRequestHeader(i, this.extraHeaders[i]);\n\t          }\n\t        }\n\t      }\n\t    } catch (e) {}\n\t\n\t    if ('POST' === this.method) {\n\t      try {\n\t        if (this.isBinary) {\n\t          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n\t        } else {\n\t          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n\t        }\n\t      } catch (e) {}\n\t    }\n\t\n\t    try {\n\t      xhr.setRequestHeader('Accept', '*/*');\n\t    } catch (e) {}\n\t\n\t    // ie6 check\n\t    if ('withCredentials' in xhr) {\n\t      xhr.withCredentials = this.withCredentials;\n\t    }\n\t\n\t    if (this.requestTimeout) {\n\t      xhr.timeout = this.requestTimeout;\n\t    }\n\t\n\t    if (this.hasXDR()) {\n\t      xhr.onload = function () {\n\t        self.onLoad();\n\t      };\n\t      xhr.onerror = function () {\n\t        self.onError(xhr.responseText);\n\t      };\n\t    } else {\n\t      xhr.onreadystatechange = function () {\n\t        if (xhr.readyState === 2) {\n\t          try {\n\t            var contentType = xhr.getResponseHeader('Content-Type');\n\t            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t              xhr.responseType = 'arraybuffer';\n\t            }\n\t          } catch (e) {}\n\t        }\n\t        if (4 !== xhr.readyState) return;\n\t        if (200 === xhr.status || 1223 === xhr.status) {\n\t          self.onLoad();\n\t        } else {\n\t          // make sure the `error` event handler that's user-set\n\t          // does not throw in the same tick and gets caught here\n\t          setTimeout(function () {\n\t            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n\t          }, 0);\n\t        }\n\t      };\n\t    }\n\t\n\t\n\t    xhr.send(this.data);\n\t  } catch (e) {\n\t    // Need to defer since .create() is called directly fhrom the constructor\n\t    // and thus the 'error' event can only be only bound *after* this exception\n\t    // occurs.  Therefore, also, we cannot throw here at all.\n\t    setTimeout(function () {\n\t      self.onError(e);\n\t    }, 0);\n\t    return;\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    this.index = Request.requestsCount++;\n\t    Request.requests[this.index] = this;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful response.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onSuccess = function () {\n\t  this.emit('success');\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Called if we have data.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onData = function (data) {\n\t  this.emit('data', data);\n\t  this.onSuccess();\n\t};\n\t\n\t/**\n\t * Called upon error.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onError = function (err) {\n\t  this.emit('error', err);\n\t  this.cleanup(true);\n\t};\n\t\n\t/**\n\t * Cleans up house.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.cleanup = function (fromError) {\n\t  if ('undefined' === typeof this.xhr || null === this.xhr) {\n\t    return;\n\t  }\n\t  // xmlhttprequest\n\t  if (this.hasXDR()) {\n\t    this.xhr.onload = this.xhr.onerror = empty;\n\t  } else {\n\t    this.xhr.onreadystatechange = empty;\n\t  }\n\t\n\t  if (fromError) {\n\t    try {\n\t      this.xhr.abort();\n\t    } catch (e) {}\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    delete Request.requests[this.index];\n\t  }\n\t\n\t  this.xhr = null;\n\t};\n\t\n\t/**\n\t * Called upon load.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onLoad = function () {\n\t  var data;\n\t  try {\n\t    var contentType;\n\t    try {\n\t      contentType = this.xhr.getResponseHeader('Content-Type');\n\t    } catch (e) {}\n\t    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t      data = this.xhr.response || this.xhr.responseText;\n\t    } else {\n\t      data = this.xhr.responseText;\n\t    }\n\t  } catch (e) {\n\t    this.onError(e);\n\t  }\n\t  if (null != data) {\n\t    this.onData(data);\n\t  }\n\t};\n\t\n\t/**\n\t * Check if it has XDomainRequest.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.hasXDR = function () {\n\t  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n\t};\n\t\n\t/**\n\t * Aborts the request.\n\t *\n\t * @api public\n\t */\n\t\n\tRequest.prototype.abort = function () {\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Aborts pending requests when unloading the window. This is needed to prevent\n\t * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n\t * emitted.\n\t */\n\t\n\tRequest.requestsCount = 0;\n\tRequest.requests = {};\n\t\n\tif (typeof document !== 'undefined') {\n\t  if (typeof attachEvent === 'function') {\n\t    attachEvent('onunload', unloadHandler);\n\t  } else if (typeof addEventListener === 'function') {\n\t    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n\t    addEventListener(terminationEvent, unloadHandler, false);\n\t  }\n\t}\n\t\n\tfunction unloadHandler () {\n\t  for (var i in Request.requests) {\n\t    if (Request.requests.hasOwnProperty(i)) {\n\t      Request.requests[i].abort();\n\t    }\n\t  }\n\t}\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(18);\n\tvar parseqs = __webpack_require__(27);\n\tvar parser = __webpack_require__(19);\n\tvar inherit = __webpack_require__(28);\n\tvar yeast = __webpack_require__(29);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Polling;\n\t\n\t/**\n\t * Is XHR2 supported?\n\t */\n\t\n\tvar hasXHR2 = (function () {\n\t  var XMLHttpRequest = __webpack_require__(13);\n\t  var xhr = new XMLHttpRequest({ xdomain: false });\n\t  return null != xhr.responseType;\n\t})();\n\t\n\t/**\n\t * Polling interface.\n\t *\n\t * @param {Object} opts\n\t * @api private\n\t */\n\t\n\tfunction Polling (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (!hasXHR2 || forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(Polling, Transport);\n\t\n\t/**\n\t * Transport name.\n\t */\n\t\n\tPolling.prototype.name = 'polling';\n\t\n\t/**\n\t * Opens the socket (triggers polling). We write a PING message to determine\n\t * when the transport is open.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doOpen = function () {\n\t  this.poll();\n\t};\n\t\n\t/**\n\t * Pauses polling.\n\t *\n\t * @param {Function} callback upon buffers are flushed and transport is paused\n\t * @api private\n\t */\n\t\n\tPolling.prototype.pause = function (onPause) {\n\t  var self = this;\n\t\n\t  this.readyState = 'pausing';\n\t\n\t  function pause () {\n\t\n\t    self.readyState = 'paused';\n\t    onPause();\n\t  }\n\t\n\t  if (this.polling || !this.writable) {\n\t    var total = 0;\n\t\n\t    if (this.polling) {\n\t\n\t      total++;\n\t      this.once('pollComplete', function () {\n\t\n\t        --total || pause();\n\t      });\n\t    }\n\t\n\t    if (!this.writable) {\n\t\n\t      total++;\n\t      this.once('drain', function () {\n\t\n\t        --total || pause();\n\t      });\n\t    }\n\t  } else {\n\t    pause();\n\t  }\n\t};\n\t\n\t/**\n\t * Starts polling cycle.\n\t *\n\t * @api public\n\t */\n\t\n\tPolling.prototype.poll = function () {\n\t\n\t  this.polling = true;\n\t  this.doPoll();\n\t  this.emit('poll');\n\t};\n\t\n\t/**\n\t * Overloads onData to detect payloads.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.onData = function (data) {\n\t  var self = this;\n\t\n\t  var callback = function (packet, index, total) {\n\t    // if its the first message we consider the transport open\n\t    if ('opening' === self.readyState && packet.type === 'open') {\n\t      self.onOpen();\n\t    }\n\t\n\t    // if its a close packet, we close the ongoing requests\n\t    if ('close' === packet.type) {\n\t      self.onClose();\n\t      return false;\n\t    }\n\t\n\t    // otherwise bypass onData and handle the message\n\t    self.onPacket(packet);\n\t  };\n\t\n\t  // decode payload\n\t  parser.decodePayload(data, this.socket.binaryType, callback);\n\t\n\t  // if an event did not trigger closing\n\t  if ('closed' !== this.readyState) {\n\t    // if we got data we're not polling\n\t    this.polling = false;\n\t    this.emit('pollComplete');\n\t\n\t    if ('open' === this.readyState) {\n\t      this.poll();\n\t    } else {\n\t\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * For polling, send a close packet.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doClose = function () {\n\t  var self = this;\n\t\n\t  function close () {\n\t\n\t    self.write([{ type: 'close' }]);\n\t  }\n\t\n\t  if ('open' === this.readyState) {\n\t\n\t    close();\n\t  } else {\n\t    // in case we're trying to close while\n\t    // handshaking is in progress (GH-164)\n\t\n\t    this.once('open', close);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes a packets payload.\n\t *\n\t * @param {Array} data packets\n\t * @param {Function} drain callback\n\t * @api private\n\t */\n\t\n\tPolling.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t  var callbackfn = function () {\n\t    self.writable = true;\n\t    self.emit('drain');\n\t  };\n\t\n\t  parser.encodePayload(packets, this.supportsBinary, function (data) {\n\t    self.doWrite(data, callbackfn);\n\t  });\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'https' : 'http';\n\t  var port = '';\n\t\n\t  // cache busting is forced\n\t  if (false !== this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  if (!this.supportsBinary && !query.sid) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n\t     ('http' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(19);\n\tvar Emitter = __webpack_require__(5);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Transport;\n\t\n\t/**\n\t * Transport abstract constructor.\n\t *\n\t * @param {Object} options.\n\t * @api private\n\t */\n\t\n\tfunction Transport (opts) {\n\t  this.path = opts.path;\n\t  this.hostname = opts.hostname;\n\t  this.port = opts.port;\n\t  this.secure = opts.secure;\n\t  this.query = opts.query;\n\t  this.timestampParam = opts.timestampParam;\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.readyState = '';\n\t  this.agent = opts.agent || false;\n\t  this.socket = opts.socket;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t  this.forceNode = opts.forceNode;\n\t\n\t  // results of ReactNative environment detection\n\t  this.isReactNative = opts.isReactNative;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t  this.localAddress = opts.localAddress;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Transport.prototype);\n\t\n\t/**\n\t * Emits an error.\n\t *\n\t * @param {String} str\n\t * @return {Transport} for chaining\n\t * @api public\n\t */\n\t\n\tTransport.prototype.onError = function (msg, desc) {\n\t  var err = new Error(msg);\n\t  err.type = 'TransportError';\n\t  err.description = desc;\n\t  this.emit('error', err);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Opens the transport.\n\t *\n\t * @api public\n\t */\n\t\n\tTransport.prototype.open = function () {\n\t  if ('closed' === this.readyState || '' === this.readyState) {\n\t    this.readyState = 'opening';\n\t    this.doOpen();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Closes the transport.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.doClose();\n\t    this.onClose();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends multiple packets.\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\tTransport.prototype.send = function (packets) {\n\t  if ('open' === this.readyState) {\n\t    this.write(packets);\n\t  } else {\n\t    throw new Error('Transport not open');\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon open\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onOpen = function () {\n\t  this.readyState = 'open';\n\t  this.writable = true;\n\t  this.emit('open');\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @param {String} data\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onData = function (data) {\n\t  var packet = parser.decodePacket(data, this.socket.binaryType);\n\t  this.onPacket(packet);\n\t};\n\t\n\t/**\n\t * Called with a decoded packet.\n\t */\n\t\n\tTransport.prototype.onPacket = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon close.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onClose = function () {\n\t  this.readyState = 'closed';\n\t  this.emit('close');\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar keys = __webpack_require__(20);\n\tvar hasBinary = __webpack_require__(21);\n\tvar sliceBuffer = __webpack_require__(22);\n\tvar after = __webpack_require__(23);\n\tvar utf8 = __webpack_require__(24);\n\t\n\tvar base64encoder;\n\tif (typeof ArrayBuffer !== 'undefined') {\n\t  base64encoder = __webpack_require__(25);\n\t}\n\t\n\t/**\n\t * Check if we are running an android browser. That requires us to use\n\t * ArrayBuffer with polling transports...\n\t *\n\t * http://ghinda.net/jpeg-blob-ajax-android/\n\t */\n\t\n\tvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Check if we are running in PhantomJS.\n\t * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n\t * https://github.com/ariya/phantomjs/issues/11395\n\t * @type boolean\n\t */\n\tvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\t\n\t/**\n\t * When true, avoids using Blobs to encode payloads.\n\t * @type boolean\n\t */\n\tvar dontSendBlobs = isAndroid || isPhantomJS;\n\t\n\t/**\n\t * Current protocol version.\n\t */\n\t\n\texports.protocol = 3;\n\t\n\t/**\n\t * Packet types.\n\t */\n\t\n\tvar packets = exports.packets = {\n\t    open:     0    // non-ws\n\t  , close:    1    // non-ws\n\t  , ping:     2\n\t  , pong:     3\n\t  , message:  4\n\t  , upgrade:  5\n\t  , noop:     6\n\t};\n\t\n\tvar packetslist = keys(packets);\n\t\n\t/**\n\t * Premade error packet.\n\t */\n\t\n\tvar err = { type: 'error', data: 'parser error' };\n\t\n\t/**\n\t * Create a blob api even for blob builder when vendor prefixes exist\n\t */\n\t\n\tvar Blob = __webpack_require__(26);\n\t\n\t/**\n\t * Encodes a packet.\n\t *\n\t *     <packet type id> [ <data> ]\n\t *\n\t * Example:\n\t *\n\t *     5hello world\n\t *     3\n\t *     4\n\t *\n\t * Binary is encoded in an identical principle\n\t *\n\t * @api private\n\t */\n\t\n\texports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = false;\n\t  }\n\t\n\t  if (typeof utf8encode === 'function') {\n\t    callback = utf8encode;\n\t    utf8encode = null;\n\t  }\n\t\n\t  var data = (packet.data === undefined)\n\t    ? undefined\n\t    : packet.data.buffer || packet.data;\n\t\n\t  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n\t    return encodeArrayBuffer(packet, supportsBinary, callback);\n\t  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n\t    return encodeBlob(packet, supportsBinary, callback);\n\t  }\n\t\n\t  // might be an object with { base64: true, data: dataAsBase64String }\n\t  if (data && data.base64) {\n\t    return encodeBase64Object(packet, callback);\n\t  }\n\t\n\t  // Sending data as a utf-8 string\n\t  var encoded = packets[packet.type];\n\t\n\t  // data fragment is optional\n\t  if (undefined !== packet.data) {\n\t    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n\t  }\n\t\n\t  return callback('' + encoded);\n\t\n\t};\n\t\n\tfunction encodeBase64Object(packet, callback) {\n\t  // packet data is an object { base64: true, data: dataAsBase64String }\n\t  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n\t  return callback(message);\n\t}\n\t\n\t/**\n\t * Encode packet helpers for binary types\n\t */\n\t\n\tfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var data = packet.data;\n\t  var contentArray = new Uint8Array(data);\n\t  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\t\n\t  resultBuffer[0] = packets[packet.type];\n\t  for (var i = 0; i < contentArray.length; i++) {\n\t    resultBuffer[i+1] = contentArray[i];\n\t  }\n\t\n\t  return callback(resultBuffer.buffer);\n\t}\n\t\n\tfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var fr = new FileReader();\n\t  fr.onload = function() {\n\t    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n\t  };\n\t  return fr.readAsArrayBuffer(packet.data);\n\t}\n\t\n\tfunction encodeBlob(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  if (dontSendBlobs) {\n\t    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n\t  }\n\t\n\t  var length = new Uint8Array(1);\n\t  length[0] = packets[packet.type];\n\t  var blob = new Blob([length.buffer, packet.data]);\n\t\n\t  return callback(blob);\n\t}\n\t\n\t/**\n\t * Encodes a packet with binary data in a base64 string\n\t *\n\t * @param {Object} packet, has `type` and `data`\n\t * @return {String} base64 encoded message\n\t */\n\t\n\texports.encodeBase64Packet = function(packet, callback) {\n\t  var message = 'b' + exports.packets[packet.type];\n\t  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n\t    var fr = new FileReader();\n\t    fr.onload = function() {\n\t      var b64 = fr.result.split(',')[1];\n\t      callback(message + b64);\n\t    };\n\t    return fr.readAsDataURL(packet.data);\n\t  }\n\t\n\t  var b64data;\n\t  try {\n\t    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n\t  } catch (e) {\n\t    // iPhone Safari doesn't let you apply with typed arrays\n\t    var typed = new Uint8Array(packet.data);\n\t    var basic = new Array(typed.length);\n\t    for (var i = 0; i < typed.length; i++) {\n\t      basic[i] = typed[i];\n\t    }\n\t    b64data = String.fromCharCode.apply(null, basic);\n\t  }\n\t  message += btoa(b64data);\n\t  return callback(message);\n\t};\n\t\n\t/**\n\t * Decodes a packet. Changes format to Blob if requested.\n\t *\n\t * @return {Object} with `type` and `data` (if any)\n\t * @api private\n\t */\n\t\n\texports.decodePacket = function (data, binaryType, utf8decode) {\n\t  if (data === undefined) {\n\t    return err;\n\t  }\n\t  // String data\n\t  if (typeof data === 'string') {\n\t    if (data.charAt(0) === 'b') {\n\t      return exports.decodeBase64Packet(data.substr(1), binaryType);\n\t    }\n\t\n\t    if (utf8decode) {\n\t      data = tryDecode(data);\n\t      if (data === false) {\n\t        return err;\n\t      }\n\t    }\n\t    var type = data.charAt(0);\n\t\n\t    if (Number(type) != type || !packetslist[type]) {\n\t      return err;\n\t    }\n\t\n\t    if (data.length > 1) {\n\t      return { type: packetslist[type], data: data.substring(1) };\n\t    } else {\n\t      return { type: packetslist[type] };\n\t    }\n\t  }\n\t\n\t  var asArray = new Uint8Array(data);\n\t  var type = asArray[0];\n\t  var rest = sliceBuffer(data, 1);\n\t  if (Blob && binaryType === 'blob') {\n\t    rest = new Blob([rest]);\n\t  }\n\t  return { type: packetslist[type], data: rest };\n\t};\n\t\n\tfunction tryDecode(data) {\n\t  try {\n\t    data = utf8.decode(data, { strict: false });\n\t  } catch (e) {\n\t    return false;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Decodes a packet encoded in a base64 string\n\t *\n\t * @param {String} base64 encoded message\n\t * @return {Object} with `type` and `data` (if any)\n\t */\n\t\n\texports.decodeBase64Packet = function(msg, binaryType) {\n\t  var type = packetslist[msg.charAt(0)];\n\t  if (!base64encoder) {\n\t    return { type: type, data: { base64: true, data: msg.substr(1) } };\n\t  }\n\t\n\t  var data = base64encoder.decode(msg.substr(1));\n\t\n\t  if (binaryType === 'blob' && Blob) {\n\t    data = new Blob([data]);\n\t  }\n\t\n\t  return { type: type, data: data };\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload).\n\t *\n\t *     <length>:data\n\t *\n\t * Example:\n\t *\n\t *     11:hello world2:hi\n\t *\n\t * If any contents are binary, they will be encoded as base64 strings. Base64\n\t * encoded strings are marked with a b before the length specifier\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\texports.encodePayload = function (packets, supportsBinary, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = null;\n\t  }\n\t\n\t  var isBinary = hasBinary(packets);\n\t\n\t  if (supportsBinary && isBinary) {\n\t    if (Blob && !dontSendBlobs) {\n\t      return exports.encodePayloadAsBlob(packets, callback);\n\t    }\n\t\n\t    return exports.encodePayloadAsArrayBuffer(packets, callback);\n\t  }\n\t\n\t  if (!packets.length) {\n\t    return callback('0:');\n\t  }\n\t\n\t  function setLengthHeader(message) {\n\t    return message.length + ':' + message;\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n\t      doneCallback(null, setLengthHeader(message));\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(results.join(''));\n\t  });\n\t};\n\t\n\t/**\n\t * Async array map using after\n\t */\n\t\n\tfunction map(ary, each, done) {\n\t  var result = new Array(ary.length);\n\t  var next = after(ary.length, done);\n\t\n\t  var eachWithIndex = function(i, el, cb) {\n\t    each(el, function(error, msg) {\n\t      result[i] = msg;\n\t      cb(error, result);\n\t    });\n\t  };\n\t\n\t  for (var i = 0; i < ary.length; i++) {\n\t    eachWithIndex(i, ary[i], next);\n\t  }\n\t}\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Possible binary contents are\n\t * decoded from their base64 representation\n\t *\n\t * @param {String} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayload = function (data, binaryType, callback) {\n\t  if (typeof data !== 'string') {\n\t    return exports.decodePayloadAsBinary(data, binaryType, callback);\n\t  }\n\t\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var packet;\n\t  if (data === '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t  var length = '', n, msg;\n\t\n\t  for (var i = 0, l = data.length; i < l; i++) {\n\t    var chr = data.charAt(i);\n\t\n\t    if (chr !== ':') {\n\t      length += chr;\n\t      continue;\n\t    }\n\t\n\t    if (length === '' || (length != (n = Number(length)))) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    msg = data.substr(i + 1, n);\n\t\n\t    if (length != msg.length) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    if (msg.length) {\n\t      packet = exports.decodePacket(msg, binaryType, false);\n\t\n\t      if (err.type === packet.type && err.data === packet.data) {\n\t        // parser error in individual packet - ignoring payload\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      var ret = callback(packet, i + n, l);\n\t      if (false === ret) return;\n\t    }\n\t\n\t    // advance cursor\n\t    i += n;\n\t    length = '';\n\t  }\n\t\n\t  if (length !== '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload) as binary.\n\t *\n\t * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n\t * 255><data>\n\t *\n\t * Example:\n\t * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n\t *\n\t * @param {Array} packets\n\t * @return {ArrayBuffer} encoded payload\n\t * @api private\n\t */\n\t\n\texports.encodePayloadAsArrayBuffer = function(packets, callback) {\n\t  if (!packets.length) {\n\t    return callback(new ArrayBuffer(0));\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(data) {\n\t      return doneCallback(null, data);\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, encodedPackets) {\n\t    var totalLength = encodedPackets.reduce(function(acc, p) {\n\t      var len;\n\t      if (typeof p === 'string'){\n\t        len = p.length;\n\t      } else {\n\t        len = p.byteLength;\n\t      }\n\t      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n\t    }, 0);\n\t\n\t    var resultArray = new Uint8Array(totalLength);\n\t\n\t    var bufferIndex = 0;\n\t    encodedPackets.forEach(function(p) {\n\t      var isString = typeof p === 'string';\n\t      var ab = p;\n\t      if (isString) {\n\t        var view = new Uint8Array(p.length);\n\t        for (var i = 0; i < p.length; i++) {\n\t          view[i] = p.charCodeAt(i);\n\t        }\n\t        ab = view.buffer;\n\t      }\n\t\n\t      if (isString) { // not true binary\n\t        resultArray[bufferIndex++] = 0;\n\t      } else { // true binary\n\t        resultArray[bufferIndex++] = 1;\n\t      }\n\t\n\t      var lenStr = ab.byteLength.toString();\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n\t      }\n\t      resultArray[bufferIndex++] = 255;\n\t\n\t      var view = new Uint8Array(ab);\n\t      for (var i = 0; i < view.length; i++) {\n\t        resultArray[bufferIndex++] = view[i];\n\t      }\n\t    });\n\t\n\t    return callback(resultArray.buffer);\n\t  });\n\t};\n\t\n\t/**\n\t * Encode as Blob\n\t */\n\t\n\texports.encodePayloadAsBlob = function(packets, callback) {\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(encoded) {\n\t      var binaryIdentifier = new Uint8Array(1);\n\t      binaryIdentifier[0] = 1;\n\t      if (typeof encoded === 'string') {\n\t        var view = new Uint8Array(encoded.length);\n\t        for (var i = 0; i < encoded.length; i++) {\n\t          view[i] = encoded.charCodeAt(i);\n\t        }\n\t        encoded = view.buffer;\n\t        binaryIdentifier[0] = 0;\n\t      }\n\t\n\t      var len = (encoded instanceof ArrayBuffer)\n\t        ? encoded.byteLength\n\t        : encoded.size;\n\t\n\t      var lenStr = len.toString();\n\t      var lengthAry = new Uint8Array(lenStr.length + 1);\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        lengthAry[i] = parseInt(lenStr[i]);\n\t      }\n\t      lengthAry[lenStr.length] = 255;\n\t\n\t      if (Blob) {\n\t        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n\t        doneCallback(null, blob);\n\t      }\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(new Blob(results));\n\t  });\n\t};\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Strings are decoded by\n\t * interpreting each byte as a key code for entries marked to start with 0. See\n\t * description of encodePayloadAsBinary\n\t *\n\t * @param {ArrayBuffer} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayloadAsBinary = function (data, binaryType, callback) {\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var bufferTail = data;\n\t  var buffers = [];\n\t\n\t  while (bufferTail.byteLength > 0) {\n\t    var tailArray = new Uint8Array(bufferTail);\n\t    var isString = tailArray[0] === 0;\n\t    var msgLength = '';\n\t\n\t    for (var i = 1; ; i++) {\n\t      if (tailArray[i] === 255) break;\n\t\n\t      // 310 = char length of Number.MAX_VALUE\n\t      if (msgLength.length > 310) {\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      msgLength += tailArray[i];\n\t    }\n\t\n\t    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n\t    msgLength = parseInt(msgLength);\n\t\n\t    var msg = sliceBuffer(bufferTail, 0, msgLength);\n\t    if (isString) {\n\t      try {\n\t        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n\t      } catch (e) {\n\t        // iPhone Safari doesn't let you apply to typed arrays\n\t        var typed = new Uint8Array(msg);\n\t        msg = '';\n\t        for (var i = 0; i < typed.length; i++) {\n\t          msg += String.fromCharCode(typed[i]);\n\t        }\n\t      }\n\t    }\n\t\n\t    buffers.push(msg);\n\t    bufferTail = sliceBuffer(bufferTail, msgLength);\n\t  }\n\t\n\t  var total = buffers.length;\n\t  buffers.forEach(function(buffer, i) {\n\t    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n\t  });\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Gets the keys for an object.\n\t *\n\t * @return {Array} keys\n\t * @api private\n\t */\n\t\n\tmodule.exports = Object.keys || function keys (obj){\n\t  var arr = [];\n\t  var has = Object.prototype.hasOwnProperty;\n\t\n\t  for (var i in obj) {\n\t    if (has.call(obj, i)) {\n\t      arr.push(i);\n\t    }\n\t  }\n\t  return arr;\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global Blob File */\n\t\n\t/*\n\t * Module requirements.\n\t */\n\t\n\tvar isArray = __webpack_require__(7);\n\t\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' ||\n\t                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\n\tvar withNativeFile = typeof File === 'function' ||\n\t                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = hasBinary;\n\t\n\t/**\n\t * Checks for binary data.\n\t *\n\t * Supports Buffer, ArrayBuffer, Blob and File.\n\t *\n\t * @param {Object} anything\n\t * @api public\n\t */\n\t\n\tfunction hasBinary (obj) {\n\t  if (!obj || typeof obj !== 'object') {\n\t    return false;\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      if (hasBinary(obj[i])) {\n\t        return true;\n\t      }\n\t    }\n\t    return false;\n\t  }\n\t\n\t  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n\t    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n\t    (withNativeBlob && obj instanceof Blob) ||\n\t    (withNativeFile && obj instanceof File)\n\t  ) {\n\t    return true;\n\t  }\n\t\n\t  // see: https://github.com/Automattic/has-binary/pull/4\n\t  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n\t    return hasBinary(obj.toJSON(), true);\n\t  }\n\t\n\t  for (var key in obj) {\n\t    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * An abstraction for slicing an arraybuffer even when\n\t * ArrayBuffer.prototype.slice is not supported\n\t *\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(arraybuffer, start, end) {\n\t  var bytes = arraybuffer.byteLength;\n\t  start = start || 0;\n\t  end = end || bytes;\n\t\n\t  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\t\n\t  if (start < 0) { start += bytes; }\n\t  if (end < 0) { end += bytes; }\n\t  if (end > bytes) { end = bytes; }\n\t\n\t  if (start >= bytes || start >= end || bytes === 0) {\n\t    return new ArrayBuffer(0);\n\t  }\n\t\n\t  var abv = new Uint8Array(arraybuffer);\n\t  var result = new Uint8Array(end - start);\n\t  for (var i = start, ii = 0; i < end; i++, ii++) {\n\t    result[ii] = abv[i];\n\t  }\n\t  return result.buffer;\n\t};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = after\n\t\n\tfunction after(count, callback, err_cb) {\n\t    var bail = false\n\t    err_cb = err_cb || noop\n\t    proxy.count = count\n\t\n\t    return (count === 0) ? callback() : proxy\n\t\n\t    function proxy(err, result) {\n\t        if (proxy.count <= 0) {\n\t            throw new Error('after called too many times')\n\t        }\n\t        --proxy.count\n\t\n\t        // after first error, rest are passed to err_cb\n\t        if (err) {\n\t            bail = true\n\t            callback(err)\n\t            // future error callbacks will go to error handler\n\t            callback = err_cb\n\t        } else if (proxy.count === 0 && !bail) {\n\t            callback(null, result)\n\t        }\n\t    }\n\t}\n\t\n\tfunction noop() {}\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\n\t/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\t\n\tvar stringFromCharCode = String.fromCharCode;\n\t\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\t\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\t\n\tfunction checkScalarValue(codePoint, strict) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tif (strict) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t\t' is not a scalar value'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\t\n\tfunction encodeCodePoint(codePoint, strict) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t}\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\t\n\tfunction utf8encode(string, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t\t}\n\t\treturn byteString;\n\t}\n\t\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\t\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\t\n\tfunction decodeSymbol(strict) {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\t\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\t\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\t\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\t\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\t\n\tmodule.exports = {\n\t\tversion: '2.1.2',\n\t\tencode: utf8encode,\n\t\tdecode: utf8decode\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n\t/*\n\t * base64-arraybuffer\n\t * https://github.com/niklasvh/base64-arraybuffer\n\t *\n\t * Copyright (c) 2012 Niklas von Hertzen\n\t * Licensed under the MIT license.\n\t */\n\t(function(chars){\n\t  \"use strict\";\n\t\n\t  exports.encode = function(arraybuffer) {\n\t    var bytes = new Uint8Array(arraybuffer),\n\t    i, len = bytes.length, base64 = \"\";\n\t\n\t    for (i = 0; i < len; i+=3) {\n\t      base64 += chars[bytes[i] >> 2];\n\t      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n\t      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n\t      base64 += chars[bytes[i + 2] & 63];\n\t    }\n\t\n\t    if ((len % 3) === 2) {\n\t      base64 = base64.substring(0, base64.length - 1) + \"=\";\n\t    } else if (len % 3 === 1) {\n\t      base64 = base64.substring(0, base64.length - 2) + \"==\";\n\t    }\n\t\n\t    return base64;\n\t  };\n\t\n\t  exports.decode =  function(base64) {\n\t    var bufferLength = base64.length * 0.75,\n\t    len = base64.length, i, p = 0,\n\t    encoded1, encoded2, encoded3, encoded4;\n\t\n\t    if (base64[base64.length - 1] === \"=\") {\n\t      bufferLength--;\n\t      if (base64[base64.length - 2] === \"=\") {\n\t        bufferLength--;\n\t      }\n\t    }\n\t\n\t    var arraybuffer = new ArrayBuffer(bufferLength),\n\t    bytes = new Uint8Array(arraybuffer);\n\t\n\t    for (i = 0; i < len; i+=4) {\n\t      encoded1 = chars.indexOf(base64[i]);\n\t      encoded2 = chars.indexOf(base64[i+1]);\n\t      encoded3 = chars.indexOf(base64[i+2]);\n\t      encoded4 = chars.indexOf(base64[i+3]);\n\t\n\t      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n\t      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n\t      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n\t    }\n\t\n\t    return arraybuffer;\n\t  };\n\t})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Create a blob builder even when vendor prefixes exist\r\n\t */\r\n\t\r\n\tvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n\t  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n\t  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n\t  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n\t  false;\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor is supported\r\n\t */\r\n\t\r\n\tvar blobSupported = (function() {\r\n\t  try {\r\n\t    var a = new Blob(['hi']);\r\n\t    return a.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor supports ArrayBufferViews\r\n\t * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n\t */\r\n\t\r\n\tvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n\t  try {\r\n\t    var b = new Blob([new Uint8Array([1,2])]);\r\n\t    return b.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if BlobBuilder is supported\r\n\t */\r\n\t\r\n\tvar blobBuilderSupported = BlobBuilder\r\n\t  && BlobBuilder.prototype.append\r\n\t  && BlobBuilder.prototype.getBlob;\r\n\t\r\n\t/**\r\n\t * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n\t * Used by BlobBuilder constructor and old browsers that didn't\r\n\t * support it in the Blob constructor.\r\n\t */\r\n\t\r\n\tfunction mapArrayBufferViews(ary) {\r\n\t  return ary.map(function(chunk) {\r\n\t    if (chunk.buffer instanceof ArrayBuffer) {\r\n\t      var buf = chunk.buffer;\r\n\t\r\n\t      // if this is a subarray, make a copy so we only\r\n\t      // include the subarray region from the underlying buffer\r\n\t      if (chunk.byteLength !== buf.byteLength) {\r\n\t        var copy = new Uint8Array(chunk.byteLength);\r\n\t        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n\t        buf = copy.buffer;\r\n\t      }\r\n\t\r\n\t      return buf;\r\n\t    }\r\n\t\r\n\t    return chunk;\r\n\t  });\r\n\t}\r\n\t\r\n\tfunction BlobBuilderConstructor(ary, options) {\r\n\t  options = options || {};\r\n\t\r\n\t  var bb = new BlobBuilder();\r\n\t  mapArrayBufferViews(ary).forEach(function(part) {\r\n\t    bb.append(part);\r\n\t  });\r\n\t\r\n\t  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n\t};\r\n\t\r\n\tfunction BlobConstructor(ary, options) {\r\n\t  return new Blob(mapArrayBufferViews(ary), options || {});\r\n\t};\r\n\t\r\n\tif (typeof Blob !== 'undefined') {\r\n\t  BlobBuilderConstructor.prototype = Blob.prototype;\r\n\t  BlobConstructor.prototype = Blob.prototype;\r\n\t}\r\n\t\r\n\tmodule.exports = (function() {\r\n\t  if (blobSupported) {\r\n\t    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n\t  } else if (blobBuilderSupported) {\r\n\t    return BlobBuilderConstructor;\r\n\t  } else {\r\n\t    return undefined;\r\n\t  }\r\n\t})();\r\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Compiles a querystring\n\t * Returns string representation of the object\n\t *\n\t * @param {Object}\n\t * @api private\n\t */\n\t\n\texports.encode = function (obj) {\n\t  var str = '';\n\t\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      if (str.length) str += '&';\n\t      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n\t    }\n\t  }\n\t\n\t  return str;\n\t};\n\t\n\t/**\n\t * Parses a simple querystring into an object\n\t *\n\t * @param {String} qs\n\t * @api private\n\t */\n\t\n\texports.decode = function(qs){\n\t  var qry = {};\n\t  var pairs = qs.split('&');\n\t  for (var i = 0, l = pairs.length; i < l; i++) {\n\t    var pair = pairs[i].split('=');\n\t    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n\t  }\n\t  return qry;\n\t};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = function(a, b){\n\t  var fn = function(){};\n\t  fn.prototype = b.prototype;\n\t  a.prototype = new fn;\n\t  a.prototype.constructor = a;\n\t};\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n\t  , length = 64\n\t  , map = {}\n\t  , seed = 0\n\t  , i = 0\n\t  , prev;\n\t\n\t/**\n\t * Return a string representing the specified number.\n\t *\n\t * @param {Number} num The number to convert.\n\t * @returns {String} The string representation of the number.\n\t * @api public\n\t */\n\tfunction encode(num) {\n\t  var encoded = '';\n\t\n\t  do {\n\t    encoded = alphabet[num % length] + encoded;\n\t    num = Math.floor(num / length);\n\t  } while (num > 0);\n\t\n\t  return encoded;\n\t}\n\t\n\t/**\n\t * Return the integer value specified by the given string.\n\t *\n\t * @param {String} str The string to convert.\n\t * @returns {Number} The integer value represented by the string.\n\t * @api public\n\t */\n\tfunction decode(str) {\n\t  var decoded = 0;\n\t\n\t  for (i = 0; i < str.length; i++) {\n\t    decoded = decoded * length + map[str.charAt(i)];\n\t  }\n\t\n\t  return decoded;\n\t}\n\t\n\t/**\n\t * Yeast: A tiny growing id generator.\n\t *\n\t * @returns {String} A unique id.\n\t * @api public\n\t */\n\tfunction yeast() {\n\t  var now = encode(+new Date());\n\t\n\t  if (now !== prev) return seed = 0, prev = now;\n\t  return now +'.'+ encode(seed++);\n\t}\n\t\n\t//\n\t// Map each character to its index.\n\t//\n\tfor (; i < length; i++) map[alphabet[i]] = i;\n\t\n\t//\n\t// Expose the `yeast`, `encode` and `decode` functions.\n\t//\n\tyeast.encode = encode;\n\tyeast.decode = decode;\n\tmodule.exports = yeast;\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar Polling = __webpack_require__(17);\n\tvar inherit = __webpack_require__(28);\n\tvar globalThis = __webpack_require__(15);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = JSONPPolling;\n\t\n\t/**\n\t * Cached regular expressions.\n\t */\n\t\n\tvar rNewline = /\\n/g;\n\tvar rEscapedNewline = /\\\\n/g;\n\t\n\t/**\n\t * Global JSONP callbacks.\n\t */\n\t\n\tvar callbacks;\n\t\n\t/**\n\t * Noop.\n\t */\n\t\n\tfunction empty () { }\n\t\n\t/**\n\t * JSONP Polling constructor.\n\t *\n\t * @param {Object} opts.\n\t * @api public\n\t */\n\t\n\tfunction JSONPPolling (opts) {\n\t  Polling.call(this, opts);\n\t\n\t  this.query = this.query || {};\n\t\n\t  // define global callbacks array if not present\n\t  // we do this here (lazily) to avoid unneeded global pollution\n\t  if (!callbacks) {\n\t    // we need to consider multiple engines in the same page\n\t    callbacks = globalThis.___eio = (globalThis.___eio || []);\n\t  }\n\t\n\t  // callback identifier\n\t  this.index = callbacks.length;\n\t\n\t  // add callback to jsonp global\n\t  var self = this;\n\t  callbacks.push(function (msg) {\n\t    self.onData(msg);\n\t  });\n\t\n\t  // append to query string\n\t  this.query.j = this.index;\n\t\n\t  // prevent spurious errors from being emitted when the window is unloaded\n\t  if (typeof addEventListener === 'function') {\n\t    addEventListener('beforeunload', function () {\n\t      if (self.script) self.script.onerror = empty;\n\t    }, false);\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(JSONPPolling, Polling);\n\t\n\t/*\n\t * JSONP only supports binary as base64 encoded strings\n\t */\n\t\n\tJSONPPolling.prototype.supportsBinary = false;\n\t\n\t/**\n\t * Closes the socket.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doClose = function () {\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  if (this.form) {\n\t    this.form.parentNode.removeChild(this.form);\n\t    this.form = null;\n\t    this.iframe = null;\n\t  }\n\t\n\t  Polling.prototype.doClose.call(this);\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doPoll = function () {\n\t  var self = this;\n\t  var script = document.createElement('script');\n\t\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  script.async = true;\n\t  script.src = this.uri();\n\t  script.onerror = function (e) {\n\t    self.onError('jsonp poll error', e);\n\t  };\n\t\n\t  var insertAt = document.getElementsByTagName('script')[0];\n\t  if (insertAt) {\n\t    insertAt.parentNode.insertBefore(script, insertAt);\n\t  } else {\n\t    (document.head || document.body).appendChild(script);\n\t  }\n\t  this.script = script;\n\t\n\t  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\t\n\t  if (isUAgecko) {\n\t    setTimeout(function () {\n\t      var iframe = document.createElement('iframe');\n\t      document.body.appendChild(iframe);\n\t      document.body.removeChild(iframe);\n\t    }, 100);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes with a hidden iframe.\n\t *\n\t * @param {String} data to send\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doWrite = function (data, fn) {\n\t  var self = this;\n\t\n\t  if (!this.form) {\n\t    var form = document.createElement('form');\n\t    var area = document.createElement('textarea');\n\t    var id = this.iframeId = 'eio_iframe_' + this.index;\n\t    var iframe;\n\t\n\t    form.className = 'socketio';\n\t    form.style.position = 'absolute';\n\t    form.style.top = '-1000px';\n\t    form.style.left = '-1000px';\n\t    form.target = id;\n\t    form.method = 'POST';\n\t    form.setAttribute('accept-charset', 'utf-8');\n\t    area.name = 'd';\n\t    form.appendChild(area);\n\t    document.body.appendChild(form);\n\t\n\t    this.form = form;\n\t    this.area = area;\n\t  }\n\t\n\t  this.form.action = this.uri();\n\t\n\t  function complete () {\n\t    initIframe();\n\t    fn();\n\t  }\n\t\n\t  function initIframe () {\n\t    if (self.iframe) {\n\t      try {\n\t        self.form.removeChild(self.iframe);\n\t      } catch (e) {\n\t        self.onError('jsonp polling iframe removal error', e);\n\t      }\n\t    }\n\t\n\t    try {\n\t      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n\t      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n\t      iframe = document.createElement(html);\n\t    } catch (e) {\n\t      iframe = document.createElement('iframe');\n\t      iframe.name = self.iframeId;\n\t      iframe.src = 'javascript:0';\n\t    }\n\t\n\t    iframe.id = self.iframeId;\n\t\n\t    self.form.appendChild(iframe);\n\t    self.iframe = iframe;\n\t  }\n\t\n\t  initIframe();\n\t\n\t  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n\t  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n\t  data = data.replace(rEscapedNewline, '\\\\\\n');\n\t  this.area.value = data.replace(rNewline, '\\\\n');\n\t\n\t  try {\n\t    this.form.submit();\n\t  } catch (e) {}\n\t\n\t  if (this.iframe.attachEvent) {\n\t    this.iframe.onreadystatechange = function () {\n\t      if (self.iframe.readyState === 'complete') {\n\t        complete();\n\t      }\n\t    };\n\t  } else {\n\t    this.iframe.onload = complete;\n\t  }\n\t};\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(18);\n\tvar parser = __webpack_require__(19);\n\tvar parseqs = __webpack_require__(27);\n\tvar inherit = __webpack_require__(28);\n\tvar yeast = __webpack_require__(29);\n\tvar debug = __webpack_require__(3)('engine.io-client:websocket');\n\t\n\tvar BrowserWebSocket, NodeWebSocket;\n\t\n\tif (typeof WebSocket !== 'undefined') {\n\t  BrowserWebSocket = WebSocket;\n\t} else if (typeof self !== 'undefined') {\n\t  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n\t}\n\t\n\tif (typeof window === 'undefined') {\n\t  try {\n\t    NodeWebSocket = __webpack_require__(32);\n\t  } catch (e) { }\n\t}\n\t\n\t/**\n\t * Get either the `WebSocket` or `MozWebSocket` globals\n\t * in the browser or try to resolve WebSocket-compatible\n\t * interface exposed by `ws` for Node-like environment.\n\t */\n\t\n\tvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = WS;\n\t\n\t/**\n\t * WebSocket transport constructor.\n\t *\n\t * @api {Object} connection options\n\t * @api public\n\t */\n\t\n\tfunction WS (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  this.perMessageDeflate = opts.perMessageDeflate;\n\t  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n\t  this.protocols = opts.protocols;\n\t  if (!this.usingBrowserWebSocket) {\n\t    WebSocketImpl = NodeWebSocket;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(WS, Transport);\n\t\n\t/**\n\t * Transport name.\n\t *\n\t * @api public\n\t */\n\t\n\tWS.prototype.name = 'websocket';\n\t\n\t/*\n\t * WebSockets support binary\n\t */\n\t\n\tWS.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Opens socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doOpen = function () {\n\t  if (!this.check()) {\n\t    // let probe timeout\n\t    return;\n\t  }\n\t\n\t  var uri = this.uri();\n\t  var protocols = this.protocols;\n\t\n\t  var opts = {};\n\t\n\t  if (!this.isReactNative) {\n\t    opts.agent = this.agent;\n\t    opts.perMessageDeflate = this.perMessageDeflate;\n\t\n\t    // SSL options for Node.js client\n\t    opts.pfx = this.pfx;\n\t    opts.key = this.key;\n\t    opts.passphrase = this.passphrase;\n\t    opts.cert = this.cert;\n\t    opts.ca = this.ca;\n\t    opts.ciphers = this.ciphers;\n\t    opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  }\n\t\n\t  if (this.extraHeaders) {\n\t    opts.headers = this.extraHeaders;\n\t  }\n\t  if (this.localAddress) {\n\t    opts.localAddress = this.localAddress;\n\t  }\n\t\n\t  try {\n\t    this.ws =\n\t      this.usingBrowserWebSocket && !this.isReactNative\n\t        ? protocols\n\t          ? new WebSocketImpl(uri, protocols)\n\t          : new WebSocketImpl(uri)\n\t        : new WebSocketImpl(uri, protocols, opts);\n\t  } catch (err) {\n\t    return this.emit('error', err);\n\t  }\n\t\n\t  if (this.ws.binaryType === undefined) {\n\t    this.supportsBinary = false;\n\t  }\n\t\n\t  if (this.ws.supports && this.ws.supports.binary) {\n\t    this.supportsBinary = true;\n\t    this.ws.binaryType = 'nodebuffer';\n\t  } else {\n\t    this.ws.binaryType = 'arraybuffer';\n\t  }\n\t\n\t  this.addEventListeners();\n\t};\n\t\n\t/**\n\t * Adds event listeners to the socket\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.addEventListeners = function () {\n\t  var self = this;\n\t\n\t  this.ws.onopen = function () {\n\t    self.onOpen();\n\t  };\n\t  this.ws.onclose = function () {\n\t    self.onClose();\n\t  };\n\t  this.ws.onmessage = function (ev) {\n\t    self.onData(ev.data);\n\t  };\n\t  this.ws.onerror = function (e) {\n\t    self.onError('websocket error', e);\n\t  };\n\t};\n\t\n\t/**\n\t * Writes data to socket.\n\t *\n\t * @param {Array} array of packets.\n\t * @api private\n\t */\n\t\n\tWS.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t\n\t  // encodePacket efficient as it uses WS framing\n\t  // no need for encodePayload\n\t  var total = packets.length;\n\t  for (var i = 0, l = total; i < l; i++) {\n\t    (function (packet) {\n\t      parser.encodePacket(packet, self.supportsBinary, function (data) {\n\t        if (!self.usingBrowserWebSocket) {\n\t          // always create a new object (GH-437)\n\t          var opts = {};\n\t          if (packet.options) {\n\t            opts.compress = packet.options.compress;\n\t          }\n\t\n\t          if (self.perMessageDeflate) {\n\t            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n\t            if (len < self.perMessageDeflate.threshold) {\n\t              opts.compress = false;\n\t            }\n\t          }\n\t        }\n\t\n\t        // Sometimes the websocket has already been closed but the browser didn't\n\t        // have a chance of informing us about it yet, in that case send will\n\t        // throw an error\n\t        try {\n\t          if (self.usingBrowserWebSocket) {\n\t            // TypeError is thrown when passing the second argument on Safari\n\t            self.ws.send(data);\n\t          } else {\n\t            self.ws.send(data, opts);\n\t          }\n\t        } catch (e) {\n\t\n\t        }\n\t\n\t        --total || done();\n\t      });\n\t    })(packets[i]);\n\t  }\n\t\n\t  function done () {\n\t    self.emit('flush');\n\t\n\t    // fake drain\n\t    // defer to next tick to allow Socket to clear writeBuffer\n\t    setTimeout(function () {\n\t      self.writable = true;\n\t      self.emit('drain');\n\t    }, 0);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon close\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.onClose = function () {\n\t  Transport.prototype.onClose.call(this);\n\t};\n\t\n\t/**\n\t * Closes socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doClose = function () {\n\t  if (typeof this.ws !== 'undefined') {\n\t    this.ws.close();\n\t  }\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'wss' : 'ws';\n\t  var port = '';\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n\t    ('ws' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // append timestamp to URI\n\t  if (this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  // communicate binary support capabilities\n\t  if (!this.supportsBinary) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\t\n\t/**\n\t * Feature detection for WebSocket.\n\t *\n\t * @return {Boolean} whether this transport is available.\n\t * @api public\n\t */\n\t\n\tWS.prototype.check = function () {\n\t  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n\t};\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\n\t/* (ignored) */\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports) {\n\n\t\n\tvar indexOf = [].indexOf;\n\t\n\tmodule.exports = function(arr, obj){\n\t  if (indexOf) return arr.indexOf(obj);\n\t  for (var i = 0; i < arr.length; ++i) {\n\t    if (arr[i] === obj) return i;\n\t  }\n\t  return -1;\n\t};\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _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\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(4);\n\tvar Emitter = __webpack_require__(5);\n\tvar toArray = __webpack_require__(35);\n\tvar on = __webpack_require__(36);\n\tvar bind = __webpack_require__(37);\n\tvar debug = __webpack_require__(3)('socket.io-client:socket');\n\tvar parseqs = __webpack_require__(27);\n\tvar hasBin = __webpack_require__(21);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = Socket;\n\t\n\t/**\n\t * Internal events (blacklisted).\n\t * These events can't be emitted by the user.\n\t *\n\t * @api private\n\t */\n\t\n\tvar events = {\n\t  connect: 1,\n\t  connect_error: 1,\n\t  connect_timeout: 1,\n\t  connecting: 1,\n\t  disconnect: 1,\n\t  error: 1,\n\t  reconnect: 1,\n\t  reconnect_attempt: 1,\n\t  reconnect_failed: 1,\n\t  reconnect_error: 1,\n\t  reconnecting: 1,\n\t  ping: 1,\n\t  pong: 1\n\t};\n\t\n\t/**\n\t * Shortcut to `Emitter#emit`.\n\t */\n\t\n\tvar emit = Emitter.prototype.emit;\n\t\n\t/**\n\t * `Socket` constructor.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Socket(io, nsp, opts) {\n\t  this.io = io;\n\t  this.nsp = nsp;\n\t  this.json = this; // compat\n\t  this.ids = 0;\n\t  this.acks = {};\n\t  this.receiveBuffer = [];\n\t  this.sendBuffer = [];\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  this.flags = {};\n\t  if (opts && opts.query) {\n\t    this.query = opts.query;\n\t  }\n\t  if (this.io.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Subscribe to open, close and packet events\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.subEvents = function () {\n\t  if (this.subs) return;\n\t\n\t  var io = this.io;\n\t  this.subs = [on(io, 'open', bind(this, 'onopen')), on(io, 'packet', bind(this, 'onpacket')), on(io, 'close', bind(this, 'onclose'))];\n\t};\n\t\n\t/**\n\t * \"Opens\" the socket.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.open = Socket.prototype.connect = function () {\n\t  if (this.connected) return this;\n\t\n\t  this.subEvents();\n\t  if (!this.io.reconnecting) this.io.open(); // ensure open\n\t  if ('open' === this.io.readyState) this.onopen();\n\t  this.emit('connecting');\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a `message` event.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.send = function () {\n\t  var args = toArray(arguments);\n\t  args.unshift('message');\n\t  this.emit.apply(this, args);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Override `emit`.\n\t * If the event is in `events`, it's emitted normally.\n\t *\n\t * @param {String} event name\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.emit = function (ev) {\n\t  if (events.hasOwnProperty(ev)) {\n\t    emit.apply(this, arguments);\n\t    return this;\n\t  }\n\t\n\t  var args = toArray(arguments);\n\t  var packet = {\n\t    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n\t    data: args\n\t  };\n\t\n\t  packet.options = {};\n\t  packet.options.compress = !this.flags || false !== this.flags.compress;\n\t\n\t  // event ack callback\n\t  if ('function' === typeof args[args.length - 1]) {\n\t\n\t    this.acks[this.ids] = args.pop();\n\t    packet.id = this.ids++;\n\t  }\n\t\n\t  if (this.connected) {\n\t    this.packet(packet);\n\t  } else {\n\t    this.sendBuffer.push(packet);\n\t  }\n\t\n\t  this.flags = {};\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.packet = function (packet) {\n\t  packet.nsp = this.nsp;\n\t  this.io.packet(packet);\n\t};\n\t\n\t/**\n\t * Called upon engine `open`.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onopen = function () {\n\t\n\t  // write connect packet if necessary\n\t  if ('/' !== this.nsp) {\n\t    if (this.query) {\n\t      var query = _typeof(this.query) === 'object' ? parseqs.encode(this.query) : this.query;\n\t\n\t      this.packet({ type: parser.CONNECT, query: query });\n\t    } else {\n\t      this.packet({ type: parser.CONNECT });\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon engine `close`.\n\t *\n\t * @param {String} reason\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onclose = function (reason) {\n\t\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  delete this.id;\n\t  this.emit('disconnect', reason);\n\t};\n\t\n\t/**\n\t * Called with socket packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onpacket = function (packet) {\n\t  var sameNamespace = packet.nsp === this.nsp;\n\t  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\t\n\t  if (!sameNamespace && !rootNamespaceError) return;\n\t\n\t  switch (packet.type) {\n\t    case parser.CONNECT:\n\t      this.onconnect();\n\t      break;\n\t\n\t    case parser.EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.BINARY_EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.BINARY_ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.DISCONNECT:\n\t      this.ondisconnect();\n\t      break;\n\t\n\t    case parser.ERROR:\n\t      this.emit('error', packet.data);\n\t      break;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon a server event.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onevent = function (packet) {\n\t  var args = packet.data || [];\n\t\n\t  if (null != packet.id) {\n\t\n\t    args.push(this.ack(packet.id));\n\t  }\n\t\n\t  if (this.connected) {\n\t    emit.apply(this, args);\n\t  } else {\n\t    this.receiveBuffer.push(args);\n\t  }\n\t};\n\t\n\t/**\n\t * Produces an ack callback to emit with an event.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ack = function (id) {\n\t  var self = this;\n\t  var sent = false;\n\t  return function () {\n\t    // prevent double callbacks\n\t    if (sent) return;\n\t    sent = true;\n\t    var args = toArray(arguments);\n\t\n\t    self.packet({\n\t      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n\t      id: id,\n\t      data: args\n\t    });\n\t  };\n\t};\n\t\n\t/**\n\t * Called upon a server acknowlegement.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onack = function (packet) {\n\t  var ack = this.acks[packet.id];\n\t  if ('function' === typeof ack) {\n\t\n\t    ack.apply(this, packet.data);\n\t    delete this.acks[packet.id];\n\t  } else {}\n\t};\n\t\n\t/**\n\t * Called upon server connect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onconnect = function () {\n\t  this.connected = true;\n\t  this.disconnected = false;\n\t  this.emit('connect');\n\t  this.emitBuffered();\n\t};\n\t\n\t/**\n\t * Emit buffered events (received and emitted).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.emitBuffered = function () {\n\t  var i;\n\t  for (i = 0; i < this.receiveBuffer.length; i++) {\n\t    emit.apply(this, this.receiveBuffer[i]);\n\t  }\n\t  this.receiveBuffer = [];\n\t\n\t  for (i = 0; i < this.sendBuffer.length; i++) {\n\t    this.packet(this.sendBuffer[i]);\n\t  }\n\t  this.sendBuffer = [];\n\t};\n\t\n\t/**\n\t * Called upon server disconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ondisconnect = function () {\n\t\n\t  this.destroy();\n\t  this.onclose('io server disconnect');\n\t};\n\t\n\t/**\n\t * Called upon forced client/server side disconnections,\n\t * this method ensures the manager stops tracking us and\n\t * that reconnections don't get triggered for this.\n\t *\n\t * @api private.\n\t */\n\t\n\tSocket.prototype.destroy = function () {\n\t  if (this.subs) {\n\t    // clean subscriptions to avoid reconnections\n\t    for (var i = 0; i < this.subs.length; i++) {\n\t      this.subs[i].destroy();\n\t    }\n\t    this.subs = null;\n\t  }\n\t\n\t  this.io.destroy(this);\n\t};\n\t\n\t/**\n\t * Disconnects the socket manually.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.close = Socket.prototype.disconnect = function () {\n\t  if (this.connected) {\n\t\n\t    this.packet({ type: parser.DISCONNECT });\n\t  }\n\t\n\t  // remove socket from pool\n\t  this.destroy();\n\t\n\t  if (this.connected) {\n\t    // fire events\n\t    this.onclose('io client disconnect');\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the compress flag.\n\t *\n\t * @param {Boolean} if `true`, compresses the sending data\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.compress = function (compress) {\n\t  this.flags.compress = compress;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the binary flag\n\t *\n\t * @param {Boolean} whether the emitted data contains binary\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.binary = function (binary) {\n\t  this.flags.binary = binary;\n\t  return this;\n\t};\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = toArray\n\t\n\tfunction toArray(list, index) {\n\t    var array = []\n\t\n\t    index = index || 0\n\t\n\t    for (var i = index || 0; i < list.length; i++) {\n\t        array[i - index] = list[i]\n\t    }\n\t\n\t    return array\n\t}\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = on;\n\t\n\t/**\n\t * Helper for subscriptions.\n\t *\n\t * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n\t * @param {String} event name\n\t * @param {Function} callback\n\t * @api public\n\t */\n\t\n\tfunction on(obj, ev, fn) {\n\t  obj.on(ev, fn);\n\t  return {\n\t    destroy: function destroy() {\n\t      obj.removeListener(ev, fn);\n\t    }\n\t  };\n\t}\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Slice reference.\n\t */\n\t\n\tvar slice = [].slice;\n\t\n\t/**\n\t * Bind `obj` to `fn`.\n\t *\n\t * @param {Object} obj\n\t * @param {Function|String} fn or string\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(obj, fn){\n\t  if ('string' == typeof fn) fn = obj[fn];\n\t  if ('function' != typeof fn) throw new Error('bind() requires a function');\n\t  var args = slice.call(arguments, 2);\n\t  return function(){\n\t    return fn.apply(obj, args.concat(slice.call(arguments)));\n\t  }\n\t};\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Expose `Backoff`.\n\t */\n\t\n\tmodule.exports = Backoff;\n\t\n\t/**\n\t * Initialize backoff timer with `opts`.\n\t *\n\t * - `min` initial timeout in milliseconds [100]\n\t * - `max` max timeout [10000]\n\t * - `jitter` [0]\n\t * - `factor` [2]\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction Backoff(opts) {\n\t  opts = opts || {};\n\t  this.ms = opts.min || 100;\n\t  this.max = opts.max || 10000;\n\t  this.factor = opts.factor || 2;\n\t  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n\t  this.attempts = 0;\n\t}\n\t\n\t/**\n\t * Return the backoff duration.\n\t *\n\t * @return {Number}\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.duration = function(){\n\t  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n\t  if (this.jitter) {\n\t    var rand =  Math.random();\n\t    var deviation = Math.floor(rand * this.jitter * ms);\n\t    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n\t  }\n\t  return Math.min(ms, this.max) | 0;\n\t};\n\t\n\t/**\n\t * Reset the number of attempts.\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.reset = function(){\n\t  this.attempts = 0;\n\t};\n\t\n\t/**\n\t * Set the minimum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMin = function(min){\n\t  this.ms = min;\n\t};\n\t\n\t/**\n\t * Set the maximum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMax = function(max){\n\t  this.max = max;\n\t};\n\t\n\t/**\n\t * Set the jitter\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setJitter = function(jitter){\n\t  this.jitter = jitter;\n\t};\n\t\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// socket.io.slim.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b1396182394c549233a5","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/index.js","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/url.js","/**\n * Parses an URI\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\n\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nvar parts = [\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\n\nmodule.exports = function parseuri(str) {\n    var src = str,\n        b = str.indexOf('['),\n        e = str.indexOf(']');\n\n    if (b != -1 && e != -1) {\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n    }\n\n    var m = re.exec(str || ''),\n        uri = {},\n        i = 14;\n\n    while (i--) {\n        uri[parts[i]] = m[i] || '';\n    }\n\n    if (b != -1 && e != -1) {\n        uri.source = src;\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n        uri.ipv6uri = true;\n    }\n\n    uri.pathNames = pathNames(uri, uri['path']);\n    uri.queryKey = queryKey(uri, uri['query']);\n\n    return uri;\n};\n\nfunction pathNames(obj, path) {\n    var regx = /\\/{2,9}/g,\n        names = path.replace(regx, \"/\").split(\"/\");\n\n    if (path.substr(0, 1) == '/' || path.length === 0) {\n        names.splice(0, 1);\n    }\n    if (path.substr(path.length - 1, 1) == '/') {\n        names.splice(names.length - 1, 1);\n    }\n\n    return names;\n}\n\nfunction queryKey(uri, query) {\n    var data = {};\n\n    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n        if ($1) {\n            data[$1] = $2;\n        }\n    });\n\n    return data;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","\nmodule.exports = function () { return function () {}; };\n\n\n\n// WEBPACK FOOTER //\n// ./support/noop.js","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 4\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 5\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 6\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 7\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 8\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n\n  if (~this.readyState.indexOf('open')) return this;\n\n\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n\n\n    if (timeout === 0) {\n      openSub.destroy(); // prevents a race condition with the 'open' event\n    }\n\n    // set timer\n    var timer = setTimeout(function () {\n\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/manager.js","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 10\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('parseqs');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n  opts = opts || {};\n\n  if (uri && 'object' === typeof uri) {\n    opts = uri;\n    uri = null;\n  }\n\n  if (uri) {\n    uri = parseuri(uri);\n    opts.hostname = uri.host;\n    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n    opts.port = uri.port;\n    if (uri.query) opts.query = uri.query;\n  } else if (opts.host) {\n    opts.hostname = parseuri(opts.host).host;\n  }\n\n  this.secure = null != opts.secure ? opts.secure\n    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\n  if (opts.hostname && !opts.port) {\n    // if no port is specified manually, use the protocol default\n    opts.port = this.secure ? '443' : '80';\n  }\n\n  this.agent = opts.agent || false;\n  this.hostname = opts.hostname ||\n    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && location.port\n      ? location.port\n      : (this.secure ? 443 : 80));\n  this.query = opts.query || {};\n  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n  this.upgrade = false !== opts.upgrade;\n  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n  this.forceJSONP = !!opts.forceJSONP;\n  this.jsonp = false !== opts.jsonp;\n  this.forceBase64 = !!opts.forceBase64;\n  this.enablesXDR = !!opts.enablesXDR;\n  this.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\n  this.readyState = '';\n  this.writeBuffer = [];\n  this.prevBufferLen = 0;\n  this.policyPort = opts.policyPort || 843;\n  this.rememberUpgrade = opts.rememberUpgrade || false;\n  this.binaryType = null;\n  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n    this.perMessageDeflate.threshold = 1024;\n  }\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx || null;\n  this.key = opts.key || null;\n  this.passphrase = opts.passphrase || null;\n  this.cert = opts.cert || null;\n  this.ca = opts.ca || null;\n  this.ciphers = opts.ciphers || null;\n  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\n    }\n  }\n\n  // set on handshake\n  this.id = null;\n  this.upgrades = null;\n  this.pingInterval = null;\n  this.pingTimeout = null;\n\n  // set on heartbeat\n  this.pingIntervalTimer = null;\n  this.pingTimeoutTimer = null;\n\n  this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('engine.io-parser');\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n\n  var query = clone(this.query);\n\n  // append engine.io protocol identifier\n  query.EIO = parser.protocol;\n\n  // transport name\n  query.transport = name;\n\n  // per-transport options\n  var options = this.transportOptions[name] || {};\n\n  // session id if we already have one\n  if (this.id) query.sid = this.id;\n\n  var transport = new transports[name]({\n    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\n  });\n\n  return transport;\n};\n\nfunction clone (obj) {\n  var o = {};\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      o[i] = obj[i];\n    }\n  }\n  return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n  var transport;\n  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n    transport = 'websocket';\n  } else if (0 === this.transports.length) {\n    // Emit error on next tick so it can be listened to\n    var self = this;\n    setTimeout(function () {\n      self.emit('error', 'No transports available');\n    }, 0);\n    return;\n  } else {\n    transport = this.transports[0];\n  }\n  this.readyState = 'opening';\n\n  // Retry with the next transport if the transport is disabled (jsonp: false)\n  try {\n    transport = this.createTransport(transport);\n  } catch (e) {\n    this.transports.shift();\n    this.open();\n    return;\n  }\n\n  transport.open();\n  this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n\n  var self = this;\n\n  if (this.transport) {\n\n    this.transport.removeAllListeners();\n  }\n\n  // set up transport\n  this.transport = transport;\n\n  // set up transport listeners\n  transport\n  .on('drain', function () {\n    self.onDrain();\n  })\n  .on('packet', function (packet) {\n    self.onPacket(packet);\n  })\n  .on('error', function (e) {\n    self.onError(e);\n  })\n  .on('close', function () {\n    self.onClose('transport close');\n  });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n\n  var transport = this.createTransport(name, { probe: 1 });\n  var failed = false;\n  var self = this;\n\n  Socket.priorWebsocketSuccess = false;\n\n  function onTransportOpen () {\n    if (self.onlyBinaryUpgrades) {\n      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n      failed = failed || upgradeLosesBinary;\n    }\n    if (failed) return;\n\n\n    transport.send([{ type: 'ping', data: 'probe' }]);\n    transport.once('packet', function (msg) {\n      if (failed) return;\n      if ('pong' === msg.type && 'probe' === msg.data) {\n\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n\n\n          cleanup();\n\n          self.setTransport(transport);\n          transport.send([{ type: 'upgrade' }]);\n          self.emit('upgrade', transport);\n          transport = null;\n          self.upgrading = false;\n          self.flush();\n        });\n      } else {\n\n        var err = new Error('probe error');\n        err.transport = transport.name;\n        self.emit('upgradeError', err);\n      }\n    });\n  }\n\n  function freezeTransport () {\n    if (failed) return;\n\n    // Any callback called by transport should be ignored since now\n    failed = true;\n\n    cleanup();\n\n    transport.close();\n    transport = null;\n  }\n\n  // Handle any error that happens while probing\n  function onerror (err) {\n    var error = new Error('probe error: ' + err);\n    error.transport = transport.name;\n\n    freezeTransport();\n\n\n\n    self.emit('upgradeError', error);\n  }\n\n  function onTransportClose () {\n    onerror('transport closed');\n  }\n\n  // When the socket is closed while we're probing\n  function onclose () {\n    onerror('socket closed');\n  }\n\n  // When the socket is upgraded while we're probing\n  function onupgrade (to) {\n    if (transport && to.name !== transport.name) {\n\n      freezeTransport();\n    }\n  }\n\n  // Remove all listeners on the transport and on self\n  function cleanup () {\n    transport.removeListener('open', onTransportOpen);\n    transport.removeListener('error', onerror);\n    transport.removeListener('close', onTransportClose);\n    self.removeListener('close', onclose);\n    self.removeListener('upgrading', onupgrade);\n  }\n\n  transport.once('open', onTransportOpen);\n  transport.once('error', onerror);\n  transport.once('close', onTransportClose);\n\n  this.once('close', onclose);\n  this.once('upgrading', onupgrade);\n\n  transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n\n  this.readyState = 'open';\n  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n  this.emit('open');\n  this.flush();\n\n  // we check for `readyState` in case an `open`\n  // listener already closed the socket\n  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\n    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n      this.probe(this.upgrades[i]);\n    }\n  }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n  if ('opening' === this.readyState || 'open' === this.readyState ||\n      'closing' === this.readyState) {\n\n\n    this.emit('packet', packet);\n\n    // Socket is live - any packet counts\n    this.emit('heartbeat');\n\n    switch (packet.type) {\n      case 'open':\n        this.onHandshake(JSON.parse(packet.data));\n        break;\n\n      case 'pong':\n        this.setPing();\n        this.emit('pong');\n        break;\n\n      case 'error':\n        var err = new Error('server error');\n        err.code = packet.data;\n        this.onError(err);\n        break;\n\n      case 'message':\n        this.emit('data', packet.data);\n        this.emit('message', packet.data);\n        break;\n    }\n  } else {\n\n  }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n  this.emit('handshake', data);\n  this.id = data.sid;\n  this.transport.query.sid = data.sid;\n  this.upgrades = this.filterUpgrades(data.upgrades);\n  this.pingInterval = data.pingInterval;\n  this.pingTimeout = data.pingTimeout;\n  this.onOpen();\n  // In case open handler closes socket\n  if ('closed' === this.readyState) return;\n  this.setPing();\n\n  // Prolong liveness of socket on heartbeat\n  this.removeListener('heartbeat', this.onHeartbeat);\n  this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n  clearTimeout(this.pingTimeoutTimer);\n  var self = this;\n  self.pingTimeoutTimer = setTimeout(function () {\n    if ('closed' === self.readyState) return;\n    self.onClose('ping timeout');\n  }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n  var self = this;\n  clearTimeout(self.pingIntervalTimer);\n  self.pingIntervalTimer = setTimeout(function () {\n\n    self.ping();\n    self.onHeartbeat(self.pingTimeout);\n  }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n  var self = this;\n  this.sendPacket('ping', function () {\n    self.emit('ping');\n  });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n  this.writeBuffer.splice(0, this.prevBufferLen);\n\n  // setting prevBufferLen = 0 is very important\n  // for example, when upgrading, upgrade packet is sent over,\n  // and a nonzero prevBufferLen could cause problems on `drain`\n  this.prevBufferLen = 0;\n\n  if (0 === this.writeBuffer.length) {\n    this.emit('drain');\n  } else {\n    this.flush();\n  }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n  if ('closed' !== this.readyState && this.transport.writable &&\n    !this.upgrading && this.writeBuffer.length) {\n\n    this.transport.send(this.writeBuffer);\n    // keep track of current length of writeBuffer\n    // splice writeBuffer and callbackBuffer on `drain`\n    this.prevBufferLen = this.writeBuffer.length;\n    this.emit('flush');\n  }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n  this.sendPacket('message', msg, options, fn);\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n  if ('function' === typeof data) {\n    fn = data;\n    data = undefined;\n  }\n\n  if ('function' === typeof options) {\n    fn = options;\n    options = null;\n  }\n\n  if ('closing' === this.readyState || 'closed' === this.readyState) {\n    return;\n  }\n\n  options = options || {};\n  options.compress = false !== options.compress;\n\n  var packet = {\n    type: type,\n    data: data,\n    options: options\n  };\n  this.emit('packetCreate', packet);\n  this.writeBuffer.push(packet);\n  if (fn) this.once('flush', fn);\n  this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.readyState = 'closing';\n\n    var self = this;\n\n    if (this.writeBuffer.length) {\n      this.once('drain', function () {\n        if (this.upgrading) {\n          waitForUpgrade();\n        } else {\n          close();\n        }\n      });\n    } else if (this.upgrading) {\n      waitForUpgrade();\n    } else {\n      close();\n    }\n  }\n\n  function close () {\n    self.onClose('forced close');\n\n    self.transport.close();\n  }\n\n  function cleanupAndClose () {\n    self.removeListener('upgrade', cleanupAndClose);\n    self.removeListener('upgradeError', cleanupAndClose);\n    close();\n  }\n\n  function waitForUpgrade () {\n    // wait for upgrade to finish since we can't send packets while pausing a transport\n    self.once('upgrade', cleanupAndClose);\n    self.once('upgradeError', cleanupAndClose);\n  }\n\n  return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n\n  Socket.priorWebsocketSuccess = false;\n  this.emit('error', err);\n  this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\n    var self = this;\n\n    // clear timers\n    clearTimeout(this.pingIntervalTimer);\n    clearTimeout(this.pingTimeoutTimer);\n\n    // stop event from firing again for transport\n    this.transport.removeAllListeners('close');\n\n    // ensure transport won't stay open\n    this.transport.close();\n\n    // ignore further transport communication\n    this.transport.removeAllListeners();\n\n    // set ready state\n    this.readyState = 'closed';\n\n    // clear session id\n    this.id = null;\n\n    // emit close event\n    this.emit('close', reason, desc);\n\n    // clean buffers after, so users can still\n    // grab the buffers on `close` event\n    self.writeBuffer = [];\n    self.prevBufferLen = 0;\n  }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n  var filteredUpgrades = [];\n  for (var i = 0, j = upgrades.length; i < j; i++) {\n    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n  }\n  return filteredUpgrades;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 11\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./websocket');\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n  var xhr;\n  var xd = false;\n  var xs = false;\n  var jsonp = false !== opts.jsonp;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    xd = opts.hostname !== location.hostname || port !== opts.port;\n    xs = opts.secure !== isSSL;\n  }\n\n  opts.xdomain = xd;\n  opts.xscheme = xs;\n  xhr = new XMLHttpRequest(opts);\n\n  if ('open' in xhr && !opts.forceJSONP) {\n    return new XHR(opts);\n  } else {\n    if (!jsonp) throw new Error('JSONP disabled');\n    return new JSONP(opts);\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 12\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\nvar globalThis = require('./globalThis');\n\nmodule.exports = function (opts) {\n  var xdomain = opts.xdomain;\n\n  // scheme must be same when usign XDomainRequest\n  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n  var xscheme = opts.xscheme;\n\n  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n  // https://github.com/Automattic/engine.io-client/pull/217\n  var enablesXDR = opts.enablesXDR;\n\n  // XMLHttpRequest can be disabled on IE\n  try {\n    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n      return new XMLHttpRequest();\n    }\n  } catch (e) { }\n\n  // Use XDomainRequest for IE8 if enablesXDR is true\n  // because loading bar keeps flashing when using jsonp-polling\n  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n  try {\n    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n      return new XDomainRequest();\n    }\n  } catch (e) { }\n\n  if (!xdomain) {\n    try {\n      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 13\n// module chunks = 0","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n    'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n  // if XMLHttp support is disabled in IE then it will throw\n  // when trying to create\n  module.exports = false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 14\n// module chunks = 0","module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/globalThis.browser.js\n// module id = 15\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\nvar globalThis = require('../globalThis');\n\n/**\n * Module exports.\n */\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n\n/**\n * Empty function\n */\n\nfunction empty () {}\n\n/**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction XHR (opts) {\n  Polling.call(this, opts);\n  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(XHR, Polling);\n\n/**\n * XHR supports binary\n */\n\nXHR.prototype.supportsBinary = true;\n\n/**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n\nXHR.prototype.request = function (opts) {\n  opts = opts || {};\n  opts.uri = this.uri();\n  opts.xd = this.xd;\n  opts.xs = this.xs;\n  opts.agent = this.agent || false;\n  opts.supportsBinary = this.supportsBinary;\n  opts.enablesXDR = this.enablesXDR;\n  opts.withCredentials = this.withCredentials;\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n  opts.requestTimeout = this.requestTimeout;\n\n  // other options for Node.js client\n  opts.extraHeaders = this.extraHeaders;\n\n  return new Request(opts);\n};\n\n/**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n\nXHR.prototype.doWrite = function (data, fn) {\n  var isBinary = typeof data !== 'string' && data !== undefined;\n  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n  var self = this;\n  req.on('success', fn);\n  req.on('error', function (err) {\n    self.onError('xhr post error', err);\n  });\n  this.sendXhr = req;\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nXHR.prototype.doPoll = function () {\n\n  var req = this.request();\n  var self = this;\n  req.on('data', function (data) {\n    self.onData(data);\n  });\n  req.on('error', function (err) {\n    self.onError('xhr poll error', err);\n  });\n  this.pollXhr = req;\n};\n\n/**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Request (opts) {\n  this.method = opts.method || 'GET';\n  this.uri = opts.uri;\n  this.xd = !!opts.xd;\n  this.xs = !!opts.xs;\n  this.async = false !== opts.async;\n  this.data = undefined !== opts.data ? opts.data : null;\n  this.agent = opts.agent;\n  this.isBinary = opts.isBinary;\n  this.supportsBinary = opts.supportsBinary;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n\n  this.create();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Request.prototype);\n\n/**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n\nRequest.prototype.create = function () {\n  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n\n  var xhr = this.xhr = new XMLHttpRequest(opts);\n  var self = this;\n\n  try {\n\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n        for (var i in this.extraHeaders) {\n          if (this.extraHeaders.hasOwnProperty(i)) {\n            xhr.setRequestHeader(i, this.extraHeaders[i]);\n          }\n        }\n      }\n    } catch (e) {}\n\n    if ('POST' === this.method) {\n      try {\n        if (this.isBinary) {\n          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n        } else {\n          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n        }\n      } catch (e) {}\n    }\n\n    try {\n      xhr.setRequestHeader('Accept', '*/*');\n    } catch (e) {}\n\n    // ie6 check\n    if ('withCredentials' in xhr) {\n      xhr.withCredentials = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\n    }\n\n    if (this.hasXDR()) {\n      xhr.onload = function () {\n        self.onLoad();\n      };\n      xhr.onerror = function () {\n        self.onError(xhr.responseText);\n      };\n    } else {\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\n        if (4 !== xhr.readyState) return;\n        if (200 === xhr.status || 1223 === xhr.status) {\n          self.onLoad();\n        } else {\n          // make sure the `error` event handler that's user-set\n          // does not throw in the same tick and gets caught here\n          setTimeout(function () {\n            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n\n    xhr.send(this.data);\n  } catch (e) {\n    // Need to defer since .create() is called directly fhrom the constructor\n    // and thus the 'error' event can only be only bound *after* this exception\n    // occurs.  Therefore, also, we cannot throw here at all.\n    setTimeout(function () {\n      self.onError(e);\n    }, 0);\n    return;\n  }\n\n  if (typeof document !== 'undefined') {\n    this.index = Request.requestsCount++;\n    Request.requests[this.index] = this;\n  }\n};\n\n/**\n * Called upon successful response.\n *\n * @api private\n */\n\nRequest.prototype.onSuccess = function () {\n  this.emit('success');\n  this.cleanup();\n};\n\n/**\n * Called if we have data.\n *\n * @api private\n */\n\nRequest.prototype.onData = function (data) {\n  this.emit('data', data);\n  this.onSuccess();\n};\n\n/**\n * Called upon error.\n *\n * @api private\n */\n\nRequest.prototype.onError = function (err) {\n  this.emit('error', err);\n  this.cleanup(true);\n};\n\n/**\n * Cleans up house.\n *\n * @api private\n */\n\nRequest.prototype.cleanup = function (fromError) {\n  if ('undefined' === typeof this.xhr || null === this.xhr) {\n    return;\n  }\n  // xmlhttprequest\n  if (this.hasXDR()) {\n    this.xhr.onload = this.xhr.onerror = empty;\n  } else {\n    this.xhr.onreadystatechange = empty;\n  }\n\n  if (fromError) {\n    try {\n      this.xhr.abort();\n    } catch (e) {}\n  }\n\n  if (typeof document !== 'undefined') {\n    delete Request.requests[this.index];\n  }\n\n  this.xhr = null;\n};\n\n/**\n * Called upon load.\n *\n * @api private\n */\n\nRequest.prototype.onLoad = function () {\n  var data;\n  try {\n    var contentType;\n    try {\n      contentType = this.xhr.getResponseHeader('Content-Type');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\n    }\n  } catch (e) {\n    this.onError(e);\n  }\n  if (null != data) {\n    this.onData(data);\n  }\n};\n\n/**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n\nRequest.prototype.hasXDR = function () {\n  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n};\n\n/**\n * Aborts the request.\n *\n * @api public\n */\n\nRequest.prototype.abort = function () {\n  this.cleanup();\n};\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, unloadHandler, false);\n  }\n}\n\nfunction unloadHandler () {\n  for (var i in Request.requests) {\n    if (Request.requests.hasOwnProperty(i)) {\n      Request.requests[i].abort();\n    }\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:polling');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Polling;\n\n/**\n * Is XHR2 supported?\n */\n\nvar hasXHR2 = (function () {\n  var XMLHttpRequest = require('xmlhttprequest-ssl');\n  var xhr = new XMLHttpRequest({ xdomain: false });\n  return null != xhr.responseType;\n})();\n\n/**\n * Polling interface.\n *\n * @param {Object} opts\n * @api private\n */\n\nfunction Polling (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (!hasXHR2 || forceBase64) {\n    this.supportsBinary = false;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(Polling, Transport);\n\n/**\n * Transport name.\n */\n\nPolling.prototype.name = 'polling';\n\n/**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n\nPolling.prototype.doOpen = function () {\n  this.poll();\n};\n\n/**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n\nPolling.prototype.pause = function (onPause) {\n  var self = this;\n\n  this.readyState = 'pausing';\n\n  function pause () {\n\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n\n      total++;\n      this.once('pollComplete', function () {\n\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n\n      total++;\n      this.once('drain', function () {\n\n        --total || pause();\n      });\n    }\n  } else {\n    pause();\n  }\n};\n\n/**\n * Starts polling cycle.\n *\n * @api public\n */\n\nPolling.prototype.poll = function () {\n\n  this.polling = true;\n  this.doPoll();\n  this.emit('poll');\n};\n\n/**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n\nPolling.prototype.onData = function (data) {\n  var self = this;\n\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState && packet.type === 'open') {\n      self.onOpen();\n    }\n\n    // if its a close packet, we close the ongoing requests\n    if ('close' === packet.type) {\n      self.onClose();\n      return false;\n    }\n\n    // otherwise bypass onData and handle the message\n    self.onPacket(packet);\n  };\n\n  // decode payload\n  parser.decodePayload(data, this.socket.binaryType, callback);\n\n  // if an event did not trigger closing\n  if ('closed' !== this.readyState) {\n    // if we got data we're not polling\n    this.polling = false;\n    this.emit('pollComplete');\n\n    if ('open' === this.readyState) {\n      this.poll();\n    } else {\n\n    }\n  }\n};\n\n/**\n * For polling, send a close packet.\n *\n * @api private\n */\n\nPolling.prototype.doClose = function () {\n  var self = this;\n\n  function close () {\n\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n\n    this.once('open', close);\n  }\n};\n\n/**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n\nPolling.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n  var callbackfn = function () {\n    self.writable = true;\n    self.emit('drain');\n  };\n\n  parser.encodePayload(packets, this.supportsBinary, function (data) {\n    self.doWrite(data, callbackfn);\n  });\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nPolling.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'https' : 'http';\n  var port = '';\n\n  // cache busting is forced\n  if (false !== this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  if (!this.supportsBinary && !query.sid) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // avoid port if default for schema\n  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n     ('http' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('component-emitter');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n  this.path = opts.path;\n  this.hostname = opts.hostname;\n  this.port = opts.port;\n  this.secure = opts.secure;\n  this.query = opts.query;\n  this.timestampParam = opts.timestampParam;\n  this.timestampRequests = opts.timestampRequests;\n  this.readyState = '';\n  this.agent = opts.agent || false;\n  this.socket = opts.socket;\n  this.enablesXDR = opts.enablesXDR;\n  this.withCredentials = opts.withCredentials;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n  var err = new Error(msg);\n  err.type = 'TransportError';\n  err.description = desc;\n  this.emit('error', err);\n  return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n  if ('closed' === this.readyState || '' === this.readyState) {\n    this.readyState = 'opening';\n    this.doOpen();\n  }\n\n  return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.doClose();\n    this.onClose();\n  }\n\n  return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n  if ('open' === this.readyState) {\n    this.write(packets);\n  } else {\n    throw new Error('Transport not open');\n  }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n  this.readyState = 'open';\n  this.writable = true;\n  this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n  var packet = parser.decodePacket(data, this.socket.binaryType);\n  this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n  this.readyState = 'closed';\n  this.emit('close');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 18\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('base64-arraybuffer');\n}\n\n/**\n * Check if we are running an android browser. That requires us to use\n * ArrayBuffer with polling transports...\n *\n * http://ghinda.net/jpeg-blob-ajax-android/\n */\n\nvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\n/**\n * Check if we are running in PhantomJS.\n * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n * https://github.com/ariya/phantomjs/issues/11395\n * @type boolean\n */\nvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\n/**\n * When true, avoids using Blobs to encode payloads.\n * @type boolean\n */\nvar dontSendBlobs = isAndroid || isPhantomJS;\n\n/**\n * Current protocol version.\n */\n\nexports.protocol = 3;\n\n/**\n * Packet types.\n */\n\nvar packets = exports.packets = {\n    open:     0    // non-ws\n  , close:    1    // non-ws\n  , ping:     2\n  , pong:     3\n  , message:  4\n  , upgrade:  5\n  , noop:     6\n};\n\nvar packetslist = keys(packets);\n\n/**\n * Premade error packet.\n */\n\nvar err = { type: 'error', data: 'parser error' };\n\n/**\n * Create a blob api even for blob builder when vendor prefixes exist\n */\n\nvar Blob = require('blob');\n\n/**\n * Encodes a packet.\n *\n *     <packet type id> [ <data> ]\n *\n * Example:\n *\n *     5hello world\n *     3\n *     4\n *\n * Binary is encoded in an identical principle\n *\n * @api private\n */\n\nexports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\n    callback = utf8encode;\n    utf8encode = null;\n  }\n\n  var data = (packet.data === undefined)\n    ? undefined\n    : packet.data.buffer || packet.data;\n\n  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n    return encodeBlob(packet, supportsBinary, callback);\n  }\n\n  // might be an object with { base64: true, data: dataAsBase64String }\n  if (data && data.base64) {\n    return encodeBase64Object(packet, callback);\n  }\n\n  // Sending data as a utf-8 string\n  var encoded = packets[packet.type];\n\n  // data fragment is optional\n  if (undefined !== packet.data) {\n    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n  }\n\n  return callback('' + encoded);\n\n};\n\nfunction encodeBase64Object(packet, callback) {\n  // packet data is an object { base64: true, data: dataAsBase64String }\n  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n  return callback(message);\n}\n\n/**\n * Encode packet helpers for binary types\n */\n\nfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var data = packet.data;\n  var contentArray = new Uint8Array(data);\n  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\n  resultBuffer[0] = packets[packet.type];\n  for (var i = 0; i < contentArray.length; i++) {\n    resultBuffer[i+1] = contentArray[i];\n  }\n\n  return callback(resultBuffer.buffer);\n}\n\nfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var fr = new FileReader();\n  fr.onload = function() {\n    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n  };\n  return fr.readAsArrayBuffer(packet.data);\n}\n\nfunction encodeBlob(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  if (dontSendBlobs) {\n    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n  }\n\n  var length = new Uint8Array(1);\n  length[0] = packets[packet.type];\n  var blob = new Blob([length.buffer, packet.data]);\n\n  return callback(blob);\n}\n\n/**\n * Encodes a packet with binary data in a base64 string\n *\n * @param {Object} packet, has `type` and `data`\n * @return {String} base64 encoded message\n */\n\nexports.encodeBase64Packet = function(packet, callback) {\n  var message = 'b' + exports.packets[packet.type];\n  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n    var fr = new FileReader();\n    fr.onload = function() {\n      var b64 = fr.result.split(',')[1];\n      callback(message + b64);\n    };\n    return fr.readAsDataURL(packet.data);\n  }\n\n  var b64data;\n  try {\n    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n  } catch (e) {\n    // iPhone Safari doesn't let you apply with typed arrays\n    var typed = new Uint8Array(packet.data);\n    var basic = new Array(typed.length);\n    for (var i = 0; i < typed.length; i++) {\n      basic[i] = typed[i];\n    }\n    b64data = String.fromCharCode.apply(null, basic);\n  }\n  message += btoa(b64data);\n  return callback(message);\n};\n\n/**\n * Decodes a packet. Changes format to Blob if requested.\n *\n * @return {Object} with `type` and `data` (if any)\n * @api private\n */\n\nexports.decodePacket = function (data, binaryType, utf8decode) {\n  if (data === undefined) {\n    return err;\n  }\n  // String data\n  if (typeof data === 'string') {\n    if (data.charAt(0) === 'b') {\n      return exports.decodeBase64Packet(data.substr(1), binaryType);\n    }\n\n    if (utf8decode) {\n      data = tryDecode(data);\n      if (data === false) {\n        return err;\n      }\n    }\n    var type = data.charAt(0);\n\n    if (Number(type) != type || !packetslist[type]) {\n      return err;\n    }\n\n    if (data.length > 1) {\n      return { type: packetslist[type], data: data.substring(1) };\n    } else {\n      return { type: packetslist[type] };\n    }\n  }\n\n  var asArray = new Uint8Array(data);\n  var type = asArray[0];\n  var rest = sliceBuffer(data, 1);\n  if (Blob && binaryType === 'blob') {\n    rest = new Blob([rest]);\n  }\n  return { type: packetslist[type], data: rest };\n};\n\nfunction tryDecode(data) {\n  try {\n    data = utf8.decode(data, { strict: false });\n  } catch (e) {\n    return false;\n  }\n  return data;\n}\n\n/**\n * Decodes a packet encoded in a base64 string\n *\n * @param {String} base64 encoded message\n * @return {Object} with `type` and `data` (if any)\n */\n\nexports.decodeBase64Packet = function(msg, binaryType) {\n  var type = packetslist[msg.charAt(0)];\n  if (!base64encoder) {\n    return { type: type, data: { base64: true, data: msg.substr(1) } };\n  }\n\n  var data = base64encoder.decode(msg.substr(1));\n\n  if (binaryType === 'blob' && Blob) {\n    data = new Blob([data]);\n  }\n\n  return { type: type, data: data };\n};\n\n/**\n * Encodes multiple messages (payload).\n *\n *     <length>:data\n *\n * Example:\n *\n *     11:hello world2:hi\n *\n * If any contents are binary, they will be encoded as base64 strings. Base64\n * encoded strings are marked with a b before the length specifier\n *\n * @param {Array} packets\n * @api private\n */\n\nexports.encodePayload = function (packets, supportsBinary, callback) {\n  if (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = null;\n  }\n\n  var isBinary = hasBinary(packets);\n\n  if (supportsBinary && isBinary) {\n    if (Blob && !dontSendBlobs) {\n      return exports.encodePayloadAsBlob(packets, callback);\n    }\n\n    return exports.encodePayloadAsArrayBuffer(packets, callback);\n  }\n\n  if (!packets.length) {\n    return callback('0:');\n  }\n\n  function setLengthHeader(message) {\n    return message.length + ':' + message;\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n      doneCallback(null, setLengthHeader(message));\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(results.join(''));\n  });\n};\n\n/**\n * Async array map using after\n */\n\nfunction map(ary, each, done) {\n  var result = new Array(ary.length);\n  var next = after(ary.length, done);\n\n  var eachWithIndex = function(i, el, cb) {\n    each(el, function(error, msg) {\n      result[i] = msg;\n      cb(error, result);\n    });\n  };\n\n  for (var i = 0; i < ary.length; i++) {\n    eachWithIndex(i, ary[i], next);\n  }\n}\n\n/*\n * Decodes data when a payload is maybe expected. Possible binary contents are\n * decoded from their base64 representation\n *\n * @param {String} data, callback method\n * @api public\n */\n\nexports.decodePayload = function (data, binaryType, callback) {\n  if (typeof data !== 'string') {\n    return exports.decodePayloadAsBinary(data, binaryType, callback);\n  }\n\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var packet;\n  if (data === '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n  var length = '', n, msg;\n\n  for (var i = 0, l = data.length; i < l; i++) {\n    var chr = data.charAt(i);\n\n    if (chr !== ':') {\n      length += chr;\n      continue;\n    }\n\n    if (length === '' || (length != (n = Number(length)))) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    msg = data.substr(i + 1, n);\n\n    if (length != msg.length) {\n      // parser error - ignoring payload\n      return callback(err, 0, 1);\n    }\n\n    if (msg.length) {\n      packet = exports.decodePacket(msg, binaryType, false);\n\n      if (err.type === packet.type && err.data === packet.data) {\n        // parser error in individual packet - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      var ret = callback(packet, i + n, l);\n      if (false === ret) return;\n    }\n\n    // advance cursor\n    i += n;\n    length = '';\n  }\n\n  if (length !== '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n};\n\n/**\n * Encodes multiple messages (payload) as binary.\n *\n * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n * 255><data>\n *\n * Example:\n * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n *\n * @param {Array} packets\n * @return {ArrayBuffer} encoded payload\n * @api private\n */\n\nexports.encodePayloadAsArrayBuffer = function(packets, callback) {\n  if (!packets.length) {\n    return callback(new ArrayBuffer(0));\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(data) {\n      return doneCallback(null, data);\n    });\n  }\n\n  map(packets, encodeOne, function(err, encodedPackets) {\n    var totalLength = encodedPackets.reduce(function(acc, p) {\n      var len;\n      if (typeof p === 'string'){\n        len = p.length;\n      } else {\n        len = p.byteLength;\n      }\n      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n    }, 0);\n\n    var resultArray = new Uint8Array(totalLength);\n\n    var bufferIndex = 0;\n    encodedPackets.forEach(function(p) {\n      var isString = typeof p === 'string';\n      var ab = p;\n      if (isString) {\n        var view = new Uint8Array(p.length);\n        for (var i = 0; i < p.length; i++) {\n          view[i] = p.charCodeAt(i);\n        }\n        ab = view.buffer;\n      }\n\n      if (isString) { // not true binary\n        resultArray[bufferIndex++] = 0;\n      } else { // true binary\n        resultArray[bufferIndex++] = 1;\n      }\n\n      var lenStr = ab.byteLength.toString();\n      for (var i = 0; i < lenStr.length; i++) {\n        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n      }\n      resultArray[bufferIndex++] = 255;\n\n      var view = new Uint8Array(ab);\n      for (var i = 0; i < view.length; i++) {\n        resultArray[bufferIndex++] = view[i];\n      }\n    });\n\n    return callback(resultArray.buffer);\n  });\n};\n\n/**\n * Encode as Blob\n */\n\nexports.encodePayloadAsBlob = function(packets, callback) {\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(encoded) {\n      var binaryIdentifier = new Uint8Array(1);\n      binaryIdentifier[0] = 1;\n      if (typeof encoded === 'string') {\n        var view = new Uint8Array(encoded.length);\n        for (var i = 0; i < encoded.length; i++) {\n          view[i] = encoded.charCodeAt(i);\n        }\n        encoded = view.buffer;\n        binaryIdentifier[0] = 0;\n      }\n\n      var len = (encoded instanceof ArrayBuffer)\n        ? encoded.byteLength\n        : encoded.size;\n\n      var lenStr = len.toString();\n      var lengthAry = new Uint8Array(lenStr.length + 1);\n      for (var i = 0; i < lenStr.length; i++) {\n        lengthAry[i] = parseInt(lenStr[i]);\n      }\n      lengthAry[lenStr.length] = 255;\n\n      if (Blob) {\n        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n        doneCallback(null, blob);\n      }\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(new Blob(results));\n  });\n};\n\n/*\n * Decodes data when a payload is maybe expected. Strings are decoded by\n * interpreting each byte as a key code for entries marked to start with 0. See\n * description of encodePayloadAsBinary\n *\n * @param {ArrayBuffer} data, callback method\n * @api public\n */\n\nexports.decodePayloadAsBinary = function (data, binaryType, callback) {\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var bufferTail = data;\n  var buffers = [];\n\n  while (bufferTail.byteLength > 0) {\n    var tailArray = new Uint8Array(bufferTail);\n    var isString = tailArray[0] === 0;\n    var msgLength = '';\n\n    for (var i = 1; ; i++) {\n      if (tailArray[i] === 255) break;\n\n      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\n\n    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n    msgLength = parseInt(msgLength);\n\n    var msg = sliceBuffer(bufferTail, 0, msgLength);\n    if (isString) {\n      try {\n        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n      } catch (e) {\n        // iPhone Safari doesn't let you apply to typed arrays\n        var typed = new Uint8Array(msg);\n        msg = '';\n        for (var i = 0; i < typed.length; i++) {\n          msg += String.fromCharCode(typed[i]);\n        }\n      }\n    }\n\n    buffers.push(msg);\n    bufferTail = sliceBuffer(bufferTail, msgLength);\n  }\n\n  var total = buffers.length;\n  buffers.forEach(function(buffer, i) {\n    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n  });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 19\n// module chunks = 0","\n/**\n * Gets the keys for an object.\n *\n * @return {Array} keys\n * @api private\n */\n\nmodule.exports = Object.keys || function keys (obj){\n  var arr = [];\n  var has = Object.prototype.hasOwnProperty;\n\n  for (var i in obj) {\n    if (has.call(obj, i)) {\n      arr.push(i);\n    }\n  }\n  return arr;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 20\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\n  }\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 21\n// module chunks = 0","/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n  var bytes = arraybuffer.byteLength;\n  start = start || 0;\n  end = end || bytes;\n\n  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n  if (start < 0) { start += bytes; }\n  if (end < 0) { end += bytes; }\n  if (end > bytes) { end = bytes; }\n\n  if (start >= bytes || start >= end || bytes === 0) {\n    return new ArrayBuffer(0);\n  }\n\n  var abv = new Uint8Array(arraybuffer);\n  var result = new Uint8Array(end - start);\n  for (var i = start, ii = 0; i < end; i++, ii++) {\n    result[ii] = abv[i];\n  }\n  return result.buffer;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 22\n// module chunks = 0","module.exports = after\n\nfunction after(count, callback, err_cb) {\n    var bail = false\n    err_cb = err_cb || noop\n    proxy.count = count\n\n    return (count === 0) ? callback() : proxy\n\n    function proxy(err, result) {\n        if (proxy.count <= 0) {\n            throw new Error('after called too many times')\n        }\n        --proxy.count\n\n        // after first error, rest are passed to err_cb\n        if (err) {\n            bail = true\n            callback(err)\n            // future error callbacks will go to error handler\n            callback = err_cb\n        } else if (proxy.count === 0 && !bail) {\n            callback(null, result)\n        }\n    }\n}\n\nfunction noop() {}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 23\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 24\n// module chunks = 0","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(chars){\n  \"use strict\";\n\n  exports.encode = function(arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer),\n    i, len = bytes.length, base64 = \"\";\n\n    for (i = 0; i < len; i+=3) {\n      base64 += chars[bytes[i] >> 2];\n      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n      base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if ((len % 3) === 2) {\n      base64 = base64.substring(0, base64.length - 1) + \"=\";\n    } else if (len % 3 === 1) {\n      base64 = base64.substring(0, base64.length - 2) + \"==\";\n    }\n\n    return base64;\n  };\n\n  exports.decode =  function(base64) {\n    var bufferLength = base64.length * 0.75,\n    len = base64.length, i, p = 0,\n    encoded1, encoded2, encoded3, encoded4;\n\n    if (base64[base64.length - 1] === \"=\") {\n      bufferLength--;\n      if (base64[base64.length - 2] === \"=\") {\n        bufferLength--;\n      }\n    }\n\n    var arraybuffer = new ArrayBuffer(bufferLength),\n    bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i+=4) {\n      encoded1 = chars.indexOf(base64[i]);\n      encoded2 = chars.indexOf(base64[i+1]);\n      encoded3 = chars.indexOf(base64[i+2]);\n      encoded4 = chars.indexOf(base64[i+3]);\n\n      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n  };\n})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 25\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 26\n// module chunks = 0","/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\n\nexports.encode = function (obj) {\n  var str = '';\n\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      if (str.length) str += '&';\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n    }\n  }\n\n  return str;\n};\n\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\n\nexports.decode = function(qs){\n  var qry = {};\n  var pairs = qs.split('&');\n  for (var i = 0, l = pairs.length; i < l; i++) {\n    var pair = pairs[i].split('=');\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n  }\n  return qry;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 27\n// module chunks = 0","\nmodule.exports = function(a, b){\n  var fn = function(){};\n  fn.prototype = b.prototype;\n  a.prototype = new fn;\n  a.prototype.constructor = a;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 28\n// module chunks = 0","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n  , length = 64\n  , map = {}\n  , seed = 0\n  , i = 0\n  , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n  var encoded = '';\n\n  do {\n    encoded = alphabet[num % length] + encoded;\n    num = Math.floor(num / length);\n  } while (num > 0);\n\n  return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n  var decoded = 0;\n\n  for (i = 0; i < str.length; i++) {\n    decoded = decoded * length + map[str.charAt(i)];\n  }\n\n  return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n  var now = encode(+new Date());\n\n  if (now !== prev) return seed = 0, prev = now;\n  return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 29\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\nvar globalThis = require('../globalThis');\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n  Polling.call(this, opts);\n\n  this.query = this.query || {};\n\n  // define global callbacks array if not present\n  // we do this here (lazily) to avoid unneeded global pollution\n  if (!callbacks) {\n    // we need to consider multiple engines in the same page\n    callbacks = globalThis.___eio = (globalThis.___eio || []);\n  }\n\n  // callback identifier\n  this.index = callbacks.length;\n\n  // add callback to jsonp global\n  var self = this;\n  callbacks.push(function (msg) {\n    self.onData(msg);\n  });\n\n  // append to query string\n  this.query.j = this.index;\n\n  // prevent spurious errors from being emitted when the window is unloaded\n  if (typeof addEventListener === 'function') {\n    addEventListener('beforeunload', function () {\n      if (self.script) self.script.onerror = empty;\n    }, false);\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  if (this.form) {\n    this.form.parentNode.removeChild(this.form);\n    this.form = null;\n    this.iframe = null;\n  }\n\n  Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n  var self = this;\n  var script = document.createElement('script');\n\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  script.async = true;\n  script.src = this.uri();\n  script.onerror = function (e) {\n    self.onError('jsonp poll error', e);\n  };\n\n  var insertAt = document.getElementsByTagName('script')[0];\n  if (insertAt) {\n    insertAt.parentNode.insertBefore(script, insertAt);\n  } else {\n    (document.head || document.body).appendChild(script);\n  }\n  this.script = script;\n\n  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n  if (isUAgecko) {\n    setTimeout(function () {\n      var iframe = document.createElement('iframe');\n      document.body.appendChild(iframe);\n      document.body.removeChild(iframe);\n    }, 100);\n  }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n  var self = this;\n\n  if (!this.form) {\n    var form = document.createElement('form');\n    var area = document.createElement('textarea');\n    var id = this.iframeId = 'eio_iframe_' + this.index;\n    var iframe;\n\n    form.className = 'socketio';\n    form.style.position = 'absolute';\n    form.style.top = '-1000px';\n    form.style.left = '-1000px';\n    form.target = id;\n    form.method = 'POST';\n    form.setAttribute('accept-charset', 'utf-8');\n    area.name = 'd';\n    form.appendChild(area);\n    document.body.appendChild(form);\n\n    this.form = form;\n    this.area = area;\n  }\n\n  this.form.action = this.uri();\n\n  function complete () {\n    initIframe();\n    fn();\n  }\n\n  function initIframe () {\n    if (self.iframe) {\n      try {\n        self.form.removeChild(self.iframe);\n      } catch (e) {\n        self.onError('jsonp polling iframe removal error', e);\n      }\n    }\n\n    try {\n      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n      iframe = document.createElement(html);\n    } catch (e) {\n      iframe = document.createElement('iframe');\n      iframe.name = self.iframeId;\n      iframe.src = 'javascript:0';\n    }\n\n    iframe.id = self.iframeId;\n\n    self.form.appendChild(iframe);\n    self.iframe = iframe;\n  }\n\n  initIframe();\n\n  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n  data = data.replace(rEscapedNewline, '\\\\\\n');\n  this.area.value = data.replace(rNewline, '\\\\n');\n\n  try {\n    this.form.submit();\n  } catch (e) {}\n\n  if (this.iframe.attachEvent) {\n    this.iframe.onreadystatechange = function () {\n      if (self.iframe.readyState === 'complete') {\n        complete();\n      }\n    };\n  } else {\n    this.iframe.onload = complete;\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 30\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\nvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\n/**\n * Module exports.\n */\n\nmodule.exports = WS;\n\n/**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n\nfunction WS (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (forceBase64) {\n    this.supportsBinary = false;\n  }\n  this.perMessageDeflate = opts.perMessageDeflate;\n  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(WS, Transport);\n\n/**\n * Transport name.\n *\n * @api public\n */\n\nWS.prototype.name = 'websocket';\n\n/*\n * WebSockets support binary\n */\n\nWS.prototype.supportsBinary = true;\n\n/**\n * Opens socket.\n *\n * @api private\n */\n\nWS.prototype.doOpen = function () {\n  if (!this.check()) {\n    // let probe timeout\n    return;\n  }\n\n  var uri = this.uri();\n  var protocols = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\n\n    // SSL options for Node.js client\n    opts.pfx = this.pfx;\n    opts.key = this.key;\n    opts.passphrase = this.passphrase;\n    opts.cert = this.cert;\n    opts.ca = this.ca;\n    opts.ciphers = this.ciphers;\n    opts.rejectUnauthorized = this.rejectUnauthorized;\n  }\n\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(uri, protocols, opts);\n  } catch (err) {\n    return this.emit('error', err);\n  }\n\n  if (this.ws.binaryType === undefined) {\n    this.supportsBinary = false;\n  }\n\n  if (this.ws.supports && this.ws.supports.binary) {\n    this.supportsBinary = true;\n    this.ws.binaryType = 'nodebuffer';\n  } else {\n    this.ws.binaryType = 'arraybuffer';\n  }\n\n  this.addEventListeners();\n};\n\n/**\n * Adds event listeners to the socket\n *\n * @api private\n */\n\nWS.prototype.addEventListeners = function () {\n  var self = this;\n\n  this.ws.onopen = function () {\n    self.onOpen();\n  };\n  this.ws.onclose = function () {\n    self.onClose();\n  };\n  this.ws.onmessage = function (ev) {\n    self.onData(ev.data);\n  };\n  this.ws.onerror = function (e) {\n    self.onError('websocket error', e);\n  };\n};\n\n/**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n\nWS.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n\n  // encodePacket efficient as it uses WS framing\n  // no need for encodePayload\n  var total = packets.length;\n  for (var i = 0, l = total; i < l; i++) {\n    (function (packet) {\n      parser.encodePacket(packet, self.supportsBinary, function (data) {\n        if (!self.usingBrowserWebSocket) {\n          // always create a new object (GH-437)\n          var opts = {};\n          if (packet.options) {\n            opts.compress = packet.options.compress;\n          }\n\n          if (self.perMessageDeflate) {\n            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n            if (len < self.perMessageDeflate.threshold) {\n              opts.compress = false;\n            }\n          }\n        }\n\n        // Sometimes the websocket has already been closed but the browser didn't\n        // have a chance of informing us about it yet, in that case send will\n        // throw an error\n        try {\n          if (self.usingBrowserWebSocket) {\n            // TypeError is thrown when passing the second argument on Safari\n            self.ws.send(data);\n          } else {\n            self.ws.send(data, opts);\n          }\n        } catch (e) {\n\n        }\n\n        --total || done();\n      });\n    })(packets[i]);\n  }\n\n  function done () {\n    self.emit('flush');\n\n    // fake drain\n    // defer to next tick to allow Socket to clear writeBuffer\n    setTimeout(function () {\n      self.writable = true;\n      self.emit('drain');\n    }, 0);\n  }\n};\n\n/**\n * Called upon close\n *\n * @api private\n */\n\nWS.prototype.onClose = function () {\n  Transport.prototype.onClose.call(this);\n};\n\n/**\n * Closes socket.\n *\n * @api private\n */\n\nWS.prototype.doClose = function () {\n  if (typeof this.ws !== 'undefined') {\n    this.ws.close();\n  }\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nWS.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'wss' : 'ws';\n  var port = '';\n\n  // avoid port if default for schema\n  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(this.port) !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // append timestamp to URI\n  if (this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  // communicate binary support capabilities\n  if (!this.supportsBinary) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n/**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n\nWS.prototype.check = function () {\n  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 31\n// module chunks = 0","\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 33\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  if (!this.io.reconnecting) this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n\n\n  if (null != packet.id) {\n\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/socket.js","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 35\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/on.js","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 37\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 38\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/device_home/node_modules/statuses/HISTORY.md b/device_home/node_modules/statuses/HISTORY.md
deleted file mode 100644 (file)
index a1977b2..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-1.5.0 / 2018-03-27
-==================
-
-  * Add `103 Early Hints`
-
-1.4.0 / 2017-10-20
-==================
-
-  * Add `STATUS_CODES` export
-
-1.3.1 / 2016-11-11
-==================
-
-  * Fix return type in JSDoc
-
-1.3.0 / 2016-05-17
-==================
-
-  * Add `421 Misdirected Request`
-  * perf: enable strict mode
-
-1.2.1 / 2015-02-01
-==================
-
-  * Fix message for status 451
-    - `451 Unavailable For Legal Reasons`
-
-1.2.0 / 2014-09-28
-==================
-
-  * Add `208 Already Repored`
-  * Add `226 IM Used`
-  * Add `306 (Unused)`
-  * Add `415 Unable For Legal Reasons`
-  * Add `508 Loop Detected`
-
-1.1.1 / 2014-09-24
-==================
-
-  * Add missing 308 to `codes.json`
-
-1.1.0 / 2014-09-21
-==================
-
-  * Add `codes.json` for universal support
-
-1.0.4 / 2014-08-20
-==================
-
-  * Package cleanup
-
-1.0.3 / 2014-06-08
-==================
-
-  * Add 308 to `.redirect` category
-
-1.0.2 / 2014-03-13
-==================
-
-  * Add `.retry` category
-
-1.0.1 / 2014-03-12
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/statuses/README.md b/device_home/node_modules/statuses/README.md
deleted file mode 100644 (file)
index 0fe5720..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-# Statuses
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-HTTP status utility for node.
-
-This module provides a list of status codes and messages sourced from
-a few different projects:
-
-  * The [IANA Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml)
-  * The [Node.js project](https://nodejs.org/)
-  * The [NGINX project](https://www.nginx.com/)
-  * The [Apache HTTP Server project](https://httpd.apache.org/)
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install statuses
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var status = require('statuses')
-```
-
-### var code = status(Integer || String)
-
-If `Integer` or `String` is a valid HTTP code or status message, then the
-appropriate `code` will be returned. Otherwise, an error will be thrown.
-
-<!-- eslint-disable no-undef -->
-
-```js
-status(403) // => 403
-status('403') // => 403
-status('forbidden') // => 403
-status('Forbidden') // => 403
-status(306) // throws, as it's not supported by node.js
-```
-
-### status.STATUS_CODES
-
-Returns an object which maps status codes to status messages, in
-the same format as the
-[Node.js http module](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes).
-
-### status.codes
-
-Returns an array of all the status codes as `Integer`s.
-
-### var msg = status[code]
-
-Map of `code` to `status message`. `undefined` for invalid `code`s.
-
-<!-- eslint-disable no-undef, no-unused-expressions -->
-
-```js
-status[404] // => 'Not Found'
-```
-
-### var code = status[msg]
-
-Map of `status message` to `code`. `msg` can either be title-cased or
-lower-cased. `undefined` for invalid `status message`s.
-
-<!-- eslint-disable no-undef, no-unused-expressions -->
-
-```js
-status['not found'] // => 404
-status['Not Found'] // => 404
-```
-
-### status.redirect[code]
-
-Returns `true` if a status code is a valid redirect status.
-
-<!-- eslint-disable no-undef, no-unused-expressions -->
-
-```js
-status.redirect[200] // => undefined
-status.redirect[301] // => true
-```
-
-### status.empty[code]
-
-Returns `true` if a status code expects an empty body.
-
-<!-- eslint-disable no-undef, no-unused-expressions -->
-
-```js
-status.empty[200] // => undefined
-status.empty[204] // => true
-status.empty[304] // => true
-```
-
-### status.retry[code]
-
-Returns `true` if you should retry the rest.
-
-<!-- eslint-disable no-undef, no-unused-expressions -->
-
-```js
-status.retry[501] // => undefined
-status.retry[503] // => true
-```
-
-[npm-image]: https://img.shields.io/npm/v/statuses.svg
-[npm-url]: https://npmjs.org/package/statuses
-[node-version-image]: https://img.shields.io/node/v/statuses.svg
-[node-version-url]: https://nodejs.org/en/download
-[travis-image]: https://img.shields.io/travis/jshttp/statuses.svg
-[travis-url]: https://travis-ci.org/jshttp/statuses
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/statuses.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/statuses?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/statuses.svg
-[downloads-url]: https://npmjs.org/package/statuses
diff --git a/device_home/node_modules/string-width/readme.md b/device_home/node_modules/string-width/readme.md
deleted file mode 100644 (file)
index d39d95f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# string-width [![Build Status](https://travis-ci.org/sindresorhus/string-width.svg?branch=master)](https://travis-ci.org/sindresorhus/string-width)
-
-> Get the visual width of a string - the number of columns required to display it
-
-Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width.
-
-Useful to be able to measure the actual width of command-line output.
-
-
-## Install
-
-```
-$ npm install string-width
-```
-
-
-## Usage
-
-```js
-const stringWidth = require('string-width');
-
-stringWidth('古');
-//=> 2
-
-stringWidth('\u001b[1m古\u001b[22m');
-//=> 2
-
-stringWidth('a');
-//=> 1
-
-stringWidth('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007');
-// => 5
-```
-
-
-## Related
-
-- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module
-- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string
-- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/device_home/node_modules/strip-ansi/readme.md b/device_home/node_modules/strip-ansi/readme.md
deleted file mode 100644 (file)
index 8681fe8..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi)
-
-> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string
-
----
-
-<div align="center">
-       <b>
-               <a href="https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=readme">Get professional support for 'strip-ansi' with a Tidelift subscription</a>
-       </b>
-       <br>
-       <sub>
-               Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
-       </sub>
-</div>
-
----
-
-## Install
-
-```
-$ npm install strip-ansi
-```
-
-
-## Usage
-
-```js
-const stripAnsi = require('strip-ansi');
-
-stripAnsi('\u001B[4mUnicorn\u001B[0m');
-//=> 'Unicorn'
-
-stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007');
-//=> 'Click'
-```
-
-
-## Security
-
-To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
-
-
-## Related
-
-- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module
-- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module
-- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
-- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
-- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
-
-
-## Maintainers
-
-- [Sindre Sorhus](https://github.com/sindresorhus)
-- [Josh Junon](https://github.com/qix-)
-
-
-## License
-
-MIT
diff --git a/device_home/node_modules/supports-color/readme.md b/device_home/node_modules/supports-color/readme.md
deleted file mode 100755 (executable)
index f6e4019..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color)
-
-> Detect whether a terminal supports color
-
-
-## Install
-
-```
-$ npm install supports-color
-```
-
-
-## Usage
-
-```js
-const supportsColor = require('supports-color');
-
-if (supportsColor.stdout) {
-       console.log('Terminal stdout supports color');
-}
-
-if (supportsColor.stdout.has256) {
-       console.log('Terminal stdout supports 256 colors');
-}
-
-if (supportsColor.stderr.has16m) {
-       console.log('Terminal stderr supports 16 million colors (truecolor)');
-}
-```
-
-
-## API
-
-Returns an `Object` with a `stdout` and `stderr` property for testing either streams. Each property is an `Object`, or `false` if color is not supported.
-
-The `stdout`/`stderr` objects specifies a level of support for color through a `.level` property and a corresponding flag:
-
-- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors)
-- `.level = 2` and `.has256 = true`: 256 color support
-- `.level = 3` and `.has16m = true`: Truecolor support (16 million colors)
-
-
-## Info
-
-It obeys the `--color` and `--no-color` CLI flags.
-
-Can be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, add the environment variable `FORCE_COLOR=1` to forcefully enable color or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.
-
-Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.
-
-
-## Related
-
-- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module
-- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
-
-
-## Maintainers
-
-- [Sindre Sorhus](https://github.com/sindresorhus)
-- [Josh Junon](https://github.com/qix-)
-
-
-## License
-
-MIT
diff --git a/device_home/node_modules/to-array/README.md b/device_home/node_modules/to-array/README.md
deleted file mode 100644 (file)
index 0f35286..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# to-array
-
-Turn an array like into an array
-
-## Example
-
-``` js
-var toArray = require("to-array")
-    , elems = document.links
-
-var array = toArray(elems)
-```
-
-## Installation
-
-`npm install to-array`
-
-## Contributors
-
- - Raynos
-
-## MIT Licenced
diff --git a/device_home/node_modules/toidentifier/README.md b/device_home/node_modules/toidentifier/README.md
deleted file mode 100644 (file)
index 7c8794e..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# toidentifier
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][codecov-image]][codecov-url]
-
-> Convert a string of words to a JavaScript identifier
-
-## Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```bash
-$ npm install toidentifier
-```
-
-## Example
-
-```js
-var toIdentifier = require('toidentifier')
-
-console.log(toIdentifier('Bad Request'))
-// => "BadRequest"
-```
-
-## API
-
-This CommonJS module exports a single default function: `toIdentifier`.
-
-### toIdentifier(string)
-
-Given a string as the argument, it will be transformed according to
-the following rules and the new string will be returned:
-
-1. Split into words separated by space characters (`0x20`).
-2. Upper case the first character of each word.
-3. Join the words together with no separator.
-4. Remove all non-word (`[0-9a-z_]`) characters.
-
-## License
-
-[MIT](LICENSE)
-
-[codecov-image]: https://img.shields.io/codecov/c/github/component/toidentifier.svg
-[codecov-url]: https://codecov.io/gh/component/toidentifier
-[downloads-image]: https://img.shields.io/npm/dm/toidentifier.svg
-[downloads-url]: https://npmjs.org/package/toidentifier
-[npm-image]: https://img.shields.io/npm/v/toidentifier.svg
-[npm-url]: https://npmjs.org/package/toidentifier
-[travis-image]: https://img.shields.io/travis/component/toidentifier/master.svg
-[travis-url]: https://travis-ci.org/component/toidentifier
-
-
-##
-
-[npm]: https://www.npmjs.com/
-
-[yarn]: https://yarnpkg.com/
diff --git a/device_home/node_modules/type-is/HISTORY.md b/device_home/node_modules/type-is/HISTORY.md
deleted file mode 100644 (file)
index 8de21f7..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-1.6.18 / 2019-04-26
-===================
-
-  * Fix regression passing request object to `typeis.is`
-
-1.6.17 / 2019-04-25
-===================
-
-  * deps: mime-types@~2.1.24
-    - Add Apple file extensions from IANA
-    - Add extension `.csl` to `application/vnd.citationstyles.style+xml`
-    - Add extension `.es` to `application/ecmascript`
-    - Add extension `.nq` to `application/n-quads`
-    - Add extension `.nt` to `application/n-triples`
-    - Add extension `.owl` to `application/rdf+xml`
-    - Add extensions `.siv` and `.sieve` to `application/sieve`
-    - Add extensions from IANA for `image/*` types
-    - Add extensions from IANA for `model/*` types
-    - Add extensions to HEIC image types
-    - Add new mime types
-    - Add `text/mdx` with extension `.mdx`
-  * perf: prevent internal `throw` on invalid type
-
-1.6.16 / 2018-02-16
-===================
-
-  * deps: mime-types@~2.1.18
-    - Add `application/raml+yaml` with extension `.raml`
-    - Add `application/wasm` with extension `.wasm`
-    - Add `text/shex` with extension `.shex`
-    - Add extensions for JPEG-2000 images
-    - Add extensions from IANA for `message/*` types
-    - Add extension `.mjs` to `application/javascript`
-    - Add extension `.wadl` to `application/vnd.sun.wadl+xml`
-    - Add extension `.gz` to `application/gzip`
-    - Add glTF types and extensions
-    - Add new mime types
-    - Update extensions `.md` and `.markdown` to be `text/markdown`
-    - Update font MIME types
-    - Update `text/hjson` to registered `application/hjson`
-
-1.6.15 / 2017-03-31
-===================
-
-  * deps: mime-types@~2.1.15
-    - Add new mime types
-
-1.6.14 / 2016-11-18
-===================
-
-  * deps: mime-types@~2.1.13
-    - Add new mime types
-
-1.6.13 / 2016-05-18
-===================
-
-  * deps: mime-types@~2.1.11
-    - Add new mime types
-
-1.6.12 / 2016-02-28
-===================
-
-  * deps: mime-types@~2.1.10
-    - Add new mime types
-    - Fix extension of `application/dash+xml`
-    - Update primary extension for `audio/mp4`
-
-1.6.11 / 2016-01-29
-===================
-
-  * deps: mime-types@~2.1.9
-    - Add new mime types
-
-1.6.10 / 2015-12-01
-===================
-
-  * deps: mime-types@~2.1.8
-    - Add new mime types
-
-1.6.9 / 2015-09-27
-==================
-
-  * deps: mime-types@~2.1.7
-    - Add new mime types
-
-1.6.8 / 2015-09-04
-==================
-
-  * deps: mime-types@~2.1.6
-    - Add new mime types
-
-1.6.7 / 2015-08-20
-==================
-
-  * Fix type error when given invalid type to match against
-  * deps: mime-types@~2.1.5
-    - Add new mime types
-
-1.6.6 / 2015-07-31
-==================
-
-  * deps: mime-types@~2.1.4
-    - Add new mime types
-
-1.6.5 / 2015-07-16
-==================
-
-  * deps: mime-types@~2.1.3
-    - Add new mime types
-
-1.6.4 / 2015-07-01
-==================
-
-  * deps: mime-types@~2.1.2
-    - Add new mime types
-  * perf: enable strict mode
-  * perf: remove argument reassignment
-
-1.6.3 / 2015-06-08
-==================
-
-  * deps: mime-types@~2.1.1
-    - Add new mime types
-  * perf: reduce try block size
-  * perf: remove bitwise operations
-
-1.6.2 / 2015-05-10
-==================
-
-  * deps: mime-types@~2.0.11
-    - Add new mime types
-
-1.6.1 / 2015-03-13
-==================
-
-  * deps: mime-types@~2.0.10
-    - Add new mime types
-
-1.6.0 / 2015-02-12
-==================
-
-  * fix false-positives in `hasBody` `Transfer-Encoding` check
-  * support wildcard for both type and subtype (`*/*`)
-
-1.5.7 / 2015-02-09
-==================
-
-  * fix argument reassignment
-  * deps: mime-types@~2.0.9
-    - Add new mime types
-
-1.5.6 / 2015-01-29
-==================
-
-  * deps: mime-types@~2.0.8
-    - Add new mime types
-
-1.5.5 / 2014-12-30
-==================
-
-  * deps: mime-types@~2.0.7
-    - Add new mime types
-    - Fix missing extensions
-    - Fix various invalid MIME type entries
-    - Remove example template MIME types
-    - deps: mime-db@~1.5.0
-
-1.5.4 / 2014-12-10
-==================
-
-  * deps: mime-types@~2.0.4
-    - Add new mime types
-    - deps: mime-db@~1.3.0
-
-1.5.3 / 2014-11-09
-==================
-
-  * deps: mime-types@~2.0.3
-    - Add new mime types
-    - deps: mime-db@~1.2.0
-
-1.5.2 / 2014-09-28
-==================
-
-  * deps: mime-types@~2.0.2
-    - Add new mime types
-    - deps: mime-db@~1.1.0
-
-1.5.1 / 2014-09-07
-==================
-
-  * Support Node.js 0.6
-  * deps: media-typer@0.3.0
-  * deps: mime-types@~2.0.1
-    - Support Node.js 0.6
-
-1.5.0 / 2014-09-05
-==================
-
- * fix `hasbody` to be true for `content-length: 0`
-
-1.4.0 / 2014-09-02
-==================
-
- * update mime-types
-
-1.3.2 / 2014-06-24
-==================
-
- * use `~` range on mime-types
-
-1.3.1 / 2014-06-19
-==================
-
- * fix global variable leak
-
-1.3.0 / 2014-06-19
-==================
-
- * improve type parsing
-
-   - invalid media type never matches
-   - media type not case-sensitive
-   - extra LWS does not affect results
-
-1.2.2 / 2014-06-19
-==================
-
- * fix behavior on unknown type argument
-
-1.2.1 / 2014-06-03
-==================
-
- * switch dependency from `mime` to `mime-types@1.0.0`
-
-1.2.0 / 2014-05-11
-==================
-
- * support suffix matching:
-
-   - `+json` matches `application/vnd+json`
-   - `*/vnd+json` matches `application/vnd+json`
-   - `application/*+json` matches `application/vnd+json`
-
-1.1.0 / 2014-04-12
-==================
-
- * add non-array values support
- * expose internal utilities:
-
-   - `.is()`
-   - `.hasBody()`
-   - `.normalize()`
-   - `.match()`
-
-1.0.1 / 2014-03-30
-==================
-
- * add `multipart` as a shorthand
diff --git a/device_home/node_modules/type-is/README.md b/device_home/node_modules/type-is/README.md
deleted file mode 100644 (file)
index b85ef8f..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-# type-is
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Infer the content-type of a request.
-
-### Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install type-is
-```
-
-## API
-
-```js
-var http = require('http')
-var typeis = require('type-is')
-
-http.createServer(function (req, res) {
-  var istext = typeis(req, ['text/*'])
-  res.end('you ' + (istext ? 'sent' : 'did not send') + ' me text')
-})
-```
-
-### typeis(request, types)
-
-Checks if the `request` is one of the `types`. If the request has no body,
-even if there is a `Content-Type` header, then `null` is returned. If the
-`Content-Type` header is invalid or does not matches any of the `types`, then
-`false` is returned. Otherwise, a string of the type that matched is returned.
-
-The `request` argument is expected to be a Node.js HTTP request. The `types`
-argument is an array of type strings.
-
-Each type in the `types` array can be one of the following:
-
-- A file extension name such as `json`. This name will be returned if matched.
-- A mime type such as `application/json`.
-- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`.
-  The full mime type will be returned if matched.
-- A suffix such as `+json`. This can be combined with a wildcard such as
-  `*/vnd+json` or `application/*+json`. The full mime type will be returned
-  if matched.
-
-Some examples to illustrate the inputs and returned value:
-
-<!-- eslint-disable no-undef -->
-
-```js
-// req.headers.content-type = 'application/json'
-
-typeis(req, ['json']) // => 'json'
-typeis(req, ['html', 'json']) // => 'json'
-typeis(req, ['application/*']) // => 'application/json'
-typeis(req, ['application/json']) // => 'application/json'
-
-typeis(req, ['html']) // => false
-```
-
-### typeis.hasBody(request)
-
-Returns a Boolean if the given `request` has a body, regardless of the
-`Content-Type` header.
-
-Having a body has no relation to how large the body is (it may be 0 bytes).
-This is similar to how file existence works. If a body does exist, then this
-indicates that there is data to read from the Node.js request stream.
-
-<!-- eslint-disable no-undef -->
-
-```js
-if (typeis.hasBody(req)) {
-  // read the body, since there is one
-
-  req.on('data', function (chunk) {
-    // ...
-  })
-}
-```
-
-### typeis.is(mediaType, types)
-
-Checks if the `mediaType` is one of the `types`. If the `mediaType` is invalid
-or does not matches any of the `types`, then `false` is returned. Otherwise, a
-string of the type that matched is returned.
-
-The `mediaType` argument is expected to be a
-[media type](https://tools.ietf.org/html/rfc6838) string. The `types` argument
-is an array of type strings.
-
-Each type in the `types` array can be one of the following:
-
-- A file extension name such as `json`. This name will be returned if matched.
-- A mime type such as `application/json`.
-- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`.
-  The full mime type will be returned if matched.
-- A suffix such as `+json`. This can be combined with a wildcard such as
-  `*/vnd+json` or `application/*+json`. The full mime type will be returned
-  if matched.
-
-Some examples to illustrate the inputs and returned value:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var mediaType = 'application/json'
-
-typeis.is(mediaType, ['json']) // => 'json'
-typeis.is(mediaType, ['html', 'json']) // => 'json'
-typeis.is(mediaType, ['application/*']) // => 'application/json'
-typeis.is(mediaType, ['application/json']) // => 'application/json'
-
-typeis.is(mediaType, ['html']) // => false
-```
-
-## Examples
-
-### Example body parser
-
-```js
-var express = require('express')
-var typeis = require('type-is')
-
-var app = express()
-
-app.use(function bodyParser (req, res, next) {
-  if (!typeis.hasBody(req)) {
-    return next()
-  }
-
-  switch (typeis(req, ['urlencoded', 'json', 'multipart'])) {
-    case 'urlencoded':
-      // parse urlencoded body
-      throw new Error('implement urlencoded body parsing')
-    case 'json':
-      // parse json body
-      throw new Error('implement json body parsing')
-    case 'multipart':
-      // parse multipart body
-      throw new Error('implement multipart body parsing')
-    default:
-      // 415 error code
-      res.statusCode = 415
-      res.end()
-      break
-  }
-})
-```
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/type-is/master
-[coveralls-url]: https://coveralls.io/r/jshttp/type-is?branch=master
-[node-version-image]: https://badgen.net/npm/node/type-is
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/type-is
-[npm-url]: https://npmjs.org/package/type-is
-[npm-version-image]: https://badgen.net/npm/v/type-is
-[travis-image]: https://badgen.net/travis/jshttp/type-is/master
-[travis-url]: https://travis-ci.org/jshttp/type-is
diff --git a/device_home/node_modules/uid-safe/HISTORY.md b/device_home/node_modules/uid-safe/HISTORY.md
deleted file mode 100755 (executable)
index 3ec249f..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-2.1.5 / 2017-08-02
-==================
-
-  * perf: remove only trailing `=`
-
-2.1.4 / 2017-03-02
-==================
-
-  * Remove `base64-url` dependency
-
-2.1.3 / 2016-10-30
-==================
-
-  * deps: base64-url@1.3.3
-
-2.1.2 / 2016-08-15
-==================
-
-  * deps: base64-url@1.3.2
-
-2.1.1 / 2016-05-04
-==================
-
-  * deps: base64-url@1.2.2
-
-2.1.0 / 2016-01-17
-==================
-
-  * Use `random-bytes` for byte source
-
-2.0.0 / 2015-05-08
-==================
-
-  * Use global `Promise` when returning a promise
-
-1.1.0 / 2015-02-01
-==================
-
-  * Use `crypto.randomBytes`, if available
-  * deps: base64-url@1.2.1
-
-1.0.3 / 2015-01-31
-==================
-
-  * Fix error branch that would throw
-  * deps: base64-url@1.2.0
-
-1.0.2 / 2015-01-08
-==================
-
-  * Remove dependency on `mz`
-
-1.0.1 / 2014-06-18
-==================
-
-  * Remove direct `bluebird` dependency
-
-1.0.0 / 2014-06-18
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/uid-safe/README.md b/device_home/node_modules/uid-safe/README.md
deleted file mode 100755 (executable)
index fa02be8..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# uid-safe
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-URL and cookie safe UIDs
-
-Create cryptographically secure UIDs safe for both cookie and URL usage.
-This is in contrast to modules such as [rand-token](https://www.npmjs.com/package/rand-token)
-and [uid2](https://www.npmjs.com/package/uid2) whose UIDs are actually skewed
-due to the use of `%` and unnecessarily truncate the UID.
-Use this if you could still use UIDs with `-` and `_` in them.
-
-## Installation
-
-```sh
-$ npm install uid-safe
-```
-
-## API
-
-```js
-var uid = require('uid-safe')
-```
-
-### uid(byteLength, callback)
-
-Asynchronously create a UID with a specific byte length. Because `base64`
-encoding is used underneath, this is not the string length. For example,
-to create a UID of length 24, you want a byte length of 18.
-
-```js
-uid(18, function (err, string) {
-  if (err) throw err
-  // do something with the string
-})
-```
-
-### uid(byteLength)
-
-Asynchronously create a UID with a specific byte length and return a
-`Promise`.
-
-**Note**: To use promises in Node.js _prior to 0.12_, promises must be
-"polyfilled" using `global.Promise = require('bluebird')`.
-
-```js
-uid(18).then(function (string) {
-  // do something with the string
-})
-```
-
-### uid.sync(byteLength)
-
-A synchronous version of above.
-
-```js
-var string = uid.sync(18)
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/uid-safe.svg
-[npm-url]: https://npmjs.org/package/uid-safe
-[node-version-image]: https://img.shields.io/node/v/uid-safe.svg
-[node-version-url]: https://nodejs.org/en/download/
-[travis-image]: https://img.shields.io/travis/crypto-utils/uid-safe/master.svg
-[travis-url]: https://travis-ci.org/crypto-utils/uid-safe
-[coveralls-image]: https://img.shields.io/coveralls/crypto-utils/uid-safe/master.svg
-[coveralls-url]: https://coveralls.io/r/crypto-utils/uid-safe?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/uid-safe.svg
-[downloads-url]: https://npmjs.org/package/uid-safe
diff --git a/device_home/node_modules/unpipe/HISTORY.md b/device_home/node_modules/unpipe/HISTORY.md
deleted file mode 100644 (file)
index 85e0f8d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-1.0.0 / 2015-06-14
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/unpipe/README.md b/device_home/node_modules/unpipe/README.md
deleted file mode 100644 (file)
index e536ad2..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# unpipe
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Unpipe a stream from all destinations.
-
-## Installation
-
-```sh
-$ npm install unpipe
-```
-
-## API
-
-```js
-var unpipe = require('unpipe')
-```
-
-### unpipe(stream)
-
-Unpipes all destinations from a given stream. With stream 2+, this is
-equivalent to `stream.unpipe()`. When used with streams 1 style streams
-(typically Node.js 0.8 and below), this module attempts to undo the
-actions done in `stream.pipe(dest)`.
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/unpipe.svg
-[npm-url]: https://npmjs.org/package/unpipe
-[node-image]: https://img.shields.io/node/v/unpipe.svg
-[node-url]: http://nodejs.org/download/
-[travis-image]: https://img.shields.io/travis/stream-utils/unpipe.svg
-[travis-url]: https://travis-ci.org/stream-utils/unpipe
-[coveralls-image]: https://img.shields.io/coveralls/stream-utils/unpipe.svg
-[coveralls-url]: https://coveralls.io/r/stream-utils/unpipe?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/unpipe.svg
-[downloads-url]: https://npmjs.org/package/unpipe
diff --git a/device_home/node_modules/utils-merge/README.md b/device_home/node_modules/utils-merge/README.md
deleted file mode 100644 (file)
index 0cb7117..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# utils-merge
-
-[![Version](https://img.shields.io/npm/v/utils-merge.svg?label=version)](https://www.npmjs.com/package/utils-merge)
-[![Build](https://img.shields.io/travis/jaredhanson/utils-merge.svg)](https://travis-ci.org/jaredhanson/utils-merge)
-[![Quality](https://img.shields.io/codeclimate/github/jaredhanson/utils-merge.svg?label=quality)](https://codeclimate.com/github/jaredhanson/utils-merge)
-[![Coverage](https://img.shields.io/coveralls/jaredhanson/utils-merge.svg)](https://coveralls.io/r/jaredhanson/utils-merge)
-[![Dependencies](https://img.shields.io/david/jaredhanson/utils-merge.svg)](https://david-dm.org/jaredhanson/utils-merge)
-
-
-Merges the properties from a source object into a destination object.
-
-## Install
-
-```bash
-$ npm install utils-merge
-```
-
-## Usage
-
-```javascript
-var a = { foo: 'bar' }
-  , b = { bar: 'baz' };
-
-merge(a, b);
-// => { foo: 'bar', bar: 'baz' }
-```
-
-## License
-
-[The MIT License](http://opensource.org/licenses/MIT)
-
-Copyright (c) 2013-2017 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)>
-
-<a target='_blank' rel='nofollow' href='https://app.codesponsor.io/link/vK9dyjRnnWsMzzJTQ57fRJpH/jaredhanson/utils-merge'>  <img alt='Sponsor' width='888' height='68' src='https://app.codesponsor.io/embed/vK9dyjRnnWsMzzJTQ57fRJpH/jaredhanson/utils-merge.svg' /></a>
diff --git a/device_home/node_modules/vary/HISTORY.md b/device_home/node_modules/vary/HISTORY.md
deleted file mode 100644 (file)
index f6cbcf7..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-1.1.2 / 2017-09-23
-==================
-
-  * perf: improve header token parsing speed
-
-1.1.1 / 2017-03-20
-==================
-
-  * perf: hoist regular expression
-
-1.1.0 / 2015-09-29
-==================
-
-  * Only accept valid field names in the `field` argument
-    - Ensures the resulting string is a valid HTTP header value
-
-1.0.1 / 2015-07-08
-==================
-
-  * Fix setting empty header from empty `field`
-  * perf: enable strict mode
-  * perf: remove argument reassignments
-
-1.0.0 / 2014-08-10
-==================
-
-  * Accept valid `Vary` header string as `field`
-  * Add `vary.append` for low-level string manipulation
-  * Move to `jshttp` orgainzation
-
-0.1.0 / 2014-06-05
-==================
-
-  * Support array of fields to set
-
-0.0.0 / 2014-06-04
-==================
-
-  * Initial release
diff --git a/device_home/node_modules/vary/README.md b/device_home/node_modules/vary/README.md
deleted file mode 100644 (file)
index cc000b3..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# vary
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Manipulate the HTTP Vary header
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): 
-
-```sh
-$ npm install vary
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var vary = require('vary')
-```
-
-### vary(res, field)
-
-Adds the given header `field` to the `Vary` response header of `res`.
-This can be a string of a single field, a string of a valid `Vary`
-header, or an array of multiple fields.
-
-This will append the header if not already listed, otherwise leaves
-it listed in the current location.
-
-<!-- eslint-disable no-undef -->
-
-```js
-// Append "Origin" to the Vary header of the response
-vary(res, 'Origin')
-```
-
-### vary.append(header, field)
-
-Adds the given header `field` to the `Vary` response header string `header`.
-This can be a string of a single field, a string of a valid `Vary` header,
-or an array of multiple fields.
-
-This will append the header if not already listed, otherwise leaves
-it listed in the current location. The new header string is returned.
-
-<!-- eslint-disable no-undef -->
-
-```js
-// Get header string appending "Origin" to "Accept, User-Agent"
-vary.append('Accept, User-Agent', 'Origin')
-```
-
-## Examples
-
-### Updating the Vary header when content is based on it
-
-```js
-var http = require('http')
-var vary = require('vary')
-
-http.createServer(function onRequest (req, res) {
-  // about to user-agent sniff
-  vary(res, 'User-Agent')
-
-  var ua = req.headers['user-agent'] || ''
-  var isMobile = /mobi|android|touch|mini/i.test(ua)
-
-  // serve site, depending on isMobile
-  res.setHeader('Content-Type', 'text/html')
-  res.end('You are (probably) ' + (isMobile ? '' : 'not ') + 'a mobile user')
-})
-```
-
-## Testing
-
-```sh
-$ npm test
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/vary.svg
-[npm-url]: https://npmjs.org/package/vary
-[node-version-image]: https://img.shields.io/node/v/vary.svg
-[node-version-url]: https://nodejs.org/en/download
-[travis-image]: https://img.shields.io/travis/jshttp/vary/master.svg
-[travis-url]: https://travis-ci.org/jshttp/vary
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/vary/master.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/vary
-[downloads-image]: https://img.shields.io/npm/dm/vary.svg
-[downloads-url]: https://npmjs.org/package/vary
diff --git a/device_home/node_modules/which-module/CHANGELOG.md b/device_home/node_modules/which-module/CHANGELOG.md
deleted file mode 100644 (file)
index 863d469..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-<a name="2.0.0"></a>
-# [2.0.0](https://github.com/nexdrew/which-module/compare/v1.0.0...v2.0.0) (2017-05-01)
-
-
-### Features
-
-* remove Node < 4 from official testing/support ([#22](https://github.com/nexdrew/which-module/issues/22)) ([ee7aff4](https://github.com/nexdrew/which-module/commit/ee7aff4))
-
-
-### BREAKING CHANGES
-
-* Node 0.10 or 0.12 no longer supported, please update to Node 4+ or use which-module@1.0.0
-
-
-
-<a name="1.0.0"></a>
-# 1.0.0 (2016-06-06)
-
-
-### Features
-
-* initial code ([08074cd](https://github.com/nexdrew/which-module/commit/08074cd))
diff --git a/device_home/node_modules/which-module/README.md b/device_home/node_modules/which-module/README.md
deleted file mode 100644 (file)
index a8c4bf8..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-# which-module
-
-> Find the module object for something that was require()d
-
-[![Build Status](https://travis-ci.org/nexdrew/which-module.svg?branch=master)](https://travis-ci.org/nexdrew/which-module)
-[![Coverage Status](https://coveralls.io/repos/github/nexdrew/which-module/badge.svg?branch=master)](https://coveralls.io/github/nexdrew/which-module?branch=master)
-[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version)
-
-Find the `module` object in `require.cache` for something that was `require()`d
-or `import`ed - essentially a reverse `require()` lookup.
-
-Useful for libs that want to e.g. lookup a filename for a module or submodule
-that it did not `require()` itself.
-
-## Install and Usage
-
-```
-npm install --save which-module
-```
-
-```js
-const whichModule = require('which-module')
-
-console.log(whichModule(require('something')))
-// Module {
-//   id: '/path/to/project/node_modules/something/index.js',
-//   exports: [Function],
-//   parent: ...,
-//   filename: '/path/to/project/node_modules/something/index.js',
-//   loaded: true,
-//   children: [],
-//   paths: [ '/path/to/project/node_modules/something/node_modules',
-//            '/path/to/project/node_modules',
-//            '/path/to/node_modules',
-//            '/path/node_modules',
-//            '/node_modules' ] }
-```
-
-## API
-
-### `whichModule(exported)`
-
-Return the [`module` object](https://nodejs.org/api/modules.html#modules_the_module_object),
-if any, that represents the given argument in the `require.cache`.
-
-`exported` can be anything that was previously `require()`d or `import`ed as a
-module, submodule, or dependency - which means `exported` is identical to the
-`module.exports` returned by this method.
-
-If `exported` did not come from the `exports` of a `module` in `require.cache`,
-then this method returns `null`.
-
-## License
-
-ISC © Contributors
diff --git a/device_home/node_modules/wrap-ansi/readme.md b/device_home/node_modules/wrap-ansi/readme.md
deleted file mode 100644 (file)
index 73b87de..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-# wrap-ansi [![Build Status](https://travis-ci.org/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.org/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master)
-
-> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles)
-
-
-## Install
-
-```
-$ npm install wrap-ansi
-```
-
-
-## Usage
-
-```js
-const chalk = require('chalk');
-const wrapAnsi = require('wrap-ansi');
-
-const input = 'The quick brown ' + chalk.red('fox jumped over ') +
-       'the lazy ' + chalk.green('dog and then ran away with the unicorn.');
-
-console.log(wrapAnsi(input, 20));
-```
-
-<img width="331" src="screenshot.png">
-
----
-
-<div align="center">
-       <b>
-               <a href="https://tidelift.com/subscription/pkg/npm-wrap_ansi?utm_source=npm-wrap-ansi&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
-       </b>
-       <br>
-       <sub>
-               Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
-       </sub>
-</div>
-
----
-
-
-## API
-
-### wrapAnsi(input, columns, [options])
-
-Wrap words to the specified column width.
-
-#### input
-
-Type: `string`
-
-String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk).
-
-#### columns
-
-Type: `number`
-
-Number of columns to wrap the text to.
-
-#### options
-
-Type: `Object`
-
-##### hard
-
-Type: `boolean`<br>
-Default: `false`
-
-By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width.
-
-##### wordWrap
-
-Type: `boolean`<br>
-Default: `true`
-
-By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary.
-
-##### trim
-
-Type: `boolean`<br>
-Default: `true`
-
-Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim.
-
-
-## Related
-
-- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes
-- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal
-- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
-- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures.
-
-
-## Maintainers
-
-- [Sindre Sorhus](https://github.com/sindresorhus)
-- [Josh Junon](https://github.com/qix-)
-- [Benjamin Coe](https://github.com/bcoe)
-
-
-## Security
-
-To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
-
-
-## License
-
-MIT
diff --git a/device_home/node_modules/ws/README.md b/device_home/node_modules/ws/README.md
deleted file mode 100755 (executable)
index 3fd9a8c..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-# ws: a Node.js WebSocket library
-
-[![Version npm](https://img.shields.io/npm/v/ws.svg)](https://www.npmjs.com/package/ws)
-[![Linux Build](https://img.shields.io/travis/websockets/ws/master.svg)](https://travis-ci.org/websockets/ws)
-[![Windows Build](https://ci.appveyor.com/api/projects/status/github/websockets/ws?branch=master&svg=true)](https://ci.appveyor.com/project/lpinca/ws)
-[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg)](https://coveralls.io/r/websockets/ws?branch=master)
-
-ws is a simple to use, blazing fast, and thoroughly tested WebSocket client
-and server implementation.
-
-Passes the quite extensive Autobahn test suite: [server][server-report],
-[client][client-report].
-
-**Note**: This module does not work in the browser. The client in the docs is a
-reference to a back end with the role of a client in the WebSocket
-communication. Browser clients must use the native
-[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) object.
-To make the same code work seamlessly on Node.js and the browser, you can use
-one of the many wrappers available on npm, like
-[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws).
-
-## Table of Contents
-
-* [Protocol support](#protocol-support)
-* [Installing](#installing)
-  + [Opt-in for performance and spec compliance](#opt-in-for-performance-and-spec-compliance)
-* [API docs](#api-docs)
-* [WebSocket compression](#websocket-compression)
-* [Usage examples](#usage-examples)
-  + [Sending and receiving text data](#sending-and-receiving-text-data)
-  + [Sending binary data](#sending-binary-data)
-  + [Simple server](#simple-server)
-  + [External HTTP/S server](#external-https-server)
-  + [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server)
-  + [Server broadcast](#server-broadcast)
-  + [echo.websocket.org demo](#echowebsocketorg-demo)
-  + [Other examples](#other-examples)
-* [Error handling best practices](#error-handling-best-practices)
-* [FAQ](#faq)
-  + [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client)
-  + [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections)
-  + [How to connect via a proxy?](#how-to-connect-via-a-proxy)
-* [Changelog](#changelog)
-* [License](#license)
-
-## Protocol support
-
-* **HyBi drafts 07-12** (Use the option `protocolVersion: 8`)
-* **HyBi drafts 13-17** (Current default, alternatively option `protocolVersion: 13`)
-
-## Installing
-
-```
-npm install --save ws
-```
-
-### Opt-in for performance and spec compliance
-
-There are 2 optional modules that can be installed along side with the ws
-module. These modules are binary addons which improve certain operations.
-Prebuilt binaries are available for the most popular platforms so you don't
-necessarily need to have a C++ compiler installed on your machine.
-
-- `npm install --save-optional bufferutil`: Allows to efficiently perform
-  operations such as masking and unmasking the data payload of the WebSocket
-  frames.
-- `npm install --save-optional utf-8-validate`: Allows to efficiently check
-  if a message contains valid UTF-8 as required by the spec.
-
-## API docs
-
-See [`/doc/ws.md`](./doc/ws.md) for Node.js-like docs for the ws classes.
-
-## WebSocket compression
-
-ws supports the [permessage-deflate extension][permessage-deflate] which
-enables the client and server to negotiate a compression algorithm and its
-parameters, and then selectively apply it to the data payloads of each
-WebSocket message.
-
-The extension is disabled by default on the server and enabled by default on
-the client. It adds a significant overhead in terms of performance and memory
-consumption so we suggest to enable it only if it is really needed.
-
-Note that Node.js has a variety of issues with high-performance compression,
-where increased concurrency, especially on Linux, can lead to
-[catastrophic memory fragmentation][node-zlib-bug] and slow performance.
-If you intend to use permessage-deflate in production, it is worthwhile to set
-up a test representative of your workload and ensure Node.js/zlib will handle
-it with acceptable performance and memory usage.
-
-Tuning of permessage-deflate can be done via the options defined below. You can
-also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly
-into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs].
-
-See [the docs][ws-server-options] for more options.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({
-  port: 8080,
-  perMessageDeflate: {
-    zlibDeflateOptions: { // See zlib defaults.
-      chunkSize: 1024,
-      memLevel: 7,
-      level: 3,
-    },
-    zlibInflateOptions: {
-      chunkSize: 10 * 1024
-    },
-    // Other options settable:
-    clientNoContextTakeover: true, // Defaults to negotiated value.
-    serverNoContextTakeover: true, // Defaults to negotiated value.
-    clientMaxWindowBits: 10,       // Defaults to negotiated value.
-    serverMaxWindowBits: 10,       // Defaults to negotiated value.
-    // Below options specified as default values.
-    concurrencyLimit: 10,          // Limits zlib concurrency for perf.
-    threshold: 1024,               // Size (in bytes) below which messages
-                                   // should not be compressed.
-  }
-});
-```
-
-The client will only use the extension if it is supported and enabled on the
-server. To always disable the extension on the client set the
-`perMessageDeflate` option to `false`.
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path', {
-  perMessageDeflate: false
-});
-```
-
-## Usage examples
-
-### Sending and receiving text data
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path');
-
-ws.on('open', function open() {
-  ws.send('something');
-});
-
-ws.on('message', function incoming(data) {
-  console.log(data);
-});
-```
-
-### Sending binary data
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path');
-
-ws.on('open', function open() {
-  const array = new Float32Array(5);
-
-  for (var i = 0; i < array.length; ++i) {
-    array[i] = i / 2;
-  }
-
-  ws.send(array);
-});
-```
-
-### Simple server
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(message) {
-    console.log('received: %s', message);
-  });
-
-  ws.send('something');
-});
-```
-
-### External HTTP/S server
-
-```js
-const fs = require('fs');
-const https = require('https');
-const WebSocket = require('ws');
-
-const server = new https.createServer({
-  cert: fs.readFileSync('/path/to/cert.pem'),
-  key: fs.readFileSync('/path/to/key.pem')
-});
-const wss = new WebSocket.Server({ server });
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(message) {
-    console.log('received: %s', message);
-  });
-
-  ws.send('something');
-});
-
-server.listen(8080);
-```
-
-### Multiple servers sharing a single HTTP/S server
-
-```js
-const http = require('http');
-const WebSocket = require('ws');
-
-const server = http.createServer();
-const wss1 = new WebSocket.Server({ noServer: true });
-const wss2 = new WebSocket.Server({ noServer: true });
-
-wss1.on('connection', function connection(ws) {
-  // ...
-});
-
-wss2.on('connection', function connection(ws) {
-  // ...
-});
-
-server.on('upgrade', function upgrade(request, socket, head) {
-  const pathname = url.parse(request.url).pathname;
-
-  if (pathname === '/foo') {
-    wss1.handleUpgrade(request, socket, head, function done(ws) {
-      wss1.emit('connection', ws, request);
-    });
-  } else if (pathname === '/bar') {
-    wss2.handleUpgrade(request, socket, head, function done(ws) {
-      wss2.emit('connection', ws, request);
-    });
-  } else {
-    socket.destroy();
-  }
-});
-
-server.listen(8080);
-```
-
-### Server broadcast
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-// Broadcast to all.
-wss.broadcast = function broadcast(data) {
-  wss.clients.forEach(function each(client) {
-    if (client.readyState === WebSocket.OPEN) {
-      client.send(data);
-    }
-  });
-};
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(data) {
-    // Broadcast to everyone else.
-    wss.clients.forEach(function each(client) {
-      if (client !== ws && client.readyState === WebSocket.OPEN) {
-        client.send(data);
-      }
-    });
-  });
-});
-```
-
-### echo.websocket.org demo
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('wss://echo.websocket.org/', {
-  origin: 'https://websocket.org'
-});
-
-ws.on('open', function open() {
-  console.log('connected');
-  ws.send(Date.now());
-});
-
-ws.on('close', function close() {
-  console.log('disconnected');
-});
-
-ws.on('message', function incoming(data) {
-  console.log(`Roundtrip time: ${Date.now() - data} ms`);
-
-  setTimeout(function timeout() {
-    ws.send(Date.now());
-  }, 500);
-});
-```
-
-### Other examples
-
-For a full example with a browser client communicating with a ws server, see the
-examples folder.
-
-Otherwise, see the test cases.
-
-## Error handling best practices
-
-```js
-// If the WebSocket is closed before the following send is attempted
-ws.send('something');
-
-// Errors (both immediate and async write errors) can be detected in an optional
-// callback. The callback is also the only way of being notified that data has
-// actually been sent.
-ws.send('something', function ack(error) {
-  // If error is not defined, the send has been completed, otherwise the error
-  // object will indicate what failed.
-});
-
-// Immediate errors can also be handled with `try...catch`, but **note** that
-// since sends are inherently asynchronous, socket write failures will *not* be
-// captured when this technique is used.
-try { ws.send('something'); }
-catch (e) { /* handle error */ }
-```
-
-## FAQ
-
-### How to get the IP address of the client?
-
-The remote IP address can be obtained from the raw socket.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws, req) {
-  const ip = req.connection.remoteAddress;
-});
-```
-
-When the server runs behind a proxy like NGINX, the de-facto standard is to use
-the `X-Forwarded-For` header.
-
-```js
-wss.on('connection', function connection(ws, req) {
-  const ip = req.headers['x-forwarded-for'].split(/\s*,\s*/)[0];
-});
-```
-
-### How to detect and close broken connections?
-
-Sometimes the link between the server and the client can be interrupted in a
-way that keeps both the server and the client unaware of the broken state of the
-connection (e.g. when pulling the cord).
-
-In these cases ping messages can be used as a means to verify that the remote
-endpoint is still responsive.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-function noop() {}
-
-function heartbeat() {
-  this.isAlive = true;
-}
-
-wss.on('connection', function connection(ws) {
-  ws.isAlive = true;
-  ws.on('pong', heartbeat);
-});
-
-const interval = setInterval(function ping() {
-  wss.clients.forEach(function each(ws) {
-    if (ws.isAlive === false) return ws.terminate();
-
-    ws.isAlive = false;
-    ws.ping(noop);
-  });
-}, 30000);
-```
-
-Pong messages are automatically sent in response to ping messages as required
-by the spec.
-
-### How to connect via a proxy?
-
-Use a custom `http.Agent` implementation like [https-proxy-agent][] or
-[socks-proxy-agent][].
-
-## Changelog
-
-We're using the GitHub [releases][changelog] for changelog entries.
-
-## License
-
-[MIT](LICENSE)
-
-[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent
-[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent
-[client-report]: http://websockets.github.io/ws/autobahn/clients/
-[server-report]: http://websockets.github.io/ws/autobahn/servers/
-[permessage-deflate]: https://tools.ietf.org/html/rfc7692
-[changelog]: https://github.com/websockets/ws/releases
-[node-zlib-bug]: https://github.com/nodejs/node/issues/8871
-[node-zlib-deflaterawdocs]: https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options
-[ws-server-options]: https://github.com/websockets/ws/blob/master/doc/ws.md#new-websocketserveroptions-callback
diff --git a/device_home/node_modules/ws/node_modules/async-limiter/readme.md b/device_home/node_modules/ws/node_modules/async-limiter/readme.md
deleted file mode 100755 (executable)
index fcaa22f..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-# Async-Limiter
-
-A module for limiting concurrent asynchronous actions in flight. Forked from [queue](https://github.com/jessetane/queue).
-
-[![npm](http://img.shields.io/npm/v/async-limiter.svg?style=flat-square)](http://www.npmjs.org/async-limiter)
-[![tests](https://img.shields.io/travis/STRML/async-limiter.svg?style=flat-square&branch=master)](https://travis-ci.org/STRML/async-limiter)
-[![coverage](https://img.shields.io/coveralls/STRML/async-limiter.svg?style=flat-square&branch=master)](https://coveralls.io/r/STRML/async-limiter)
-
-This module exports a class `Limiter` that implements some of the `Array` API.
-Pass async functions (ones that accept a callback or return a promise) to an instance's additive array methods.
-
-## Motivation
-
-Certain functions, like `zlib`, have [undesirable behavior](https://github.com/nodejs/node/issues/8871#issuecomment-250915913) when
-run at infinite concurrency.
-
-In this case, it is actually faster, and takes far less memory, to limit concurrency.
-
-This module should do the absolute minimum work necessary to queue up functions. PRs are welcome that would
-make this module faster or lighter, but new functionality is not desired.
-
-Style should confirm to nodejs/node style.
-
-## Example
-
-``` javascript
-var Limiter = require('async-limiter')
-
-var t = new Limiter({concurrency: 2});
-var results = []
-
-// add jobs using the familiar Array API
-t.push(function (cb) {
-  results.push('two')
-  cb()
-})
-
-t.push(
-  function (cb) {
-    results.push('four')
-    cb()
-  },
-  function (cb) {
-    results.push('five')
-    cb()
-  }
-)
-
-t.unshift(function (cb) {
-  results.push('one')
-  cb()
-})
-
-t.splice(2, 0, function (cb) {
-  results.push('three')
-  cb()
-})
-
-// Jobs run automatically. If you want a callback when all are done,
-// call 'onDone()'.
-t.onDone(function () {
-  console.log('all done:', results)
-})
-```
-
-## Zlib Example
-
-```js
-const zlib = require('zlib');
-const Limiter = require('async-limiter');
-
-const message = {some: "data"};
-const payload = new Buffer(JSON.stringify(message));
-
-// Try with different concurrency values to see how this actually
-// slows significantly with higher concurrency!
-//
-// 5:        1398.607ms
-// 10:       1375.668ms
-// Infinity: 4423.300ms
-//
-const t = new Limiter({concurrency: 5});
-function deflate(payload, cb) {
-  t.push(function(done) {
-    zlib.deflate(payload, function(err, buffer) {
-      done();
-      cb(err, buffer);
-    });
-  });
-}
-
-console.time('deflate');
-for(let i = 0; i < 30000; ++i) {
-  deflate(payload, function (err, buffer) {});
-}
-t.onDone(function() {
-  console.timeEnd('deflate');
-});
-```
-
-## Install
-
-`npm install async-limiter`
-
-## Test
-
-`npm test`
-
-## API
-
-### `var t = new Limiter([opts])`
-Constructor. `opts` may contain inital values for:
-* `t.concurrency`
-
-## Instance methods
-
-### `t.onDone(fn)`
-`fn` will be called once and only once, when the queue is empty.
-
-## Instance methods mixed in from `Array`
-Mozilla has docs on how these methods work [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).
-### `t.push(element1, ..., elementN)`
-### `t.unshift(element1, ..., elementN)`
-### `t.splice(index , howMany[, element1[, ...[, elementN]]])`
-
-## Properties
-### `t.concurrency`
-Max number of jobs the queue should process concurrently, defaults to `Infinity`.
-
-### `t.length`
-Jobs pending + jobs to process (readonly).
-
diff --git a/device_home/node_modules/xmlhttprequest-ssl/README.md b/device_home/node_modules/xmlhttprequest-ssl/README.md
deleted file mode 100644 (file)
index e5be153..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# node-XMLHttpRequest #
-
-Fork of [node-XMLHttpRequest](https://github.com/driverdan/node-XMLHttpRequest) by [driverdan](http://driverdan.com). Forked and published to npm because a [pull request](https://github.com/rase-/node-XMLHttpRequest/commit/a6b6f296e0a8278165c2d0270d9840b54d5eeadd) is not being created and merged. Changes made by [rase-](https://github.com/rase-/node-XMLHttpRequest/tree/add/ssl-support) are needed for [engine.io-client](https://github.com/Automattic/engine.io-client).
-
-## Usage ## 
-
-Here's how to include the module in your project and use as the browser-based
-XHR object.
-
-       var XMLHttpRequest = require("xmlhttprequest-ssl").XMLHttpRequest;
-       var xhr = new XMLHttpRequest();
-
-Note: use the lowercase string "xmlhttprequest-ssl" in your require(). On
-case-sensitive systems (eg Linux) using uppercase letters won't work.
-# Original README #
-
-## Usage ##
-
-Here's how to include the module in your project and use as the browser-based
-XHR object.
-
-       var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
-       var xhr = new XMLHttpRequest();
-
-Note: use the lowercase string "xmlhttprequest" in your require(). On
-case-sensitive systems (eg Linux) using uppercase letters won't work.
-
-## Versions ##
-
-Prior to 1.4.0 version numbers were arbitrary. From 1.4.0 on they conform to
-the standard major.minor.bugfix. 1.x shouldn't necessarily be considered
-stable just because it's above 0.x.
-
-Since the XMLHttpRequest API is stable this library's API is stable as
-well. Major version numbers indicate significant core code changes.
-Minor versions indicate minor core code changes or better conformity to
-the W3C spec.
-
-## License ##
-
-MIT license. See LICENSE for full details.
-
-## Supports ##
-
-* Async and synchronous requests
-* GET, POST, PUT, and DELETE requests
-* All spec methods (open, send, abort, getRequestHeader,
-  getAllRequestHeaders, event methods)
-* Requests to all domains
-
-## Known Issues / Missing Features ##
-
-For a list of open issues or to report your own visit the [github issues
-page](https://github.com/driverdan/node-XMLHttpRequest/issues).
-
-* Local file access may have unexpected results for non-UTF8 files
-* Synchronous requests don't set headers properly
-* Synchronous requests freeze node while waiting for response (But that's what you want, right? Stick with async!).
-* Some events are missing, such as abort
-* getRequestHeader is case-sensitive
-* Cookies aren't persisted between requests
-* Missing XML support
-* Missing basic auth
diff --git a/device_home/node_modules/xmlhttprequest-ssl/example/demo.js b/device_home/node_modules/xmlhttprequest-ssl/example/demo.js
deleted file mode 100644 (file)
index 06fedbc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var sys=require("util"),XMLHttpRequest=require("xmlhttprequest").XMLHttpRequest,xhr=new XMLHttpRequest;xhr.onreadystatechange=function(){sys.puts("State: "+this.readyState),4==this.readyState&&(sys.puts("Complete.\nBody length: "+this.responseText.length),sys.puts("Body:\n"+this.responseText))},xhr.open("GET","http://driverdan.com"),xhr.send();
\ No newline at end of file
diff --git a/device_home/node_modules/xmlhttprequest/README.md b/device_home/node_modules/xmlhttprequest/README.md
deleted file mode 100755 (executable)
index 50039f9..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-# node-XMLHttpRequest #
-
-node-XMLHttpRequest is a wrapper for the built-in http client to emulate the
-browser XMLHttpRequest object.
-
-This can be used with JS designed for browsers to improve reuse of code and
-allow the use of existing libraries.
-
-Note: This library currently conforms to [XMLHttpRequest 1](http://www.w3.org/TR/XMLHttpRequest/). Version 2.0 will target [XMLHttpRequest Level 2](http://www.w3.org/TR/XMLHttpRequest2/).
-
-## Usage ##
-
-Here's how to include the module in your project and use as the browser-based
-XHR object.
-
-       var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
-       var xhr = new XMLHttpRequest();
-
-Note: use the lowercase string "xmlhttprequest" in your require(). On
-case-sensitive systems (eg Linux) using uppercase letters won't work.
-
-## Versions ##
-
-Prior to 1.4.0 version numbers were arbitrary. From 1.4.0 on they conform to
-the standard major.minor.bugfix. 1.x shouldn't necessarily be considered
-stable just because it's above 0.x.
-
-Since the XMLHttpRequest API is stable this library's API is stable as
-well. Major version numbers indicate significant core code changes.
-Minor versions indicate minor core code changes or better conformity to
-the W3C spec.
-
-## License ##
-
-MIT license. See LICENSE for full details.
-
-## Supports ##
-
-* Async and synchronous requests
-* GET, POST, PUT, and DELETE requests
-* All spec methods (open, send, abort, getRequestHeader,
-  getAllRequestHeaders, event methods)
-* Requests to all domains
-
-## Known Issues / Missing Features ##
-
-For a list of open issues or to report your own visit the [github issues
-page](https://github.com/driverdan/node-XMLHttpRequest/issues).
-
-* Local file access may have unexpected results for non-UTF8 files
-* Synchronous requests don't set headers properly
-* Synchronous requests freeze node while waiting for response (But that's what you want, right? Stick with async!).
-* Some events are missing, such as abort
-* Cookies aren't persisted between requests
-* Missing XML support
diff --git a/device_home/node_modules/y18n/CHANGELOG.md b/device_home/node_modules/y18n/CHANGELOG.md
deleted file mode 100644 (file)
index a3d5bcd..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-
-### 4.0.1 (2020-11-30)
-
-### Bug Fixes
-
-* address prototype pollution issue ([#108](https://www.github.com/yargs/y18n/issues/108)) ([a9ac604](https://www.github.com/yargs/y18n/commit/a9ac604abf756dec9687be3843e2c93bfe581f25))
-
-<a name="4.0.0"></a>
-# [4.0.0](https://github.com/yargs/y18n/compare/v3.2.1...v4.0.0) (2017-10-10)
-
-
-### Bug Fixes
-
-* allow support for falsy values like 0 in tagged literal ([#45](https://github.com/yargs/y18n/issues/45)) ([c926123](https://github.com/yargs/y18n/commit/c926123))
-
-
-### Features
-
-* **__:** added tagged template literal support ([#44](https://github.com/yargs/y18n/issues/44)) ([0598daf](https://github.com/yargs/y18n/commit/0598daf))
-
-
-### BREAKING CHANGES
-
-* **__:** dropping Node 0.10/Node 0.12 support
diff --git a/device_home/node_modules/y18n/README.md b/device_home/node_modules/y18n/README.md
deleted file mode 100644 (file)
index 826474f..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-# y18n
-
-[![Build Status][travis-image]][travis-url]
-[![Coverage Status][coveralls-image]][coveralls-url]
-[![NPM version][npm-image]][npm-url]
-[![js-standard-style][standard-image]][standard-url]
-[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)
-
-The bare-bones internationalization library used by yargs.
-
-Inspired by [i18n](https://www.npmjs.com/package/i18n).
-
-## Examples
-
-_simple string translation:_
-
-```js
-var __ = require('y18n').__
-
-console.log(__('my awesome string %s', 'foo'))
-```
-
-output:
-
-`my awesome string foo`
-
-_using tagged template literals_
-
-```js
-var __ = require('y18n').__
-var str = 'foo'
-
-console.log(__`my awesome string ${str}`)
-```
-
-output:
-
-`my awesome string foo`
-
-_pluralization support:_
-
-```js
-var __n = require('y18n').__n
-
-console.log(__n('one fish %s', '%d fishes %s', 2, 'foo'))
-```
-
-output:
-
-`2 fishes foo`
-
-## JSON Language Files
-
-The JSON language files should be stored in a `./locales` folder.
-File names correspond to locales, e.g., `en.json`, `pirate.json`.
-
-When strings are observed for the first time they will be
-added to the JSON file corresponding to the current locale.
-
-## Methods
-
-### require('y18n')(config)
-
-Create an instance of y18n with the config provided, options include:
-
-* `directory`: the locale directory, default `./locales`.
-* `updateFiles`: should newly observed strings be updated in file, default `true`.
-* `locale`: what locale should be used.
-* `fallbackToLanguage`: should fallback to a language-only file (e.g. `en.json`)
-  be allowed if a file matching the locale does not exist (e.g. `en_US.json`),
-  default `true`.
-
-### y18n.\_\_(str, arg, arg, arg)
-
-Print a localized string, `%s` will be replaced with `arg`s.
-
-This function can also be used as a tag for a template literal. You can use it
-like this: <code>__&#96;hello ${'world'}&#96;</code>. This will be equivalent to
-`__('hello %s', 'world')`.
-
-### y18n.\_\_n(singularString, pluralString, count, arg, arg, arg)
-
-Print a localized string with appropriate pluralization. If `%d` is provided
-in the string, the `count` will replace this placeholder.
-
-### y18n.setLocale(str)
-
-Set the current locale being used.
-
-### y18n.getLocale()
-
-What locale is currently being used?
-
-### y18n.updateLocale(obj)
-
-Update the current locale with the key value pairs in `obj`.
-
-## License
-
-ISC
-
-[travis-url]: https://travis-ci.org/yargs/y18n
-[travis-image]: https://img.shields.io/travis/yargs/y18n.svg
-[coveralls-url]: https://coveralls.io/github/yargs/y18n
-[coveralls-image]: https://img.shields.io/coveralls/yargs/y18n.svg
-[npm-url]: https://npmjs.org/package/y18n
-[npm-image]: https://img.shields.io/npm/v/y18n.svg
-[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg
-[standard-url]: https://github.com/feross/standard
diff --git a/device_home/node_modules/yargs-parser/CHANGELOG.md b/device_home/node_modules/yargs-parser/CHANGELOG.md
deleted file mode 100644 (file)
index df11c00..0000000
+++ /dev/null
@@ -1,467 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-### [13.1.1](https://www.github.com/yargs/yargs-parser/compare/v13.1.0...v13.1.1) (2019-06-10)
-
-
-### Bug Fixes
-
-* convert values to strings when tokenizing ([#167](https://www.github.com/yargs/yargs-parser/issues/167)) ([57b7883](https://www.github.com/yargs/yargs-parser/commit/57b7883))
-* nargs should allow duplicates when duplicate-arguments-array=false ([#164](https://www.github.com/yargs/yargs-parser/issues/164)) ([47ccb0b](https://www.github.com/yargs/yargs-parser/commit/47ccb0b))
-* should populate "_" when given config with "short-option-groups" false ([#179](https://www.github.com/yargs/yargs-parser/issues/179)) ([6055974](https://www.github.com/yargs/yargs-parser/commit/6055974))
-
-## [13.1.0](https://github.com/yargs/yargs-parser/compare/v13.0.0...v13.1.0) (2019-05-05)
-
-
-### Features
-
-* add `strip-aliased` and `strip-dashed` configuration options. ([#172](https://github.com/yargs/yargs-parser/issues/172)) ([a3936aa](https://github.com/yargs/yargs-parser/commit/a3936aa))
-* support boolean which do not consume next argument. ([#171](https://github.com/yargs/yargs-parser/issues/171)) ([0ae7fcb](https://github.com/yargs/yargs-parser/commit/0ae7fcb))
-
-
-
-<a name="13.0.0"></a>
-# [13.0.0](https://github.com/yargs/yargs-parser/compare/v12.0.0...v13.0.0) (2019-02-02)
-
-
-### Features
-
-* don't coerce number from string with leading '0' or '+' ([#158](https://github.com/yargs/yargs-parser/issues/158)) ([18d0fd5](https://github.com/yargs/yargs-parser/commit/18d0fd5))
-
-
-### BREAKING CHANGES
-
-* options with leading '+' or '0' now parse as strings
-
-
-
-<a name="12.0.0"></a>
-# [12.0.0](https://github.com/yargs/yargs-parser/compare/v11.1.1...v12.0.0) (2019-01-29)
-
-
-### Bug Fixes
-
-* better handling of quoted strings ([#153](https://github.com/yargs/yargs-parser/issues/153)) ([2fb71b2](https://github.com/yargs/yargs-parser/commit/2fb71b2))
-
-
-### Features
-
-* default value is now used if no right-hand value provided for numbers/strings ([#156](https://github.com/yargs/yargs-parser/issues/156)) ([5a7c46a](https://github.com/yargs/yargs-parser/commit/5a7c46a))
-
-
-### BREAKING CHANGES
-
-* a flag with no right-hand value no longer populates defaulted options with `undefined`.
-* quotes at beginning and endings of strings are not removed during parsing.
-
-
-
-<a name="11.1.1"></a>
-## [11.1.1](https://github.com/yargs/yargs-parser/compare/v11.1.0...v11.1.1) (2018-11-19)
-
-
-### Bug Fixes
-
-* ensure empty string is added into argv._ ([#140](https://github.com/yargs/yargs-parser/issues/140)) ([79cda98](https://github.com/yargs/yargs-parser/commit/79cda98))
-
-
-### Reverts
-
-* make requiresArg work in conjunction with arrays ([#136](https://github.com/yargs/yargs-parser/issues/136)) ([f4a3063](https://github.com/yargs/yargs-parser/commit/f4a3063))
-
-
-
-<a name="11.1.0"></a>
-# [11.1.0](https://github.com/yargs/yargs-parser/compare/v11.0.0...v11.1.0) (2018-11-10)
-
-
-### Bug Fixes
-
-* handling of one char alias ([#139](https://github.com/yargs/yargs-parser/issues/139)) ([ee56e31](https://github.com/yargs/yargs-parser/commit/ee56e31))
-
-
-### Features
-
-* add halt-at-non-option configuration option ([#130](https://github.com/yargs/yargs-parser/issues/130)) ([a849fce](https://github.com/yargs/yargs-parser/commit/a849fce))
-
-
-
-<a name="11.0.0"></a>
-# [11.0.0](https://github.com/yargs/yargs-parser/compare/v10.1.0...v11.0.0) (2018-10-06)
-
-
-### Bug Fixes
-
-* flatten-duplicate-arrays:false for more than 2 arrays ([#128](https://github.com/yargs/yargs-parser/issues/128)) ([2bc395f](https://github.com/yargs/yargs-parser/commit/2bc395f))
-* hyphenated flags combined with dot notation broke parsing ([#131](https://github.com/yargs/yargs-parser/issues/131)) ([dc788da](https://github.com/yargs/yargs-parser/commit/dc788da))
-* make requiresArg work in conjunction with arrays ([#136](https://github.com/yargs/yargs-parser/issues/136)) ([77ae1d4](https://github.com/yargs/yargs-parser/commit/77ae1d4))
-
-
-### Chores
-
-* update dependencies ([6dc42a1](https://github.com/yargs/yargs-parser/commit/6dc42a1))
-
-
-### Features
-
-* also add camelCase array options ([#125](https://github.com/yargs/yargs-parser/issues/125)) ([08c0117](https://github.com/yargs/yargs-parser/commit/08c0117))
-* array.type can now be provided, supporting coercion ([#132](https://github.com/yargs/yargs-parser/issues/132)) ([4b8cfce](https://github.com/yargs/yargs-parser/commit/4b8cfce))
-
-
-### BREAKING CHANGES
-
-* drops Node 4 support
-* the argv object is now populated differently (correctly) when hyphens and dot notation are used in conjunction.
-
-
-
-<a name="10.1.0"></a>
-# [10.1.0](https://github.com/yargs/yargs-parser/compare/v10.0.0...v10.1.0) (2018-06-29)
-
-
-### Features
-
-* add `set-placeholder-key` configuration ([#123](https://github.com/yargs/yargs-parser/issues/123)) ([19386ee](https://github.com/yargs/yargs-parser/commit/19386ee))
-
-
-
-<a name="10.0.0"></a>
-# [10.0.0](https://github.com/yargs/yargs-parser/compare/v9.0.2...v10.0.0) (2018-04-04)
-
-
-### Bug Fixes
-
-* do not set boolean flags if not defined in `argv` ([#119](https://github.com/yargs/yargs-parser/issues/119)) ([f6e6599](https://github.com/yargs/yargs-parser/commit/f6e6599))
-
-
-### BREAKING CHANGES
-
-* `boolean` flags defined without a `default` value will now behave like other option type and won't be set in the parsed results when the user doesn't set the corresponding CLI arg.
-
-Previous behavior:
-```js
-var parse = require('yargs-parser');
-
-parse('--flag', {boolean: ['flag']});
-// => { _: [], flag: true }
-
-parse('--no-flag', {boolean: ['flag']});
-// => { _: [], flag: false }
-
-parse('', {boolean: ['flag']});
-// => { _: [], flag: false }
-```
-
-New behavior:
-```js
-var parse = require('yargs-parser');
-
-parse('--flag', {boolean: ['flag']});
-// => { _: [], flag: true }
-
-parse('--no-flag', {boolean: ['flag']});
-// => { _: [], flag: false }
-
-parse('', {boolean: ['flag']});
-// => { _: [] } => flag not set similarly to other option type
-```
-
-
-
-<a name="9.0.2"></a>
-## [9.0.2](https://github.com/yargs/yargs-parser/compare/v9.0.1...v9.0.2) (2018-01-20)
-
-
-### Bug Fixes
-
-* nargs was still aggressively consuming too many arguments ([9b28aad](https://github.com/yargs/yargs-parser/commit/9b28aad))
-
-
-
-<a name="9.0.1"></a>
-## [9.0.1](https://github.com/yargs/yargs-parser/compare/v9.0.0...v9.0.1) (2018-01-20)
-
-
-### Bug Fixes
-
-* nargs was consuming too many arguments ([4fef206](https://github.com/yargs/yargs-parser/commit/4fef206))
-
-
-
-<a name="9.0.0"></a>
-# [9.0.0](https://github.com/yargs/yargs-parser/compare/v8.1.0...v9.0.0) (2018-01-20)
-
-
-### Features
-
-* narg arguments no longer consume flag arguments ([#114](https://github.com/yargs/yargs-parser/issues/114)) ([60bb9b3](https://github.com/yargs/yargs-parser/commit/60bb9b3))
-
-
-### BREAKING CHANGES
-
-* arguments of form --foo, -abc, will no longer be consumed by nargs
-
-
-
-<a name="8.1.0"></a>
-# [8.1.0](https://github.com/yargs/yargs-parser/compare/v8.0.0...v8.1.0) (2017-12-20)
-
-
-### Bug Fixes
-
-* allow null config values ([#108](https://github.com/yargs/yargs-parser/issues/108)) ([d8b14f9](https://github.com/yargs/yargs-parser/commit/d8b14f9))
-* ensure consistent parsing of dot-notation arguments ([#102](https://github.com/yargs/yargs-parser/issues/102)) ([c9bd79c](https://github.com/yargs/yargs-parser/commit/c9bd79c))
-* implement [@antoniom](https://github.com/antoniom)'s fix for camel-case expansion ([3087e1d](https://github.com/yargs/yargs-parser/commit/3087e1d))
-* only run coercion functions once, despite aliases. ([#76](https://github.com/yargs/yargs-parser/issues/76)) ([#103](https://github.com/yargs/yargs-parser/issues/103)) ([507aaef](https://github.com/yargs/yargs-parser/commit/507aaef))
-* scientific notation circumvented bounds check ([#110](https://github.com/yargs/yargs-parser/issues/110)) ([3571f57](https://github.com/yargs/yargs-parser/commit/3571f57))
-* tokenizer should ignore spaces at the beginning of the argString ([#106](https://github.com/yargs/yargs-parser/issues/106)) ([f34ead9](https://github.com/yargs/yargs-parser/commit/f34ead9))
-
-
-### Features
-
-* make combining arrays a configurable option ([#111](https://github.com/yargs/yargs-parser/issues/111)) ([c8bf536](https://github.com/yargs/yargs-parser/commit/c8bf536))
-* merge array from arguments with array from config ([#83](https://github.com/yargs/yargs-parser/issues/83)) ([806ddd6](https://github.com/yargs/yargs-parser/commit/806ddd6))
-
-
-
-<a name="8.0.0"></a>
-# [8.0.0](https://github.com/yargs/yargs-parser/compare/v7.0.0...v8.0.0) (2017-10-05)
-
-
-### Bug Fixes
-
-* Ignore multiple spaces between arguments. ([#100](https://github.com/yargs/yargs-parser/issues/100)) ([d137227](https://github.com/yargs/yargs-parser/commit/d137227))
-
-
-### Features
-
-* allow configuration of prefix for boolean negation ([#94](https://github.com/yargs/yargs-parser/issues/94)) ([00bde7d](https://github.com/yargs/yargs-parser/commit/00bde7d))
-* reworking how numbers are parsed ([#104](https://github.com/yargs/yargs-parser/issues/104)) ([fba00eb](https://github.com/yargs/yargs-parser/commit/fba00eb))
-
-
-### BREAKING CHANGES
-
-* strings that fail `Number.isSafeInteger()` are no longer coerced into numbers. 
-
-
-
-<a name="7.0.0"></a>
-# [7.0.0](https://github.com/yargs/yargs-parser/compare/v6.0.1...v7.0.0) (2017-05-02)
-
-
-### Chores
-
-* revert populate-- logic ([#91](https://github.com/yargs/yargs-parser/issues/91)) ([6003e6d](https://github.com/yargs/yargs-parser/commit/6003e6d))
-
-
-### BREAKING CHANGES
-
-* populate-- now defaults to false.
-
-
-
-<a name="6.0.1"></a>
-## [6.0.1](https://github.com/yargs/yargs-parser/compare/v6.0.0...v6.0.1) (2017-05-01)
-
-
-### Bug Fixes
-
-* default '--' to undefined when not provided; this is closer to the array API ([#90](https://github.com/yargs/yargs-parser/issues/90)) ([4e739cc](https://github.com/yargs/yargs-parser/commit/4e739cc))
-
-
-
-<a name="6.0.0"></a>
-# [6.0.0](https://github.com/yargs/yargs-parser/compare/v4.2.1...v6.0.0) (2017-05-01)
-
-
-### Bug Fixes
-
-* environment variables should take precedence over config file ([#81](https://github.com/yargs/yargs-parser/issues/81)) ([76cee1f](https://github.com/yargs/yargs-parser/commit/76cee1f))
-* parsing hints should apply for dot notation keys ([#86](https://github.com/yargs/yargs-parser/issues/86)) ([3e47d62](https://github.com/yargs/yargs-parser/commit/3e47d62))
-
-
-### Chores
-
-* upgrade to newest version of camelcase ([#87](https://github.com/yargs/yargs-parser/issues/87)) ([f1903aa](https://github.com/yargs/yargs-parser/commit/f1903aa))
-
-
-### Features
-
-* add -- option which allows arguments after the -- flag to be returned separated from positional arguments ([#84](https://github.com/yargs/yargs-parser/issues/84)) ([2572ca8](https://github.com/yargs/yargs-parser/commit/2572ca8))
-* when parsing stops, we now populate "--" by default ([#88](https://github.com/yargs/yargs-parser/issues/88)) ([cd666db](https://github.com/yargs/yargs-parser/commit/cd666db))
-
-
-### BREAKING CHANGES
-
-* rather than placing arguments in "_", when parsing is stopped via "--"; we now populate an array called "--" by default.
-* camelcase now requires Node 4+.
-* environment variables will now override config files (args, env, config-file, config-object)
-
-
-
-<a name="5.0.0"></a>
-# [5.0.0](https://github.com/yargs/yargs-parser/compare/v4.2.1...v5.0.0) (2017-02-18)
-
-
-### Bug Fixes
-
-* environment variables should take precedence over config file ([#81](https://github.com/yargs/yargs-parser/issues/81)) ([76cee1f](https://github.com/yargs/yargs-parser/commit/76cee1f))
-
-
-### BREAKING CHANGES
-
-* environment variables will now override config files (args, env, config-file, config-object)
-
-
-
-<a name="4.2.1"></a>
-## [4.2.1](https://github.com/yargs/yargs-parser/compare/v4.2.0...v4.2.1) (2017-01-02)
-
-
-### Bug Fixes
-
-* flatten/duplicate regression ([#75](https://github.com/yargs/yargs-parser/issues/75)) ([68d68a0](https://github.com/yargs/yargs-parser/commit/68d68a0))
-
-
-
-<a name="4.2.0"></a>
-# [4.2.0](https://github.com/yargs/yargs-parser/compare/v4.1.0...v4.2.0) (2016-12-01)
-
-
-### Bug Fixes
-
-* inner objects in configs had their keys appended to top-level key when dot-notation was disabled ([#72](https://github.com/yargs/yargs-parser/issues/72)) ([0b1b5f9](https://github.com/yargs/yargs-parser/commit/0b1b5f9))
-
-
-### Features
-
-* allow multiple arrays to be provided, rather than always combining ([#71](https://github.com/yargs/yargs-parser/issues/71)) ([0f0fb2d](https://github.com/yargs/yargs-parser/commit/0f0fb2d))
-
-
-
-<a name="4.1.0"></a>
-# [4.1.0](https://github.com/yargs/yargs-parser/compare/v4.0.2...v4.1.0) (2016-11-07)
-
-
-### Features
-
-* apply coercions to default options ([#65](https://github.com/yargs/yargs-parser/issues/65)) ([c79052b](https://github.com/yargs/yargs-parser/commit/c79052b))
-* handle dot notation boolean options ([#63](https://github.com/yargs/yargs-parser/issues/63)) ([02c3545](https://github.com/yargs/yargs-parser/commit/02c3545))
-
-
-
-<a name="4.0.2"></a>
-## [4.0.2](https://github.com/yargs/yargs-parser/compare/v4.0.1...v4.0.2) (2016-09-30)
-
-
-### Bug Fixes
-
-* whoops, let's make the assign not change the Object key order ([29d069a](https://github.com/yargs/yargs-parser/commit/29d069a))
-
-
-
-<a name="4.0.1"></a>
-## [4.0.1](https://github.com/yargs/yargs-parser/compare/v4.0.0...v4.0.1) (2016-09-30)
-
-
-### Bug Fixes
-
-* lodash.assign was deprecated ([#59](https://github.com/yargs/yargs-parser/issues/59)) ([5e7eb11](https://github.com/yargs/yargs-parser/commit/5e7eb11))
-
-
-
-<a name="4.0.0"></a>
-# [4.0.0](https://github.com/yargs/yargs-parser/compare/v3.2.0...v4.0.0) (2016-09-26)
-
-
-### Bug Fixes
-
-* coerce should be applied to the final objects and arrays created ([#57](https://github.com/yargs/yargs-parser/issues/57)) ([4ca69da](https://github.com/yargs/yargs-parser/commit/4ca69da))
-
-
-### BREAKING CHANGES
-
-* coerce is no longer applied to individual arguments in an implicit array.
-
-
-
-<a name="3.2.0"></a>
-# [3.2.0](https://github.com/yargs/yargs-parser/compare/v3.1.0...v3.2.0) (2016-08-13)
-
-
-### Features
-
-* coerce full array instead of each element ([#51](https://github.com/yargs/yargs-parser/issues/51)) ([cc4dc56](https://github.com/yargs/yargs-parser/commit/cc4dc56))
-
-
-
-<a name="3.1.0"></a>
-# [3.1.0](https://github.com/yargs/yargs-parser/compare/v3.0.0...v3.1.0) (2016-08-09)
-
-
-### Bug Fixes
-
-* address pkgConf parsing bug outlined in [#37](https://github.com/yargs/yargs-parser/issues/37) ([#45](https://github.com/yargs/yargs-parser/issues/45)) ([be76ee6](https://github.com/yargs/yargs-parser/commit/be76ee6))
-* better parsing of negative values ([#44](https://github.com/yargs/yargs-parser/issues/44)) ([2e43692](https://github.com/yargs/yargs-parser/commit/2e43692))
-* check aliases when guessing defaults for arguments fixes [#41](https://github.com/yargs/yargs-parser/issues/41) ([#43](https://github.com/yargs/yargs-parser/issues/43)) ([f3e4616](https://github.com/yargs/yargs-parser/commit/f3e4616))
-
-
-### Features
-
-* added coerce option, for providing specialized argument parsing ([#42](https://github.com/yargs/yargs-parser/issues/42)) ([7b49cd2](https://github.com/yargs/yargs-parser/commit/7b49cd2))
-
-
-
-<a name="3.0.0"></a>
-# [3.0.0](https://github.com/yargs/yargs-parser/compare/v2.4.1...v3.0.0) (2016-08-07)
-
-
-### Bug Fixes
-
-* parsing issue with numeric character in group of options ([#19](https://github.com/yargs/yargs-parser/issues/19)) ([f743236](https://github.com/yargs/yargs-parser/commit/f743236))
-* upgraded lodash.assign ([5d7fdf4](https://github.com/yargs/yargs-parser/commit/5d7fdf4))
-
-### BREAKING CHANGES
-
-* subtle change to how values are parsed in a group of single-character arguments.
-* _first released in 3.1.0, better handling of negative values should be considered a breaking change._
-
-
-
-<a name="2.4.1"></a>
-## [2.4.1](https://github.com/yargs/yargs-parser/compare/v2.4.0...v2.4.1) (2016-07-16)
-
-
-### Bug Fixes
-
-* **count:** do not increment a default value ([#39](https://github.com/yargs/yargs-parser/issues/39)) ([b04a189](https://github.com/yargs/yargs-parser/commit/b04a189))
-
-
-
-<a name="2.4.0"></a>
-# [2.4.0](https://github.com/yargs/yargs-parser/compare/v2.3.0...v2.4.0) (2016-04-11)
-
-
-### Features
-
-* **environment:** Support nested options in environment variables ([#26](https://github.com/yargs/yargs-parser/issues/26)) thanks [@elas7](https://github.com/elas7) \o/ ([020778b](https://github.com/yargs/yargs-parser/commit/020778b))
-
-
-
-<a name="2.3.0"></a>
-# [2.3.0](https://github.com/yargs/yargs-parser/compare/v2.2.0...v2.3.0) (2016-04-09)
-
-
-### Bug Fixes
-
-* **boolean:** fix for boolean options with non boolean defaults (#20) ([2dbe86b](https://github.com/yargs/yargs-parser/commit/2dbe86b)), closes [(#20](https://github.com/(/issues/20)
-* **package:** remove tests from tarball ([0353c0d](https://github.com/yargs/yargs-parser/commit/0353c0d))
-* **parsing:** handle calling short option with an empty string as the next value. ([a867165](https://github.com/yargs/yargs-parser/commit/a867165))
-* boolean flag when next value contains the strings 'true' or 'false'. ([69941a6](https://github.com/yargs/yargs-parser/commit/69941a6))
-* update dependencies; add standard-version bin for next release (#24) ([822d9d5](https://github.com/yargs/yargs-parser/commit/822d9d5))
-
-### Features
-
-* **configuration:** Allow to pass configuration objects to yargs-parser ([0780900](https://github.com/yargs/yargs-parser/commit/0780900))
-* **normalize:** allow normalize to work with arrays ([e0eaa1a](https://github.com/yargs/yargs-parser/commit/e0eaa1a))
diff --git a/device_home/node_modules/yargs-parser/README.md b/device_home/node_modules/yargs-parser/README.md
deleted file mode 100644 (file)
index dde9f84..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-# yargs-parser
-
-[![Build Status](https://travis-ci.org/yargs/yargs-parser.svg)](https://travis-ci.org/yargs/yargs-parser)
-[![Coverage Status](https://coveralls.io/repos/yargs/yargs-parser/badge.svg?branch=)](https://coveralls.io/r/yargs/yargs-parser?branch=master)
-[![NPM version](https://img.shields.io/npm/v/yargs-parser.svg)](https://www.npmjs.com/package/yargs-parser)
-[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version)
-
-
-The mighty option parser used by [yargs](https://github.com/yargs/yargs).
-
-visit the [yargs website](http://yargs.js.org/) for more examples, and thorough usage instructions.
-
-<img width="250" src="https://raw.githubusercontent.com/yargs/yargs-parser/master/yargs-logo.png">
-
-## Example
-
-```sh
-npm i yargs-parser --save
-```
-
-```js
-var argv = require('yargs-parser')(process.argv.slice(2))
-console.log(argv)
-```
-
-```sh
-node example.js --foo=33 --bar hello
-{ _: [], foo: 33, bar: 'hello' }
-```
-
-_or parse a string!_
-
-```js
-var argv = require('./')('--foo=99 --bar=33')
-console.log(argv)
-```
-
-```sh
-{ _: [], foo: 99, bar: 33 }
-```
-
-Convert an array of mixed types before passing to `yargs-parser`:
-
-```js
-var parse = require('yargs-parser')
-parse(['-f', 11, '--zoom', 55].join(' '))   // <-- array to string
-parse(['-f', 11, '--zoom', 55].map(String)) // <-- array of strings
-```
-
-## API
-
-### require('yargs-parser')(args, opts={})
-
-Parses command line arguments returning a simple mapping of keys and values.
-
-**expects:**
-
-* `args`: a string or array of strings representing the options to parse.
-* `opts`: provide a set of hints indicating how `args` should be parsed:
-  * `opts.alias`: an object representing the set of aliases for a key: `{alias: {foo: ['f']}}`.
-  * `opts.array`: indicate that keys should be parsed as an array: `{array: ['foo', 'bar']}`.<br>
-    Indicate that keys should be parsed as an array and coerced to booleans / numbers:<br>
-    `{array: [{ key: 'foo', boolean: true }, {key: 'bar', number: true}]}`.
-  * `opts.boolean`: arguments should be parsed as booleans: `{boolean: ['x', 'y']}`.
-  * `opts.coerce`: provide a custom synchronous function that returns a coerced value from the argument provided
-    (or throws an error). For arrays the function is called only once for the entire array:<br>
-    `{coerce: {foo: function (arg) {return modifiedArg}}}`.
-  * `opts.config`: indicate a key that represents a path to a configuration file (this file will be loaded and parsed).
-  * `opts.configObjects`: configuration objects to parse, their properties will be set as arguments:<br>
-    `{configObjects: [{'x': 5, 'y': 33}, {'z': 44}]}`.
-  * `opts.configuration`: provide configuration options to the yargs-parser (see: [configuration](#configuration)).
-  * `opts.count`: indicate a key that should be used as a counter, e.g., `-vvv` = `{v: 3}`.
-  * `opts.default`: provide default values for keys: `{default: {x: 33, y: 'hello world!'}}`.
-  * `opts.envPrefix`: environment variables (`process.env`) with the prefix provided should be parsed.
-  * `opts.narg`: specify that a key requires `n` arguments: `{narg: {x: 2}}`.
-  * `opts.normalize`: `path.normalize()` will be applied to values set to this key.
-  * `opts.number`: keys should be treated as numbers.
-  * `opts.string`: keys should be treated as strings (even if they resemble a number `-x 33`).
-
-**returns:**
-
-* `obj`: an object representing the parsed value of `args`
-  * `key/value`: key value pairs for each argument and their aliases.
-  * `_`: an array representing the positional arguments.
-  * [optional] `--`:  an array with arguments after the end-of-options flag `--`.
-
-### require('yargs-parser').detailed(args, opts={})
-
-Parses a command line string, returning detailed information required by the
-yargs engine.
-
-**expects:**
-
-* `args`: a string or array of strings representing options to parse.
-* `opts`: provide a set of hints indicating how `args`, inputs are identical to `require('yargs-parser')(args, opts={})`.
-
-**returns:**
-
-* `argv`: an object representing the parsed value of `args`
-  * `key/value`: key value pairs for each argument and their aliases.
-  * `_`: an array representing the positional arguments.
-* `error`: populated with an error object if an exception occurred during parsing.
-* `aliases`: the inferred list of aliases built by combining lists in `opts.alias`.
-* `newAliases`: any new aliases added via camel-case expansion.
-* `configuration`: the configuration loaded from the `yargs` stanza in package.json.
-
-<a name="configuration"></a>
-
-### Configuration
-
-The yargs-parser applies several automated transformations on the keys provided
-in `args`. These features can be turned on and off using the `configuration` field
-of `opts`.
-
-```js
-var parsed = parser(['--no-dice'], {
-  configuration: {
-    'boolean-negation': false
-  }
-})
-```
-
-### short option groups
-
-* default: `true`.
-* key: `short-option-groups`.
-
-Should a group of short-options be treated as boolean flags?
-
-```sh
-node example.js -abc
-{ _: [], a: true, b: true, c: true }
-```
-
-_if disabled:_
-
-```sh
-node example.js -abc
-{ _: [], abc: true }
-```
-
-### camel-case expansion
-
-* default: `true`.
-* key: `camel-case-expansion`.
-
-Should hyphenated arguments be expanded into camel-case aliases?
-
-```sh
-node example.js --foo-bar
-{ _: [], 'foo-bar': true, fooBar: true }
-```
-
-_if disabled:_
-
-```sh
-node example.js --foo-bar
-{ _: [], 'foo-bar': true }
-```
-
-### dot-notation
-
-* default: `true`
-* key: `dot-notation`
-
-Should keys that contain `.` be treated as objects?
-
-```sh
-node example.js --foo.bar
-{ _: [], foo: { bar: true } }
-```
-
-_if disabled:_
-
-```sh
-node example.js --foo.bar
-{ _: [], "foo.bar": true }
-```
-
-### parse numbers
-
-* default: `true`
-* key: `parse-numbers`
-
-Should keys that look like numbers be treated as such?
-
-```sh
-node example.js --foo=99.3
-{ _: [], foo: 99.3 }
-```
-
-_if disabled:_
-
-```sh
-node example.js --foo=99.3
-{ _: [], foo: "99.3" }
-```
-
-### boolean negation
-
-* default: `true`
-* key: `boolean-negation`
-
-Should variables prefixed with `--no` be treated as negations?
-
-```sh
-node example.js --no-foo
-{ _: [], foo: false }
-```
-
-_if disabled:_
-
-```sh
-node example.js --no-foo
-{ _: [], "no-foo": true }
-```
-
-### combine arrays
-
-* default: `false`
-* key: `combine-arrays`
-
-Should arrays be combined when provided by both command line arguments and
-a configuration file.
-
-### duplicate arguments array
-
-* default: `true`
-* key: `duplicate-arguments-array`
-
-Should arguments be coerced into an array when duplicated:
-
-```sh
-node example.js -x 1 -x 2
-{ _: [], x: [1, 2] }
-```
-
-_if disabled:_
-
-```sh
-node example.js -x 1 -x 2
-{ _: [], x: 2 }
-```
-
-### flatten duplicate arrays
-
-* default: `true`
-* key: `flatten-duplicate-arrays`
-
-Should array arguments be coerced into a single array when duplicated:
-
-```sh
-node example.js -x 1 2 -x 3 4
-{ _: [], x: [1, 2, 3, 4] }
-```
-
-_if disabled:_
-
-```sh
-node example.js -x 1 2 -x 3 4
-{ _: [], x: [[1, 2], [3, 4]] }
-```
-
-### negation prefix
-
-* default: `no-`
-* key: `negation-prefix`
-
-The prefix to use for negated boolean variables.
-
-```sh
-node example.js --no-foo
-{ _: [], foo: false }
-```
-
-_if set to `quux`:_
-
-```sh
-node example.js --quuxfoo
-{ _: [], foo: false }
-```
-
-### populate --
-
-* default: `false`.
-* key: `populate--`
-
-Should unparsed flags be stored in `--` or `_`.
-
-_If disabled:_
-
-```sh
-node example.js a -b -- x y
-{ _: [ 'a', 'x', 'y' ], b: true }
-```
-
-_If enabled:_
-
-```sh
-node example.js a -b -- x y
-{ _: [ 'a' ], '--': [ 'x', 'y' ], b: true }
-```
-
-### set placeholder key
-
-* default: `false`.
-* key: `set-placeholder-key`.
-
-Should a placeholder be added for keys not set via the corresponding CLI argument?
-
-_If disabled:_
-
-```sh
-node example.js -a 1 -c 2
-{ _: [], a: 1, c: 2 }
-```
-
-_If enabled:_
-
-```sh
-node example.js -a 1 -c 2
-{ _: [], a: 1, b: undefined, c: 2 }
-```
-
-### halt at non-option
-
-* default: `false`.
-* key: `halt-at-non-option`.
-
-Should parsing stop at the first positional argument? This is similar to how e.g. `ssh` parses its command line.
-
-_If disabled:_
-
-```sh
-node example.js -a run b -x y
-{ _: [ 'b' ], a: 'run', x: 'y' }
-```
-
-_If enabled:_
-
-```sh
-node example.js -a run b -x y
-{ _: [ 'b', '-x', 'y' ], a: 'run' }
-```
-
-### strip aliased
-
-* default: `false`
-* key: `strip-aliased`
-
-Should aliases be removed before returning results?
-
-_If disabled:_
-
-```sh
-node example.js --test-field 1
-{ _: [], 'test-field': 1, testField: 1, 'test-alias': 1, testAlias: 1 }
-```
-
-_If enabled:_
-
-```sh
-node example.js --test-field 1
-{ _: [], 'test-field': 1, testField: 1 }
-```
-
-### strip dashed
-
-* default: `false`
-* key: `strip-dashed`
-
-Should dashed keys be removed before returning results?  This option has no effect if
-`camel-case-exansion` is disabled.
-
-_If disabled:_
-
-```sh
-node example.js --test-field 1
-{ _: [], 'test-field': 1, testField: 1 }
-```
-
-_If enabled:_
-
-```sh
-node example.js --test-field 1
-{ _: [], testField: 1 }
-```
-
-## Special Thanks
-
-The yargs project evolves from optimist and minimist. It owes its
-existence to a lot of James Halliday's hard work. Thanks [substack](https://github.com/substack) **beep** **boop** \o/
-
-## License
-
-ISC
diff --git a/device_home/node_modules/yargs/CHANGELOG.md b/device_home/node_modules/yargs/CHANGELOG.md
deleted file mode 100644 (file)
index d789870..0000000
+++ /dev/null
@@ -1,1335 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-## [13.3.0](https://www.github.com/yargs/yargs/compare/v13.2.4...v13.3.0) (2019-06-10)
-
-
-### Bug Fixes
-
-* **deps:** yargs-parser update addressing several parsing bugs ([#1357](https://www.github.com/yargs/yargs/issues/1357)) ([e230d5b](https://www.github.com/yargs/yargs/commit/e230d5b))
-
-
-### Features
-
-* **i18n:** swap out os-locale dependency for simple inline implementation ([#1356](https://www.github.com/yargs/yargs/issues/1356)) ([4dfa19b](https://www.github.com/yargs/yargs/commit/4dfa19b))
-* support defaultDescription for positional arguments ([812048c](https://www.github.com/yargs/yargs/commit/812048c))
-
-### [13.2.4](https://github.com/yargs/yargs/compare/v13.2.3...v13.2.4) (2019-05-13)
-
-
-### Bug Fixes
-
-* **i18n:** rename unclear 'implication failed' to 'missing dependent arguments' ([#1317](https://github.com/yargs/yargs/issues/1317)) ([bf46813](https://github.com/yargs/yargs/commit/bf46813))
-
-
-
-### [13.2.3](https://github.com/yargs/yargs/compare/v13.2.2...v13.2.3) (2019-05-05)
-
-
-### Bug Fixes
-
-* **deps:** upgrade cliui for compatibility with latest chalk. ([#1330](https://github.com/yargs/yargs/issues/1330)) ([b20db65](https://github.com/yargs/yargs/commit/b20db65))
-* address issues with dutch translation ([#1316](https://github.com/yargs/yargs/issues/1316)) ([0295132](https://github.com/yargs/yargs/commit/0295132))
-
-
-### Tests
-
-* accept differently formatted output ([#1327](https://github.com/yargs/yargs/issues/1327)) ([c294d1b](https://github.com/yargs/yargs/commit/c294d1b))
-
-
-
-## [13.2.2](https://github.com/yargs/yargs/compare/v13.2.1...v13.2.2) (2019-03-06)
-
-
-
-## [13.2.1](https://github.com/yargs/yargs/compare/v13.2.0...v13.2.1) (2019-02-18)
-
-
-### Bug Fixes
-
-* add zsh script to files array ([3180224](https://github.com/yargs/yargs/commit/3180224))
-* support options/sub-commands in zsh completion ([0a96394](https://github.com/yargs/yargs/commit/0a96394))
-
-
-# [13.2.0](https://github.com/yargs/yargs/compare/v13.1.0...v13.2.0) (2019-02-15)
-
-
-### Features
-
-* zsh auto completion ([#1292](https://github.com/yargs/yargs/issues/1292)) ([16c5d25](https://github.com/yargs/yargs/commit/16c5d25)), closes [#1156](https://github.com/yargs/yargs/issues/1156)
-
-
-<a name="13.1.0"></a>
-# [13.1.0](https://github.com/yargs/yargs/compare/v13.0.0...v13.1.0) (2019-02-12)
-
-
-### Features
-
-* add applyBeforeValidation, for applying sync middleware before validation ([5be206a](https://github.com/yargs/yargs/commit/5be206a))
-
-
-
-<a name="13.0.0"></a>
-# [13.0.0](https://github.com/yargs/yargs/compare/v12.0.5...v13.0.0) (2019-02-02)
-
-
-### Bug Fixes
-
-* **deps:** Update os-locale to avoid security vulnerability ([#1270](https://github.com/yargs/yargs/issues/1270)) ([27bf739](https://github.com/yargs/yargs/commit/27bf739))
-* **validation:** Use the error as a message when none exists otherwise ([#1268](https://github.com/yargs/yargs/issues/1268)) ([0510fe6](https://github.com/yargs/yargs/commit/0510fe6))
-* better bash path completion ([#1272](https://github.com/yargs/yargs/issues/1272)) ([da75ea2](https://github.com/yargs/yargs/commit/da75ea2))
-* middleware added multiple times due to reference bug ([#1282](https://github.com/yargs/yargs/issues/1282)) ([64af518](https://github.com/yargs/yargs/commit/64af518))
-
-
-### Chores
-
-* ~drop Node 6 from testing matrix ([#1287](https://github.com/yargs/yargs/issues/1287)) ([ef16792](https://github.com/yargs/yargs/commit/ef16792))~
-  * _opting to not drop Node 6 support until April, [see](https://github.com/nodejs/Release)._
-* update dependencies ([#1284](https://github.com/yargs/yargs/issues/1284)) ([f25de4f](https://github.com/yargs/yargs/commit/f25de4f))
-
-
-### Features
-
-* Add `.parserConfiguration()` method, deprecating package.json config ([#1262](https://github.com/yargs/yargs/issues/1262)) ([3c6869a](https://github.com/yargs/yargs/commit/3c6869a))
-* adds config option for sorting command output ([#1256](https://github.com/yargs/yargs/issues/1256)) ([6916ce9](https://github.com/yargs/yargs/commit/6916ce9))
-* options/positionals with leading '+' and '0' no longer parse as numbers ([#1286](https://github.com/yargs/yargs/issues/1286)) ([e9dc3aa](https://github.com/yargs/yargs/commit/e9dc3aa))
-* support promises in middleware ([f3a4e4f](https://github.com/yargs/yargs/commit/f3a4e4f))
-
-
-### BREAKING CHANGES
-
-* options with leading '+' or '0' now parse as strings
-* dropping Node 6 which hits end of life in April 2019
-* see [yargs-parser@12.0.0 CHANGELOG](https://github.com/yargs/yargs-parser/blob/master/CHANGELOG.md#breaking-changes)
-* we now warn if the yargs stanza package.json is used.
-
-
-
-<a name="12.0.5"></a>
-## [12.0.5](https://github.com/yargs/yargs/compare/v12.0.4...v12.0.5) (2018-11-19)
-
-
-### Bug Fixes
-
-* allows camel-case, variadic arguments, and strict mode to be combined ([#1247](https://github.com/yargs/yargs/issues/1247)) ([eacc035](https://github.com/yargs/yargs/commit/eacc035))
-
-
-
-<a name="12.0.4"></a>
-## [12.0.4](https://github.com/yargs/yargs/compare/v12.0.3...v12.0.4) (2018-11-10)
-
-
-### Bug Fixes
-
-* don't load config when processing positionals ([5d0dc92](https://github.com/yargs/yargs/commit/5d0dc92))
-
-
-
-<a name="12.0.3"></a>
-## [12.0.3](https://github.com/yargs/yargs/compare/v12.0.2...v12.0.3) (2018-10-06)
-
-
-### Bug Fixes
-
-* $0 contains first arg in bundled electron apps ([#1206](https://github.com/yargs/yargs/issues/1206)) ([567820b](https://github.com/yargs/yargs/commit/567820b))
-* accept single function for middleware ([66fd6f7](https://github.com/yargs/yargs/commit/66fd6f7)), closes [#1214](https://github.com/yargs/yargs/issues/1214) [#1214](https://github.com/yargs/yargs/issues/1214)
-* hide `hidden` options from help output even if they are in a group ([#1221](https://github.com/yargs/yargs/issues/1221)) ([da54028](https://github.com/yargs/yargs/commit/da54028))
-* improve Norwegian Bokmål translations ([#1208](https://github.com/yargs/yargs/issues/1208)) ([a458fa4](https://github.com/yargs/yargs/commit/a458fa4))
-* improve Norwegian Nynorsk translations ([#1207](https://github.com/yargs/yargs/issues/1207)) ([d422eb5](https://github.com/yargs/yargs/commit/d422eb5))
-
-
-
-<a name="12.0.2"></a>
-## [12.0.2](https://github.com/yargs/yargs/compare/v12.0.1...v12.0.2) (2018-09-04)
-
-
-### Bug Fixes
-
-* middleware should work regardless of when method is called  ([664b265](https://github.com/yargs/yargs/commit/664b265)), closes [#1178](https://github.com/yargs/yargs/issues/1178)
-* translation not working when using __ with a single parameter ([#1183](https://github.com/yargs/yargs/issues/1183)) ([f449aea](https://github.com/yargs/yargs/commit/f449aea))
-* upgrade os-locale to version that addresses license issue ([#1195](https://github.com/yargs/yargs/issues/1195)) ([efc0970](https://github.com/yargs/yargs/commit/efc0970))
-
-
-
-<a name="12.0.1"></a>
-## [12.0.1](https://github.com/yargs/yargs/compare/v12.0.0...v12.0.1) (2018-06-29)
-
-
-
-<a name="12.0.0"></a>
-# [12.0.0](https://github.com/yargs/yargs/compare/v11.1.0...v12.0.0) (2018-06-26)
-
-
-### Bug Fixes
-
-* .argv and .parse() now invoke identical code path ([#1126](https://github.com/yargs/yargs/issues/1126)) ([f13ebf4](https://github.com/yargs/yargs/commit/f13ebf4))
-* remove the trailing white spaces from the help output ([#1090](https://github.com/yargs/yargs/issues/1090)) ([3f0746c](https://github.com/yargs/yargs/commit/3f0746c))
-* **completion:** Avoid default command and recommendations during completion ([#1123](https://github.com/yargs/yargs/issues/1123)) ([036e7c5](https://github.com/yargs/yargs/commit/036e7c5))
-
-
-### Chores
-
-* test Node.js 6, 8 and 10 ([#1160](https://github.com/yargs/yargs/issues/1160)) ([84f9d2b](https://github.com/yargs/yargs/commit/84f9d2b))
-* upgrade to version of yargs-parser that does not populate value for unset boolean ([#1104](https://github.com/yargs/yargs/issues/1104)) ([d4705f4](https://github.com/yargs/yargs/commit/d4705f4))
-
-
-### Features
-
-* add support for global middleware, useful for shared tasks like metrics ([#1119](https://github.com/yargs/yargs/issues/1119)) ([9d71ac7](https://github.com/yargs/yargs/commit/9d71ac7))
-* allow setting scriptName $0 ([#1143](https://github.com/yargs/yargs/issues/1143)) ([a2f2eae](https://github.com/yargs/yargs/commit/a2f2eae))
-* remove `setPlaceholderKeys` ([#1105](https://github.com/yargs/yargs/issues/1105)) ([6ee2c82](https://github.com/yargs/yargs/commit/6ee2c82))
-
-
-### BREAKING CHANGES
-
-* Options absent from `argv` (not set via CLI argument) are now absent from the parsed result object rather than being set with `undefined`
-* drop Node 4 from testing matrix, such that we'll gradually start drifting away from supporting Node 4.
-* yargs-parser does not populate 'false' when boolean flag is not passed
-* tests that assert against help output will need to be updated
-
-
-
-<a name="11.1.0"></a>
-# [11.1.0](https://github.com/yargs/yargs/compare/v11.0.0...v11.1.0) (2018-03-04)
-
-
-### Bug Fixes
-
-* choose correct config directory when require.main does not exist ([#1056](https://github.com/yargs/yargs/issues/1056)) ([a04678c](https://github.com/yargs/yargs/commit/a04678c))
-
-
-### Features
-
-* allow hidden options to be displayed with --show-hidden ([#1061](https://github.com/yargs/yargs/issues/1061)) ([ea862ae](https://github.com/yargs/yargs/commit/ea862ae))
-* extend *.rc files in addition to json ([#1080](https://github.com/yargs/yargs/issues/1080)) ([11691a6](https://github.com/yargs/yargs/commit/11691a6))
-
-
-
-<a name="11.0.0"></a>
-# [11.0.0](https://github.com/yargs/yargs/compare/v10.1.2...v11.0.0) (2018-01-22)
-
-
-### Bug Fixes
-
-* Set implicit nargs=1 when type=number requiresArg=true ([#1050](https://github.com/yargs/yargs/issues/1050)) ([2b56812](https://github.com/yargs/yargs/commit/2b56812))
-
-
-### Features
-
-* requiresArg is now simply an alias for nargs(1) ([#1054](https://github.com/yargs/yargs/issues/1054)) ([a3ddacc](https://github.com/yargs/yargs/commit/a3ddacc))
-
-
-### BREAKING CHANGES
-
-* requiresArg now has significantly different error output, matching nargs.
-
-
-
-<a name="10.1.2"></a>
-## [10.1.2](https://github.com/yargs/yargs/compare/v10.1.1...v10.1.2) (2018-01-17)
-
-
-### Bug Fixes
-
-* requiresArg should only be enforced if argument exists ([#1043](https://github.com/yargs/yargs/issues/1043)) ([fbf41ae](https://github.com/yargs/yargs/commit/fbf41ae))
-
-
-
-<a name="10.1.1"></a>
-## [10.1.1](https://github.com/yargs/yargs/compare/v10.1.0...v10.1.1) (2018-01-09)
-
-
-### Bug Fixes
-
-* Add `dirname` sanity check on `findUp` ([#1036](https://github.com/yargs/yargs/issues/1036)) ([331d103](https://github.com/yargs/yargs/commit/331d103))
-
-
-
-<a name="10.1.0"></a>
-# [10.1.0](https://github.com/yargs/yargs/compare/v10.0.3...v10.1.0) (2018-01-01)
-
-
-### Bug Fixes
-
-* 'undefined' should be taken to mean no argument was provided ([#1015](https://github.com/yargs/yargs/issues/1015)) ([c679e90](https://github.com/yargs/yargs/commit/c679e90))
-
-
-### Features
-
-* add missing simple chinese locale strings ([#1004](https://github.com/yargs/yargs/issues/1004)) ([3cc24ec](https://github.com/yargs/yargs/commit/3cc24ec))
-* add Norwegian Nynorsk translations ([#1028](https://github.com/yargs/yargs/issues/1028)) ([a5ac213](https://github.com/yargs/yargs/commit/a5ac213))
-* async command handlers ([#1001](https://github.com/yargs/yargs/issues/1001)) ([241124b](https://github.com/yargs/yargs/commit/241124b))
-* middleware ([#881](https://github.com/yargs/yargs/issues/881)) ([77b8dbc](https://github.com/yargs/yargs/commit/77b8dbc))
-
-
-
-<a name="10.0.3"></a>
-## [10.0.3](https://github.com/yargs/yargs/compare/v10.0.2...v10.0.3) (2017-10-21)
-
-
-### Bug Fixes
-
-* parse array rather than string, so that quotes are safe ([#993](https://github.com/yargs/yargs/issues/993)) ([c351685](https://github.com/yargs/yargs/commit/c351685))
-
-
-
-<a name="10.0.2"></a>
-## [10.0.2](https://github.com/yargs/yargs/compare/v10.0.1...v10.0.2) (2017-10-21)
-
-
-### Bug Fixes
-
-* fix tiny spacing issue with usage ([#992](https://github.com/yargs/yargs/issues/992)) ([7871327](https://github.com/yargs/yargs/commit/7871327))
-
-
-
-<a name="10.0.1"></a>
-## [10.0.1](https://github.com/yargs/yargs/compare/v10.0.0...v10.0.1) (2017-10-19)
-
-
-### Bug Fixes
-
-* help strings for nested commands were missing parent commands ([#990](https://github.com/yargs/yargs/issues/990)) ([cd1ca15](https://github.com/yargs/yargs/commit/cd1ca15))
-* use correct completion command in generated completion script ([#988](https://github.com/yargs/yargs/issues/988)) ([3c8ac1d](https://github.com/yargs/yargs/commit/3c8ac1d))
-
-
-
-<a name="10.0.0"></a>
-# [10.0.0](https://github.com/yargs/yargs/compare/v9.1.0...v10.0.0) (2017-10-18)
-
-
-### Bug Fixes
-
-* config and normalize can be disabled with false ([#952](https://github.com/yargs/yargs/issues/952)) ([3bb8771](https://github.com/yargs/yargs/commit/3bb8771))
-* less eager help command execution ([#972](https://github.com/yargs/yargs/issues/972)) ([8c1d7bf](https://github.com/yargs/yargs/commit/8c1d7bf))
-* the positional argument parse was clobbering global flag arguments ([#984](https://github.com/yargs/yargs/issues/984)) ([7e58453](https://github.com/yargs/yargs/commit/7e58453))
-
-
-### Features
-
-* .usage() can now be used to configure a default command ([#975](https://github.com/yargs/yargs/issues/975)) ([7269531](https://github.com/yargs/yargs/commit/7269531))
-* hidden options are now explicitly indicated using "hidden" flag ([#962](https://github.com/yargs/yargs/issues/962)) ([280d0d6](https://github.com/yargs/yargs/commit/280d0d6))
-* introduce .positional() for configuring positional arguments ([#967](https://github.com/yargs/yargs/issues/967)) ([cb16460](https://github.com/yargs/yargs/commit/cb16460))
-* replace $0 with file basename ([#983](https://github.com/yargs/yargs/issues/983)) ([20bb99b](https://github.com/yargs/yargs/commit/20bb99b))
-
-
-### BREAKING CHANGES
-
-* .usage() no longer accepts an options object as the second argument. It can instead be used as an alias for configuring a default command.
-* previously hidden options were simply implied using a falsy description
-* help command now only executes if it's the last positional in argv._
-
-
-
-<a name="9.1.0"></a>
-# [9.1.0](https://github.com/yargs/yargs/compare/v9.0.1...v9.1.0) (2017-09-25)
-
-
-### Bug Fixes
-
-* **command:** Run default cmd even if the only cmd ([#950](https://github.com/yargs/yargs/issues/950)) ([7b22203](https://github.com/yargs/yargs/commit/7b22203))
-
-
-### Features
-
-* multiple usage calls are now collected, not replaced ([#958](https://github.com/yargs/yargs/issues/958)) ([74a38b2](https://github.com/yargs/yargs/commit/74a38b2))
-
-
-
-<a name="9.0.1"></a>
-## [9.0.1](https://github.com/yargs/yargs/compare/v9.0.0...v9.0.1) (2017-09-17)
-
-
-### Bug Fixes
-
-* implications fails only displayed once ([#954](https://github.com/yargs/yargs/issues/954)) ([ac8088b](https://github.com/yargs/yargs/commit/ac8088b))
-
-
-
-<a name="9.0.0"></a>
-# [9.0.0](https://github.com/yargs/yargs/compare/v8.0.2...v9.0.0) (2017-09-03)
-
-
-### Bug Fixes
-
-* 'undefined' default value for choices resulted in validation failing ([782b896](https://github.com/yargs/yargs/commit/782b896))
-* address bug with handling of arrays of implications ([c240661](https://github.com/yargs/yargs/commit/c240661))
-* defaulting keys to 'undefined' interfered with conflicting key logic ([a8e0cff](https://github.com/yargs/yargs/commit/a8e0cff))
-* don't bother calling JSON.stringify() on string default values ([#891](https://github.com/yargs/yargs/issues/891)) ([628be21](https://github.com/yargs/yargs/commit/628be21))
-* exclude positional arguments from completion output ([#927](https://github.com/yargs/yargs/issues/927)) ([71c7ec7](https://github.com/yargs/yargs/commit/71c7ec7))
-* strict mode should not fail for hidden options ([#949](https://github.com/yargs/yargs/issues/949)) ([0e0c58d](https://github.com/yargs/yargs/commit/0e0c58d))
-
-
-### Features
-
-* allow implies and conflicts to accept array values ([#922](https://github.com/yargs/yargs/issues/922)) ([abdc7da](https://github.com/yargs/yargs/commit/abdc7da))
-* allow parse with no arguments as alias for yargs.argv ([#944](https://github.com/yargs/yargs/issues/944)) ([a9f03e7](https://github.com/yargs/yargs/commit/a9f03e7))
-* enable .help() and .version() by default ([#912](https://github.com/yargs/yargs/issues/912)) ([1ef44e0](https://github.com/yargs/yargs/commit/1ef44e0))
-* to allow both undefined and nulls, for benefit of TypeScript  ([#945](https://github.com/yargs/yargs/issues/945)) ([792564d](https://github.com/yargs/yargs/commit/792564d))
-
-
-### BREAKING CHANGES
-
-* version() and help() are now enabled by default, and show up in help output; the implicit help command can no longer be enabled/disabled independently from the help command itself (which can now be disabled).
-* parse() now behaves as an alias for .argv, unless a parseCallback is provided.
-
-
-
-<a name="8.0.2"></a>
-## [8.0.2](https://github.com/yargs/yargs/compare/v8.0.1...v8.0.2) (2017-06-12)
-
-
-
-<a name="8.0.1"></a>
-## [8.0.1](https://github.com/yargs/yargs/compare/v8.0.0...v8.0.1) (2017-05-02)
-
-
-
-<a name="8.0.0"></a>
-# [8.0.0](https://github.com/yargs/yargs/compare/v7.1.0...v8.0.0) (2017-05-01)
-
-
-### Bug Fixes
-
-* commands are now applied in order, from left to right ([#857](https://github.com/yargs/yargs/issues/857)) ([baba863](https://github.com/yargs/yargs/commit/baba863))
-* help now takes precedence over command recommendation ([#866](https://github.com/yargs/yargs/issues/866)) ([17e3567](https://github.com/yargs/yargs/commit/17e3567))
-* positional arguments now work if no handler is provided to inner command ([#864](https://github.com/yargs/yargs/issues/864)) ([e28ded3](https://github.com/yargs/yargs/commit/e28ded3))
-
-
-### Chores
-
-* upgrade yargs-parser ([#867](https://github.com/yargs/yargs/issues/867)) ([8f9c6c6](https://github.com/yargs/yargs/commit/8f9c6c6))
-
-
-### Features
-
-* allow extends to inherit from a module ([#865](https://github.com/yargs/yargs/issues/865)) ([89456d9](https://github.com/yargs/yargs/commit/89456d9))
-* allow strict mode to be disabled ([#840](https://github.com/yargs/yargs/issues/840)) ([6f78c05](https://github.com/yargs/yargs/commit/6f78c05))
-
-
-### BREAKING CHANGES
-
-* extends functionality now always loads the JSON provided, rather than reading from a specific key
-* Node 4+ is now required; this will allow us to start updating our dependencies.
-* the first argument to strict() is now used to enable/disable its functionality, rather than controlling whether or not it is global.
-
-
-
-<a name="7.1.0"></a>
-# [7.1.0](https://github.com/yargs/yargs/compare/v7.0.2...v7.1.0) (2017-04-13)
-
-
-### Bug Fixes
-
-* fix demandOption no longer treats 'false' as truthy ([#829](https://github.com/yargs/yargs/issues/829)) ([c748dd2](https://github.com/yargs/yargs/commit/c748dd2))
-* get terminalWidth in non interactive mode no longer causes a validation exception ([#837](https://github.com/yargs/yargs/issues/837)) ([360e301](https://github.com/yargs/yargs/commit/360e301))
-* we shouldn't output help if we've printed a prior help-like message ([#847](https://github.com/yargs/yargs/issues/847)) ([17e89bd](https://github.com/yargs/yargs/commit/17e89bd))
-
-
-### Features
-
-* add support for numeric commands ([#825](https://github.com/yargs/yargs/issues/825)) ([fde0564](https://github.com/yargs/yargs/commit/fde0564))
-
-
-
-<a name="7.0.2"></a>
-## [7.0.2](https://github.com/yargs/yargs/compare/v7.0.1...v7.0.2) (2017-03-10)
-
-
-### Bug Fixes
-
-* populating placeholder arguments broke validation ([b3eb2fe](https://github.com/yargs/yargs/commit/b3eb2fe))
-
-
-
-<a name="7.0.1"></a>
-## [7.0.1](https://github.com/yargs/yargs/compare/v7.0.0...v7.0.1) (2017-03-03)
-
-
-### Bug Fixes
-
-* --help with default command should print top-level help ([#810](https://github.com/yargs/yargs/issues/810)) ([9c03fa4](https://github.com/yargs/yargs/commit/9c03fa4))
-
-
-
-<a name="7.0.0"></a>
-# [7.0.0](https://github.com/yargs/yargs/compare/v6.6.0...v7.0.0) (2017-02-26)
-
-
-### Bug Fixes
-
-* address min/max validation message regression ([#750](https://github.com/yargs/yargs/issues/750)) ([2e5ce0f](https://github.com/yargs/yargs/commit/2e5ce0f))
-* address positional argument strict() bug introduced in [#766](https://github.com/yargs/yargs/issues/766) ([#784](https://github.com/yargs/yargs/issues/784)) ([a8528e6](https://github.com/yargs/yargs/commit/a8528e6))
-* console.warn() rather than throwing errors when api signatures are incorrect ([#804](https://github.com/yargs/yargs/issues/804)) ([a607061](https://github.com/yargs/yargs/commit/a607061))
-* context should override parsed argv ([#786](https://github.com/yargs/yargs/issues/786)) ([0997288](https://github.com/yargs/yargs/commit/0997288))
-* context variables are now recognized in strict() mode ([#796](https://github.com/yargs/yargs/issues/796)) ([48575cd](https://github.com/yargs/yargs/commit/48575cd))
-* errors were not bubbling appropriately from sub-commands to top-level ([#802](https://github.com/yargs/yargs/issues/802)) ([8a992f5](https://github.com/yargs/yargs/commit/8a992f5))
-* positional arguments of sub-commands threw strict() exception ([#805](https://github.com/yargs/yargs/issues/805)) ([f3f074b](https://github.com/yargs/yargs/commit/f3f074b))
-* pull in yargs-parser with modified env precedence ([#787](https://github.com/yargs/yargs/issues/787)) ([e0fbbe5](https://github.com/yargs/yargs/commit/e0fbbe5))
-* running parse() multiple times on the same yargs instance caused exception if help() enabled ([#790](https://github.com/yargs/yargs/issues/790)) ([07e39b7](https://github.com/yargs/yargs/commit/07e39b7))
-* use path.resolve() to support node 0.10 ([#797](https://github.com/yargs/yargs/issues/797)) ([49a93fc](https://github.com/yargs/yargs/commit/49a93fc))
-
-
-### Features
-
-* add conflicts and implies shorthands. ([#753](https://github.com/yargs/yargs/issues/753)) ([bd1472b](https://github.com/yargs/yargs/commit/bd1472b))
-* add traditional Chinese translation ([#780](https://github.com/yargs/yargs/issues/780)) ([6ab6a95](https://github.com/yargs/yargs/commit/6ab6a95))
-* allow provided config object to extend other configs ([#779](https://github.com/yargs/yargs/issues/779)) ([3280dd0](https://github.com/yargs/yargs/commit/3280dd0))
-* function argument validation ([#773](https://github.com/yargs/yargs/issues/773)) ([22ed9bb](https://github.com/yargs/yargs/commit/22ed9bb))
-* if only one column is provided for examples, allow it to take up the entire line ([#749](https://github.com/yargs/yargs/issues/749)) ([7931652](https://github.com/yargs/yargs/commit/7931652))
-* introduce custom yargs error object ([#765](https://github.com/yargs/yargs/issues/765)) ([8308efa](https://github.com/yargs/yargs/commit/8308efa))
-* introduces support for default commands, using the '*' identifier ([#785](https://github.com/yargs/yargs/issues/785)) ([d78a0f5](https://github.com/yargs/yargs/commit/d78a0f5))
-* rethink how options are inherited by commands ([#766](https://github.com/yargs/yargs/issues/766)) ([ab1fa4b](https://github.com/yargs/yargs/commit/ab1fa4b))
-
-
-### BREAKING CHANGES
-
-* `extends` key in config file is now used for extending other config files
-* environment variables now take precedence over config files.
-* context now takes precedence over argv and defaults
-* the arguments passed to functions are now validated, there's a good chance this will throw exceptions for a few folks who are using the API in an unexpected way.
-* by default options, and many of yargs' parsing helpers will now default to being applied globally; such that they are no-longer reset before being passed into commands.
-* yargs will no longer aggressively suppress errors, allowing errors that are not generated internally to bubble.
-
-
-
-<a name="6.6.0"></a>
-# [6.6.0](https://github.com/yargs/yargs/compare/v6.5.0...v6.6.0) (2016-12-29)
-
-
-### Bug Fixes
-
-* [object Object] was accidentally being populated on options object ([#736](https://github.com/yargs/yargs/issues/736)) ([f755e27](https://github.com/yargs/yargs/commit/f755e27))
-* do not use cwd when resolving package.json for yargs parsing config ([#726](https://github.com/yargs/yargs/issues/726)) ([9bdaab7](https://github.com/yargs/yargs/commit/9bdaab7))
-
-
-### Features
-
-* implement conflicts() for defining mutually exclusive arguments; thanks [@madcampos](https://github.com/madcampos)! ([#741](https://github.com/yargs/yargs/issues/741)) ([5883779](https://github.com/yargs/yargs/commit/5883779))
-* split demand() into demandCommand()/demandOption() ([#740](https://github.com/yargs/yargs/issues/740)) ([66573c8](https://github.com/yargs/yargs/commit/66573c8))
-* support for positional argument aliases ([#727](https://github.com/yargs/yargs/issues/727)) ([27e1a57](https://github.com/yargs/yargs/commit/27e1a57))
-
-
-
-<a name="6.5.0"></a>
-# [6.5.0](https://github.com/yargs/yargs/compare/v6.4.0...v6.5.0) (2016-12-01)
-
-
-### Bug Fixes
-
-* still freeze/unfreeze if parse() is called in isolation ([#717](https://github.com/yargs/yargs/issues/717)) ([30a9492](https://github.com/yargs/yargs/commit/30a9492))
-
-
-### Features
-
-* pull in yargs-parser introducing additional settings ([#688](https://github.com/yargs/yargs/issues/688)), and fixing [#716](https://github.com/yargs/yargs/issues/716) ([#722](https://github.com/yargs/yargs/issues/722)) ([702995a](https://github.com/yargs/yargs/commit/702995a))
-
-
-
-<a name="6.4.0"></a>
-# [6.4.0](https://github.com/yargs/yargs/compare/v6.3.0...v6.4.0) (2016-11-13)
-
-
-### Bug Fixes
-
-* **locales:** correct some Russian translations ([#691](https://github.com/yargs/yargs/issues/691)) ([a980671](https://github.com/yargs/yargs/commit/a980671))
-
-
-### Features
-
-* **locales:** Added Belarusian translation ([#690](https://github.com/yargs/yargs/issues/690)) ([68dac1f](https://github.com/yargs/yargs/commit/68dac1f))
-* **locales:** Create nl.json ([#687](https://github.com/yargs/yargs/issues/687)) ([46ce1bb](https://github.com/yargs/yargs/commit/46ce1bb))
-* update to yargs-parser that addresses [#598](https://github.com/yargs/yargs/issues/598), [#617](https://github.com/yargs/yargs/issues/617) ([#700](https://github.com/yargs/yargs/issues/700)) ([54cb31d](https://github.com/yargs/yargs/commit/54cb31d))
-* yargs is now passed as the third-argument to fail handler ([#613](https://github.com/yargs/yargs/issues/613)) ([21b74f9](https://github.com/yargs/yargs/commit/21b74f9))
-
-
-### Performance Improvements
-
-* normalizing package data is an expensive operation ([#705](https://github.com/yargs/yargs/issues/705)) ([49cf533](https://github.com/yargs/yargs/commit/49cf533))
-
-
-
-<a name="6.3.0"></a>
-# [6.3.0](https://github.com/yargs/yargs/compare/v6.2.0...v6.3.0) (2016-10-19)
-
-
-### Bug Fixes
-
-* **command:** subcommands via commandDir() now supported for parse(msg, cb) ([#678](https://github.com/yargs/yargs/issues/678)) ([6b85cc6](https://github.com/yargs/yargs/commit/6b85cc6))
-
-
-### Features
-
-* **locales:** Add Thai locale file ([#679](https://github.com/yargs/yargs/issues/679)) ([c05e36b](https://github.com/yargs/yargs/commit/c05e36b))
-
-
-
-<a name="6.2.0"></a>
-# [6.2.0](https://github.com/yargs/yargs/compare/v6.1.1...v6.2.0) (2016-10-16)
-
-
-### Bug Fixes
-
-* stop applying parser to context object ([#675](https://github.com/yargs/yargs/issues/675)) ([3fe9b8f](https://github.com/yargs/yargs/commit/3fe9b8f))
-
-
-### Features
-
-* add new pt_BR translations ([#674](https://github.com/yargs/yargs/issues/674)) ([5615a82](https://github.com/yargs/yargs/commit/5615a82))
-* Italian translations for 'did you mean' and 'aliases' ([#673](https://github.com/yargs/yargs/issues/673)) ([81984e6](https://github.com/yargs/yargs/commit/81984e6))
-
-
-
-<a name="6.1.1"></a>
-## [6.1.1](https://github.com/yargs/yargs/compare/v6.1.0...v6.1.1) (2016-10-15)
-
-
-### Bug Fixes
-
-* freeze was not resetting configObjects to initial state; addressed performance issue raised by [@nexdrew](https://github.com/nexdrew). ([#670](https://github.com/yargs/yargs/issues/670)) ([ae4bcd4](https://github.com/yargs/yargs/commit/ae4bcd4))
-
-
-
-<a name="6.1.0"></a>
-# [6.1.0](https://github.com/yargs/yargs/compare/v6.0.0...v6.1.0) (2016-10-15)
-
-
-### Bug Fixes
-
-* **locales:** change some translations ([#667](https://github.com/yargs/yargs/issues/667)) ([aa966c5](https://github.com/yargs/yargs/commit/aa966c5))
-* **locales:** conform hi locale to y18n.__n expectations ([#666](https://github.com/yargs/yargs/issues/666)) ([22adb18](https://github.com/yargs/yargs/commit/22adb18))
-
-
-### Features
-
-* initial support for command aliases ([#647](https://github.com/yargs/yargs/issues/647)) ([127a040](https://github.com/yargs/yargs/commit/127a040))
-* **command:** add camelcase commands to argv ([#658](https://github.com/yargs/yargs/issues/658)) ([b1cabae](https://github.com/yargs/yargs/commit/b1cabae))
-* **locales:** add Hindi translations ([9290912](https://github.com/yargs/yargs/commit/9290912))
-* **locales:** add Hungarian translations  ([be92327](https://github.com/yargs/yargs/commit/be92327))
-* **locales:** Japanese translations for 'did you mean' and 'aliases'  ([#651](https://github.com/yargs/yargs/issues/651)) ([5eb78fc](https://github.com/yargs/yargs/commit/5eb78fc))
-* **locales:** Polish translations for 'did you mean' and 'aliases' ([#650](https://github.com/yargs/yargs/issues/650)) ([c951c0e](https://github.com/yargs/yargs/commit/c951c0e))
-* reworking yargs API to make it easier to run in headless environments, e.g., Slack ([#646](https://github.com/yargs/yargs/issues/646)) ([f284c29](https://github.com/yargs/yargs/commit/f284c29))
-* Turkish translations for 'did you mean' and 'aliases' ([#660](https://github.com/yargs/yargs/issues/660)) ([072fd45](https://github.com/yargs/yargs/commit/072fd45))
-
-
-
-<a name="6.0.0"></a>
-# [6.0.0](https://github.com/yargs/yargs/compare/v5.0.0...v6.0.0) (2016-09-30)
-
-
-### Bug Fixes
-
-* changed parsing of the command string to ignore extra spaces ([#600](https://github.com/yargs/yargs/issues/600)) ([e8e5a72](https://github.com/yargs/yargs/commit/e8e5a72))
-* drop lodash.assign ([#641](https://github.com/yargs/yargs/issues/641)) ([ad3146f](https://github.com/yargs/yargs/commit/ad3146f))
-* for args that have skipValidation set to `true`, check if the parsed arg is `true` ([#619](https://github.com/yargs/yargs/issues/619)) ([658a34c](https://github.com/yargs/yargs/commit/658a34c))
-* upgrade standard, and fix appveyor config so that it works with newest standard ([#607](https://github.com/yargs/yargs/issues/607)) ([c301f42](https://github.com/yargs/yargs/commit/c301f42))
-
-
-### Chores
-
-* upgrade yargs-parser ([#633](https://github.com/yargs/yargs/issues/633)) ([cc1224e](https://github.com/yargs/yargs/commit/cc1224e))
-
-
-### Features
-
-* make opts object optional for .option() ([#624](https://github.com/yargs/yargs/issues/624)) ([4f29de6](https://github.com/yargs/yargs/commit/4f29de6))
-
-
-### Performance Improvements
-
-* defer windowWidth() to improve perf for non-help usage ([#610](https://github.com/yargs/yargs/issues/610)) ([cbc3636](https://github.com/yargs/yargs/commit/cbc3636))
-
-
-### BREAKING CHANGES
-
-* coerce is now applied as a final step after other parsing is complete
-
-
-
-<a name="5.0.0"></a>
-# [5.0.0](https://github.com/yargs/yargs/compare/v4.8.1...v5.0.0) (2016-08-14)
-
-
-### Bug Fixes
-
-* **default:** Remove undocumented alias of default() ([#469](https://github.com/yargs/yargs/issues/469)) ([b8591b2](https://github.com/yargs/yargs/commit/b8591b2))
-* remove deprecated zh.json ([#578](https://github.com/yargs/yargs/issues/578)) ([317c62c](https://github.com/yargs/yargs/commit/317c62c))
-
-
-### Features
-
-* .help() API can now enable implicit help command ([#574](https://github.com/yargs/yargs/issues/574)) ([7645019](https://github.com/yargs/yargs/commit/7645019))
-* **command:** builder function no longer needs to return the yargs instance ([#549](https://github.com/yargs/yargs/issues/549)) ([eaa2873](https://github.com/yargs/yargs/commit/eaa2873))
-* add coerce api ([#586](https://github.com/yargs/yargs/issues/586)) ([1d53ccb](https://github.com/yargs/yargs/commit/1d53ccb))
-* adds recommendCommands() for command suggestions ([#580](https://github.com/yargs/yargs/issues/580)) ([59474dc](https://github.com/yargs/yargs/commit/59474dc))
-* apply .env() globally ([#553](https://github.com/yargs/yargs/issues/553)) ([be65728](https://github.com/yargs/yargs/commit/be65728))
-* apply default builder to command() and apply fail() handlers globally ([#583](https://github.com/yargs/yargs/issues/583)) ([0aaa68b](https://github.com/yargs/yargs/commit/0aaa68b))
-* update yargs-parser to version 3.1.0 ([#581](https://github.com/yargs/yargs/issues/581)) ([882a127](https://github.com/yargs/yargs/commit/882a127))
-
-
-### Performance Improvements
-
-* defer requiring most external libs until needed ([#584](https://github.com/yargs/yargs/issues/584)) ([f9b0ed4](https://github.com/yargs/yargs/commit/f9b0ed4))
-
-
-### BREAKING CHANGES
-
-* fail is now applied globally.
-* we now default to an empty builder function when command is executed with no builder.
-* yargs-parser now better handles negative integer values, at the cost of handling numeric option names, e.g., -1 hello
-* default: removed undocumented `defaults` alias for `default`.
-* introduces a default `help` command which outputs help, as an alternative to a help flag.
-* interpret demand() numbers as relative to executing command ([#582](https://github.com/yargs/yargs/issues/582)) ([927810c](https://github.com/yargs/yargs/commit/927810c))
-
-
-
-<a name="4.8.1"></a>
-## [4.8.1](https://github.com/yargs/yargs/compare/v4.8.0...v4.8.1) (2016-07-16)
-
-
-### Bug Fixes
-
-* **commandDir:** make dir relative to caller instead of require.main.filename ([#548](https://github.com/yargs/yargs/issues/548)) ([3c2e479](https://github.com/yargs/yargs/commit/3c2e479))
-* add config lookup for .implies() ([#556](https://github.com/yargs/yargs/issues/556)) ([8d7585c](https://github.com/yargs/yargs/commit/8d7585c))
-* cache pkg lookups by path to avoid returning the wrong one ([#552](https://github.com/yargs/yargs/issues/552)) ([fea7e0b](https://github.com/yargs/yargs/commit/fea7e0b))
-* positional arguments were not being handled appropriately by parse() ([#559](https://github.com/yargs/yargs/issues/559)) ([063a866](https://github.com/yargs/yargs/commit/063a866))
-* pull in [@nexdrew](https://github.com/nexdrew)'s fixes to yargs-parser ([#560](https://github.com/yargs/yargs/issues/560)) ([c77c080](https://github.com/yargs/yargs/commit/c77c080)), closes [#560](https://github.com/yargs/yargs/issues/560)
-
-
-
-<a name="4.8.0"></a>
-# [4.8.0](https://github.com/yargs/yargs/compare/v4.7.1...v4.8.0) (2016-07-09)
-
-
-### Bug Fixes
-
-* drop unused camelcase dependency fixes [#516](https://github.com/yargs/yargs/issues/516) ([#525](https://github.com/yargs/yargs/issues/525)) ([365fb9a](https://github.com/yargs/yargs/commit/365fb9a)), closes [#516](https://github.com/yargs/yargs/issues/516) [#525](https://github.com/yargs/yargs/issues/525)
-* fake a tty in tests, so that we can use the new set-blocking ([#512](https://github.com/yargs/yargs/issues/512)) ([a54c742](https://github.com/yargs/yargs/commit/a54c742))
-* ignore invalid package.json during read-pkg-up ([#546](https://github.com/yargs/yargs/issues/546)) ([e058c87](https://github.com/yargs/yargs/commit/e058c87))
-* keep both zh and zh_CN until yargs[@5](https://github.com/5).x ([0f8faa7](https://github.com/yargs/yargs/commit/0f8faa7))
-* lazy-load package.json and cache. get rid of pkg-conf dependency. ([#544](https://github.com/yargs/yargs/issues/544)) ([2609b2e](https://github.com/yargs/yargs/commit/2609b2e))
-* we now respect the order of _ when applying commands ([#537](https://github.com/yargs/yargs/issues/537)) ([ed86b78](https://github.com/yargs/yargs/commit/ed86b78))
-
-
-### Features
-
-* add .commandDir(dir) to API to apply all command modules from a relative directory ([#494](https://github.com/yargs/yargs/issues/494)) ([b299dff](https://github.com/yargs/yargs/commit/b299dff))
-* **command:** derive missing command string from module filename ([#527](https://github.com/yargs/yargs/issues/527)) ([20d4b8a](https://github.com/yargs/yargs/commit/20d4b8a))
-* builder is now optional for a command module ([#545](https://github.com/yargs/yargs/issues/545)) ([8d6ad6e](https://github.com/yargs/yargs/commit/8d6ad6e))
-
-
-
-<a name="4.7.1"></a>
-## [4.7.1](https://github.com/yargs/yargs/compare/v4.7.0...v4.7.1) (2016-05-15)
-
-
-### Bug Fixes
-
-* switch to using `const` rather than `var` ([#499](https://github.com/yargs/yargs/pull/499))
-* make stdout flush on newer versions of Node.js ([#501](https://github.com/yargs/yargs/issues/501)) ([9f8c6f4](https://github.com/yargs/yargs/commit/9f8c6f4))
-
-
-
-<a name="4.7.0"></a>
-# [4.7.0](https://github.com/yargs/yargs/compare/v4.6.0...v4.7.0) (2016-05-02)
-
-
-### Bug Fixes
-
-* **pkgConf:** fix aliases issues in .pkgConf() ([#478](https://github.com/yargs/yargs/issues/478))([b900502](https://github.com/yargs/yargs/commit/b900502))
-
-
-### Features
-
-* **completion:** allow to get completions for any string, not just process.argv ([#470](https://github.com/yargs/yargs/issues/470))([74fcfbc](https://github.com/yargs/yargs/commit/74fcfbc))
-* **configuration:** Allow to directly pass a configuration object to .config() ([#480](https://github.com/yargs/yargs/issues/480))([e0a7e05](https://github.com/yargs/yargs/commit/e0a7e05))
-* **validation:** Add .skipValidation() method ([#471](https://github.com/yargs/yargs/issues/471))([d72badb](https://github.com/yargs/yargs/commit/d72badb))
-
-
-
-<a name="4.6.0"></a>
-# [4.6.0](https://github.com/yargs/yargs/compare/v4.5.0...v4.6.0) (2016-04-11)
-
-
-### Bug Fixes
-
-* **my brand!:** I agree with [@osher](https://github.com/osher) lightweight isn't a huge selling point of ours any longer, see [#468](https://github.com/yargs/yargs/issues/468) ([c46d7e1](https://github.com/yargs/yargs/commit/c46d7e1))
-
-### Features
-
-* switch to standard-version for release management ([f70f801](https://github.com/yargs/yargs/commit/f70f801))
-* upgrade to version of yargs-parser that introduces some slick new features, great work [@elas7](https://github.com/elas7). update cliui, replace win-spawn, replace badge. ([#475](https://github.com/yargs/yargs/issues/475)) ([f915dd4](https://github.com/yargs/yargs/commit/f915dd4))
-
-
-
-<a name="4.5.0"></a>
-# [4.5.0](https://github.com/yargs/yargs/compare/v4.4.0...v4.5.0) (2016-04-05)
-
-
-### Bug Fixes
-
-* **windows:** handle $0 better on Windows platforms ([eb6e03f](https://github.com/yargs/yargs/commit/eb6e03f))
-
-### Features
-
-* **commands:** implemented variadic positional arguments ([51d926e](https://github.com/yargs/yargs/commit/51d926e))
-* **completion:** completion now better handles aliases, and avoids duplicating keys. ([86416c8](https://github.com/yargs/yargs/commit/86416c8))
-* **config:** If invoking .config() without parameters, set a default option ([0413dd1](https://github.com/yargs/yargs/commit/0413dd1))
-* **conventional-changelog:** switching to using conventional-changelog for generating the changelog ([a2b5a2a](https://github.com/yargs/yargs/commit/a2b5a2a))
-
-
-
-### v4.4.0 (2016/04/03 21:10 +07:00)
-
-- [#454](https://github.com/yargs/yargs/pull/454) fix demand() when second argument is an array (@elas7)
-- [#452](https://github.com/yargs/yargs/pull/452) fix code example for `.help()` docs (@maxrimue)
-- [#450](https://github.com/yargs/yargs/pull/450) fix for bash completion trailing space edge-case (@elas7)
-- [#448](https://github.com/yargs/yargs/pull/448) allow a method to be passed to `showHelp`, rather than a log-level (@osher)
-- [#446](https://github.com/yargs/yargs/pull/446) update yargs-parser, y18n, nyc, cliui, pkg-conf (@bcoe)
-- [#436](https://github.com/yargs/yargs/pull/436) the rebase method is only used by tests, do not export it in two places (@elas7)
-- [#428](https://github.com/yargs/yargs/pull/428) initial support for subcommands (@nexdrew)
-
-### v4.3.2 (2016/3/20 15:07 +07:00)
-
-- [#445](https://github.com/yargs/yargs/pull/445) strict mode was failing if no commands were registered (@nexdrew)
-- [#443](https://github.com/yargs/yargs/pull/443) adds Italian translation \o/ (@madrisan)
-- [#441](https://github.com/yargs/yargs/pull/441) remove duplicate keys from array options configuration (@elas7)
-- [#437](https://github.com/yargs/yargs/pull/437) standardize tests for .command() (@lrlna)
-
-### v4.3.0 (2016/3/12 14:19 +07:00)
-
-- [#432](https://github.com/yargs/yargs/pull/432) non-singleton version of yargs (@bcoe)
-- [#422, #425, #420] translations for number (@zkat, @rilut, @maxrimue, @watilde)
-- [#414](https://github.com/yargs/yargs/pull/414) all command options can be defined in module now (@nexdrew)
-
-### v4.2.0 (2016/2/22 11:02 +07:00)
-
-- [#395](https://github.com/yargs/yargs/pull/395) do not reset groups if they contain
-  global keys (@novemberborn)
-- [#393](https://github.com/yargs/yargs/pull/393) use sane default for usage strings (@nexdrew)
-- [#392](https://github.com/yargs/yargs/pull/392) resetting wrap() was causing layout issues
-  with commands (@nexdrew)
-- [#391](https://github.com/yargs/yargs/pull/391) commands were being added multiple times (@nexdrew)
-
-### v4.0.0 (2016/2/14 1:27 +07:00)
-
-- [#384](https://github.com/bcoe/yargs/pull/384) add new number type to yargs (@lrlna, @maxrimue)
-- [#382](https://github.com/bcoe/yargs/pull/382) pass error as extra parameter to fail (@gajus)
-- [#378](https://github.com/bcoe/yargs/pull/378) introduces the pkgConf feature, which tells
-  yargs to load default argument values from a key on a project's package.json (@bcoe)
-- [#376](https://github.com/bcoe/yargs/pull/376) **breaking change**, make help() method signature
-   more consistent with other commands (@maxrimue)
-- [#368](https://github.com/bcoe/yargs/pull/368) **breaking change**, overhaul to command handling API:
-  introducing named positional arguments, commands as modules, introduces the concept of global options (options that don't reset). (@nexdrew, @bcoe).
-- [#364](https://github.com/bcoe/yargs/pull/364) add the slick new yargs website to the package.json (@iarna).
-- [#357](https://github.com/bcoe/yargs/pull/357) .strict() now requires that a valid command is provided (@lrlna)
-- [#356](https://github.com/bcoe/yargs/pull/356) pull the parsing bits of yargs into the separate module yargs-parser. Various parsing options can now be turned on and off using configuration (@bcoe).
-- [#330](https://github.com/bcoe/yargs/pull/330) **breaking change**, fix inconsistencies with `.version()` API. (@maxrimue).
-
-### v3.32.0 (2016/1/14 10:13 +07:00)
-
-- [#344](https://github.com/bcoe/yargs/pull/344) yargs now has a code of conduct and contributor guidelines (@bcoe)
-- [#341](https://github.com/bcoe/yargs/issues/341) Fix edge-case with camel-case arguments (@davibe)
-- [#331](https://github.com/bcoe/yargs/pull/331) Handle parsing a raw argument string (@kellyselden)
-- [#325](https://github.com/bcoe/yargs/pull/325) Tweaks to make tests pass again on Windows (@isaacs)
-- [#321](https://github.com/bcoe/yargs/pull/321) Custom config parsing function (@bcoe)
-
-### v3.31.0 (2015/12/03 10:15 +07:00)
-
-- [#239](https://github.com/bcoe/yargs/pull/239) Pass argv to commands (@bcoe)
-- [#308](https://github.com/bcoe/yargs/pull/308) Yargs now handles environment variables (@nexdrew)
-- [#302](https://github.com/bcoe/yargs/pull/302) Add Indonesian translation (@rilut)
-- [#300](https://github.com/bcoe/yargs/pull/300) Add Turkish translation (@feyzo)
-- [#298](https://github.com/bcoe/yargs/pull/298) Add Norwegian Bokmål translation (@sindresorhus)
-- [#297](https://github.com/bcoe/yargs/pull/297) Fix for layout of cjk characters (@disjukr)
-- [#296](https://github.com/bcoe/yargs/pull/296) Add Korean translation (@disjukr)
-
-### v3.30.0 (2015/11/13 16:29 +07:00)
-
-- [#293](https://github.com/bcoe/yargs/pull/293) Polish language support (@kamilogorek)
-- [#291](https://github.com/bcoe/yargs/pull/291) fix edge-cases with `.alias()` (@bcoe)
-- [#289](https://github.com/bcoe/yargs/pull/289) group options in custom groups (@bcoe)
-
-### v3.29.0 (2015/10/16 21:51 +07:00)
-
-- [#282](https://github.com/bcoe/yargs/pull/282) completions now accept promises (@LinusU)
-- [#281](https://github.com/bcoe/yargs/pull/281) fix parsing issues with dot notation (@bcoe)
-
-### v3.28.0 (2015/10/16 1:55 +07:00)
-
-- [#277](https://github.com/bcoe/yargs/pull/277) adds support for ansi escape codes (@bcoe)
-
-### v3.27.0 (2015/10/08 1:55 +00:00)
-
-- [#271](https://github.com/bcoe/yargs/pull/273) skips validation for help or version flags with exitProcess(false) (@tepez)
-- [#273](https://github.com/bcoe/yargs/pull/273) implements single output for errors with exitProcess(false) (@nexdrew)
-- [#269](https://github.com/bcoe/yargs/pull/269) verifies single output for errors with exitProcess(false) (@tepez)
-- [#268](https://github.com/bcoe/yargs/pull/268) adds Chinese translation (@qiu8310)
-- [#266](https://github.com/bcoe/yargs/pull/266) adds case for -- after -- in parser test (@geophree)
-
-### v3.26.0 (2015/09/25 2:14 +00:00)
-
-- [#263](https://github.com/bcoe/yargs/pull/263) document count() and option() object keys (@nexdrew)
-- [#259](https://github.com/bcoe/yargs/pull/259) remove util in readme (@38elements)
-- [#258](https://github.com/bcoe/yargs/pull/258) node v4 builds, update deps (@nexdrew)
-- [#257](https://github.com/bcoe/yargs/pull/257) fix spelling errors (@dkoleary88)
-
-### v3.25.0 (2015/09/13 7:38 -07:00)
-
-- [#254](https://github.com/bcoe/yargs/pull/254) adds Japanese translation (@oti)
-- [#253](https://github.com/bcoe/yargs/pull/253) fixes for tests on Windows (@bcoe)
-
-### v3.24.0 (2015/09/04 12:02 +00:00)
-
-- [#248](https://github.com/bcoe/yargs/pull/248) reinstate os-locale, no spawning (@nexdrew)
-- [#249](https://github.com/bcoe/yargs/pull/249) use travis container-based infrastructure (@nexdrew)
-- [#247](https://github.com/bcoe/yargs/pull/247) upgrade standard (@nexdrew)
-
-### v3.23.0 (2015/08/30 23:00 +00:00)
-
-- [#246](https://github.com/bcoe/yargs/pull/246) detect locale based only on environment variables (@bcoe)
-- [#244](https://github.com/bcoe/yargs/pull/244) adds Windows CI testing (@bcoe)
-- [#245](https://github.com/bcoe/yargs/pull/245) adds OSX CI testing (@bcoe, @nexdrew)
-
-### v3.22.0 (2015/08/28 22:26 +00:00)
-- [#242](https://github.com/bcoe/yargs/pull/242) adds detectLocale config option (@bcoe)
-
-### v3.21.1 (2015/08/28 20:58 +00:00)
-- [#240](https://github.com/bcoe/yargs/pull/240) hot-fix for Atom on Windows (@bcoe)
-
-### v3.21.0 (2015/08/21 21:20 +00:00)
-- [#238](https://github.com/bcoe/yargs/pull/238) upgrade camelcase, window-size, chai, mocha (@nexdrew)
-- [#237](https://github.com/bcoe/yargs/pull/237) adds defaultDescription to option() (@nexdrew)
-
-### v3.20.0 (2015/08/20 01:29 +00:00)
-- [#231](https://github.com/bcoe/yargs/pull/231) Merge pull request #231 from bcoe/detect-locale (@sindresorhus)
-- [#235](https://github.com/bcoe/yargs/pull/235) adds german translation to yargs (@maxrimue)
-
-### v3.19.0 (2015/08/14 05:12 +00:00)
-- [#224](https://github.com/bcoe/yargs/pull/224) added Portuguese translation (@codemonkey3045)
-
-### v3.18.1 (2015/08/12 05:53 +00:00)
-
-- [#228](https://github.com/bcoe/yargs/pull/228) notes about embedding yargs in Electron (@etiktin)
-- [#223](https://github.com/bcoe/yargs/pull/223) make booleans work in config files (@sgentle)
-
-### v3.18.0 (2015/08/06 20:05 +00:00)
-- [#222](https://github.com/bcoe/yargs/pull/222) updates fr locale (@nexdrew)
-- [#221](https://github.com/bcoe/yargs/pull/221) adds missing locale strings (@nexdrew)
-- [#220](https://github.com/bcoe/yargs/pull/220) adds es locale (@zkat)
-
-### v3.17.1 (2015/08/02 19:35 +00:00)
-- [#218](https://github.com/bcoe/yargs/pull/218) upgrades nyc (@bcoe)
-
-### v3.17.0 (2015/08/02 18:39 +00:00)
-- [#217](https://github.com/bcoe/yargs/pull/217) sort methods in README.md (@nexdrew)
-- [#215](https://github.com/bcoe/yargs/pull/215) adds fr locale (@LoicMahieu)
-
-### v3.16.0 (2015/07/30 04:35 +00:00)
-- [#210](https://github.com/bcoe/yargs/pull/210) adds i18n support to yargs (@bcoe)
-- [#209](https://github.com/bcoe/yargs/pull/209) adds choices type to yargs (@nexdrew)
-- [#207](https://github.com/bcoe/yargs/pull/207) pretty new shields from shields.io (@SimenB)
-- [#208](https://github.com/bcoe/yargs/pull/208) improvements to README.md (@nexdrew)
-- [#205](https://github.com/bcoe/yargs/pull/205) faster build times on Travis (@ChristianMurphy)
-
-### v3.15.0 (2015/07/06 06:01 +00:00)
-- [#197](https://github.com/bcoe/yargs/pull/197) tweaks to how errors bubble up from parser.js (@bcoe)
-- [#193](https://github.com/bcoe/yargs/pull/193) upgraded nyc, reporting now happens by default (@bcoe)
-
-### v3.14.0 (2015/06/28 02:12 +00:00)
-
-- [#192](https://github.com/bcoe/yargs/pull/192) standard style nits (@bcoe)
-- [#190](https://github.com/bcoe/yargs/pull/190) allow for hidden commands, e.g.,
-  .completion('completion', false) (@tschaub)
-
-### v3.13.0 (2015/06/24 04:12 +00:00)
-
-- [#187](https://github.com/bcoe/yargs/pull/187) completion now behaves differently
-  if it is being run in the context of a command (@tschaub)
-- [#186](https://github.com/bcoe/yargs/pull/186) if no matches are found for a completion
-  default to filename completion (@tschaub)
-
-### v3.12.0 (2015/06/19 03:23 +00:00)
-- [#183](https://github.com/bcoe/yargs/pull/183) don't complete commands if they've already been completed (@tschaub)
-- [#181](https://github.com/bcoe/yargs/pull/181) various fixes for completion. (@bcoe, @tschaub)
-- [#182](https://github.com/bcoe/yargs/pull/182) you can now set a maximum # of of required arguments (@bcoe)
-
-### v3.11.0 (2015/06/15 05:15 +00:00)
-
-- [#173](https://github.com/bcoe/yargs/pull/173) update standard, window-size, chai (@bcoe)
-- [#171](https://github.com/bcoe/yargs/pull/171) a description can now be set
-  when providing a config option. (@5c077yP)
-
-### v3.10.0 (2015/05/29 04:25 +00:00)
-
-- [#165](https://github.com/bcoe/yargs/pull/165) expose yargs.terminalWidth() thanks @ensonic (@bcoe)
-- [#164](https://github.com/bcoe/yargs/pull/164) better array handling thanks @getify (@bcoe)
-
-### v3.9.1 (2015/05/20 05:14 +00:00)
-- [b6662b6](https://github.com/bcoe/yargs/commit/b6662b6774cfeab4876f41ec5e2f67b7698f4e2f) clarify .config() docs (@linclark)
-- [0291360](https://github.com/bcoe/yargs/commit/02913606285ce31ce81d7f12c48d8a3029776ec7) fixed tests, switched to nyc for coverage, fixed security issue, added Lin as collaborator (@bcoe)
-
-### v3.9.0 (2015/05/10 18:32 +00:00)
-- [#157](https://github.com/bcoe/yargs/pull/157) Merge pull request #157 from bcoe/command-yargs. allows handling of command specific arguments. Thanks for the suggestion @ohjames (@bcoe)
-- [#158](https://github.com/bcoe/yargs/pull/158) Merge pull request #158 from kemitchell/spdx-license. Update license format (@kemitchell)
-
-### v3.8.0 (2015/04/24 23:10 +00:00)
-- [#154](https://github.com/bcoe/yargs/pull/154) showHelp's method signature was misleading fixes #153 (@bcoe)
-- [#151](https://github.com/bcoe/yargs/pull/151) refactor yargs' table layout logic to use new helper library (@bcoe)
-- [#150](https://github.com/bcoe/yargs/pull/150) Fix README example in argument requirements (@annonymouse)
-
-### v3.7.2 (2015/04/13 11:52 -07:00)
-
-* [679fbbf](https://github.com/bcoe/yargs/commit/679fbbf55904030ccee8a2635e8e5f46551ab2f0) updated yargs to use the [standard](https://github.com/feross/standard) style guide (agokjr)
-* [22382ee](https://github.com/bcoe/yargs/commit/22382ee9f5b495bc2586c1758cd1091cec3647f9 various bug fixes for $0 (@nylen)
-
-### v3.7.1 (2015/04/10 11:06 -07:00)
-
-* [89e1992](https://github.com/bcoe/yargs/commit/89e1992a004ba73609b5f9ee6890c4060857aba4) detect iojs bin along with node bin. (@bcoe)
-* [755509e](https://github.com/bcoe/yargs/commit/755509ea90041e5f7833bba3b8c5deffe56f0aab) improvements to example documentation in README.md (@rstacruz)
-* [0d2dfc8](https://github.com/bcoe/yargs/commit/0d2dfc822a43418242908ad97ddd5291a1b35dc6) showHelp() no longer requires that .argv has been called (@bcoe)
-
-### v3.7.0 (2015/04/04 02:29 -07:00)
-
-* [56cbe2d](https://github.com/bcoe/yargs/commit/56cbe2ddd33dc176dcbf97ba40559864a9f114e4) make .requiresArg() work with type hints. (@bcoe).
-* [2f5d562](https://github.com/bcoe/yargs/commit/2f5d5624f736741deeedf6a664d57bc4d857bdd0) serialize arrays and objects in usage strings. (@bcoe).
-* [5126304](https://github.com/bcoe/yargs/commit/5126304dd18351fc28f10530616fdd9361e0af98) be more lenient about alias/primary key ordering in chaining API. (@bcoe)
-
-### v3.6.0 (2015/03/21 01:00 +00:00)
-- [4e24e22](https://github.com/bcoe/yargs/commit/4e24e22e6a195e55ab943ede704a0231ac33b99c) support for .js configuration files. (@pirxpilot)
-
-### v3.5.4 (2015/03/12 05:56 +00:00)
-- [c16cc08](https://github.com/bcoe/yargs/commit/c16cc085501155cf7fd853ccdf8584b05ab92b78) message for non-option arguments is now optional, thanks to (@raine)
-
-### v3.5.3 (2015/03/09 06:14 +00:00)
-- [870b428](https://github.com/bcoe/yargs/commit/870b428cf515d560926ca392555b7ad57dba9e3d) completion script was missing in package.json (@bcoe)
-
-### v3.5.2 (2015/03/09 06:11 +00:00)
-- [58a4b24](https://github.com/bcoe/yargs/commit/58a4b2473ebbb326713d522be53e32d3aabb08d2) parse was being called multiple times, resulting in strange behavior (@bcoe)
-
-### v3.5.1 (2015/03/09 04:55 +00:00)
-- [4e588e0](https://github.com/bcoe/yargs/commit/4e588e055afbeb9336533095f051496e3977f515) accidentally left testing logic in (@bcoe)
-
-### v3.5.0 (2015/03/09 04:49 +00:00)
-- [718bacd](https://github.com/bcoe/yargs/commit/718bacd81b9b44f786af76b2afe491fe06274f19) added support for bash completions see #4 (@bcoe)
-- [a192882](https://github.com/bcoe/yargs/commit/a19288270fc431396c42af01125eeb4443664528) downgrade to mocha 2.1.0 until https://github.com/mochajs/mocha/issues/1585 can be sorted out (@bcoe)
-
-### v3.4.7 (2015/03/09 04:09 +00:00)
-- [9845e5c](https://github.com/bcoe/yargs/commit/9845e5c1a9c684ba0be3f0bfb40e7b62ab49d9c8) the Argv singleton was not being updated when manually parsing arguments, fixes #114 (@bcoe)
-
-### v3.4.6 (2015/03/09 04:01 +00:00)
-- [45b4c80](https://github.com/bcoe/yargs/commit/45b4c80b890d02770b0a94f326695a8a566e8fe9) set placeholders for all keys fixes #115 (@bcoe)
-
-### v3.4.5 (2015/03/01 20:31 +00:00)
-- [a758e0b](https://github.com/bcoe/yargs/commit/a758e0b2556184f067cf3d9c4ef886d39817ebd2) fix for count consuming too many arguments (@bcoe)
-
-### v3.4.4 (2015/02/28 04:52 +00:00)
-- [0476af7](https://github.com/bcoe/yargs/commit/0476af757966acf980d998b45108221d4888cfcb) added nargs feature, allowing you to specify the number of arguments after an option (@bcoe)
-- [092477d](https://github.com/bcoe/yargs/commit/092477d7ab3efbf0ba11cede57f7d8cfc70b024f) updated README with full example of v3.0 API (@bcoe)
-
-### v3.3.3 (2015/02/28 04:23 +00:00)
-- [0c4b769](https://github.com/bcoe/yargs/commit/0c4b769516cd8d93a7c4e5e675628ae0049aa9a8) remove string dependency, which conflicted with other libraries see #106 (@bcoe)
-
-### v3.3.2 (2015/02/28 04:11 +00:00)
-- [2a98906](https://github.com/bcoe/yargs/commit/2a9890675821c0e7a12f146ce008b0562cb8ec9a) add $0 to epilog (@schnittstabil)
-
-### v3.3.1 (2015/02/24 03:28 +00:00)
-- [ad485ce](https://github.com/bcoe/yargs/commit/ad485ce748ebdfce25b88ef9d6e83d97a2f68987) fix for applying defaults to camel-case args (@bcoe)
-
-### v3.3.0 (2015/02/24 00:49 +00:00)
-- [8bfe36d](https://github.com/bcoe/yargs/commit/8bfe36d7fb0f93a799ea3f4c756a7467c320f8c0) fix and document restart() command, as a tool for building nested CLIs (@bcoe)
-
-### v3.2.1 (2015/02/22 05:45 +00:00)
-- [49a6d18](https://github.com/bcoe/yargs/commit/49a6d1822a4ef9b1ea6f90cc366be60912628885) you can now provide a function that generates a default value (@bcoe)
-
-### v3.2.0 (2015/02/22 05:24 +00:00)
-- [7a55886](https://github.com/bcoe/yargs/commit/7a55886c9343cf71a20744ca5cdd56d2ea7412d5) improvements to yargs two-column text layout (@bcoe)
-- [b6ab513](https://github.com/bcoe/yargs/commit/b6ab5136a4c3fa6aa496f6b6360382e403183989) Tweak NPM version badge (@nylen)
-
-### v3.1.0 (2015/02/19 19:37 +00:00)
-- [9bd2379](https://github.com/bcoe/yargs/commit/9bd237921cf1b61fd9f32c0e6d23f572fc225861) version now accepts a function, making it easy to load version #s from a package.json (@bcoe)
-
-### v3.0.4 (2015/02/14 01:40 +00:00)
-- [0b7c19b](https://github.com/bcoe/yargs/commit/0b7c19beaecb747267ca4cc10e5cb2a8550bc4b7) various fixes for dot-notation handling (@bcoe)
-
-### v3.0.3 (2015/02/14 00:59 +00:00)
-- [c3f35e9](https://github.com/bcoe/yargs/commit/c3f35e99bd5a0d278073fcadd95e2d778616cc17) make sure dot-notation is applied to aliases (@bcoe)
-
-### 3.0.2 (2015/02/13 16:50 +00:00)
-- [74c8967](https://github.com/bcoe/yargs/commit/74c8967c340c204a0a7edf8a702b6f46c2705435) document epilog shorthand of epilogue. (@bcoe)
-- [670110f](https://github.com/bcoe/yargs/commit/670110fc01bedc4831b6fec6afac54517d5a71bc) any non-truthy value now causes check to fail see #76 (@bcoe)
-- [0d8f791](https://github.com/bcoe/yargs/commit/0d8f791a33c11ced4cd431ea8d3d3a337d456b56) finished implementing my wish-list of fetures for yargs 3.0. see #88 (@bcoe)
-- [5768447](https://github.com/bcoe/yargs/commit/5768447447c4c8e8304f178846206ce86540f063) fix coverage. (@bcoe)
-- [82e793f](https://github.com/bcoe/yargs/commit/82e793f3f61c41259eaacb67f0796aea2cf2aaa0) detect console width and perform word-wrapping. (@bcoe)
-- [67476b3](https://github.com/bcoe/yargs/commit/67476b37eea07fee55f23f35b9e0c7d76682b86d) refactor two-column table layout so that we can use it for examples and usage (@bcoe)
-- [4724cdf](https://github.com/bcoe/yargs/commit/4724cdfcc8e37ae1ca3dcce9d762f476e9ef4bb4) major refactor of index.js, in prep for 3.x release. (@bcoe)
-
-### v2.3.0 (2015/02/08 20:41 +00:00)
-- [d824620](https://github.com/bcoe/yargs/commit/d824620493df4e63664af1fe320764dd1a9244e6) allow for undefined boolean defaults (@ashi009)
-
-### v2.2.0 (2015/02/08 20:07 +00:00)
-- [d6edd98](https://github.com/bcoe/yargs/commit/d6edd9848826e7389ed1393858c45d03961365fd) in-prep for further refactoring, and a 3.x release I've shuffled some things around and gotten test-coverage to 100%. (@bcoe)
-
-### v2.1.2 (2015/02/08 06:05 +00:00)
-- [d640745](https://github.com/bcoe/yargs/commit/d640745a7b9f8d476e0223879d056d18d9c265c4) switch to path.relative (@bcoe)
-- [3bfd41f](https://github.com/bcoe/yargs/commit/3bfd41ff262a041f29d828b88936a79c63cad594) remove mocha.opts. (@bcoe)
-- [47a2f35](https://github.com/bcoe/yargs/commit/47a2f357091db70903a402d6765501c1d63f15fe) document using .string('_') for string ids. see #56 (@bcoe)
-- [#57](https://github.com/bcoe/yargs/pull/57) Merge pull request #57 from eush77/option-readme (@eush77)
-
-### v2.1.1 (2015/02/06 08:08 +00:00)
-- [01c6c61](https://github.com/bcoe/yargs/commit/01c6c61d67b4ebf88f41f0b32a345ec67f0ac17d) fix for #71, 'newAliases' of undefined (@bcoe)
-
-### v2.1.0 (2015/02/06 07:59 +00:00)
-- [6a1a3fa](https://github.com/bcoe/yargs/commit/6a1a3fa731958e26ccd56885f183dd8985cc828f) try to guess argument types, and apply sensible defaults see #73 (@bcoe)
-
-### v2.0.1 (2015/02/06 07:54 +00:00)
-- [96a06b2](https://github.com/bcoe/yargs/commit/96a06b2650ff1d085a52b7328d8bba614c20cc12) Fix for strange behavior with --sort option, see #51 (@bcoe)
-
-### v2.0.0 (2015/02/06 07:45 +00:00)
-- [0250517](https://github.com/bcoe/yargs/commit/0250517c9643e53f431b824e8ccfa54937414011) - [108fb84](https://github.com/bcoe/yargs/commit/108fb8409a3a63dcaf99d917fe4dfcfaa1de236d) fixed bug with boolean parsing, when bools separated by = see #66 (@bcoe)
-- [a465a59](https://github.com/bcoe/yargs/commit/a465a5915f912715738de890982e4f8395958b10) Add `files` field to the package.json (@shinnn)
-- [31043de](https://github.com/bcoe/yargs/commit/31043de7a38a17c4c97711f1099f5fb164334db3) fix for yargs.argv having the same keys added multiple times see #63 (@bcoe)
-- [2d68c5b](https://github.com/bcoe/yargs/commit/2d68c5b91c976431001c4863ce47c9297850f1ad) Disable process.exit calls using .exitProcess(false) (@cianclarke)
-- [45da9ec](https://github.com/bcoe/yargs/commit/45da9ec4c55a7bd394721bc6a1db0dabad7bc52a) Mention .option in README (@eush77)
-
-### v1.3.2 (2014/10/06 21:56 +00:00)
-- [b8d3472](https://github.com/bcoe/yargs/commit/b8d34725482e5821a3cc809c0df71378f282f526) 1.3.2 (@chevex)
-
-### list (2014/08/30 18:41 +00:00)
-- [fbc777f](https://github.com/bcoe/yargs/commit/fbc777f416eeefd37c84e44d27d7dfc7c1925721) Now that yargs is the successor to optimist, I'm changing the README language to be more universal. Pirate speak isn't very accessible to non-native speakers. (@chevex)
-- [a54d068](https://github.com/bcoe/yargs/commit/a54d0682ae2efc2394d407ab171cc8a8bbd135ea) version output will not print extra newline (@boneskull)
-- [1cef5d6](https://github.com/bcoe/yargs/commit/1cef5d62a9d6d61a3948a49574892e01932cc6ae) Added contributors section to package.json (@chrisn)
-- [cc295c0](https://github.com/bcoe/yargs/commit/cc295c0a80a2de267e0155b60d315fc4b6f7c709) Added 'require' and 'required' as synonyms for 'demand' (@chrisn)
-- [d0bf951](https://github.com/bcoe/yargs/commit/d0bf951d949066b6280101ed606593d079ee15c8) Updating minimist. (@chevex)
-- [c15f8e7](https://github.com/bcoe/yargs/commit/c15f8e7f245b261e542cf205ce4f4313630cbdb4) Fix #31 (bad interaction between camelCase options and strict mode) (@nylen)
-- [d991b9b](https://github.com/bcoe/yargs/commit/d991b9be687a68812dee1e3b185ba64b7778b82d) Added .help() and .version() methods (@chrisn)
-- [e8c8aa4](https://github.com/bcoe/yargs/commit/e8c8aa46268379357cb11e9fc34b8c403037724b) Added .showHelpOnFail() method (@chrisn)
-- [e855af4](https://github.com/bcoe/yargs/commit/e855af4a933ea966b5bbdd3c4c6397a4bac1a053) Allow boolean flag with .demand() (@chrisn)
-- [14dbec2](https://github.com/bcoe/yargs/commit/14dbec24fb7380683198e2b20c4deb8423e64bea) Fixes issue #22. Arguments are no longer printed to the console when using .config. (@chevex)
-- [bef74fc](https://github.com/bcoe/yargs/commit/bef74fcddc1544598a804f80d0a3728459f196bf) Informing users that Yargs is the official optimist successor. (@chevex)
-- [#24](https://github.com/bcoe/yargs/pull/24) Merge pull request #24 from chrisn/strict (@chrisn)
-- [889a2b2](https://github.com/bcoe/yargs/commit/889a2b28eb9768801b05163360a470d0fd6c8b79) Added requiresArg option, for options that require values (@chrisn)
-- [eb16369](https://github.com/bcoe/yargs/commit/eb163692262be1fe80b992fd8803d5923c5a9b18) Added .strict() method, to report error if unknown arguments are given (@chrisn)
-- [0471c3f](https://github.com/bcoe/yargs/commit/0471c3fd999e1ad4e6cded88b8aa02013b66d14f) Changed optimist to yargs in usage-options.js example (@chrisn)
-- [5c88f74](https://github.com/bcoe/yargs/commit/5c88f74e3cf031b17c54b4b6606c83e485ff520e) Change optimist to yargs in examples (@chrisn)
-- [66f12c8](https://github.com/bcoe/yargs/commit/66f12c82ba3c943e4de8ca862980e835da8ecb3a) Fix a couple of bad interactions between aliases and defaults (@nylen)
-- [8fa1d80](https://github.com/bcoe/yargs/commit/8fa1d80f14b03eb1f2898863a61f1d1615bceb50) Document second argument of usage(message, opts) (@Gobie)
-- [56e6528](https://github.com/bcoe/yargs/commit/56e6528cf674ff70d63083fb044ff240f608448e) For "--some-option", also set argv.someOption (@nylen)
-- [ed5f6d3](https://github.com/bcoe/yargs/commit/ed5f6d33f57ad1086b11c91b51100f7c6c7fa8ee) Finished porting unit tests to Mocha. (@chevex)
-
-### v1.0.15 (2014/02/05 23:18 +00:00)
-- [e2b1fc0](https://github.com/bcoe/yargs/commit/e2b1fc0c4a59cf532ae9b01b275e1ef57eeb64d2) 1.0.15 update to badges (@chevex)
-
-### v1.0.14 (2014/02/05 23:17 +00:00)
-- [f33bbb0](https://github.com/bcoe/yargs/commit/f33bbb0f00fe18960f849cc8e15a7428a4cd59b8) Revert "Fixed issue which caused .demand function not to work correctly." (@chevex)
-
-### v1.0.13 (2014/02/05 22:13 +00:00)
-- [6509e5e](https://github.com/bcoe/yargs/commit/6509e5e7dee6ef1a1f60eea104be0faa1a045075) Fixed issue which caused .demand function not to work correctly. (@chevex)
-
-### v1.0.12 (2013/12/13 00:09 +00:00)
-- [05eb267](https://github.com/bcoe/yargs/commit/05eb26741c9ce446b33ff006e5d33221f53eaceb) 1.0.12 (@chevex)
-
-### v1.0.11 (2013/12/13 00:07 +00:00)
-- [c1bde46](https://github.com/bcoe/yargs/commit/c1bde46e37318a68b87d17a50c130c861d6ce4a9) 1.0.11 (@chevex)
-
-### v1.0.10 (2013/12/12 23:57 +00:00)
-- [dfebf81](https://github.com/bcoe/yargs/commit/dfebf8164c25c650701528ee581ca483a99dc21c) Fixed formatting in README (@chevex)
-
-### v1.0.9 (2013/12/12 23:47 +00:00)
-- [0b4e34a](https://github.com/bcoe/yargs/commit/0b4e34af5e6d84a9dbb3bb6d02cd87588031c182) Update README.md (@chevex)
-
-### v1.0.8 (2013/12/06 16:36 +00:00)
-- [#1](https://github.com/bcoe/yargs/pull/1) fix error caused by check() see #1 (@martinheidegger)
-
-### v1.0.7 (2013/11/24 18:01 +00:00)
-- [a247d88](https://github.com/bcoe/yargs/commit/a247d88d6e46644cbb7303c18b1bb678fc132d72) Modified Pirate Joe image. (@chevex)
-
-### v1.0.6 (2013/11/23 19:21 +00:00)
-- [d7f69e1](https://github.com/bcoe/yargs/commit/d7f69e1d34bc929736a8bdccdc724583e21b7eab) Updated Pirate Joe image. (@chevex)
-
-### v1.0.5 (2013/11/23 19:09 +00:00)
-- [ece809c](https://github.com/bcoe/yargs/commit/ece809cf317cc659175e1d66d87f3ca68c2760be) Updated readme notice again. (@chevex)
-
-### v1.0.4 (2013/11/23 19:05 +00:00)
-- [9e81e81](https://github.com/bcoe/yargs/commit/9e81e81654028f83ba86ffc3ac772a0476084e5e) Updated README with a notice about yargs being a fork of optimist and what that implies. (@chevex)
-
-### v1.0.3 (2013/11/23 17:43 +00:00)
-- [65e7a78](https://github.com/bcoe/yargs/commit/65e7a782c86764944d63d084416aba9ee6019c5f) Changed some small wording in README.md. (@chevex)
-- [459e20e](https://github.com/bcoe/yargs/commit/459e20e539b366b85128dd281ccd42221e96c7da) Fix a bug in the options function, when string and boolean options weren't applied to aliases. (@shockone)
-
-### v1.0.2 (2013/11/23 09:46 +00:00)
-- [3d80ebe](https://github.com/bcoe/yargs/commit/3d80ebed866d3799224b6f7d596247186a3898a9) 1.0.2 (@chevex)
-
-### v1.0.1 (2013/11/23 09:39 +00:00)
-- [f80ff36](https://github.com/bcoe/yargs/commit/f80ff3642d580d4b68bf9f5a94277481bd027142) Updated image. (@chevex)
-
-### v1.0.0 (2013/11/23 09:33 +00:00)
-- [54e31d5](https://github.com/bcoe/yargs/commit/54e31d505f820b80af13644e460894b320bf25a3) Rebranded from optimist to yargs in the spirit of the fork :D (@chevex)
-- [4ebb6c5](https://github.com/bcoe/yargs/commit/4ebb6c59f44787db7c24c5b8fe2680f01a23f498) Added documentation for demandCount(). (@chevex)
-- [4561ce6](https://github.com/bcoe/yargs/commit/4561ce66dcffa95f49e8b4449b25b94cd68acb25) Simplified the error messages returned by .check(). (@chevex)
-- [661c678](https://github.com/bcoe/yargs/commit/661c67886f479b16254a830b7e1db3be29e6b7a6) Fixed an issue with demand not accepting a zero value. (@chevex)
-- [731dd3c](https://github.com/bcoe/yargs/commit/731dd3c37624790490bd6df4d5f1da8f4348279e) Add .fail(fn) so death isn't the only option. Should fix issue #39. (@chevex)
-- [fa15417](https://github.com/bcoe/yargs/commit/fa15417ff9e70dace0d726627a5818654824c1d8) Added a few missing 'return self' (@chevex)
-- [e655e4d](https://github.com/bcoe/yargs/commit/e655e4d99d1ae1d3695ef755d51c2de08d669761) Fix showing help in certain JS environments. (@chevex)
-- [a746a31](https://github.com/bcoe/yargs/commit/a746a31cd47c87327028e6ea33762d6187ec5c87) Better string representation of default values. (@chevex)
-- [6134619](https://github.com/bcoe/yargs/commit/6134619a7e90b911d5443230b644c5d447c1a68c) Implies: conditional demands (@chevex)
-- [046b93b](https://github.com/bcoe/yargs/commit/046b93b5d40a27367af4cb29726e4d781d934639) Added support for JSON config files. (@chevex)
-- [a677ec0](https://github.com/bcoe/yargs/commit/a677ec0a0ecccd99c75e571d03323f950688da03) Add .example(cmd, desc) feature. (@chevex)
-- [1bd4375](https://github.com/bcoe/yargs/commit/1bd4375e11327ba1687d4bb6e5e9f3c30c1be2af) Added 'defaults' as alias to 'default' so as to avoid usage of a reserved keyword. (@chevex)
-- [6b753c1](https://github.com/bcoe/yargs/commit/6b753c16ca09e723060e70b773b430323b29c45c) add .normalize(args..) support for normalizing paths (@chevex)
-- [33d7d59](https://github.com/bcoe/yargs/commit/33d7d59341d364f03d3a25f0a55cb99004dbbe4b) Customize error messages with demand(key, msg) (@chevex)
-- [647d37f](https://github.com/bcoe/yargs/commit/647d37f164c20f4bafbf67dd9db6cd6e2cd3b49f) Merge branch 'rewrite-duplicate-test' of github.com:isbadawi/node-optimist (@chevex)
-- [9059d1a](https://github.com/bcoe/yargs/commit/9059d1ad5e8aea686c2a01c89a23efdf929fff2e) Pass aliases object to check functions for greater versatility. (@chevex)
-- [623dc26](https://github.com/bcoe/yargs/commit/623dc26c7331abff2465ef8532e3418996d42fe6) Added ability to count boolean options and rolled minimist library back into project. (@chevex)
-- [49f0dce](https://github.com/bcoe/yargs/commit/49f0dcef35de4db544c3966350d36eb5838703f6) Fixed small typo. (@chevex)
-- [79ec980](https://github.com/bcoe/yargs/commit/79ec9806d9ca6eb0014cfa4b6d1849f4f004baf2) Removed dependency on wordwrap module. (@chevex)
-- [ea14630](https://github.com/bcoe/yargs/commit/ea14630feddd69d1de99dd8c0e08948f4c91f00a) Merge branch 'master' of github.com:chbrown/node-optimist (@chevex)
-- [2b75da2](https://github.com/bcoe/yargs/commit/2b75da2624061e0f4f3107d20303c06ec9054906) Merge branch 'master' of github.com:seanzhou1023/node-optimist (@chevex)
-- [d9bda11](https://github.com/bcoe/yargs/commit/d9bda1116e26f3b40e833ca9ca19263afea53565) Merge branch 'patch-1' of github.com:thefourtheye/node-optimist (@chevex)
-- [d6cc606](https://github.com/bcoe/yargs/commit/d6cc6064a4f1bea38a16a4430b8a1334832fbeff) Renamed README. (@chevex)
-- [9498d3f](https://github.com/bcoe/yargs/commit/9498d3f59acfb5e102826503e681623c3a64b178) Renamed readme and added .gitignore. (@chevex)
-- [bbd1fe3](https://github.com/bcoe/yargs/commit/bbd1fe37fefa366dde0fb3dc44d91fe8b28f57f5) Included examples for ```help``` and ```showHelp``` functions and fixed few formatting issues (@thefourtheye)
-- [37fea04](https://github.com/bcoe/yargs/commit/37fea0470a5796a0294c1dcfff68d8041650e622) .alias({}) behaves differently based on mapping direction when generating descriptions (@chbrown)
-- [855b20d](https://github.com/bcoe/yargs/commit/855b20d0be567ca121d06b30bea64001b74f3d6d) Documented function signatures are useful for dynamically typed languages. (@chbrown)
-
-### 0.6.0 (2013/06/25 08:48 +00:00)
-- [d37bfe0](https://github.com/bcoe/yargs/commit/d37bfe05ae6d295a0ab481efe4881222412791f4) all tests passing using minimist (@substack)
-- [76f1352](https://github.com/bcoe/yargs/commit/76f135270399d01f2bbc621e524a5966e5c422fd) all parse tests now passing (@substack)
-- [a7b6754](https://github.com/bcoe/yargs/commit/a7b6754276c38d1565479a5685c3781aeb947816) using minimist, some tests passing (@substack)
-- [6655688](https://github.com/bcoe/yargs/commit/66556882aa731cbbbe16cc4d42c85740a2e98099) Give credit where its due (@DeadAlready)
-- [602a2a9](https://github.com/bcoe/yargs/commit/602a2a92a459f93704794ad51b115bbb08b535ce) v0.5.3 - Remove wordwrap as dependency (@DeadAlready)
-
-### 0.5.2 (2013/05/31 03:46 +00:00)
-- [4497ca5](https://github.com/bcoe/yargs/commit/4497ca55e332760a37b866ec119ded347ca27a87) fixed the whitespace bug without breaking anything else (@substack)
-- [5a3dd1a](https://github.com/bcoe/yargs/commit/5a3dd1a4e0211a38613c6e02f61328e1031953fa) failing test for whitespace arg (@substack)
-
-### 0.5.1 (2013/05/30 07:17 +00:00)
-- [a20228f](https://github.com/bcoe/yargs/commit/a20228f62a454755dd07f628a7c5759113918327) fix parse() to work with functions before it (@substack)
-- [b13bd4c](https://github.com/bcoe/yargs/commit/b13bd4cac856a9821d42fa173bdb58f089365a7d) failing test for parse() with modifiers (@substack)
-
-### 0.5.0 (2013/05/18 21:59 +00:00)
-- [c474a64](https://github.com/bcoe/yargs/commit/c474a649231527915c222156e3b40806d365a87c) fixes for dash (@substack)
-
-### 0.4.0 (2013/04/13 19:03 +00:00)
-- [dafe3e1](https://github.com/bcoe/yargs/commit/dafe3e18d7c6e7c2d68e06559df0e5cbea3adb14) failing short test (@substack)
-
-### 0.3.7 (2013/04/04 04:07 +00:00)
-- [6c7a0ec](https://github.com/bcoe/yargs/commit/6c7a0ec94ce4199a505f0518b4d6635d4e47cc81) Fix for windows. On windows there is no _ in environment. (@hdf)
-
-### 0.3.6 (2013/04/04 04:04 +00:00)
-- [e72346a](https://github.com/bcoe/yargs/commit/e72346a727b7267af5aa008b418db89970873f05) Add support for newlines in -a="" arguments (@danielbeardsley)
-- [71e1fb5](https://github.com/bcoe/yargs/commit/71e1fb55ea9987110a669ac6ec12338cfff3821c) drop 0.4, add 0.8 to travis (@substack)
-
-### 0.3.5 (2012/10/10 11:09 +00:00)
-- [ee692b3](https://github.com/bcoe/yargs/commit/ee692b37554c70a0bb16389a50a26b66745cbbea) Fix parsing booleans (@vojtajina)
-- [5045122](https://github.com/bcoe/yargs/commit/5045122664c3f5b4805addf1be2148d5856f7ce8) set $0 properly in the tests (@substack)
-
-### 0.3.4 (2012/04/30 06:54 +00:00)
-- [f28c0e6](https://github.com/bcoe/yargs/commit/f28c0e62ca94f6e0bb2e6d82fc3d91a55e69b903) bump for string "true" params (@substack)
-- [8f44aeb](https://github.com/bcoe/yargs/commit/8f44aeb74121ddd689580e2bf74ef86a605e9bf2) Fix failing test for aliased booleans. (@coderarity)
-- [b9f7b61](https://github.com/bcoe/yargs/commit/b9f7b613b1e68e11e6c23fbda9e555a517dcc976) Add failing test for short aliased booleans. (@coderarity)
-
-### 0.3.3 (2012/04/30 06:45 +00:00)
-- [541bac8](https://github.com/bcoe/yargs/commit/541bac8dd787a5f1a5d28f6d8deb1627871705e7) Fixes #37.
-
-### 0.3.2 (2012/04/12 20:28 +00:00)
-- [3a0f014](https://github.com/bcoe/yargs/commit/3a0f014c1451280ac1c9caa1f639d31675586eec) travis badge (@substack)
-- [4fb60bf](https://github.com/bcoe/yargs/commit/4fb60bf17845f4ce3293f8ca49c9a1a7c736cfce) Fix boolean aliases. (@coderarity)
-- [f14dda5](https://github.com/bcoe/yargs/commit/f14dda546efc4fe06ace04d36919bfbb7634f79b) Adjusted package.json to use tap (@jfhbrook)
-- [88e5d32](https://github.com/bcoe/yargs/commit/88e5d32295be6e544c8d355ff84e355af38a1c74) test/usage.js no longer hangs (@jfhbrook)
-- [e1e740c](https://github.com/bcoe/yargs/commit/e1e740c27082f3ce84deca2093d9db2ef735d0e5) two tests for combined boolean/alias opts parsing (@jfhbrook)
-
-### 0.3.1 (2011/12/31 08:44 +00:00)
-- [d09b719](https://github.com/bcoe/yargs/commit/d09b71980ef711b6cf3918cd19beec8257e40e82) If "default" is set to false it was not passed on, fixed. (@wolframkriesing)
-
-### 0.3.0 (2011/12/09 06:03 +00:00)
-- [6e74aa7](https://github.com/bcoe/yargs/commit/6e74aa7b46a65773e20c0cb68d2d336d4a0d553d) bump and documented dot notation (@substack)
-
-### 0.2.7 (2011/10/20 02:25 +00:00)
-- [94adee2](https://github.com/bcoe/yargs/commit/94adee20e17b58d0836f80e8b9cdbe9813800916) argv._ can be told 'Hey! argv._! Don't be messing with my args.', and it WILL obey (@colinta)
-- [c46fdd5](https://github.com/bcoe/yargs/commit/c46fdd56a05410ae4a1e724a4820c82e77ff5469) optimistic critter image (@substack)
-- [5c95c73](https://github.com/bcoe/yargs/commit/5c95c73aedf4c7482bd423e10c545e86d7c8a125) alias options() to option() (@substack)
-- [f7692ea](https://github.com/bcoe/yargs/commit/f7692ea8da342850af819367833abb685fde41d8) [fix] Fix for parsing boolean edge case (@indexzero)
-- [d1f92d1](https://github.com/bcoe/yargs/commit/d1f92d1425bd7f356055e78621b30cdf9741a3c2)
-- [b01bda8](https://github.com/bcoe/yargs/commit/b01bda8d86e455bbf74ce497864cb8ab5b9fb847) [fix test] Update to ensure optimist is aware of default booleans. Associated tests included (@indexzero)
-- [aa753e7](https://github.com/bcoe/yargs/commit/aa753e7c54fb3a12f513769a0ff6d54aa0f63943) [dist test] Update devDependencies in package.json. Update test pathing to be more npm and require.paths future-proof (@indexzero)
-- [7bfce2f](https://github.com/bcoe/yargs/commit/7bfce2f3b3c98e6539e7549d35fbabced7e9341e) s/sys/util/ (@substack)
-- [d420a7a](https://github.com/bcoe/yargs/commit/d420a7a9c890d2cdb11acfaf3ea3f43bc3e39f41) update usage output (@substack)
-- [cf86eed](https://github.com/bcoe/yargs/commit/cf86eede2e5fc7495b6ec15e6d137d9ac814f075) some sage readme protips about parsing rules (@substack)
-- [5da9f7a](https://github.com/bcoe/yargs/commit/5da9f7a5c0e1758ec7c5801fb3e94d3f6e970513) documented all the methods finally (@substack)
-- [8ca6879](https://github.com/bcoe/yargs/commit/8ca6879311224b25933642987300f6a29de5c21b) fenced syntax highlighting (@substack)
-- [b72bacf](https://github.com/bcoe/yargs/commit/b72bacf1d02594778c1935405bc8137eb61761dc) right-alignment of wrapped extra params (@substack)
-- [2b980bf](https://github.com/bcoe/yargs/commit/2b980bf2656b4ee8fc5134dc5f56a48855c35198) now with .wrap() (@substack)
-- [d614f63](https://github.com/bcoe/yargs/commit/d614f639654057d1b7e35e3f5a306e88ec2ad1e4) don't show 'Options:' when there aren't any (@substack)
-- [691eda3](https://github.com/bcoe/yargs/commit/691eda354df97b5a86168317abcbcaabdc08a0fb) failing test for multi-aliasing (@substack)
-- [0826c9f](https://github.com/bcoe/yargs/commit/0826c9f462109feab2bc7a99346d22e72bf774b7) "Options:" > "options:" (@substack)
-- [72f7490](https://github.com/bcoe/yargs/commit/72f749025d01b7f295738ed370a669d885fbada0) [minor] Update formatting for `.showHelp()` (@indexzero)
-- [75aecce](https://github.com/bcoe/yargs/commit/75aeccea74329094072f95800e02c275e7d999aa) options works again, too lazy to write a proper test right now (@substack)
-- [f742e54](https://github.com/bcoe/yargs/commit/f742e5439817c662dc3bd8734ddd6467e6018cfd) line_count_options example, which breaks (@substack)
-- [4ca06b8](https://github.com/bcoe/yargs/commit/4ca06b8b4ea99b5d5714b315a2a8576bee6e5537) line count example (@substack)
-- [eeb8423](https://github.com/bcoe/yargs/commit/eeb8423e0a5ecc9dc3eb1e6df9f3f8c1c88f920b) remove self.argv setting in boolean (@substack)
-- [6903412](https://github.com/bcoe/yargs/commit/69034126804660af9cc20ea7f4457b50338ee3d7) removed camel case for now (@substack)
-- [5a0d88b](https://github.com/bcoe/yargs/commit/5a0d88bf23e9fa79635dd034e2a1aa992acc83cd) remove dead longest checking code (@substack)
-- [d782170](https://github.com/bcoe/yargs/commit/d782170babf7284b1aa34f5350df0dd49c373fa8) .help() too (@substack)
-- [622ec17](https://github.com/bcoe/yargs/commit/622ec17379bb5374fdbb190404c82bc600975791) rm old help generator (@substack)
-- [7c8baac](https://github.com/bcoe/yargs/commit/7c8baac4d66195e9f5158503ea9ebfb61153dab7) nub keys (@substack)
-- [8197785](https://github.com/bcoe/yargs/commit/8197785ad4762465084485b041abd722f69bf344) generate help message based on the previous calls, todo: nub (@substack)
-- [3ffbdc3](https://github.com/bcoe/yargs/commit/3ffbdc33c8f5e83d4ea2ac60575ce119570c7ede) stub out new showHelp, better checks (@substack)
-- [d4e21f5](https://github.com/bcoe/yargs/commit/d4e21f56a4830f7de841900d3c79756fb9886184) let .options() take single options too (@substack)
-- [3c4cf29](https://github.com/bcoe/yargs/commit/3c4cf2901a29bac119cca8e983028d8669230ec6) .options() is now heaps simpler (@substack)
-- [89f0d04](https://github.com/bcoe/yargs/commit/89f0d043cbccd302f10ab30c2069e05d2bf817c9) defaults work again, all tests pass (@substack)
-- [dd87333](https://github.com/bcoe/yargs/commit/dd8733365423006a6e4156372ebb55f98323af58) update test error messages, down to 2 failing tests (@substack)
-- [53f7bc6](https://github.com/bcoe/yargs/commit/53f7bc626b9875f2abdfc5dd7a80bde7f14143a3) fix for bools doubling up, passes the parse test again, others fail (@substack)
-- [2213e2d](https://github.com/bcoe/yargs/commit/2213e2ddc7263226fba717fb041dc3fde9bc2ee4) refactored for an argv getter, failing several tests (@substack)
-- [d1e7379](https://github.com/bcoe/yargs/commit/d1e737970f15c6c006bebdd8917706827ff2f0f2) just rescan for now, alias test passes (@substack)
-- [b2f8c99](https://github.com/bcoe/yargs/commit/b2f8c99cc477a8eb0fdf4cf178e1785b63185cfd) failing alias test (@substack)
-- [d0c0174](https://github.com/bcoe/yargs/commit/d0c0174daa144bfb6dc7290fdc448c393c475e15) .alias() (@substack)
-- [d85f431](https://github.com/bcoe/yargs/commit/d85f431ad7d07b058af3f2a57daa51495576c164) [api] Remove `.describe()` in favor of building upon the existing `.usage()` API (@indexzero)
-- [edbd527](https://github.com/bcoe/yargs/commit/edbd5272a8e213e71acd802782135c7f9699913a) [doc api] Add `.describe()`, `.options()`, and `.showHelp()` methods along with example. (@indexzero)
-- [be4902f](https://github.com/bcoe/yargs/commit/be4902ff0961ae8feb9093f2c0a4066463ded2cf) updates for coffee since it now does argv the node way (@substack)
-- [e24cb23](https://github.com/bcoe/yargs/commit/e24cb23798ee64e53b60815e7fda78b87f42390c) more general coffeescript detection (@substack)
-- [78ac753](https://github.com/bcoe/yargs/commit/78ac753e5d0ec32a96d39d893272afe989e42a4d) Don't trigger the CoffeeScript hack when running under node_g. (@papandreou)
-- [bcfe973](https://github.com/bcoe/yargs/commit/bcfe9731d7f90d4632281b8a52e8d76eb0195ae6) .string() but failing test (@substack)
-- [1987aca](https://github.com/bcoe/yargs/commit/1987aca28c7ba4e8796c07bbc547cb984804c826) test hex strings (@substack)
-- [ef36db3](https://github.com/bcoe/yargs/commit/ef36db32259b0b0d62448dc907c760e5554fb7e7) more keywords (@substack)
-- [cc53c56](https://github.com/bcoe/yargs/commit/cc53c56329960bed6ab077a79798e991711ba01d) Added camelCase function that converts --multi-word-option to camel case (so it becomes argv.multiWordOption). (@papandreou)
-- [60b57da](https://github.com/bcoe/yargs/commit/60b57da36797716e5783a633c6d5c79099016d45) fixed boolean bug by rescanning (@substack)
-- [dff6d07](https://github.com/bcoe/yargs/commit/dff6d078d97f8ac503c7d18dcc7b7a8c364c2883) boolean examples (@substack)
-- [0e380b9](https://github.com/bcoe/yargs/commit/0e380b92c4ef4e3c8dac1da18b5c31d85b1d02c9) boolean() with passing test (@substack)
-- [62644d4](https://github.com/bcoe/yargs/commit/62644d4bffbb8d1bbf0c2baf58a1d14a6359ef07) coffee compatibility with node regex for versions too (@substack)
-- [430fafc](https://github.com/bcoe/yargs/commit/430fafcf1683d23774772826581acff84b456827) argv._ fixed by fixing the coffee detection (@substack)
-- [343b8af](https://github.com/bcoe/yargs/commit/343b8afefd98af274ebe21b5a16b3a949ec5429f) whichNodeArgs test fails too (@substack)
-- [63df2f3](https://github.com/bcoe/yargs/commit/63df2f371f31e63d7f1dec2cbf0022a5f08da9d2) replicated mnot's bug in whichNodeEmpty test (@substack)
-- [35473a4](https://github.com/bcoe/yargs/commit/35473a4d93a45e5e7e512af8bb54ebb532997ae1) test for ./bin usage (@substack)
-- [13df151](https://github.com/bcoe/yargs/commit/13df151e44228eed10e5441c7cd163e086c458a4) don't coerce booleans to numbers (@substack)
-- [85f8007](https://github.com/bcoe/yargs/commit/85f8007e93b8be7124feea64b1f1916d8ba1894a) package bump for automatic number conversion (@substack)
-- [8f17014](https://github.com/bcoe/yargs/commit/8f170141cded4ccc0c6d67a849c5bf996aa29643) updated readme and examples with new auto-numberification goodness (@substack)
-- [73dc901](https://github.com/bcoe/yargs/commit/73dc9011ac968e39b55e19e916084a839391b506) auto number conversion works yay (@substack)
-- [bcec56b](https://github.com/bcoe/yargs/commit/bcec56b3d031e018064cbb691539ccc4f28c14ad) failing test for not-implemented auto numification (@substack)
-- [ebd2844](https://github.com/bcoe/yargs/commit/ebd2844d683feeac583df79af0e5124a7a7db04e) odd that eql doesn't check types careflly (@substack)
-- [fd854b0](https://github.com/bcoe/yargs/commit/fd854b02e512ce854b76386d395672a7969c1bc4) package author + keywords (@substack)
-- [656a1d5](https://github.com/bcoe/yargs/commit/656a1d5a1b7c0e49d72e80cb13f20671d56f76c6) updated readme with .default() stuff (@substack)
-- [cd7f8c5](https://github.com/bcoe/yargs/commit/cd7f8c55f0b82b79b690d14c5f806851236998a1) passing tests for new .default() behavior (@substack)
-- [932725e](https://github.com/bcoe/yargs/commit/932725e39ce65bc91a0385a5fab659a5fa976ac2) new default() thing for setting default key/values (@substack)
-- [4e6c7ab](https://github.com/bcoe/yargs/commit/4e6c7aba6374ac9ebc6259ecf91f13af7bce40e3) test for coffee usage (@substack)
-- [d54ffcc](https://github.com/bcoe/yargs/commit/d54ffccf2a5a905f51ed5108f7c647f35d64ae23) new --key value style with passing tests. NOTE: changes existing behavior (@substack)
-- [ed2a2d5](https://github.com/bcoe/yargs/commit/ed2a2d5d828100ebeef6385c0fb88d146a5cfe9b) package bump for summatix's coffee script fix (@substack)
-- [75a975e](https://github.com/bcoe/yargs/commit/75a975eed8430d28e2a79dc9e6d819ad545f4587) Added support for CoffeeScript (@summatix)
-- [56b2b1d](https://github.com/bcoe/yargs/commit/56b2b1de8d11f8a2b91979d8ae2d6db02d8fe64d) test coverage for the falsy check() usage (@substack)
-- [a4843a9](https://github.com/bcoe/yargs/commit/a4843a9f0e69ffb4afdf6a671d89eb6f218be35d) check bug fixed plus a handy string (@substack)
-- [857bd2d](https://github.com/bcoe/yargs/commit/857bd2db933a5aaa9cfecba0ced2dc9b415f8111) tests for demandCount, back up to 100% coverage (@substack)
-- [073b776](https://github.com/bcoe/yargs/commit/073b7768ebd781668ef05c13f9003aceca2f5c35) call demandCount from demand (@substack)
-- [4bd4b7a](https://github.com/bcoe/yargs/commit/4bd4b7a085c8b6ce1d885a0f486cc9865cee2db1) add demandCount to check for the number of arguments in the _ list (@marshall)
-- [b8689ac](https://github.com/bcoe/yargs/commit/b8689ac68dacf248119d242bba39a41cb0adfa07) Rebase checks. That will be its own module eventually. (@substack)
-- [e688370](https://github.com/bcoe/yargs/commit/e688370b576f0aa733c3f46183df69e1b561668e) a $0 like in perl (@substack)
-- [2e5e196](https://github.com/bcoe/yargs/commit/2e5e1960fc19afb21fb3293752316eaa8bcd3609) usage test hacking around process and console (@substack)
-- [fcc3521](https://github.com/bcoe/yargs/commit/fcc352163fbec6a1dfe8caf47a0df39de24fe016) description pun (@substack)
-- [87a1fe2](https://github.com/bcoe/yargs/commit/87a1fe29037ca2ca5fefda85141aaeb13e8ce761) mit/x11 license (@substack)
-- [8d089d2](https://github.com/bcoe/yargs/commit/8d089d24cd687c0bde3640a96c09b78f884900dd) bool example is more consistent and also shows off short option grouping (@substack)
-- [448d747](https://github.com/bcoe/yargs/commit/448d7473ac68e8e03d8befc9457b0d9e21725be0) start of the readme and examples (@substack)
-- [da74dea](https://github.com/bcoe/yargs/commit/da74dea799a9b59dbf022cbb8001bfdb0d52eec9) more tests for long and short captures (@substack)
-- [ab6387e](https://github.com/bcoe/yargs/commit/ab6387e6769ca4af82ca94c4c67c7319f0d9fcfa) silly bug in the tests with s/not/no/, all tests pass now (@substack)
-- [102496a](https://github.com/bcoe/yargs/commit/102496a319e8e06f6550d828fc2f72992c7d9ecc) hack an instance for process.argv onto Argv so the export can be called to create an instance or used for argv, which is the most common case (@substack)
-- [a01caeb](https://github.com/bcoe/yargs/commit/a01caeb532546d19f68f2b2b87f7036cfe1aaedd) divide example (@substack)
-- [443da55](https://github.com/bcoe/yargs/commit/443da55736acbaf8ff8b04d1b9ce19ab016ddda2) start of the lib with a package.json (@substack)
diff --git a/device_home/node_modules/yargs/README.md b/device_home/node_modules/yargs/README.md
deleted file mode 100644 (file)
index 6b7d096..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<p align="center">
-  <img width="250" src="/yargs-logo.png">
-</p>
-<h1 align="center"> Yargs </h1>
-<p align="center">
-  <b >Yargs be a node.js library fer hearties tryin' ter parse optstrings</b>
-</p>
-<br>
-
-[![Build Status][travis-image]][travis-url]
-[![Coverage Status][coveralls-image]][coveralls-url]
-[![NPM version][npm-image]][npm-url]
-[![js-standard-style][standard-image]][standard-url]
-[![Conventional Commits][conventional-commits-image]][conventional-commits-url]
-[![Slack][slack-image]][slack-url]
-
-## Description :
-Yargs helps you build interactive command line tools, by parsing arguments and generating an elegant user interface. 
-
-It gives you:
-
-* commands and (grouped) options (`my-program.js serve --port=5000`).
-* a dynamically generated help menu based on your arguments.
-
-> <img width="400" src="/screen.png">
-
-* bash-completion shortcuts for commands and options.
-* and [tons more](/docs/api.md).
-
-## Installation
-
-Stable version:
-```bash
-npm i yargs
-```
-
-Bleeding edge version with the most recent features:
-```bash
-npm i yargs@next
-```
-
-## Usage :
-
-### Simple Example
-
-````javascript
-#!/usr/bin/env node
-const argv = require('yargs').argv
-
-if (argv.ships > 3 && argv.distance < 53.5) {
-  console.log('Plunder more riffiwobbles!')
-} else {
-  console.log('Retreat from the xupptumblers!')
-}
-````
-
-```bash
-$ ./plunder.js --ships=4 --distance=22
-Plunder more riffiwobbles!
-
-$ ./plunder.js --ships 12 --distance 98.7
-Retreat from the xupptumblers!
-```
-
-### Complex Example
-
-```javascript
-#!/usr/bin/env node
-require('yargs') // eslint-disable-line
-  .command('serve [port]', 'start the server', (yargs) => {
-    yargs
-      .positional('port', {
-        describe: 'port to bind on',
-        default: 5000
-      })
-  }, (argv) => {
-    if (argv.verbose) console.info(`start server on :${argv.port}`)
-    serve(argv.port)
-  })
-  .option('verbose', {
-    alias: 'v',
-    default: false
-  })
-  .argv
-```
-
-Run the example above with `--help` to see the help for the application.
-
-## Community :
-
-Having problems? want to contribute? join our [community slack](http://devtoolscommunity.herokuapp.com).
-
-## Documentation :
-
-### Table of Contents
-
-* [Yargs' API](/docs/api.md)
-* [Examples](/docs/examples.md)
-* [Parsing Tricks](/docs/tricks.md)
-  * [Stop the Parser](/docs/tricks.md#stop)
-  * [Negating Boolean Arguments](/docs/tricks.md#negate)
-  * [Numbers](/docs/tricks.md#numbers)
-  * [Arrays](/docs/tricks.md#arrays)
-  * [Objects](/docs/tricks.md#objects)
-* [Advanced Topics](/docs/advanced.md)
-  * [Composing Your App Using Commands](/docs/advanced.md#commands)
-  * [Building Configurable CLI Apps](/docs/advanced.md#configuration)
-  * [Customizing Yargs' Parser](/docs/advanced.md#customizing)
-* [Contributing](/contributing.md)
-
-[travis-url]: https://travis-ci.org/yargs/yargs
-[travis-image]: https://img.shields.io/travis/yargs/yargs/master.svg
-[coveralls-url]: https://coveralls.io/github/yargs/yargs
-[coveralls-image]: https://img.shields.io/coveralls/yargs/yargs.svg
-[npm-url]: https://www.npmjs.com/package/yargs
-[npm-image]: https://img.shields.io/npm/v/yargs.svg
-[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg
-[standard-url]: http://standardjs.com/
-[conventional-commits-image]: https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg
-[conventional-commits-url]: https://conventionalcommits.org/
-[slack-image]: http://devtoolscommunity.herokuapp.com/badge.svg
-[slack-url]: http://devtoolscommunity.herokuapp.com
diff --git a/device_home/node_modules/yeast/README.md b/device_home/node_modules/yeast/README.md
deleted file mode 100644 (file)
index 0b0af0d..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-# yeast
-
-[![Made by unshift](https://img.shields.io/badge/made%20by-unshift-00ffcc.svg?style=flat-square)](http://unshift.io)[![Version npm](https://img.shields.io/npm/v/yeast.svg?style=flat-square)](http://browsenpm.org/package/yeast)[![Build Status](https://img.shields.io/travis/unshiftio/yeast/master.svg?style=flat-square)](https://travis-ci.org/unshiftio/yeast)[![Dependencies](https://img.shields.io/david/unshiftio/yeast.svg?style=flat-square)](https://david-dm.org/unshiftio/yeast)[![Coverage Status](https://img.shields.io/coveralls/unshiftio/yeast/master.svg?style=flat-square)](https://coveralls.io/r/unshiftio/yeast?branch=master)[![IRC channel](https://img.shields.io/badge/IRC-irc.freenode.net%23unshift-00a8ff.svg?style=flat-square)](https://webchat.freenode.net/?channels=unshift)
-
-[![Sauce Test Status](https://saucelabs.com/browser-matrix/yeast.svg)](https://saucelabs.com/u/yeast)
-
-Yeast is a unique id generator. It has been primarily designed to generate a
-unique id which can be used for cache busting. A common practice for this is
-to use a timestamp, but there are couple of downsides when using timestamps.
-
-1. The timestamp is already 13 chars long. This might not matter for 1 request
-   but if you make hundreds of them this quickly adds up in bandwidth and
-   processing time.
-2. It's not unique enough. If you generate two stamps right after each other,
-   they would be identical because the timing accuracy is limited to
-   milliseconds.
-
-Yeast solves both of these issues by:
-
-1. Compressing the generated timestamp using a custom `encode()` function that
-   returns a string representation of the number.
-2. Seeding the id in case of collision (when the id is identical to the previous
-   one).
-
-To keep the strings unique it will use the `.` char to separate the generated
-stamp from the seed.
-
-## Installation
-
-The module is intended to be used in browsers as well as in Node.js and is
-therefore released in the npm registry and can be installed using:
-
-```
-npm install --save yeast
-```
-
-## Usage
-
-All the examples assume that this library is initialized as follow:
-
-```js
-'use strict';
-
-var yeast = require('yeast');
-```
-
-To generate an id just call the `yeast` function.
-
-```js
-console.log(yeast(), yeast(), yeast()); // outputs: KyxidwN KyxidwN.0 KyxidwN.1
-
-setTimeout(function () {
-  console.log(yeast()); // outputs: KyxidwO
-});
-```
-
-### yeast.encode(num)
-
-An helper function that returns a string representing the specified number. The
-returned string contains only URL safe characters.
-
-```js
-yeast.encode(+new Date()); // outputs: Kyxjuo1
-```
-
-### yeast.decode(str)
-
-An helper function that returns the integer value specified by the given string.
-This function can be used to retrieve the timestamp from a `yeast` id.
-
-```js
-var id = yeast(); // holds the value: Kyxl1OU
-
-yeast.decode(id); // outputs: 1439816226334
-```
-
-That's all folks. If you have ideas on how we can further compress the ids
-please open an issue!
-
-## License
-
-[MIT](LICENSE)