Maybe fixed the queue problem
authorRemixDev <deezloaderremix@gmail.com>
Fri, 18 Jan 2019 18:38:30 +0000 (19:38 +0100)
committerRemixDev <deezloaderremix@gmail.com>
Fri, 18 Jan 2019 18:38:30 +0000 (19:38 +0100)
.gitignore
app/app.js
app/package-lock.json [new file with mode: 0644]
app/package.json
app/public/js/frontend.js
package-lock.json [new file with mode: 0644]
package.json

index 44b08f8fb64e5cb2d739011a5e2b92ebb2040155..a01f7b32c05618eec0c8663064bd664ea99eb97f 100644 (file)
@@ -64,7 +64,3 @@ dist
 app/authCredentials.js
 .DS_Store
 */.DS_Store
-/package-lock.json
-*/package-lock.json
-/yarn.lock
-*/yarn.lock
\ No newline at end of file
index 4e7e9d507c631959cf384b064ec26c038bdd215e..70c1a2587b92bad86a400258e4efec81278e5993 100644 (file)
@@ -19,7 +19,6 @@ const ID3Writer = require('./lib/browser-id3-writer')
 const deezerApi = require('./lib/deezer-api')
 const spotifyApi = require('spotify-web-api-node')
 // App stuff
-const Promise = require("bluebird")
 const fs = require('fs-extra')
 const async = require('async')
 const request = require('request-promise')
@@ -30,16 +29,13 @@ const logger = require('./utils/logger.js')
 const queue = require('queue')
 const localpaths = require('./utils/localpaths.js')
 const package = require('./package.json')
+const stq = require('sequential-task-queue')
 
 // First run, create config file
 if(!fs.existsSync(localpaths.user+"config.json")){
        fs.outputFileSync(localpaths.user+"config.json",fs.readFileSync(__dirname+path.sep+"default.json",'utf8'))
 }
 
-Promise.config({
-       cancellation: true
-})
-
 // Main Constants
 // Files
 const configFileLocation = localpaths.user+"config.json"
@@ -105,9 +101,8 @@ io.sockets.on('connection', function (s) {
 
        // Connection dependet variables
        s.Deezer = new deezerApi()
+       s.dqueue = new stq.SequentialTaskQueue()
        s.downloadQueue = {}
-       s.currentItem = null
-       s.lastQueueId = null
        s.trackQueue = queue({
                autostart: true
        })
@@ -398,23 +393,6 @@ io.sockets.on('connection', function (s) {
                });
        });
 
-       function addToQueue(object) {
-               s.downloadQueue[object.queueId] = object
-               s.emit('addToQueue', object)
-               queueDownload(getNextDownload())
-       }
-
-       function getNextDownload() {
-               if (s.currentItem != null || Object.keys(s.downloadQueue).length == 0) {
-                       if (Object.keys(s.downloadQueue).length == 0 && s.currentItem == null) {
-                               s.emit("emptyDownloadQueue", {})
-                       }
-                       return null
-               }
-               s.currentItem = s.downloadQueue[Object.keys(s.downloadQueue)[0]]
-               return s.currentItem
-       }
-
        async function downloadTrack(data){
                try{
                        var track = await s.Deezer.getTrack(data.id)
@@ -585,19 +563,72 @@ io.sockets.on('connection', function (s) {
                }
        }
 
-       //currentItem: the current item being downloaded at that moment such as a track or an album
+       function addToQueue(object) {
+               s.downloadQueue[object.queueId] = object
+               s.emit('addToQueue', object)
+               s.downloadQueue[object.queueId].downloadQueuePromise = s.dqueue.push(addNextDownload, { args: object })
+       }
+
+       function addNextDownload(obj, token){
+               return new Promise(async (resolve, reject) => {
+      await queueDownload(obj)
+                       resolve()
+    }).then(() => new Promise((resolve, reject) => {
+      if (token.cancelled)
+        reject()
+      else
+        resolve()
+    }))
+       }
+
+       function cancelDownload(queueId, cleanAll=false){
+               if (!queueId) return
+               let cancel = false
+               let cancelSuccess
+               if (s.downloadQueue[queueId]){
+                       cancel = true;
+                       if (s.downloadQueue[queueId].downloadQueuePromise) s.downloadQueue[queueId].downloadQueuePromise.cancel()
+                       if (s.downloadQueue[Object.keys(s.downloadQueue)[0]].queueId == queueId) {
+                               s.trackQueue = queue({
+                                       autostart: true,
+                                       concurrency: s.trackQueue.concurrency
+                               })
+                       }
+                       delete s.downloadQueue[queueId]
+               }
+
+               if (cancel) {
+                       s.emit("cancelDownload", {queueId: queueId, cleanAll: cleanAll});
+               }
+       }
+       s.on("cancelDownload", function (data) {cancelDownload(data.queueId)});
+
+       s.on("cancelAllDownloads", function(data){
+               data.queueList.forEach(x=>{
+                       cancelDownload(x, true);
+               })
+               s.emit("cancelAllDownloads")
+       })
+
+       /*function getNextDownload() {
+               if (s.currentItem != null || Object.keys(s.downloadQueue).length == 0) {
+                       if (Object.keys(s.downloadQueue).length == 0 && s.currentItem == null) {
+                               s.emit("emptyDownloadQueue", {})
+                       }
+                       return null
+               }
+               s.currentItem = s.downloadQueue[Object.keys(s.downloadQueue)[0]]
+               return s.currentItem
+       }*/
+
        //downloadQueue: the tracks in the queue to be downloaded
        //lastQueueId: the most recent queueId
        //queueId: random number generated when user clicks download on something
        async function queueDownload(downloading) {
-               if (!downloading) return;
+               if (!downloading) return
 
-               // New batch emits new message
-               if (s.lastQueueId != downloading.queueId) {
-                       if (downloading.type != "spotifyplaylist"){
-                               s.emit("downloadStarted", {queueId: downloading.queueId})
-                       }
-                       s.lastQueueId = downloading.queueId
+               if (downloading.type != "spotifyplaylist"){
+                       s.emit("downloadStarted", {queueId: downloading.queueId})
                }
 
                downloading.errorLog = "";
@@ -610,7 +641,7 @@ io.sockets.on('connection', function (s) {
                        *  TRACK DOWNLOAD
                        */
                        case "track":
-                               downloading.downloadPromise = new Promise(async (resolve,reject)=>{
+                               var downloadPromise = new Promise(async (resolve,reject)=>{
                                        try{
                                                await downloadTrackObject(downloading.obj, downloading.queueId, downloading.settings)
                                                downloading.downloaded++
@@ -635,7 +666,7 @@ io.sockets.on('connection', function (s) {
                                        resolve()
                                })
                                try{
-                                       await downloading.downloadPromise
+                                       await downloadPromise
                                }catch(err){
                                        if (err) logger.error(`queueDownload:track failed: ${err.stack ? err.stack : err}`)
                                        logger.info("Downloading Stopped")
@@ -954,38 +985,10 @@ io.sockets.on('connection', function (s) {
                        break
                }
                if (downloading && s.downloadQueue[Object.keys(s.downloadQueue)[0]] && (Object.keys(s.downloadQueue)[0] == downloading.queueId)) delete s.downloadQueue[Object.keys(s.downloadQueue)[0]]
-               s.currentItem = null
-               queueDownload(getNextDownload())
-       }
-
-       function cancelDownload(queueId, cleanAll=false){
-               if (!queueId) return
-               let cancel = false
-               let cancelSuccess
-               if (s.downloadQueue[queueId]){
-                       cancel = true;
-                       if (s.currentItem && s.currentItem.queueId == queueId) {
-                               if (s.downloadQueue[queueId].downloadPromise) s.downloadQueue[queueId].downloadPromise.cancel()
-                               s.trackQueue = queue({
-                                       autostart: true,
-                                       concurrency: s.trackQueue.concurrency
-                               })
-                       }
-                       delete s.downloadQueue[queueId]
-               }
-
-               if (cancel) {
-                       s.emit("cancelDownload", {queueId: queueId, cleanAll: cleanAll});
+               if (Object.keys(s.downloadQueue).length == 0) {
+                       s.emit("emptyDownloadQueue", {})
                }
        }
-       s.on("cancelDownload", function (data) {cancelDownload(data.queueId)});
-
-       s.on("cancelAllDownloads", function(data){
-               data.queueList.forEach(x=>{
-                       cancelDownload(x, true);
-               })
-               s.emit("cancelAllDownloads")
-       })
 
        async function downloadTrackObject(track, queueId, settings) {
                if (!s.downloadQueue[queueId]) {
@@ -1384,24 +1387,24 @@ io.sockets.on('connection', function (s) {
                                        return logger.error(`[${track.artist.name} - ${track.title}] Decryption error: ${err.stack}`)
                                }
                        }).on("data", function(data) {
-                               if (!s.downloadQueue[queueId] || !s.currentItem) reject()
+                               if (!s.downloadQueue[queueId]) reject()
                        })
-                       if((s.downloadQueue[queueId] || s.currentItem) && s.currentItem.type == "track"){
+                       if((s.downloadQueue[queueId]) && s.downloadQueue[queueId].type == "track"){
                                let chunkLength = 0
                                req.on("data", function(data) {
-                                       if (!s.downloadQueue[queueId] || !s.currentItem) reject()
+                                       if (!s.downloadQueue[queueId]) reject()
                                        chunkLength += data.length
                                        try{
-                                               if (!s.currentItem.percentage) {
-                                                       s.currentItem.percentage = 0
+                                               if (!s.downloadQueue[queueId].percentage) {
+                                                       s.downloadQueue[queueId].percentage = 0
                                                }
                                                let complete = track.selectedFilesize
                                                let percentage = (chunkLength / complete) * 100;
-                                               if ((percentage - s.currentItem.percentage > 1) || (chunkLength == complete)) {
-                                                       s.currentItem.percentage = percentage
+                                               if ((percentage - s.downloadQueue[queueId].percentage > 1) || (chunkLength == complete)) {
+                                                       s.downloadQueue[queueId].percentage = percentage
                                                        s.emit("downloadProgress", {
-                                                               queueId: s.currentItem.queueId,
-                                                               percentage: s.currentItem.percentage-5
+                                                               queueId: queueId,
+                                                               percentage: s.downloadQueue[queueId].percentage-5
                                                        })
                                                }
                                        }catch(err){}
@@ -1805,10 +1808,11 @@ function uniqueArray(origin, destination, removeDupes=true){
 
 // Show crash error in console for debugging
 process.on('unhandledRejection', function (err) {
-       logger.error(err.stack)
+       if (err) logger.error(err.stack ? err.stack : err)
+
 })
 process.on('uncaughtException', function (err) {
-       logger.error(err.stack)
+       if (err) logger.error(err.stack ? err.stack : err)
 })
 
 // Exporting vars
diff --git a/app/package-lock.json b/app/package-lock.json
new file mode 100644 (file)
index 0000000..8561208
--- /dev/null
@@ -0,0 +1,1338 @@
+{
+       "name": "deezloader-rmx",
+       "version": "4.1.6",
+       "lockfileVersion": 1,
+       "requires": true,
+       "dependencies": {
+               "accepts": {
+                       "version": "1.3.5",
+                       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+                       "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+                       "requires": {
+                               "mime-types": "~2.1.18",
+                               "negotiator": "0.6.1"
+                       }
+               },
+               "after": {
+                       "version": "0.8.2",
+                       "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+                       "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
+               },
+               "ajv": {
+                       "version": "6.7.0",
+                       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
+                       "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
+                       "requires": {
+                               "fast-deep-equal": "^2.0.1",
+                               "fast-json-stable-stringify": "^2.0.0",
+                               "json-schema-traverse": "^0.4.1",
+                               "uri-js": "^4.2.2"
+                       }
+               },
+               "app-root-path": {
+                       "version": "1.4.0",
+                       "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-1.4.0.tgz",
+                       "integrity": "sha1-YzXYZclkDQ+tmQBOWnkjIjjpLfo="
+               },
+               "array-flatten": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+                       "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+               },
+               "arraybuffer.slice": {
+                       "version": "0.0.7",
+                       "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+                       "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
+               },
+               "asn1": {
+                       "version": "0.2.4",
+                       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+                       "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+                       "requires": {
+                               "safer-buffer": "~2.1.0"
+                       }
+               },
+               "assert-plus": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+                       "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+               },
+               "async": {
+                       "version": "2.6.1",
+                       "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+                       "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+                       "requires": {
+                               "lodash": "^4.17.10"
+                       }
+               },
+               "async-limiter": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+                       "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
+               },
+               "asynckit": {
+                       "version": "0.4.0",
+                       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+                       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+               },
+               "aws-sign2": {
+                       "version": "0.7.0",
+                       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+                       "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+               },
+               "aws4": {
+                       "version": "1.8.0",
+                       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+                       "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
+               },
+               "backo2": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+                       "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
+               },
+               "balanced-match": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+                       "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+               },
+               "base64-arraybuffer": {
+                       "version": "0.1.5",
+                       "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+                       "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
+               },
+               "base64id": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+                       "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
+               },
+               "bcrypt-pbkdf": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+                       "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+                       "requires": {
+                               "tweetnacl": "^0.14.3"
+                       }
+               },
+               "better-assert": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+                       "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+                       "requires": {
+                               "callsite": "1.0.0"
+                       }
+               },
+               "blob": {
+                       "version": "0.0.5",
+                       "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+                       "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
+               },
+               "bluebird": {
+                       "version": "3.5.3",
+                       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+                       "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw=="
+               },
+               "body-parser": {
+                       "version": "1.18.3",
+                       "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+                       "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+                       "requires": {
+                               "bytes": "3.0.0",
+                               "content-type": "~1.0.4",
+                               "debug": "2.6.9",
+                               "depd": "~1.1.2",
+                               "http-errors": "~1.6.3",
+                               "iconv-lite": "0.4.23",
+                               "on-finished": "~2.3.0",
+                               "qs": "6.5.2",
+                               "raw-body": "2.3.3",
+                               "type-is": "~1.6.16"
+                       }
+               },
+               "brace-expansion": {
+                       "version": "1.1.11",
+                       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+                       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+                       "requires": {
+                               "balanced-match": "^1.0.0",
+                               "concat-map": "0.0.1"
+                       }
+               },
+               "bytes": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+                       "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+               },
+               "callsite": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+                       "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
+               },
+               "caseless": {
+                       "version": "0.12.0",
+                       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+                       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+               },
+               "combined-stream": {
+                       "version": "1.0.7",
+                       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+                       "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+                       "requires": {
+                               "delayed-stream": "~1.0.0"
+                       }
+               },
+               "component-bind": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+                       "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
+               },
+               "component-emitter": {
+                       "version": "1.2.1",
+                       "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+                       "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+               },
+               "component-inherit": {
+                       "version": "0.0.3",
+                       "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+                       "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
+               },
+               "concat-map": {
+                       "version": "0.0.1",
+                       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+                       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+               },
+               "content-disposition": {
+                       "version": "0.5.2",
+                       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+                       "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
+               },
+               "content-type": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+                       "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+               },
+               "cookie": {
+                       "version": "0.3.1",
+                       "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+                       "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+               },
+               "cookie-signature": {
+                       "version": "1.0.6",
+                       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+                       "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+               },
+               "cookiejar": {
+                       "version": "2.1.2",
+                       "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
+                       "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
+               },
+               "core-util-is": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+                       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+               },
+               "dashdash": {
+                       "version": "1.14.1",
+                       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+                       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+                       "requires": {
+                               "assert-plus": "^1.0.0"
+                       }
+               },
+               "dateformat": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+                       "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="
+               },
+               "debug": {
+                       "version": "2.6.9",
+                       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+                       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+                       "requires": {
+                               "ms": "2.0.0"
+                       }
+               },
+               "delayed-stream": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+                       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+               },
+               "depd": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+                       "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+               },
+               "destroy": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+                       "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+               },
+               "ecc-jsbn": {
+                       "version": "0.1.2",
+                       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+                       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+                       "requires": {
+                               "jsbn": "~0.1.0",
+                               "safer-buffer": "^2.1.0"
+                       }
+               },
+               "ee-first": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+                       "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+               },
+               "electron-context-menu": {
+                       "version": "0.10.1",
+                       "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-0.10.1.tgz",
+                       "integrity": "sha512-KFkKwFbT6iJUgarEknYuXQlJAT+naJZtSWFBtHf9RiSb70wscWdDNpYoUERzF7FgqYE1Mil4npfRWsjqGLwtog==",
+                       "requires": {
+                               "electron-dl": "^1.2.0",
+                               "electron-is-dev": "^1.0.1"
+                       }
+               },
+               "electron-dl": {
+                       "version": "1.12.0",
+                       "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-1.12.0.tgz",
+                       "integrity": "sha512-UMc2CL45Ybpvu66LDPYzwmDRmYK4Ivz+wdnTM0eXcNMztvQwhixAk2UPme1c7McqG8bAlKEkQpZn3epmQy4EWg==",
+                       "requires": {
+                               "ext-name": "^5.0.0",
+                               "pupa": "^1.0.0",
+                               "unused-filename": "^1.0.0"
+                       }
+               },
+               "electron-is-dev": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.0.1.tgz",
+                       "integrity": "sha512-iwM3EotA9HTXqMGpQRkR/kT8OZqBbdfHTnlwcxsjSLYqY8svvsq0MuujsWCn3/vtgRmDv/PC/gKUUpoZvi5C1w=="
+               },
+               "electron-window-state-manager": {
+                       "version": "0.3.2",
+                       "resolved": "https://registry.npmjs.org/electron-window-state-manager/-/electron-window-state-manager-0.3.2.tgz",
+                       "integrity": "sha1-pVLqNUcCl8mZx0TYGrsqjIpRdw4=",
+                       "requires": {
+                               "app-root-path": "^1.3.0",
+                               "fs-jetpack": "^0.9.2"
+                       }
+               },
+               "encodeurl": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+                       "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+               },
+               "engine.io": {
+                       "version": "3.2.1",
+                       "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
+                       "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==",
+                       "requires": {
+                               "accepts": "~1.3.4",
+                               "base64id": "1.0.0",
+                               "cookie": "0.3.1",
+                               "debug": "~3.1.0",
+                               "engine.io-parser": "~2.1.0",
+                               "ws": "~3.3.1"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "3.1.0",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+                                       "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+                                       "requires": {
+                                               "ms": "2.0.0"
+                                       }
+                               }
+                       }
+               },
+               "engine.io-client": {
+                       "version": "3.2.1",
+                       "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
+                       "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
+                       "requires": {
+                               "component-emitter": "1.2.1",
+                               "component-inherit": "0.0.3",
+                               "debug": "~3.1.0",
+                               "engine.io-parser": "~2.1.1",
+                               "has-cors": "1.1.0",
+                               "indexof": "0.0.1",
+                               "parseqs": "0.0.5",
+                               "parseuri": "0.0.5",
+                               "ws": "~3.3.1",
+                               "xmlhttprequest-ssl": "~1.5.4",
+                               "yeast": "0.1.2"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "3.1.0",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+                                       "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+                                       "requires": {
+                                               "ms": "2.0.0"
+                                       }
+                               }
+                       }
+               },
+               "engine.io-parser": {
+                       "version": "2.1.3",
+                       "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
+                       "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
+                       "requires": {
+                               "after": "0.8.2",
+                               "arraybuffer.slice": "~0.0.7",
+                               "base64-arraybuffer": "0.1.5",
+                               "blob": "0.0.5",
+                               "has-binary2": "~1.0.2"
+                       }
+               },
+               "escape-html": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+                       "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+               },
+               "etag": {
+                       "version": "1.8.1",
+                       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+                       "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+               },
+               "express": {
+                       "version": "4.16.4",
+                       "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
+                       "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
+                       "requires": {
+                               "accepts": "~1.3.5",
+                               "array-flatten": "1.1.1",
+                               "body-parser": "1.18.3",
+                               "content-disposition": "0.5.2",
+                               "content-type": "~1.0.4",
+                               "cookie": "0.3.1",
+                               "cookie-signature": "1.0.6",
+                               "debug": "2.6.9",
+                               "depd": "~1.1.2",
+                               "encodeurl": "~1.0.2",
+                               "escape-html": "~1.0.3",
+                               "etag": "~1.8.1",
+                               "finalhandler": "1.1.1",
+                               "fresh": "0.5.2",
+                               "merge-descriptors": "1.0.1",
+                               "methods": "~1.1.2",
+                               "on-finished": "~2.3.0",
+                               "parseurl": "~1.3.2",
+                               "path-to-regexp": "0.1.7",
+                               "proxy-addr": "~2.0.4",
+                               "qs": "6.5.2",
+                               "range-parser": "~1.2.0",
+                               "safe-buffer": "5.1.2",
+                               "send": "0.16.2",
+                               "serve-static": "1.13.2",
+                               "setprototypeof": "1.1.0",
+                               "statuses": "~1.4.0",
+                               "type-is": "~1.6.16",
+                               "utils-merge": "1.0.1",
+                               "vary": "~1.1.2"
+                       }
+               },
+               "ext-list": {
+                       "version": "2.2.2",
+                       "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
+                       "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
+                       "requires": {
+                               "mime-db": "^1.28.0"
+                       }
+               },
+               "ext-name": {
+                       "version": "5.0.0",
+                       "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
+                       "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
+                       "requires": {
+                               "ext-list": "^2.0.0",
+                               "sort-keys-length": "^1.0.0"
+                       }
+               },
+               "extend": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+                       "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+               },
+               "extsprintf": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+                       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+               },
+               "fast-deep-equal": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+                       "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+               },
+               "fast-json-stable-stringify": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+                       "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+               },
+               "finalhandler": {
+                       "version": "1.1.1",
+                       "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+                       "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
+                       "requires": {
+                               "debug": "2.6.9",
+                               "encodeurl": "~1.0.2",
+                               "escape-html": "~1.0.3",
+                               "on-finished": "~2.3.0",
+                               "parseurl": "~1.3.2",
+                               "statuses": "~1.4.0",
+                               "unpipe": "~1.0.0"
+                       }
+               },
+               "forever-agent": {
+                       "version": "0.6.1",
+                       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+                       "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+               },
+               "form-data": {
+                       "version": "2.3.3",
+                       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+                       "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+                       "requires": {
+                               "asynckit": "^0.4.0",
+                               "combined-stream": "^1.0.6",
+                               "mime-types": "^2.1.12"
+                       }
+               },
+               "formidable": {
+                       "version": "1.2.1",
+                       "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz",
+                       "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg=="
+               },
+               "forwarded": {
+                       "version": "0.1.2",
+                       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+                       "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+               },
+               "fresh": {
+                       "version": "0.5.2",
+                       "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+                       "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+               },
+               "fs-extra": {
+                       "version": "7.0.1",
+                       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+                       "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+                       "requires": {
+                               "graceful-fs": "^4.1.2",
+                               "jsonfile": "^4.0.0",
+                               "universalify": "^0.1.0"
+                       }
+               },
+               "fs-jetpack": {
+                       "version": "0.9.2",
+                       "resolved": "http://registry.npmjs.org/fs-jetpack/-/fs-jetpack-0.9.2.tgz",
+                       "integrity": "sha1-k7QU29B4AYY9ZMgadq3APYUMm1Y=",
+                       "requires": {
+                               "minimatch": "^3.0.2",
+                               "mkdirp": "^0.5.1",
+                               "q": "^1.0.1",
+                               "rimraf": "^2.2.8"
+                       }
+               },
+               "fs.realpath": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+                       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+               },
+               "getpass": {
+                       "version": "0.1.7",
+                       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+                       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+                       "requires": {
+                               "assert-plus": "^1.0.0"
+                       }
+               },
+               "glob": {
+                       "version": "7.1.3",
+                       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+                       "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+                       "requires": {
+                               "fs.realpath": "^1.0.0",
+                               "inflight": "^1.0.4",
+                               "inherits": "2",
+                               "minimatch": "^3.0.4",
+                               "once": "^1.3.0",
+                               "path-is-absolute": "^1.0.0"
+                       }
+               },
+               "graceful-fs": {
+                       "version": "4.1.15",
+                       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+                       "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
+               },
+               "har-schema": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+                       "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+               },
+               "har-validator": {
+                       "version": "5.1.3",
+                       "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+                       "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+                       "requires": {
+                               "ajv": "^6.5.5",
+                               "har-schema": "^2.0.0"
+                       }
+               },
+               "has-binary2": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+                       "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+                       "requires": {
+                               "isarray": "2.0.1"
+                       }
+               },
+               "has-cors": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+                       "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+               },
+               "http-errors": {
+                       "version": "1.6.3",
+                       "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+                       "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+                       "requires": {
+                               "depd": "~1.1.2",
+                               "inherits": "2.0.3",
+                               "setprototypeof": "1.1.0",
+                               "statuses": ">= 1.4.0 < 2"
+                       }
+               },
+               "http-signature": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+                       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+                       "requires": {
+                               "assert-plus": "^1.0.0",
+                               "jsprim": "^1.2.2",
+                               "sshpk": "^1.7.0"
+                       }
+               },
+               "iconv-lite": {
+                       "version": "0.4.23",
+                       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+                       "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+                       "requires": {
+                               "safer-buffer": ">= 2.1.2 < 3"
+                       }
+               },
+               "indexof": {
+                       "version": "0.0.1",
+                       "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+                       "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+               },
+               "inflight": {
+                       "version": "1.0.6",
+                       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+                       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+                       "requires": {
+                               "once": "^1.3.0",
+                               "wrappy": "1"
+                       }
+               },
+               "inherits": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+                       "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+               },
+               "ipaddr.js": {
+                       "version": "1.8.0",
+                       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
+                       "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
+               },
+               "is-plain-obj": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+                       "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+               },
+               "is-typedarray": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+                       "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+               },
+               "isarray": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+                       "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+               },
+               "isstream": {
+                       "version": "0.1.2",
+                       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+                       "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+               },
+               "jsbn": {
+                       "version": "0.1.1",
+                       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+                       "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+               },
+               "json-schema": {
+                       "version": "0.2.3",
+                       "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+                       "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+               },
+               "json-schema-traverse": {
+                       "version": "0.4.1",
+                       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+                       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+               },
+               "json-stringify-safe": {
+                       "version": "5.0.1",
+                       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+                       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+               },
+               "jsonfile": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+                       "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+                       "requires": {
+                               "graceful-fs": "^4.1.6"
+                       }
+               },
+               "jsprim": {
+                       "version": "1.4.1",
+                       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+                       "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+                       "requires": {
+                               "assert-plus": "1.0.0",
+                               "extsprintf": "1.3.0",
+                               "json-schema": "0.2.3",
+                               "verror": "1.10.0"
+                       }
+               },
+               "lodash": {
+                       "version": "4.17.11",
+                       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+                       "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+               },
+               "media-typer": {
+                       "version": "0.3.0",
+                       "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+                       "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+               },
+               "merge-descriptors": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+                       "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+               },
+               "methods": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+                       "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+               },
+               "mime": {
+                       "version": "1.4.1",
+                       "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+                       "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
+               },
+               "mime-db": {
+                       "version": "1.37.0",
+                       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+                       "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
+               },
+               "mime-types": {
+                       "version": "2.1.21",
+                       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+                       "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+                       "requires": {
+                               "mime-db": "~1.37.0"
+                       }
+               },
+               "minimatch": {
+                       "version": "3.0.4",
+                       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+                       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+                       "requires": {
+                               "brace-expansion": "^1.1.7"
+                       }
+               },
+               "minimist": {
+                       "version": "0.0.8",
+                       "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+                       "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+               },
+               "mkdirp": {
+                       "version": "0.5.1",
+                       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+                       "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+                       "requires": {
+                               "minimist": "0.0.8"
+                       }
+               },
+               "modify-filename": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz",
+                       "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE="
+               },
+               "ms": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+                       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+               },
+               "negotiator": {
+                       "version": "0.6.1",
+                       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+                       "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+               },
+               "node-downloader-helper": {
+                       "version": "1.0.9",
+                       "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-1.0.9.tgz",
+                       "integrity": "sha512-X2cuBotLy2D3LdQAvhOAZ6IfcMGT6ssn+hCEm6yPJzhjr+S/YjyTLTxhnAe1pr5/jxGABD+b3SN8WpuBL5J2Dw=="
+               },
+               "oauth-sign": {
+                       "version": "0.9.0",
+                       "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+                       "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+               },
+               "object-component": {
+                       "version": "0.0.3",
+                       "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+                       "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
+               },
+               "on-finished": {
+                       "version": "2.3.0",
+                       "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+                       "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+                       "requires": {
+                               "ee-first": "1.1.1"
+                       }
+               },
+               "once": {
+                       "version": "1.4.0",
+                       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+                       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+                       "requires": {
+                               "wrappy": "1"
+                       }
+               },
+               "parseqs": {
+                       "version": "0.0.5",
+                       "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+                       "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+                       "requires": {
+                               "better-assert": "~1.0.0"
+                       }
+               },
+               "parseuri": {
+                       "version": "0.0.5",
+                       "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+                       "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+                       "requires": {
+                               "better-assert": "~1.0.0"
+                       }
+               },
+               "parseurl": {
+                       "version": "1.3.2",
+                       "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+                       "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+               },
+               "path-exists": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+                       "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+               },
+               "path-is-absolute": {
+                       "version": "1.0.1",
+                       "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+                       "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+               },
+               "path-to-regexp": {
+                       "version": "0.1.7",
+                       "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+                       "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+               },
+               "performance-now": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+                       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+               },
+               "process-nextick-args": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+                       "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+               },
+               "proxy-addr": {
+                       "version": "2.0.4",
+                       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
+                       "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
+                       "requires": {
+                               "forwarded": "~0.1.2",
+                               "ipaddr.js": "1.8.0"
+                       }
+               },
+               "psl": {
+                       "version": "1.1.31",
+                       "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+                       "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw=="
+               },
+               "punycode": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+                       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+               },
+               "pupa": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/pupa/-/pupa-1.0.0.tgz",
+                       "integrity": "sha1-mpVopa9+ZXuEYqbp1TKHQ1YM7/Y="
+               },
+               "q": {
+                       "version": "1.5.1",
+                       "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+                       "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+               },
+               "qs": {
+                       "version": "6.5.2",
+                       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+                       "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+               },
+               "queue": {
+                       "version": "5.0.0",
+                       "resolved": "https://registry.npmjs.org/queue/-/queue-5.0.0.tgz",
+                       "integrity": "sha512-2K9XzFpaho+lzRzyrFZVfzNSMq34/c0mRurL2Ciqy/+wShotbPDnl2COQjOpaJsKbNZQ28YMzQH96MTFdQD9AA==",
+                       "requires": {
+                               "inherits": "~2.0.3"
+                       }
+               },
+               "range-parser": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+                       "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+               },
+               "raw-body": {
+                       "version": "2.3.3",
+                       "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+                       "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
+                       "requires": {
+                               "bytes": "3.0.0",
+                               "http-errors": "1.6.3",
+                               "iconv-lite": "0.4.23",
+                               "unpipe": "1.0.0"
+                       }
+               },
+               "readable-stream": {
+                       "version": "2.3.6",
+                       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+                       "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+                       "requires": {
+                               "core-util-is": "~1.0.0",
+                               "inherits": "~2.0.3",
+                               "isarray": "~1.0.0",
+                               "process-nextick-args": "~2.0.0",
+                               "safe-buffer": "~5.1.1",
+                               "string_decoder": "~1.1.1",
+                               "util-deprecate": "~1.0.1"
+                       },
+                       "dependencies": {
+                               "isarray": {
+                                       "version": "1.0.0",
+                                       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+                                       "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+                               }
+                       }
+               },
+               "request": {
+                       "version": "2.88.0",
+                       "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+                       "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+                       "requires": {
+                               "aws-sign2": "~0.7.0",
+                               "aws4": "^1.8.0",
+                               "caseless": "~0.12.0",
+                               "combined-stream": "~1.0.6",
+                               "extend": "~3.0.2",
+                               "forever-agent": "~0.6.1",
+                               "form-data": "~2.3.2",
+                               "har-validator": "~5.1.0",
+                               "http-signature": "~1.2.0",
+                               "is-typedarray": "~1.0.0",
+                               "isstream": "~0.1.2",
+                               "json-stringify-safe": "~5.0.1",
+                               "mime-types": "~2.1.19",
+                               "oauth-sign": "~0.9.0",
+                               "performance-now": "^2.1.0",
+                               "qs": "~6.5.2",
+                               "safe-buffer": "^5.1.2",
+                               "tough-cookie": "~2.4.3",
+                               "tunnel-agent": "^0.6.0",
+                               "uuid": "^3.3.2"
+                       }
+               },
+               "request-promise": {
+                       "version": "4.2.2",
+                       "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz",
+                       "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=",
+                       "requires": {
+                               "bluebird": "^3.5.0",
+                               "request-promise-core": "1.1.1",
+                               "stealthy-require": "^1.1.0",
+                               "tough-cookie": ">=2.3.3"
+                       }
+               },
+               "request-promise-core": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
+                       "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
+                       "requires": {
+                               "lodash": "^4.13.1"
+                       }
+               },
+               "rimraf": {
+                       "version": "2.6.2",
+                       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+                       "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+                       "requires": {
+                               "glob": "^7.0.5"
+                       }
+               },
+               "safe-buffer": {
+                       "version": "5.1.2",
+                       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+                       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+               },
+               "safer-buffer": {
+                       "version": "2.1.2",
+                       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+                       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+               },
+               "send": {
+                       "version": "0.16.2",
+                       "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+                       "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+                       "requires": {
+                               "debug": "2.6.9",
+                               "depd": "~1.1.2",
+                               "destroy": "~1.0.4",
+                               "encodeurl": "~1.0.2",
+                               "escape-html": "~1.0.3",
+                               "etag": "~1.8.1",
+                               "fresh": "0.5.2",
+                               "http-errors": "~1.6.2",
+                               "mime": "1.4.1",
+                               "ms": "2.0.0",
+                               "on-finished": "~2.3.0",
+                               "range-parser": "~1.2.0",
+                               "statuses": "~1.4.0"
+                       }
+               },
+               "sequential-task-queue": {
+                       "version": "1.2.1",
+                       "resolved": "https://registry.npmjs.org/sequential-task-queue/-/sequential-task-queue-1.2.1.tgz",
+                       "integrity": "sha512-w2g0QgV37MSsI/qnvn8Z3NUGNilQA6p+NfujkSWI99rvBu/eTx3E0Z1rTIzaRxQj+gT9+Mta2azxyefnw0C25Q=="
+               },
+               "serve-static": {
+                       "version": "1.13.2",
+                       "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+                       "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+                       "requires": {
+                               "encodeurl": "~1.0.2",
+                               "escape-html": "~1.0.3",
+                               "parseurl": "~1.3.2",
+                               "send": "0.16.2"
+                       }
+               },
+               "setprototypeof": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+                       "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+               },
+               "socket.io": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
+                       "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
+                       "requires": {
+                               "debug": "~3.1.0",
+                               "engine.io": "~3.2.0",
+                               "has-binary2": "~1.0.2",
+                               "socket.io-adapter": "~1.1.0",
+                               "socket.io-client": "2.1.1",
+                               "socket.io-parser": "~3.2.0"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "3.1.0",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+                                       "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+                                       "requires": {
+                                               "ms": "2.0.0"
+                                       }
+                               }
+                       }
+               },
+               "socket.io-adapter": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+                       "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs="
+               },
+               "socket.io-client": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
+                       "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
+                       "requires": {
+                               "backo2": "1.0.2",
+                               "base64-arraybuffer": "0.1.5",
+                               "component-bind": "1.0.0",
+                               "component-emitter": "1.2.1",
+                               "debug": "~3.1.0",
+                               "engine.io-client": "~3.2.0",
+                               "has-binary2": "~1.0.2",
+                               "has-cors": "1.1.0",
+                               "indexof": "0.0.1",
+                               "object-component": "0.0.3",
+                               "parseqs": "0.0.5",
+                               "parseuri": "0.0.5",
+                               "socket.io-parser": "~3.2.0",
+                               "to-array": "0.1.4"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "3.1.0",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+                                       "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+                                       "requires": {
+                                               "ms": "2.0.0"
+                                       }
+                               }
+                       }
+               },
+               "socket.io-parser": {
+                       "version": "3.2.0",
+                       "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
+                       "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
+                       "requires": {
+                               "component-emitter": "1.2.1",
+                               "debug": "~3.1.0",
+                               "isarray": "2.0.1"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "3.1.0",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+                                       "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+                                       "requires": {
+                                               "ms": "2.0.0"
+                                       }
+                               }
+                       }
+               },
+               "sort-keys": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+                       "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+                       "requires": {
+                               "is-plain-obj": "^1.0.0"
+                       }
+               },
+               "sort-keys-length": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
+                       "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
+                       "requires": {
+                               "sort-keys": "^1.0.0"
+                       }
+               },
+               "spotify-web-api-node": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/spotify-web-api-node/-/spotify-web-api-node-4.0.0.tgz",
+                       "integrity": "sha512-FQAX4qiP9xfjmJpkSfF5PEVr7RVorUZiLvcdVTlhVFLYAmQ8VSsZlyb0yTK0GExKhAcgJy9GfWxqjSB2r9SrjA==",
+                       "requires": {
+                               "superagent": "^3.7.0"
+                       }
+               },
+               "sshpk": {
+                       "version": "1.16.0",
+                       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz",
+                       "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==",
+                       "requires": {
+                               "asn1": "~0.2.3",
+                               "assert-plus": "^1.0.0",
+                               "bcrypt-pbkdf": "^1.0.0",
+                               "dashdash": "^1.12.0",
+                               "ecc-jsbn": "~0.1.1",
+                               "getpass": "^0.1.1",
+                               "jsbn": "~0.1.0",
+                               "safer-buffer": "^2.0.2",
+                               "tweetnacl": "~0.14.0"
+                       }
+               },
+               "statuses": {
+                       "version": "1.4.0",
+                       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+                       "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+               },
+               "stealthy-require": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+                       "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
+               },
+               "string_decoder": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+                       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+                       "requires": {
+                               "safe-buffer": "~5.1.0"
+                       }
+               },
+               "superagent": {
+                       "version": "3.8.3",
+                       "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
+                       "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
+                       "requires": {
+                               "component-emitter": "^1.2.0",
+                               "cookiejar": "^2.1.0",
+                               "debug": "^3.1.0",
+                               "extend": "^3.0.0",
+                               "form-data": "^2.3.1",
+                               "formidable": "^1.2.0",
+                               "methods": "^1.1.1",
+                               "mime": "^1.4.1",
+                               "qs": "^6.5.1",
+                               "readable-stream": "^2.3.5"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "3.2.6",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+                                       "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+                                       "requires": {
+                                               "ms": "^2.1.1"
+                                       }
+                               },
+                               "ms": {
+                                       "version": "2.1.1",
+                                       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+                                       "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+                               }
+                       }
+               },
+               "to-array": {
+                       "version": "0.1.4",
+                       "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+                       "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
+               },
+               "tough-cookie": {
+                       "version": "2.4.3",
+                       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+                       "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+                       "requires": {
+                               "psl": "^1.1.24",
+                               "punycode": "^1.4.1"
+                       },
+                       "dependencies": {
+                               "punycode": {
+                                       "version": "1.4.1",
+                                       "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+                                       "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+                               }
+                       }
+               },
+               "tunnel-agent": {
+                       "version": "0.6.0",
+                       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+                       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+                       "requires": {
+                               "safe-buffer": "^5.0.1"
+                       }
+               },
+               "tweetnacl": {
+                       "version": "0.14.5",
+                       "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+                       "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+               },
+               "type-is": {
+                       "version": "1.6.16",
+                       "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+                       "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+                       "requires": {
+                               "media-typer": "0.3.0",
+                               "mime-types": "~2.1.18"
+                       }
+               },
+               "ultron": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+                       "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
+               },
+               "universalify": {
+                       "version": "0.1.2",
+                       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+                       "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+               },
+               "unpipe": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+                       "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+               },
+               "unused-filename": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/unused-filename/-/unused-filename-1.0.0.tgz",
+                       "integrity": "sha1-00CID3GuIRXrqhMlvvBcxmhEacY=",
+                       "requires": {
+                               "modify-filename": "^1.1.0",
+                               "path-exists": "^3.0.0"
+                       }
+               },
+               "uri-js": {
+                       "version": "4.2.2",
+                       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+                       "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+                       "requires": {
+                               "punycode": "^2.1.0"
+                       }
+               },
+               "util-deprecate": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+                       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+               },
+               "utils-merge": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+                       "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+               },
+               "uuid": {
+                       "version": "3.3.2",
+                       "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+                       "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+               },
+               "vary": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+                       "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+               },
+               "verror": {
+                       "version": "1.10.0",
+                       "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+                       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+                       "requires": {
+                               "assert-plus": "^1.0.0",
+                               "core-util-is": "1.0.2",
+                               "extsprintf": "^1.2.0"
+                       }
+               },
+               "wrappy": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+                       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+               },
+               "ws": {
+                       "version": "3.3.3",
+                       "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+                       "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+                       "requires": {
+                               "async-limiter": "~1.0.0",
+                               "safe-buffer": "~5.1.0",
+                               "ultron": "~1.1.0"
+                       }
+               },
+               "xmlhttprequest-ssl": {
+                       "version": "1.5.5",
+                       "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+                       "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
+               },
+               "yeast": {
+                       "version": "0.1.2",
+                       "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+                       "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
+               }
+       }
+}
index 486b0eef9e1b8c4f7f728bd02a3ebe016de53909..4bdcd48e8c94e1da31c89b78dba229a583fd97f4 100644 (file)
@@ -18,6 +18,7 @@
                "queue": "^5.0.0",
                "request": "^2.87.0",
                "request-promise": "^4.2.2",
+               "sequential-task-queue": "^1.2.1",
                "socket.io": "latest",
                "spotify-web-api-node": "latest"
        }
index 1fd22f56bb4d3fa6d6cd3db01e246d4b81c61a06..fc9efcddb9b3eee3ad37e375b7b84e8444d2d628 100644 (file)
@@ -945,11 +945,8 @@ socket.on('addToQueue', function (data) {
        var btn_remove = $('<a href="#" class="btn-flat waves-effect"><i class="material-icons">remove</i></a>')
 
        $(btn_remove).click(function (ev) {
-
                ev.preventDefault()
-
                socket.emit("cancelDownload", {queueId: data.queueId})
-
        })
 
        btn_remove.appendTo(tableBody.children('tr:last')).wrap('<td class="eventBtn center">')
diff --git a/package-lock.json b/package-lock.json
new file mode 100644 (file)
index 0000000..9df16bd
--- /dev/null
@@ -0,0 +1,2740 @@
+{
+       "requires": true,
+       "lockfileVersion": 1,
+       "dependencies": {
+               "7zip-bin": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.1.0.tgz",
+                       "integrity": "sha512-AsnBZN3a8/JcNt+KPkGGODaA4c7l3W5+WpeKgGSbstSLxqWtTXqd1ieJGBQ8IFCtRg8DmmKUcSkIkUc0A4p3YA==",
+                       "dev": true
+               },
+               "@types/node": {
+                       "version": "8.10.39",
+                       "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.39.tgz",
+                       "integrity": "sha512-rE7fktr02J8ybFf6eysife+WF+L4sAHWzw09DgdCebEu+qDwMvv4zl6Bc+825ttGZP73kCKxa3dhJOoGJ8+5mA==",
+                       "dev": true
+               },
+               "ajv": {
+                       "version": "6.7.0",
+                       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
+                       "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
+                       "dev": true,
+                       "requires": {
+                               "fast-deep-equal": "^2.0.1",
+                               "fast-json-stable-stringify": "^2.0.0",
+                               "json-schema-traverse": "^0.4.1",
+                               "uri-js": "^4.2.2"
+                       }
+               },
+               "ajv-keywords": {
+                       "version": "3.2.0",
+                       "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+                       "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
+                       "dev": true
+               },
+               "ansi-align": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+                       "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+                       "dev": true,
+                       "requires": {
+                               "string-width": "^2.0.0"
+                       },
+                       "dependencies": {
+                               "ansi-regex": {
+                                       "version": "3.0.0",
+                                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+                                       "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+                                       "dev": true
+                               },
+                               "is-fullwidth-code-point": {
+                                       "version": "2.0.0",
+                                       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+                                       "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+                                       "dev": true
+                               },
+                               "string-width": {
+                                       "version": "2.1.1",
+                                       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+                                       "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "is-fullwidth-code-point": "^2.0.0",
+                                               "strip-ansi": "^4.0.0"
+                                       }
+                               },
+                               "strip-ansi": {
+                                       "version": "4.0.0",
+                                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+                                       "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+                                       "dev": true,
+                                       "requires": {
+                                               "ansi-regex": "^3.0.0"
+                                       }
+                               }
+                       }
+               },
+               "ansi-regex": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+                       "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+                       "dev": true
+               },
+               "ansi-styles": {
+                       "version": "3.2.1",
+                       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+                       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+                       "dev": true,
+                       "requires": {
+                               "color-convert": "^1.9.0"
+                       }
+               },
+               "app-builder-bin": {
+                       "version": "2.6.3",
+                       "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.3.tgz",
+                       "integrity": "sha512-JL8C41e6yGIchFsHP/q15aGNedAaUakLhkV6ER0Yxafx08sRnlDnlkAkEIKjX7edg/4i7swpGa6CBv1zX9GgCA==",
+                       "dev": true
+               },
+               "app-builder-lib": {
+                       "version": "20.38.5",
+                       "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.38.5.tgz",
+                       "integrity": "sha512-vVgM9d9twwlhr+8vNAJOAD9dyVBRk7reuVa1BE1OmvaHb1M+fS8KpvcDKVdBqX9KDHy7zSc57mnIcHgax4/XMA==",
+                       "dev": true,
+                       "requires": {
+                               "7zip-bin": "~4.1.0",
+                               "app-builder-bin": "2.6.3",
+                               "async-exit-hook": "^2.0.1",
+                               "bluebird-lst": "^1.0.6",
+                               "builder-util": "9.6.2",
+                               "builder-util-runtime": "8.1.1",
+                               "chromium-pickle-js": "^0.2.0",
+                               "debug": "^4.1.1",
+                               "ejs": "^2.6.1",
+                               "electron-osx-sign": "0.4.11",
+                               "electron-publish": "20.38.5",
+                               "fs-extra-p": "^7.0.0",
+                               "hosted-git-info": "^2.7.1",
+                               "is-ci": "^2.0.0",
+                               "isbinaryfile": "^4.0.0",
+                               "js-yaml": "^3.12.1",
+                               "lazy-val": "^1.0.3",
+                               "minimatch": "^3.0.4",
+                               "normalize-package-data": "^2.4.0",
+                               "plist": "^3.0.1",
+                               "read-config-file": "3.2.1",
+                               "sanitize-filename": "^1.6.1",
+                               "semver": "^5.6.0",
+                               "temp-file": "^3.3.2"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "4.1.1",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+                                       "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ms": "^2.1.1"
+                                       }
+                               }
+                       }
+               },
+               "argparse": {
+                       "version": "1.0.10",
+                       "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+                       "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+                       "dev": true,
+                       "requires": {
+                               "sprintf-js": "~1.0.2"
+                       }
+               },
+               "array-find-index": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+                       "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+                       "dev": true
+               },
+               "asn1": {
+                       "version": "0.2.4",
+                       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+                       "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+                       "dev": true,
+                       "requires": {
+                               "safer-buffer": "~2.1.0"
+                       }
+               },
+               "assert-plus": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+                       "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+                       "dev": true
+               },
+               "async-exit-hook": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz",
+                       "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==",
+                       "dev": true
+               },
+               "asynckit": {
+                       "version": "0.4.0",
+                       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+                       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+                       "dev": true
+               },
+               "aws-sign2": {
+                       "version": "0.7.0",
+                       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+                       "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+                       "dev": true
+               },
+               "aws4": {
+                       "version": "1.8.0",
+                       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+                       "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+                       "dev": true
+               },
+               "balanced-match": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+                       "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+                       "dev": true
+               },
+               "base64-js": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+                       "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+                       "dev": true
+               },
+               "bcrypt-pbkdf": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+                       "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+                       "dev": true,
+                       "requires": {
+                               "tweetnacl": "^0.14.3"
+                       }
+               },
+               "bluebird": {
+                       "version": "3.5.3",
+                       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+                       "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
+                       "dev": true
+               },
+               "bluebird-lst": {
+                       "version": "1.0.6",
+                       "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.6.tgz",
+                       "integrity": "sha512-CBWFoPuUPpcvMUxfyr8DKdI5d4kjxFl1h39+VbKxP3KJWJHEsLtuT4pPLkjpxCGU6Ask21tvbnftWXdqIxYldQ==",
+                       "dev": true,
+                       "requires": {
+                               "bluebird": "^3.5.2"
+                       }
+               },
+               "boxen": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+                       "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+                       "dev": true,
+                       "requires": {
+                               "ansi-align": "^2.0.0",
+                               "camelcase": "^4.0.0",
+                               "chalk": "^2.0.1",
+                               "cli-boxes": "^1.0.0",
+                               "string-width": "^2.0.0",
+                               "term-size": "^1.2.0",
+                               "widest-line": "^2.0.0"
+                       },
+                       "dependencies": {
+                               "ansi-regex": {
+                                       "version": "3.0.0",
+                                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+                                       "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+                                       "dev": true
+                               },
+                               "camelcase": {
+                                       "version": "4.1.0",
+                                       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+                                       "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+                                       "dev": true
+                               },
+                               "is-fullwidth-code-point": {
+                                       "version": "2.0.0",
+                                       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+                                       "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+                                       "dev": true
+                               },
+                               "string-width": {
+                                       "version": "2.1.1",
+                                       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+                                       "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "is-fullwidth-code-point": "^2.0.0",
+                                               "strip-ansi": "^4.0.0"
+                                       }
+                               },
+                               "strip-ansi": {
+                                       "version": "4.0.0",
+                                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+                                       "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+                                       "dev": true,
+                                       "requires": {
+                                               "ansi-regex": "^3.0.0"
+                                       }
+                               }
+                       }
+               },
+               "brace-expansion": {
+                       "version": "1.1.11",
+                       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+                       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+                       "dev": true,
+                       "requires": {
+                               "balanced-match": "^1.0.0",
+                               "concat-map": "0.0.1"
+                       }
+               },
+               "buffer-alloc": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+                       "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+                       "dev": true,
+                       "requires": {
+                               "buffer-alloc-unsafe": "^1.1.0",
+                               "buffer-fill": "^1.0.0"
+                       }
+               },
+               "buffer-alloc-unsafe": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+                       "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+                       "dev": true
+               },
+               "buffer-fill": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+                       "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+                       "dev": true
+               },
+               "buffer-from": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+                       "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+                       "dev": true
+               },
+               "builder-util": {
+                       "version": "9.6.2",
+                       "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-9.6.2.tgz",
+                       "integrity": "sha512-cWl/0/Q851lesMmXp1IjreeAX1QAWA9e+iU2IT61oh+CvMYJnDwao2m9ZCHammdw2zllrwWu4fOC3gvsb/yOCw==",
+                       "dev": true,
+                       "requires": {
+                               "7zip-bin": "~4.1.0",
+                               "app-builder-bin": "2.6.3",
+                               "bluebird-lst": "^1.0.6",
+                               "builder-util-runtime": "^8.1.1",
+                               "chalk": "^2.4.2",
+                               "debug": "^4.1.1",
+                               "fs-extra-p": "^7.0.0",
+                               "is-ci": "^2.0.0",
+                               "js-yaml": "^3.12.1",
+                               "source-map-support": "^0.5.10",
+                               "stat-mode": "^0.2.2",
+                               "temp-file": "^3.3.2"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "4.1.1",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+                                       "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ms": "^2.1.1"
+                                       }
+                               }
+                       }
+               },
+               "builder-util-runtime": {
+                       "version": "8.1.1",
+                       "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.1.1.tgz",
+                       "integrity": "sha512-+ieS4PMB33vVE2S3ZNWBEQJ1zKmAs/agrBdh7XadE1lKLjrH4aXYuOh9OOGdxqIRldhlhNBaF+yKMMEFOdNVig==",
+                       "dev": true,
+                       "requires": {
+                               "bluebird-lst": "^1.0.6",
+                               "debug": "^4.1.1",
+                               "fs-extra-p": "^7.0.0",
+                               "sax": "^1.2.4"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "4.1.1",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+                                       "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ms": "^2.1.1"
+                                       }
+                               }
+                       }
+               },
+               "builtin-modules": {
+                       "version": "1.1.1",
+                       "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+                       "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+                       "dev": true
+               },
+               "camelcase": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+                       "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+                       "dev": true
+               },
+               "camelcase-keys": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+                       "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+                       "dev": true,
+                       "requires": {
+                               "camelcase": "^2.0.0",
+                               "map-obj": "^1.0.0"
+                       }
+               },
+               "capture-stack-trace": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
+                       "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
+                       "dev": true
+               },
+               "caseless": {
+                       "version": "0.12.0",
+                       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+                       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+                       "dev": true
+               },
+               "chalk": {
+                       "version": "2.4.2",
+                       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+                       "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+                       "dev": true,
+                       "requires": {
+                               "ansi-styles": "^3.2.1",
+                               "escape-string-regexp": "^1.0.5",
+                               "supports-color": "^5.3.0"
+                       }
+               },
+               "chromium-pickle-js": {
+                       "version": "0.2.0",
+                       "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
+                       "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
+                       "dev": true
+               },
+               "ci-info": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+                       "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+                       "dev": true
+               },
+               "cli-boxes": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+                       "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+                       "dev": true
+               },
+               "cliui": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+                       "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+                       "dev": true,
+                       "requires": {
+                               "string-width": "^2.1.1",
+                               "strip-ansi": "^4.0.0",
+                               "wrap-ansi": "^2.0.0"
+                       },
+                       "dependencies": {
+                               "ansi-regex": {
+                                       "version": "3.0.0",
+                                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+                                       "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+                                       "dev": true
+                               },
+                               "is-fullwidth-code-point": {
+                                       "version": "2.0.0",
+                                       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+                                       "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+                                       "dev": true
+                               },
+                               "string-width": {
+                                       "version": "2.1.1",
+                                       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+                                       "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "is-fullwidth-code-point": "^2.0.0",
+                                               "strip-ansi": "^4.0.0"
+                                       }
+                               },
+                               "strip-ansi": {
+                                       "version": "4.0.0",
+                                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+                                       "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+                                       "dev": true,
+                                       "requires": {
+                                               "ansi-regex": "^3.0.0"
+                                       }
+                               }
+                       }
+               },
+               "code-point-at": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+                       "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+                       "dev": true
+               },
+               "color-convert": {
+                       "version": "1.9.3",
+                       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+                       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+                       "dev": true,
+                       "requires": {
+                               "color-name": "1.1.3"
+                       }
+               },
+               "color-name": {
+                       "version": "1.1.3",
+                       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+                       "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+                       "dev": true
+               },
+               "combined-stream": {
+                       "version": "1.0.7",
+                       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+                       "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+                       "dev": true,
+                       "requires": {
+                               "delayed-stream": "~1.0.0"
+                       }
+               },
+               "compare-version": {
+                       "version": "0.1.2",
+                       "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
+                       "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
+                       "dev": true
+               },
+               "concat-map": {
+                       "version": "0.0.1",
+                       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+                       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+                       "dev": true
+               },
+               "concat-stream": {
+                       "version": "1.6.2",
+                       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+                       "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+                       "dev": true,
+                       "requires": {
+                               "buffer-from": "^1.0.0",
+                               "inherits": "^2.0.3",
+                               "readable-stream": "^2.2.2",
+                               "typedarray": "^0.0.6"
+                       },
+                       "dependencies": {
+                               "isarray": {
+                                       "version": "1.0.0",
+                                       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+                                       "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+                                       "dev": true
+                               },
+                               "readable-stream": {
+                                       "version": "2.3.6",
+                                       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+                                       "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "core-util-is": "~1.0.0",
+                                               "inherits": "~2.0.3",
+                                               "isarray": "~1.0.0",
+                                               "process-nextick-args": "~2.0.0",
+                                               "safe-buffer": "~5.1.1",
+                                               "string_decoder": "~1.1.1",
+                                               "util-deprecate": "~1.0.1"
+                                       }
+                               },
+                               "string_decoder": {
+                                       "version": "1.1.1",
+                                       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+                                       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+                                       "dev": true,
+                                       "requires": {
+                                               "safe-buffer": "~5.1.0"
+                                       }
+                               }
+                       }
+               },
+               "configstore": {
+                       "version": "3.1.2",
+                       "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
+                       "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
+                       "dev": true,
+                       "requires": {
+                               "dot-prop": "^4.1.0",
+                               "graceful-fs": "^4.1.2",
+                               "make-dir": "^1.0.0",
+                               "unique-string": "^1.0.0",
+                               "write-file-atomic": "^2.0.0",
+                               "xdg-basedir": "^3.0.0"
+                       }
+               },
+               "core-util-is": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+                       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+                       "dev": true
+               },
+               "create-error-class": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+                       "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+                       "dev": true,
+                       "requires": {
+                               "capture-stack-trace": "^1.0.0"
+                       }
+               },
+               "cross-env": {
+                       "version": "5.2.0",
+                       "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz",
+                       "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==",
+                       "dev": true,
+                       "requires": {
+                               "cross-spawn": "^6.0.5",
+                               "is-windows": "^1.0.0"
+                       }
+               },
+               "cross-spawn": {
+                       "version": "6.0.5",
+                       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+                       "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+                       "dev": true,
+                       "requires": {
+                               "nice-try": "^1.0.4",
+                               "path-key": "^2.0.1",
+                               "semver": "^5.5.0",
+                               "shebang-command": "^1.2.0",
+                               "which": "^1.2.9"
+                       }
+               },
+               "crypto-random-string": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+                       "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+                       "dev": true
+               },
+               "currently-unhandled": {
+                       "version": "0.4.1",
+                       "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+                       "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+                       "dev": true,
+                       "requires": {
+                               "array-find-index": "^1.0.1"
+                       }
+               },
+               "dashdash": {
+                       "version": "1.14.1",
+                       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+                       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+                       "dev": true,
+                       "requires": {
+                               "assert-plus": "^1.0.0"
+                       }
+               },
+               "debug": {
+                       "version": "3.2.6",
+                       "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+                       "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+                       "dev": true,
+                       "requires": {
+                               "ms": "^2.1.1"
+                       }
+               },
+               "decamelize": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+                       "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+                       "dev": true
+               },
+               "deep-extend": {
+                       "version": "0.6.0",
+                       "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+                       "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+                       "dev": true
+               },
+               "delayed-stream": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+                       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+                       "dev": true
+               },
+               "dmg-builder": {
+                       "version": "6.5.4",
+                       "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.5.4.tgz",
+                       "integrity": "sha512-EaEkF8weXez3iAwgYffjcYfumauUh5x+BggMgn/IuihNIA5/WfzRAUR4wMq9aII2zwArlw+rIrX6ZHKbmtkQmA==",
+                       "dev": true,
+                       "requires": {
+                               "app-builder-lib": "~20.38.5",
+                               "bluebird-lst": "^1.0.6",
+                               "builder-util": "~9.6.2",
+                               "fs-extra-p": "^7.0.0",
+                               "iconv-lite": "^0.4.24",
+                               "js-yaml": "^3.12.1",
+                               "parse-color": "^1.0.0",
+                               "sanitize-filename": "^1.6.1"
+                       }
+               },
+               "dot-prop": {
+                       "version": "4.2.0",
+                       "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+                       "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+                       "dev": true,
+                       "requires": {
+                               "is-obj": "^1.0.0"
+                       }
+               },
+               "dotenv": {
+                       "version": "6.2.0",
+                       "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
+                       "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==",
+                       "dev": true
+               },
+               "dotenv-expand": {
+                       "version": "4.2.0",
+                       "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
+                       "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=",
+                       "dev": true
+               },
+               "duplexer3": {
+                       "version": "0.1.4",
+                       "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+                       "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+                       "dev": true
+               },
+               "ecc-jsbn": {
+                       "version": "0.1.2",
+                       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+                       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+                       "dev": true,
+                       "requires": {
+                               "jsbn": "~0.1.0",
+                               "safer-buffer": "^2.1.0"
+                       }
+               },
+               "ejs": {
+                       "version": "2.6.1",
+                       "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
+                       "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==",
+                       "dev": true
+               },
+               "electron": {
+                       "version": "3.0.10",
+                       "resolved": "https://registry.npmjs.org/electron/-/electron-3.0.10.tgz",
+                       "integrity": "sha512-I39IeQP3NOlbjKzTDK8uK2JdiHDfhV5SruCS2Gttkn2MaKCY+yIzQ6Wr4DyBXLeTEkL1sbZxbqQVhCavAliv5w==",
+                       "dev": true,
+                       "requires": {
+                               "@types/node": "^8.0.24",
+                               "electron-download": "^4.1.0",
+                               "extract-zip": "^1.0.3"
+                       }
+               },
+               "electron-builder": {
+                       "version": "20.38.5",
+                       "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.38.5.tgz",
+                       "integrity": "sha512-p88IDHhH2J4hA6KwRBJY+OfVZuFtFIShY3Uh/TwYAfbX0v1RhKZytuGdO8sty2zcWxDYX74xDBv+X9oN6qEIRQ==",
+                       "dev": true,
+                       "requires": {
+                               "app-builder-lib": "20.38.5",
+                               "bluebird-lst": "^1.0.6",
+                               "builder-util": "9.6.2",
+                               "builder-util-runtime": "8.1.1",
+                               "chalk": "^2.4.2",
+                               "dmg-builder": "6.5.4",
+                               "fs-extra-p": "^7.0.0",
+                               "is-ci": "^2.0.0",
+                               "lazy-val": "^1.0.3",
+                               "read-config-file": "3.2.1",
+                               "sanitize-filename": "^1.6.1",
+                               "update-notifier": "^2.5.0",
+                               "yargs": "^12.0.5"
+                       }
+               },
+               "electron-download": {
+                       "version": "4.1.1",
+                       "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz",
+                       "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==",
+                       "dev": true,
+                       "requires": {
+                               "debug": "^3.0.0",
+                               "env-paths": "^1.0.0",
+                               "fs-extra": "^4.0.1",
+                               "minimist": "^1.2.0",
+                               "nugget": "^2.0.1",
+                               "path-exists": "^3.0.0",
+                               "rc": "^1.2.1",
+                               "semver": "^5.4.1",
+                               "sumchecker": "^2.0.2"
+                       }
+               },
+               "electron-osx-sign": {
+                       "version": "0.4.11",
+                       "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz",
+                       "integrity": "sha512-VVd40nrnVqymvFrY9ZkOYgHJOvexHHYTR3di/SN+mjJ0OWhR1I8BRVj3U+Yamw6hnkZZNKZp52rqL5EFAAPFkQ==",
+                       "dev": true,
+                       "requires": {
+                               "bluebird": "^3.5.0",
+                               "compare-version": "^0.1.2",
+                               "debug": "^2.6.8",
+                               "isbinaryfile": "^3.0.2",
+                               "minimist": "^1.2.0",
+                               "plist": "^3.0.1"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "2.6.9",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+                                       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ms": "2.0.0"
+                                       }
+                               },
+                               "isbinaryfile": {
+                                       "version": "3.0.3",
+                                       "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
+                                       "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "buffer-alloc": "^1.2.0"
+                                       }
+                               },
+                               "ms": {
+                                       "version": "2.0.0",
+                                       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+                                       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+                                       "dev": true
+                               }
+                       }
+               },
+               "electron-publish": {
+                       "version": "20.38.5",
+                       "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.38.5.tgz",
+                       "integrity": "sha512-EhdPm6t0nKDfa0r3KjV1kSFcz03VrzgJRv7v5nHkkpQZB6OSmDNlHq7k66NBwQhPK3i4CK+uvehljZAP28vbCA==",
+                       "dev": true,
+                       "requires": {
+                               "bluebird-lst": "^1.0.6",
+                               "builder-util": "~9.6.2",
+                               "builder-util-runtime": "^8.1.1",
+                               "chalk": "^2.4.2",
+                               "fs-extra-p": "^7.0.0",
+                               "lazy-val": "^1.0.3",
+                               "mime": "^2.4.0"
+                       }
+               },
+               "end-of-stream": {
+                       "version": "1.4.1",
+                       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+                       "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+                       "dev": true,
+                       "requires": {
+                               "once": "^1.4.0"
+                       }
+               },
+               "env-paths": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz",
+                       "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=",
+                       "dev": true
+               },
+               "error-ex": {
+                       "version": "1.3.2",
+                       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+                       "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+                       "dev": true,
+                       "requires": {
+                               "is-arrayish": "^0.2.1"
+                       }
+               },
+               "escape-string-regexp": {
+                       "version": "1.0.5",
+                       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+                       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+                       "dev": true
+               },
+               "esprima": {
+                       "version": "4.0.1",
+                       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+                       "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+                       "dev": true
+               },
+               "execa": {
+                       "version": "0.7.0",
+                       "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+                       "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+                       "dev": true,
+                       "requires": {
+                               "cross-spawn": "^5.0.1",
+                               "get-stream": "^3.0.0",
+                               "is-stream": "^1.1.0",
+                               "npm-run-path": "^2.0.0",
+                               "p-finally": "^1.0.0",
+                               "signal-exit": "^3.0.0",
+                               "strip-eof": "^1.0.0"
+                       },
+                       "dependencies": {
+                               "cross-spawn": {
+                                       "version": "5.1.0",
+                                       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+                                       "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+                                       "dev": true,
+                                       "requires": {
+                                               "lru-cache": "^4.0.1",
+                                               "shebang-command": "^1.2.0",
+                                               "which": "^1.2.9"
+                                       }
+                               }
+                       }
+               },
+               "extend": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+                       "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+                       "dev": true
+               },
+               "extract-zip": {
+                       "version": "1.6.7",
+                       "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
+                       "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
+                       "dev": true,
+                       "requires": {
+                               "concat-stream": "1.6.2",
+                               "debug": "2.6.9",
+                               "mkdirp": "0.5.1",
+                               "yauzl": "2.4.1"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "2.6.9",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+                                       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ms": "2.0.0"
+                                       }
+                               },
+                               "ms": {
+                                       "version": "2.0.0",
+                                       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+                                       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+                                       "dev": true
+                               }
+                       }
+               },
+               "extsprintf": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+                       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+                       "dev": true
+               },
+               "fast-deep-equal": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+                       "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+                       "dev": true
+               },
+               "fast-json-stable-stringify": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+                       "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+                       "dev": true
+               },
+               "fd-slicer": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+                       "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+                       "dev": true,
+                       "requires": {
+                               "pend": "~1.2.0"
+                       }
+               },
+               "find-up": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+                       "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+                       "dev": true,
+                       "requires": {
+                               "path-exists": "^2.0.0",
+                               "pinkie-promise": "^2.0.0"
+                       },
+                       "dependencies": {
+                               "path-exists": {
+                                       "version": "2.1.0",
+                                       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+                                       "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+                                       "dev": true,
+                                       "requires": {
+                                               "pinkie-promise": "^2.0.0"
+                                       }
+                               }
+                       }
+               },
+               "forever-agent": {
+                       "version": "0.6.1",
+                       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+                       "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+                       "dev": true
+               },
+               "form-data": {
+                       "version": "2.3.3",
+                       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+                       "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+                       "dev": true,
+                       "requires": {
+                               "asynckit": "^0.4.0",
+                               "combined-stream": "^1.0.6",
+                               "mime-types": "^2.1.12"
+                       }
+               },
+               "fs-extra": {
+                       "version": "4.0.3",
+                       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+                       "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+                       "dev": true,
+                       "requires": {
+                               "graceful-fs": "^4.1.2",
+                               "jsonfile": "^4.0.0",
+                               "universalify": "^0.1.0"
+                       }
+               },
+               "fs-extra-p": {
+                       "version": "7.0.0",
+                       "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-7.0.0.tgz",
+                       "integrity": "sha512-5tg5jBOd0xIXjwj4PDnafOXL5TyPVzjxLby4DPKev53wurEXp7IsojBaD4Lj5M5w7jxw0pbkEU0fFEPmcKoMnA==",
+                       "dev": true,
+                       "requires": {
+                               "bluebird-lst": "^1.0.6",
+                               "fs-extra": "^7.0.0"
+                       },
+                       "dependencies": {
+                               "fs-extra": {
+                                       "version": "7.0.1",
+                                       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+                                       "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "graceful-fs": "^4.1.2",
+                                               "jsonfile": "^4.0.0",
+                                               "universalify": "^0.1.0"
+                                       }
+                               }
+                       }
+               },
+               "get-caller-file": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+                       "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+                       "dev": true
+               },
+               "get-stdin": {
+                       "version": "4.0.1",
+                       "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+                       "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+                       "dev": true
+               },
+               "get-stream": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+                       "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+                       "dev": true
+               },
+               "getpass": {
+                       "version": "0.1.7",
+                       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+                       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+                       "dev": true,
+                       "requires": {
+                               "assert-plus": "^1.0.0"
+                       }
+               },
+               "global-dirs": {
+                       "version": "0.1.1",
+                       "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+                       "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+                       "dev": true,
+                       "requires": {
+                               "ini": "^1.3.4"
+                       }
+               },
+               "got": {
+                       "version": "6.7.1",
+                       "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+                       "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+                       "dev": true,
+                       "requires": {
+                               "create-error-class": "^3.0.0",
+                               "duplexer3": "^0.1.4",
+                               "get-stream": "^3.0.0",
+                               "is-redirect": "^1.0.0",
+                               "is-retry-allowed": "^1.0.0",
+                               "is-stream": "^1.0.0",
+                               "lowercase-keys": "^1.0.0",
+                               "safe-buffer": "^5.0.1",
+                               "timed-out": "^4.0.0",
+                               "unzip-response": "^2.0.1",
+                               "url-parse-lax": "^1.0.0"
+                       }
+               },
+               "graceful-fs": {
+                       "version": "4.1.15",
+                       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+                       "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+                       "dev": true
+               },
+               "har-schema": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+                       "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+                       "dev": true
+               },
+               "har-validator": {
+                       "version": "5.1.3",
+                       "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+                       "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+                       "dev": true,
+                       "requires": {
+                               "ajv": "^6.5.5",
+                               "har-schema": "^2.0.0"
+                       }
+               },
+               "has-flag": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+                       "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+                       "dev": true
+               },
+               "hosted-git-info": {
+                       "version": "2.7.1",
+                       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+                       "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+                       "dev": true
+               },
+               "http-signature": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+                       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+                       "dev": true,
+                       "requires": {
+                               "assert-plus": "^1.0.0",
+                               "jsprim": "^1.2.2",
+                               "sshpk": "^1.7.0"
+                       }
+               },
+               "iconv-lite": {
+                       "version": "0.4.24",
+                       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+                       "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+                       "dev": true,
+                       "requires": {
+                               "safer-buffer": ">= 2.1.2 < 3"
+                       }
+               },
+               "import-lazy": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+                       "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+                       "dev": true
+               },
+               "imurmurhash": {
+                       "version": "0.1.4",
+                       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+                       "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+                       "dev": true
+               },
+               "indent-string": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+                       "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+                       "dev": true,
+                       "requires": {
+                               "repeating": "^2.0.0"
+                       }
+               },
+               "inherits": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+                       "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+                       "dev": true
+               },
+               "ini": {
+                       "version": "1.3.5",
+                       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+                       "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+                       "dev": true
+               },
+               "invert-kv": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+                       "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+                       "dev": true
+               },
+               "is-arrayish": {
+                       "version": "0.2.1",
+                       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+                       "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+                       "dev": true
+               },
+               "is-builtin-module": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+                       "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+                       "dev": true,
+                       "requires": {
+                               "builtin-modules": "^1.0.0"
+                       }
+               },
+               "is-ci": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+                       "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+                       "dev": true,
+                       "requires": {
+                               "ci-info": "^2.0.0"
+                       }
+               },
+               "is-finite": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+                       "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+                       "dev": true,
+                       "requires": {
+                               "number-is-nan": "^1.0.0"
+                       }
+               },
+               "is-fullwidth-code-point": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+                       "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+                       "dev": true,
+                       "requires": {
+                               "number-is-nan": "^1.0.0"
+                       }
+               },
+               "is-installed-globally": {
+                       "version": "0.1.0",
+                       "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+                       "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+                       "dev": true,
+                       "requires": {
+                               "global-dirs": "^0.1.0",
+                               "is-path-inside": "^1.0.0"
+                       }
+               },
+               "is-npm": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+                       "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+                       "dev": true
+               },
+               "is-obj": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+                       "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+                       "dev": true
+               },
+               "is-path-inside": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+                       "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+                       "dev": true,
+                       "requires": {
+                               "path-is-inside": "^1.0.1"
+                       }
+               },
+               "is-redirect": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+                       "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+                       "dev": true
+               },
+               "is-retry-allowed": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+                       "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+                       "dev": true
+               },
+               "is-stream": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+                       "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+                       "dev": true
+               },
+               "is-typedarray": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+                       "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+                       "dev": true
+               },
+               "is-utf8": {
+                       "version": "0.2.1",
+                       "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+                       "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+                       "dev": true
+               },
+               "is-windows": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+                       "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+                       "dev": true
+               },
+               "isarray": {
+                       "version": "0.0.1",
+                       "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+                       "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+                       "dev": true
+               },
+               "isbinaryfile": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.0.tgz",
+                       "integrity": "sha512-RBtmso6l2mCaEsUvXngMTIjg3oheXo0MgYzzfT6sk44RYggPnm9fT+cQJAmzRnJIxPHXg9FZglqDJGW28dvcqA==",
+                       "dev": true
+               },
+               "isexe": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+                       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+                       "dev": true
+               },
+               "isstream": {
+                       "version": "0.1.2",
+                       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+                       "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+                       "dev": true
+               },
+               "js-yaml": {
+                       "version": "3.12.1",
+                       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
+                       "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
+                       "dev": true,
+                       "requires": {
+                               "argparse": "^1.0.7",
+                               "esprima": "^4.0.0"
+                       }
+               },
+               "jsbn": {
+                       "version": "0.1.1",
+                       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+                       "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+                       "dev": true
+               },
+               "json-schema": {
+                       "version": "0.2.3",
+                       "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+                       "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+                       "dev": true
+               },
+               "json-schema-traverse": {
+                       "version": "0.4.1",
+                       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+                       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+                       "dev": true
+               },
+               "json-stringify-safe": {
+                       "version": "5.0.1",
+                       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+                       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+                       "dev": true
+               },
+               "json5": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+                       "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+                       "dev": true,
+                       "requires": {
+                               "minimist": "^1.2.0"
+                       }
+               },
+               "jsonfile": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+                       "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+                       "dev": true,
+                       "requires": {
+                               "graceful-fs": "^4.1.6"
+                       }
+               },
+               "jsprim": {
+                       "version": "1.4.1",
+                       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+                       "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+                       "dev": true,
+                       "requires": {
+                               "assert-plus": "1.0.0",
+                               "extsprintf": "1.3.0",
+                               "json-schema": "0.2.3",
+                               "verror": "1.10.0"
+                       }
+               },
+               "latest-version": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+                       "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+                       "dev": true,
+                       "requires": {
+                               "package-json": "^4.0.0"
+                       }
+               },
+               "lazy-val": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.3.tgz",
+                       "integrity": "sha512-pjCf3BYk+uv3ZcPzEVM0BFvO9Uw58TmlrU0oG5tTrr9Kcid3+kdKxapH8CjdYmVa2nO5wOoZn2rdvZx2PKj/xg==",
+                       "dev": true
+               },
+               "lcid": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+                       "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+                       "dev": true,
+                       "requires": {
+                               "invert-kv": "^2.0.0"
+                       }
+               },
+               "load-json-file": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+                       "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+                       "dev": true,
+                       "requires": {
+                               "graceful-fs": "^4.1.2",
+                               "parse-json": "^2.2.0",
+                               "pify": "^2.0.0",
+                               "pinkie-promise": "^2.0.0",
+                               "strip-bom": "^2.0.0"
+                       }
+               },
+               "locate-path": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+                       "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+                       "dev": true,
+                       "requires": {
+                               "p-locate": "^3.0.0",
+                               "path-exists": "^3.0.0"
+                       }
+               },
+               "loud-rejection": {
+                       "version": "1.6.0",
+                       "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+                       "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+                       "dev": true,
+                       "requires": {
+                               "currently-unhandled": "^0.4.1",
+                               "signal-exit": "^3.0.0"
+                       }
+               },
+               "lowercase-keys": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+                       "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+                       "dev": true
+               },
+               "lru-cache": {
+                       "version": "4.1.5",
+                       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+                       "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+                       "dev": true,
+                       "requires": {
+                               "pseudomap": "^1.0.2",
+                               "yallist": "^2.1.2"
+                       }
+               },
+               "make-dir": {
+                       "version": "1.3.0",
+                       "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+                       "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+                       "dev": true,
+                       "requires": {
+                               "pify": "^3.0.0"
+                       },
+                       "dependencies": {
+                               "pify": {
+                                       "version": "3.0.0",
+                                       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+                                       "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+                                       "dev": true
+                               }
+                       }
+               },
+               "map-age-cleaner": {
+                       "version": "0.1.3",
+                       "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+                       "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+                       "dev": true,
+                       "requires": {
+                               "p-defer": "^1.0.0"
+                       }
+               },
+               "map-obj": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+                       "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+                       "dev": true
+               },
+               "mem": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
+                       "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
+                       "dev": true,
+                       "requires": {
+                               "map-age-cleaner": "^0.1.1",
+                               "mimic-fn": "^1.0.0",
+                               "p-is-promise": "^1.1.0"
+                       }
+               },
+               "meow": {
+                       "version": "3.7.0",
+                       "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+                       "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+                       "dev": true,
+                       "requires": {
+                               "camelcase-keys": "^2.0.0",
+                               "decamelize": "^1.1.2",
+                               "loud-rejection": "^1.0.0",
+                               "map-obj": "^1.0.1",
+                               "minimist": "^1.1.3",
+                               "normalize-package-data": "^2.3.4",
+                               "object-assign": "^4.0.1",
+                               "read-pkg-up": "^1.0.1",
+                               "redent": "^1.0.0",
+                               "trim-newlines": "^1.0.0"
+                       }
+               },
+               "mime": {
+                       "version": "2.4.0",
+                       "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz",
+                       "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==",
+                       "dev": true
+               },
+               "mime-db": {
+                       "version": "1.37.0",
+                       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+                       "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
+                       "dev": true
+               },
+               "mime-types": {
+                       "version": "2.1.21",
+                       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+                       "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+                       "dev": true,
+                       "requires": {
+                               "mime-db": "~1.37.0"
+                       }
+               },
+               "mimic-fn": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+                       "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+                       "dev": true
+               },
+               "minimatch": {
+                       "version": "3.0.4",
+                       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+                       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+                       "dev": true,
+                       "requires": {
+                               "brace-expansion": "^1.1.7"
+                       }
+               },
+               "minimist": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+                       "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+                       "dev": true
+               },
+               "mkdirp": {
+                       "version": "0.5.1",
+                       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+                       "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+                       "dev": true,
+                       "requires": {
+                               "minimist": "0.0.8"
+                       },
+                       "dependencies": {
+                               "minimist": {
+                                       "version": "0.0.8",
+                                       "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+                                       "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+                                       "dev": true
+                               }
+                       }
+               },
+               "ms": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+                       "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+                       "dev": true
+               },
+               "nice-try": {
+                       "version": "1.0.5",
+                       "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+                       "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+                       "dev": true
+               },
+               "normalize-package-data": {
+                       "version": "2.4.0",
+                       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+                       "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+                       "dev": true,
+                       "requires": {
+                               "hosted-git-info": "^2.1.4",
+                               "is-builtin-module": "^1.0.0",
+                               "semver": "2 || 3 || 4 || 5",
+                               "validate-npm-package-license": "^3.0.1"
+                       }
+               },
+               "npm-run-path": {
+                       "version": "2.0.2",
+                       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+                       "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+                       "dev": true,
+                       "requires": {
+                               "path-key": "^2.0.0"
+                       }
+               },
+               "nugget": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
+                       "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
+                       "dev": true,
+                       "requires": {
+                               "debug": "^2.1.3",
+                               "minimist": "^1.1.0",
+                               "pretty-bytes": "^1.0.2",
+                               "progress-stream": "^1.1.0",
+                               "request": "^2.45.0",
+                               "single-line-log": "^1.1.2",
+                               "throttleit": "0.0.2"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "2.6.9",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+                                       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ms": "2.0.0"
+                                       }
+                               },
+                               "ms": {
+                                       "version": "2.0.0",
+                                       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+                                       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+                                       "dev": true
+                               }
+                       }
+               },
+               "number-is-nan": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+                       "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+                       "dev": true
+               },
+               "oauth-sign": {
+                       "version": "0.9.0",
+                       "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+                       "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+                       "dev": true
+               },
+               "object-assign": {
+                       "version": "4.1.1",
+                       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+                       "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+                       "dev": true
+               },
+               "object-keys": {
+                       "version": "0.4.0",
+                       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+                       "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+                       "dev": true
+               },
+               "once": {
+                       "version": "1.4.0",
+                       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+                       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+                       "dev": true,
+                       "requires": {
+                               "wrappy": "1"
+                       }
+               },
+               "os-locale": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+                       "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+                       "dev": true,
+                       "requires": {
+                               "execa": "^1.0.0",
+                               "lcid": "^2.0.0",
+                               "mem": "^4.0.0"
+                       },
+                       "dependencies": {
+                               "execa": {
+                                       "version": "1.0.0",
+                                       "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+                                       "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+                                       "dev": true,
+                                       "requires": {
+                                               "cross-spawn": "^6.0.0",
+                                               "get-stream": "^4.0.0",
+                                               "is-stream": "^1.1.0",
+                                               "npm-run-path": "^2.0.0",
+                                               "p-finally": "^1.0.0",
+                                               "signal-exit": "^3.0.0",
+                                               "strip-eof": "^1.0.0"
+                                       }
+                               },
+                               "get-stream": {
+                                       "version": "4.1.0",
+                                       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+                                       "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+                                       "dev": true,
+                                       "requires": {
+                                               "pump": "^3.0.0"
+                                       }
+                               }
+                       }
+               },
+               "p-defer": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+                       "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+                       "dev": true
+               },
+               "p-finally": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+                       "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+                       "dev": true
+               },
+               "p-is-promise": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+                       "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
+                       "dev": true
+               },
+               "p-limit": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+                       "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
+                       "dev": true,
+                       "requires": {
+                               "p-try": "^2.0.0"
+                       }
+               },
+               "p-locate": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+                       "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+                       "dev": true,
+                       "requires": {
+                               "p-limit": "^2.0.0"
+                       }
+               },
+               "p-try": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+                       "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+                       "dev": true
+               },
+               "package-json": {
+                       "version": "4.0.1",
+                       "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+                       "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+                       "dev": true,
+                       "requires": {
+                               "got": "^6.7.1",
+                               "registry-auth-token": "^3.0.1",
+                               "registry-url": "^3.0.3",
+                               "semver": "^5.1.0"
+                       }
+               },
+               "parse-color": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz",
+                       "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=",
+                       "dev": true,
+                       "requires": {
+                               "color-convert": "~0.5.0"
+                       },
+                       "dependencies": {
+                               "color-convert": {
+                                       "version": "0.5.3",
+                                       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz",
+                                       "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=",
+                                       "dev": true
+                               }
+                       }
+               },
+               "parse-json": {
+                       "version": "2.2.0",
+                       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+                       "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+                       "dev": true,
+                       "requires": {
+                               "error-ex": "^1.2.0"
+                       }
+               },
+               "path-exists": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+                       "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+                       "dev": true
+               },
+               "path-is-inside": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+                       "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+                       "dev": true
+               },
+               "path-key": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+                       "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+                       "dev": true
+               },
+               "path-type": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+                       "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+                       "dev": true,
+                       "requires": {
+                               "graceful-fs": "^4.1.2",
+                               "pify": "^2.0.0",
+                               "pinkie-promise": "^2.0.0"
+                       }
+               },
+               "pend": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+                       "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+                       "dev": true
+               },
+               "performance-now": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+                       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+                       "dev": true
+               },
+               "pify": {
+                       "version": "2.3.0",
+                       "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+                       "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+                       "dev": true
+               },
+               "pinkie": {
+                       "version": "2.0.4",
+                       "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+                       "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+                       "dev": true
+               },
+               "pinkie-promise": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+                       "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+                       "dev": true,
+                       "requires": {
+                               "pinkie": "^2.0.0"
+                       }
+               },
+               "plist": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
+                       "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
+                       "dev": true,
+                       "requires": {
+                               "base64-js": "^1.2.3",
+                               "xmlbuilder": "^9.0.7",
+                               "xmldom": "0.1.x"
+                       }
+               },
+               "prepend-http": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+                       "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+                       "dev": true
+               },
+               "pretty-bytes": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
+                       "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
+                       "dev": true,
+                       "requires": {
+                               "get-stdin": "^4.0.1",
+                               "meow": "^3.1.0"
+                       }
+               },
+               "process-nextick-args": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+                       "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+                       "dev": true
+               },
+               "progress-stream": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
+                       "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
+                       "dev": true,
+                       "requires": {
+                               "speedometer": "~0.1.2",
+                               "through2": "~0.2.3"
+                       }
+               },
+               "pseudomap": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+                       "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+                       "dev": true
+               },
+               "psl": {
+                       "version": "1.1.31",
+                       "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+                       "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
+                       "dev": true
+               },
+               "pump": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+                       "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+                       "dev": true,
+                       "requires": {
+                               "end-of-stream": "^1.1.0",
+                               "once": "^1.3.1"
+                       }
+               },
+               "punycode": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+                       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+                       "dev": true
+               },
+               "qs": {
+                       "version": "6.5.2",
+                       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+                       "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+                       "dev": true
+               },
+               "rc": {
+                       "version": "1.2.8",
+                       "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+                       "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+                       "dev": true,
+                       "requires": {
+                               "deep-extend": "^0.6.0",
+                               "ini": "~1.3.0",
+                               "minimist": "^1.2.0",
+                               "strip-json-comments": "~2.0.1"
+                       }
+               },
+               "read-config-file": {
+                       "version": "3.2.1",
+                       "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.1.tgz",
+                       "integrity": "sha512-yW4hZZXdNN+Paij5JVAiTv1lUsAN5QRBU5NqotQqwYdVkUczSmDzm66VLu0eojiZt2zFeYptTFDAYlalDGuHdA==",
+                       "dev": true,
+                       "requires": {
+                               "ajv": "^6.7.0",
+                               "ajv-keywords": "^3.2.0",
+                               "bluebird-lst": "^1.0.6",
+                               "dotenv": "^6.2.0",
+                               "dotenv-expand": "^4.2.0",
+                               "fs-extra-p": "^7.0.0",
+                               "js-yaml": "^3.12.1",
+                               "json5": "^2.1.0",
+                               "lazy-val": "^1.0.3"
+                       }
+               },
+               "read-pkg": {
+                       "version": "1.1.0",
+                       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+                       "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+                       "dev": true,
+                       "requires": {
+                               "load-json-file": "^1.0.0",
+                               "normalize-package-data": "^2.3.2",
+                               "path-type": "^1.0.0"
+                       }
+               },
+               "read-pkg-up": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+                       "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+                       "dev": true,
+                       "requires": {
+                               "find-up": "^1.0.0",
+                               "read-pkg": "^1.0.0"
+                       }
+               },
+               "readable-stream": {
+                       "version": "1.1.14",
+                       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+                       "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+                       "dev": true,
+                       "requires": {
+                               "core-util-is": "~1.0.0",
+                               "inherits": "~2.0.1",
+                               "isarray": "0.0.1",
+                               "string_decoder": "~0.10.x"
+                       }
+               },
+               "redent": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+                       "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+                       "dev": true,
+                       "requires": {
+                               "indent-string": "^2.1.0",
+                               "strip-indent": "^1.0.1"
+                       }
+               },
+               "registry-auth-token": {
+                       "version": "3.3.2",
+                       "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+                       "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+                       "dev": true,
+                       "requires": {
+                               "rc": "^1.1.6",
+                               "safe-buffer": "^5.0.1"
+                       }
+               },
+               "registry-url": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+                       "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+                       "dev": true,
+                       "requires": {
+                               "rc": "^1.0.1"
+                       }
+               },
+               "repeating": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+                       "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+                       "dev": true,
+                       "requires": {
+                               "is-finite": "^1.0.0"
+                       }
+               },
+               "request": {
+                       "version": "2.88.0",
+                       "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+                       "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+                       "dev": true,
+                       "requires": {
+                               "aws-sign2": "~0.7.0",
+                               "aws4": "^1.8.0",
+                               "caseless": "~0.12.0",
+                               "combined-stream": "~1.0.6",
+                               "extend": "~3.0.2",
+                               "forever-agent": "~0.6.1",
+                               "form-data": "~2.3.2",
+                               "har-validator": "~5.1.0",
+                               "http-signature": "~1.2.0",
+                               "is-typedarray": "~1.0.0",
+                               "isstream": "~0.1.2",
+                               "json-stringify-safe": "~5.0.1",
+                               "mime-types": "~2.1.19",
+                               "oauth-sign": "~0.9.0",
+                               "performance-now": "^2.1.0",
+                               "qs": "~6.5.2",
+                               "safe-buffer": "^5.1.2",
+                               "tough-cookie": "~2.4.3",
+                               "tunnel-agent": "^0.6.0",
+                               "uuid": "^3.3.2"
+                       }
+               },
+               "require-directory": {
+                       "version": "2.1.1",
+                       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+                       "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+                       "dev": true
+               },
+               "require-main-filename": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+                       "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+                       "dev": true
+               },
+               "safe-buffer": {
+                       "version": "5.1.2",
+                       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+                       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+                       "dev": true
+               },
+               "safer-buffer": {
+                       "version": "2.1.2",
+                       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+                       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+                       "dev": true
+               },
+               "sanitize-filename": {
+                       "version": "1.6.1",
+                       "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz",
+                       "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=",
+                       "dev": true,
+                       "requires": {
+                               "truncate-utf8-bytes": "^1.0.0"
+                       }
+               },
+               "sax": {
+                       "version": "1.2.4",
+                       "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+                       "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+                       "dev": true
+               },
+               "semver": {
+                       "version": "5.6.0",
+                       "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+                       "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+                       "dev": true
+               },
+               "semver-diff": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+                       "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+                       "dev": true,
+                       "requires": {
+                               "semver": "^5.0.3"
+                       }
+               },
+               "set-blocking": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+                       "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+                       "dev": true
+               },
+               "shebang-command": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+                       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+                       "dev": true,
+                       "requires": {
+                               "shebang-regex": "^1.0.0"
+                       }
+               },
+               "shebang-regex": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+                       "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+                       "dev": true
+               },
+               "signal-exit": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+                       "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+                       "dev": true
+               },
+               "single-line-log": {
+                       "version": "1.1.2",
+                       "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
+                       "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
+                       "dev": true,
+                       "requires": {
+                               "string-width": "^1.0.1"
+                       }
+               },
+               "source-map": {
+                       "version": "0.6.1",
+                       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+                       "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+                       "dev": true
+               },
+               "source-map-support": {
+                       "version": "0.5.10",
+                       "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
+                       "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
+                       "dev": true,
+                       "requires": {
+                               "buffer-from": "^1.0.0",
+                               "source-map": "^0.6.0"
+                       }
+               },
+               "spdx-correct": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+                       "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+                       "dev": true,
+                       "requires": {
+                               "spdx-expression-parse": "^3.0.0",
+                               "spdx-license-ids": "^3.0.0"
+                       }
+               },
+               "spdx-exceptions": {
+                       "version": "2.2.0",
+                       "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+                       "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+                       "dev": true
+               },
+               "spdx-expression-parse": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+                       "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+                       "dev": true,
+                       "requires": {
+                               "spdx-exceptions": "^2.1.0",
+                               "spdx-license-ids": "^3.0.0"
+                       }
+               },
+               "spdx-license-ids": {
+                       "version": "3.0.3",
+                       "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
+                       "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
+                       "dev": true
+               },
+               "speedometer": {
+                       "version": "0.1.4",
+                       "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
+                       "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
+                       "dev": true
+               },
+               "sprintf-js": {
+                       "version": "1.0.3",
+                       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+                       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+                       "dev": true
+               },
+               "sshpk": {
+                       "version": "1.16.0",
+                       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz",
+                       "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==",
+                       "dev": true,
+                       "requires": {
+                               "asn1": "~0.2.3",
+                               "assert-plus": "^1.0.0",
+                               "bcrypt-pbkdf": "^1.0.0",
+                               "dashdash": "^1.12.0",
+                               "ecc-jsbn": "~0.1.1",
+                               "getpass": "^0.1.1",
+                               "jsbn": "~0.1.0",
+                               "safer-buffer": "^2.0.2",
+                               "tweetnacl": "~0.14.0"
+                       }
+               },
+               "stat-mode": {
+                       "version": "0.2.2",
+                       "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
+                       "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
+                       "dev": true
+               },
+               "string-width": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+                       "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+                       "dev": true,
+                       "requires": {
+                               "code-point-at": "^1.0.0",
+                               "is-fullwidth-code-point": "^1.0.0",
+                               "strip-ansi": "^3.0.0"
+                       }
+               },
+               "string_decoder": {
+                       "version": "0.10.31",
+                       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+                       "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+                       "dev": true
+               },
+               "strip-ansi": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+                       "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+                       "dev": true,
+                       "requires": {
+                               "ansi-regex": "^2.0.0"
+                       }
+               },
+               "strip-bom": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+                       "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+                       "dev": true,
+                       "requires": {
+                               "is-utf8": "^0.2.0"
+                       }
+               },
+               "strip-eof": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+                       "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+                       "dev": true
+               },
+               "strip-indent": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+                       "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+                       "dev": true,
+                       "requires": {
+                               "get-stdin": "^4.0.1"
+                       }
+               },
+               "strip-json-comments": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+                       "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+                       "dev": true
+               },
+               "sumchecker": {
+                       "version": "2.0.2",
+                       "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
+                       "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=",
+                       "dev": true,
+                       "requires": {
+                               "debug": "^2.2.0"
+                       },
+                       "dependencies": {
+                               "debug": {
+                                       "version": "2.6.9",
+                                       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+                                       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ms": "2.0.0"
+                                       }
+                               },
+                               "ms": {
+                                       "version": "2.0.0",
+                                       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+                                       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+                                       "dev": true
+                               }
+                       }
+               },
+               "supports-color": {
+                       "version": "5.5.0",
+                       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+                       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+                       "dev": true,
+                       "requires": {
+                               "has-flag": "^3.0.0"
+                       }
+               },
+               "temp-file": {
+                       "version": "3.3.2",
+                       "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.2.tgz",
+                       "integrity": "sha512-FGKccAW0Mux9hC/2bdUIe4bJRv4OyVo4RpVcuplFird1V/YoplIFbnPZjfzbJSf/qNvRZIRB9/4n/RkI0GziuQ==",
+                       "dev": true,
+                       "requires": {
+                               "async-exit-hook": "^2.0.1",
+                               "bluebird-lst": "^1.0.6",
+                               "fs-extra-p": "^7.0.0"
+                       }
+               },
+               "term-size": {
+                       "version": "1.2.0",
+                       "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+                       "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+                       "dev": true,
+                       "requires": {
+                               "execa": "^0.7.0"
+                       }
+               },
+               "throttleit": {
+                       "version": "0.0.2",
+                       "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
+                       "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
+                       "dev": true
+               },
+               "through2": {
+                       "version": "0.2.3",
+                       "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
+                       "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
+                       "dev": true,
+                       "requires": {
+                               "readable-stream": "~1.1.9",
+                               "xtend": "~2.1.1"
+                       }
+               },
+               "timed-out": {
+                       "version": "4.0.1",
+                       "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+                       "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+                       "dev": true
+               },
+               "tough-cookie": {
+                       "version": "2.4.3",
+                       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+                       "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+                       "dev": true,
+                       "requires": {
+                               "psl": "^1.1.24",
+                               "punycode": "^1.4.1"
+                       },
+                       "dependencies": {
+                               "punycode": {
+                                       "version": "1.4.1",
+                                       "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+                                       "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+                                       "dev": true
+                               }
+                       }
+               },
+               "trim-newlines": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+                       "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+                       "dev": true
+               },
+               "truncate-utf8-bytes": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
+                       "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
+                       "dev": true,
+                       "requires": {
+                               "utf8-byte-length": "^1.0.1"
+                       }
+               },
+               "tunnel-agent": {
+                       "version": "0.6.0",
+                       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+                       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+                       "dev": true,
+                       "requires": {
+                               "safe-buffer": "^5.0.1"
+                       }
+               },
+               "tweetnacl": {
+                       "version": "0.14.5",
+                       "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+                       "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+                       "dev": true
+               },
+               "typedarray": {
+                       "version": "0.0.6",
+                       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+                       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+                       "dev": true
+               },
+               "unique-string": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+                       "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+                       "dev": true,
+                       "requires": {
+                               "crypto-random-string": "^1.0.0"
+                       }
+               },
+               "universalify": {
+                       "version": "0.1.2",
+                       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+                       "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+                       "dev": true
+               },
+               "unzip-response": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+                       "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+                       "dev": true
+               },
+               "update-notifier": {
+                       "version": "2.5.0",
+                       "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
+                       "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
+                       "dev": true,
+                       "requires": {
+                               "boxen": "^1.2.1",
+                               "chalk": "^2.0.1",
+                               "configstore": "^3.0.0",
+                               "import-lazy": "^2.1.0",
+                               "is-ci": "^1.0.10",
+                               "is-installed-globally": "^0.1.0",
+                               "is-npm": "^1.0.0",
+                               "latest-version": "^3.0.0",
+                               "semver-diff": "^2.0.0",
+                               "xdg-basedir": "^3.0.0"
+                       },
+                       "dependencies": {
+                               "ci-info": {
+                                       "version": "1.6.0",
+                                       "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+                                       "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+                                       "dev": true
+                               },
+                               "is-ci": {
+                                       "version": "1.2.1",
+                                       "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+                                       "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ci-info": "^1.5.0"
+                                       }
+                               }
+                       }
+               },
+               "uri-js": {
+                       "version": "4.2.2",
+                       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+                       "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+                       "dev": true,
+                       "requires": {
+                               "punycode": "^2.1.0"
+                       }
+               },
+               "url-parse-lax": {
+                       "version": "1.0.0",
+                       "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+                       "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+                       "dev": true,
+                       "requires": {
+                               "prepend-http": "^1.0.1"
+                       }
+               },
+               "utf8-byte-length": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
+                       "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
+                       "dev": true
+               },
+               "util-deprecate": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+                       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+                       "dev": true
+               },
+               "uuid": {
+                       "version": "3.3.2",
+                       "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+                       "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+                       "dev": true
+               },
+               "validate-npm-package-license": {
+                       "version": "3.0.4",
+                       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+                       "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+                       "dev": true,
+                       "requires": {
+                               "spdx-correct": "^3.0.0",
+                               "spdx-expression-parse": "^3.0.0"
+                       }
+               },
+               "verror": {
+                       "version": "1.10.0",
+                       "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+                       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+                       "dev": true,
+                       "requires": {
+                               "assert-plus": "^1.0.0",
+                               "core-util-is": "1.0.2",
+                               "extsprintf": "^1.2.0"
+                       }
+               },
+               "which": {
+                       "version": "1.3.1",
+                       "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+                       "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+                       "dev": true,
+                       "requires": {
+                               "isexe": "^2.0.0"
+                       }
+               },
+               "which-module": {
+                       "version": "2.0.0",
+                       "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+                       "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+                       "dev": true
+               },
+               "widest-line": {
+                       "version": "2.0.1",
+                       "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
+                       "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
+                       "dev": true,
+                       "requires": {
+                               "string-width": "^2.1.1"
+                       },
+                       "dependencies": {
+                               "ansi-regex": {
+                                       "version": "3.0.0",
+                                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+                                       "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+                                       "dev": true
+                               },
+                               "is-fullwidth-code-point": {
+                                       "version": "2.0.0",
+                                       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+                                       "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+                                       "dev": true
+                               },
+                               "string-width": {
+                                       "version": "2.1.1",
+                                       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+                                       "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "is-fullwidth-code-point": "^2.0.0",
+                                               "strip-ansi": "^4.0.0"
+                                       }
+                               },
+                               "strip-ansi": {
+                                       "version": "4.0.0",
+                                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+                                       "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+                                       "dev": true,
+                                       "requires": {
+                                               "ansi-regex": "^3.0.0"
+                                       }
+                               }
+                       }
+               },
+               "wrap-ansi": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+                       "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+                       "dev": true,
+                       "requires": {
+                               "string-width": "^1.0.1",
+                               "strip-ansi": "^3.0.1"
+                       }
+               },
+               "wrappy": {
+                       "version": "1.0.2",
+                       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+                       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+                       "dev": true
+               },
+               "write-file-atomic": {
+                       "version": "2.3.0",
+                       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+                       "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+                       "dev": true,
+                       "requires": {
+                               "graceful-fs": "^4.1.11",
+                               "imurmurhash": "^0.1.4",
+                               "signal-exit": "^3.0.2"
+                       }
+               },
+               "xdg-basedir": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+                       "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+                       "dev": true
+               },
+               "xmlbuilder": {
+                       "version": "9.0.7",
+                       "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+                       "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+                       "dev": true
+               },
+               "xmldom": {
+                       "version": "0.1.27",
+                       "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+                       "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
+                       "dev": true
+               },
+               "xtend": {
+                       "version": "2.1.2",
+                       "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+                       "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+                       "dev": true,
+                       "requires": {
+                               "object-keys": "~0.4.0"
+                       }
+               },
+               "y18n": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+                       "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+                       "dev": true
+               },
+               "yallist": {
+                       "version": "2.1.2",
+                       "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+                       "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+                       "dev": true
+               },
+               "yargs": {
+                       "version": "12.0.5",
+                       "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+                       "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+                       "dev": true,
+                       "requires": {
+                               "cliui": "^4.0.0",
+                               "decamelize": "^1.2.0",
+                               "find-up": "^3.0.0",
+                               "get-caller-file": "^1.0.1",
+                               "os-locale": "^3.0.0",
+                               "require-directory": "^2.1.1",
+                               "require-main-filename": "^1.0.1",
+                               "set-blocking": "^2.0.0",
+                               "string-width": "^2.0.0",
+                               "which-module": "^2.0.0",
+                               "y18n": "^3.2.1 || ^4.0.0",
+                               "yargs-parser": "^11.1.1"
+                       },
+                       "dependencies": {
+                               "ansi-regex": {
+                                       "version": "3.0.0",
+                                       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+                                       "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+                                       "dev": true
+                               },
+                               "find-up": {
+                                       "version": "3.0.0",
+                                       "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+                                       "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+                                       "dev": true,
+                                       "requires": {
+                                               "locate-path": "^3.0.0"
+                                       }
+                               },
+                               "is-fullwidth-code-point": {
+                                       "version": "2.0.0",
+                                       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+                                       "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+                                       "dev": true
+                               },
+                               "string-width": {
+                                       "version": "2.1.1",
+                                       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+                                       "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "is-fullwidth-code-point": "^2.0.0",
+                                               "strip-ansi": "^4.0.0"
+                                       }
+                               },
+                               "strip-ansi": {
+                                       "version": "4.0.0",
+                                       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+                                       "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+                                       "dev": true,
+                                       "requires": {
+                                               "ansi-regex": "^3.0.0"
+                                       }
+                               }
+                       }
+               },
+               "yargs-parser": {
+                       "version": "11.1.1",
+                       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+                       "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+                       "dev": true,
+                       "requires": {
+                               "camelcase": "^5.0.0",
+                               "decamelize": "^1.2.0"
+                       },
+                       "dependencies": {
+                               "camelcase": {
+                                       "version": "5.0.0",
+                                       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+                                       "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
+                                       "dev": true
+                               }
+                       }
+               },
+               "yauzl": {
+                       "version": "2.4.1",
+                       "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
+                       "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
+                       "dev": true,
+                       "requires": {
+                               "fd-slicer": "~1.0.1"
+                       }
+               }
+       }
+}
index ddeb26eed498b2203883a5536084bf142579ce0b..aa129f57716d7533ec6441e14342b24f6ba1f3f8 100644 (file)
@@ -9,7 +9,7 @@
        },
        "devDependencies": {
                "cross-env": "latest",
-               "electron": "latest",
+               "electron": "^3.0.10",
                "electron-builder": "latest"
        },
        "scripts": {