diff --git a/node_modules/decompress/index.js b/node_modules/decompress/index.js
new file mode 100644
index 0000000..6aa67ca
--- /dev/null
+++ b/node_modules/decompress/index.js
@@ -0,0 +1,151 @@
+'use strict';
+const path = require('path');
+const fs = require('graceful-fs');
+const decompressTar = require('decompress-tar');
+const decompressTarbz2 = require('decompress-tarbz2');
+const decompressTargz = require('decompress-targz');
+const decompressUnzip = require('decompress-unzip');
+const makeDir = require('make-dir');
+const pify = require('pify');
+const stripDirs = require('strip-dirs');
+
+const fsP = pify(fs);
+
+const runPlugins = (input, opts) => {
+	if (opts.plugins.length === 0) {
+		return Promise.resolve([]);
+	}
+
+	return Promise.all(opts.plugins.map(x => x(input, opts))).then(files => files.reduce((a, b) => a.concat(b)));
+};
+
+const safeMakeDir = (dir, realOutputPath) => {
+	return fsP.realpath(dir)
+		.catch(_ => {
+			const parent = path.dirname(dir);
+			return safeMakeDir(parent, realOutputPath);
+		})
+		.then(realParentPath => {
+			if (realParentPath.indexOf(realOutputPath) !== 0) {
+				throw (new Error('Refusing to create a directory outside the output path.'));
+			}
+
+			return makeDir(dir).then(fsP.realpath);
+		});
+};
+
+const preventWritingThroughSymlink = (destination, realOutputPath) => {
+	return fsP.readlink(destination)
+		.catch(_ => {
+			// Either no file exists, or it's not a symlink. In either case, this is
+			// not an escape we need to worry about in this phase.
+			return null;
+		})
+		.then(symlinkPointsTo => {
+			if (symlinkPointsTo) {
+				throw new Error('Refusing to write into a symlink');
+			}
+
+			// No symlink exists at `destination`, so we can continue
+			return realOutputPath;
+		});
+};
+
+const extractFile = (input, output, opts) => runPlugins(input, opts).then(files => {
+	if (opts.strip > 0) {
+		files = files
+			.map(x => {
+				x.path = stripDirs(x.path, opts.strip);
+				return x;
+			})
+			.filter(x => x.path !== '.');
+	}
+
+	if (typeof opts.filter === 'function') {
+		files = files.filter(opts.filter);
+	}
+
+	if (typeof opts.map === 'function') {
+		files = files.map(opts.map);
+	}
+
+	if (!output) {
+		return files;
+	}
+
+	return Promise.all(files.map(x => {
+		const dest = path.join(output, x.path);
+		const mode = x.mode & ~process.umask();
+		const now = new Date();
+
+		if (x.type === 'directory') {
+			return makeDir(output)
+				.then(outputPath => fsP.realpath(outputPath))
+				.then(realOutputPath => safeMakeDir(dest, realOutputPath))
+				.then(() => fsP.utimes(dest, now, x.mtime))
+				.then(() => x);
+		}
+
+		return makeDir(output)
+			.then(outputPath => fsP.realpath(outputPath))
+			.then(realOutputPath => {
+				// Attempt to ensure parent directory exists (failing if it's outside the output dir)
+				return safeMakeDir(path.dirname(dest), realOutputPath)
+					.then(() => realOutputPath);
+			})
+			.then(realOutputPath => {
+				if (x.type === 'file') {
+					return preventWritingThroughSymlink(dest, realOutputPath);
+				}
+
+				return realOutputPath;
+			})
+			.then(realOutputPath => {
+				return fsP.realpath(path.dirname(dest))
+					.then(realDestinationDir => {
+						if (realDestinationDir.indexOf(realOutputPath) !== 0) {
+							throw (new Error('Refusing to write outside output directory: ' + realDestinationDir));
+						}
+					});
+			})
+			.then(() => {
+				if (x.type === 'link') {
+					return fsP.link(x.linkname, dest);
+				}
+
+				if (x.type === 'symlink' && process.platform === 'win32') {
+					return fsP.link(x.linkname, dest);
+				}
+
+				if (x.type === 'symlink') {
+					return fsP.symlink(x.linkname, dest);
+				}
+
+				return fsP.writeFile(dest, x.data, {mode});
+			})
+			.then(() => x.type === 'file' && fsP.utimes(dest, now, x.mtime))
+			.then(() => x);
+	}));
+});
+
+module.exports = (input, output, opts) => {
+	if (typeof input !== 'string' && !Buffer.isBuffer(input)) {
+		return Promise.reject(new TypeError('Input file required'));
+	}
+
+	if (typeof output === 'object') {
+		opts = output;
+		output = null;
+	}
+
+	opts = Object.assign({plugins: [
+		decompressTar(),
+		decompressTarbz2(),
+		decompressTargz(),
+		decompressUnzip()
+	]}, opts);
+
+	const read = typeof input === 'string' ? fsP.readFile(input) : Promise.resolve(input);
+
+	return read.then(buf => extractFile(buf, output, opts));
+};
diff --git a/node_modules/decompress/license b/node_modules/decompress/license
new file mode 100644
index 0000000..db6bc32
--- /dev/null
+++ b/node_modules/decompress/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Kevin Mårtensson <kevinmartensson@gmail.com> (github.com/kevva)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/decompress/node_modules/pify/index.js b/node_modules/decompress/node_modules/pify/index.js
new file mode 100644
index 0000000..7c720eb
--- /dev/null
+++ b/node_modules/decompress/node_modules/pify/index.js
@@ -0,0 +1,68 @@
+'use strict';
+
+var processFn = function (fn, P, opts) {
+	return function () {
+		var that = this;
+		var args = new Array(arguments.length);
+
+		for (var i = 0; i < arguments.length; i++) {
+			args[i] = arguments[i];
+		}
+
+		return new P(function (resolve, reject) {
+			args.push(function (err, result) {
+				if (err) {
+					reject(err);
+				} else if (opts.multiArgs) {
+					var results = new Array(arguments.length - 1);
+
+					for (var i = 1; i < arguments.length; i++) {
+						results[i - 1] = arguments[i];
+					}
+
+					resolve(results);
+				} else {
+					resolve(result);
+				}
+			});
+
+			fn.apply(that, args);
+		});
+	};
+};
+
+var pify = module.exports = function (obj, P, opts) {
+	if (typeof P !== 'function') {
+		opts = P;
+		P = Promise;
+	}
+
+	opts = opts || {};
+	opts.exclude = opts.exclude || [/.+Sync$/];
+
+	var filter = function (key) {
+		var match = function (pattern) {
+			return typeof pattern === 'string' ? key === pattern : pattern.test(key);
+		};
+
+		return opts.include ? opts.include.some(match) : !opts.exclude.some(match);
+	};
+
+	var ret = typeof obj === 'function' ? function () {
+		if (opts.excludeMain) {
+			return obj.apply(this, arguments);
+		}
+
+		return processFn(obj, P, opts).apply(this, arguments);
+	} : {};
+
+	return Object.keys(obj).reduce(function (ret, key) {
+		var x = obj[key];
+
+		ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x;
+
+		return ret;
+	}, ret);
+};
+
+pify.all = pify;
diff --git a/node_modules/decompress/node_modules/pify/license b/node_modules/decompress/node_modules/pify/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/decompress/node_modules/pify/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/decompress/node_modules/pify/package.json b/node_modules/decompress/node_modules/pify/package.json
new file mode 100644
index 0000000..04aab61
--- /dev/null
+++ b/node_modules/decompress/node_modules/pify/package.json
@@ -0,0 +1,80 @@
+{
+  "_from": "pify@^2.3.0",
+  "_id": "pify@2.3.0",
+  "_inBundle": false,
+  "_integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+  "_location": "/decompress/pify",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "pify@^2.3.0",
+    "name": "pify",
+    "escapedName": "pify",
+    "rawSpec": "^2.3.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.3.0"
+  },
+  "_requiredBy": [
+    "/decompress"
+  ],
+  "_resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+  "_shasum": "ed141a6ac043a849ea588498e7dca8b15330e90c",
+  "_spec": "pify@^2.3.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\decompress",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/pify/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Promisify a callback-style function",
+  "devDependencies": {
+    "ava": "*",
+    "pinkie-promise": "^1.0.0",
+    "v8-natives": "0.0.2",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/pify#readme",
+  "keywords": [
+    "promise",
+    "promises",
+    "promisify",
+    "denodify",
+    "denodeify",
+    "callback",
+    "cb",
+    "node",
+    "then",
+    "thenify",
+    "convert",
+    "transform",
+    "wrap",
+    "wrapper",
+    "bind",
+    "to",
+    "async",
+    "es2015"
+  ],
+  "license": "MIT",
+  "name": "pify",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/pify.git"
+  },
+  "scripts": {
+    "optimization-test": "node --allow-natives-syntax optimization-test.js",
+    "test": "xo && ava && npm run optimization-test"
+  },
+  "version": "2.3.0"
+}
diff --git a/node_modules/decompress/node_modules/pify/readme.md b/node_modules/decompress/node_modules/pify/readme.md
new file mode 100644
index 0000000..c79ca8b
--- /dev/null
+++ b/node_modules/decompress/node_modules/pify/readme.md
@@ -0,0 +1,119 @@
+# pify [![Build Status](https://travis-ci.org/sindresorhus/pify.svg?branch=master)](https://travis-ci.org/sindresorhus/pify)
+
+> Promisify a callback-style function
+
+
+## Install
+
+```
+$ npm install --save pify
+```
+
+
+## Usage
+
+```js
+const fs = require('fs');
+const pify = require('pify');
+
+// promisify a single function
+
+pify(fs.readFile)('package.json', 'utf8').then(data => {
+	console.log(JSON.parse(data).name);
+	//=> 'pify'
+});
+
+// or promisify all methods in a module
+
+pify(fs).readFile('package.json', 'utf8').then(data => {
+	console.log(JSON.parse(data).name);
+	//=> 'pify'
+});
+```
+
+
+## API
+
+### pify(input, [promiseModule], [options])
+
+Returns a promise wrapped version of the supplied function or module.
+
+#### input
+
+Type: `function`, `object`
+
+Callback-style function or module whose methods you want to promisify.
+
+#### promiseModule
+
+Type: `function`
+
+Custom promise module to use instead of the native one.
+
+Check out [`pinkie-promise`](https://github.com/floatdrop/pinkie-promise) if you need a tiny promise polyfill.
+
+#### options
+
+##### multiArgs
+
+Type: `boolean`  
+Default: `false`
+
+By default, the promisified function will only return the second argument from the callback, which works fine for most APIs. This option can be useful for modules like `request` that return multiple arguments. Turning this on will make it return an array of all arguments from the callback, excluding the error argument, instead of just the second argument.
+
+```js
+const request = require('request');
+const pify = require('pify');
+
+pify(request, {multiArgs: true})('https://sindresorhus.com').then(result => {
+	const [httpResponse, body] = result;
+});
+```
+
+##### include
+
+Type: `array` of (`string`|`regex`)
+
+Methods in a module to promisify. Remaining methods will be left untouched.
+
+##### exclude
+
+Type: `array` of (`string`|`regex`)  
+Default: `[/.+Sync$/]`
+
+Methods in a module **not** to promisify. Methods with names ending with `'Sync'` are excluded by default.
+
+##### excludeMain
+
+Type: `boolean`  
+Default: `false`
+
+By default, if given module is a function itself, this function will be promisified. Turn this option on if you want to promisify only methods of the module.
+
+```js
+const pify = require('pify');
+
+function fn() {
+	return true;
+}
+
+fn.method = (data, callback) => {
+	setImmediate(() => {
+		callback(data, null);
+	});
+};
+
+// promisify methods but not fn()
+const promiseFn = pify(fn, {excludeMain: true});
+
+if (promiseFn()) {
+	promiseFn.method('hi').then(data => {
+		console.log(data);
+	});
+}
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/decompress/package.json b/node_modules/decompress/package.json
new file mode 100644
index 0000000..8f44741
--- /dev/null
+++ b/node_modules/decompress/package.json
@@ -0,0 +1,95 @@
+{
+  "_from": "decompress@^4.0.0",
+  "_id": "decompress@4.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
+  "_location": "/decompress",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "decompress@^4.0.0",
+    "name": "decompress",
+    "escapedName": "decompress",
+    "rawSpec": "^4.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.0"
+  },
+  "_requiredBy": [
+    "/bin-build",
+    "/bin-wrapper/download",
+    "/download"
+  ],
+  "_resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+  "_shasum": "007f55cc6a62c055afa37c07eb6a4ee1b773f118",
+  "_spec": "decompress@^4.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\bin-build",
+  "author": {
+    "name": "Kevin Mårtensson",
+    "email": "kevinmartensson@gmail.com",
+    "url": "github.com/kevva"
+  },
+  "ava": {
+    "require": [
+      "esm"
+    ]
+  },
+  "bugs": {
+    "url": "https://github.com/kevva/decompress/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "decompress-tar": "^4.0.0",
+    "decompress-tarbz2": "^4.0.0",
+    "decompress-targz": "^4.0.0",
+    "decompress-unzip": "^4.0.1",
+    "graceful-fs": "^4.1.10",
+    "make-dir": "^1.0.0",
+    "pify": "^2.3.0",
+    "strip-dirs": "^2.0.0"
+  },
+  "deprecated": false,
+  "description": "Extracting archives made easy",
+  "devDependencies": {
+    "ava": "*",
+    "esm": "^3.2.25",
+    "is-jpg": "^1.0.0",
+    "path-exists": "^3.0.0",
+    "pify": "^2.3.0",
+    "rimraf": "^3.0.2",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/kevva/decompress#readme",
+  "keywords": [
+    "bz2",
+    "bzip2",
+    "decompress",
+    "extract",
+    "tar",
+    "tar.bz",
+    "tar.gz",
+    "zip",
+    "unzip"
+  ],
+  "license": "MIT",
+  "name": "decompress",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/kevva/decompress.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "4.2.1",
+  "xo": {
+    "rules": {
+      "promise/prefer-await-to-then": "off"
+    }
+  }
+}
diff --git a/node_modules/decompress/readme.md b/node_modules/decompress/readme.md
new file mode 100644
index 0000000..fd23f91
--- /dev/null
+++ b/node_modules/decompress/readme.md
@@ -0,0 +1,105 @@
+# decompress [![Build Status](https://travis-ci.org/kevva/decompress.svg?branch=master)](https://travis-ci.org/kevva/decompress)
+
+> Extracting archives made easy
+
+*See [decompress-cli](https://github.com/kevva/decompress-cli) for the command-line version.*
+
+## Install
+
+```
+$ npm install decompress
+```
+
+
+## Usage
+
+```js
+const decompress = require('decompress');
+
+decompress('unicorn.zip', 'dist').then(files => {
+	console.log('done!');
+});
+```
+
+
+## API
+
+### decompress(input, [output], [options])
+
+Returns a Promise for an array of files in the following format:
+
+```js
+{
+	data: Buffer,
+	mode: Number,
+	mtime: String,
+	path: String,
+	type: String
+}
+```
+
+#### input
+
+Type: `string` `Buffer`
+
+File to decompress.
+
+#### output
+
+Type: `string`
+
+Output directory.
+
+#### options
+
+##### filter
+
+Type: `Function`
+
+Filter out files before extracting. E.g:
+
+```js
+decompress('unicorn.zip', 'dist', {
+	filter: file => path.extname(file.path) !== '.exe'
+}).then(files => {
+	console.log('done!');
+});
+```
+
+*Note that in the current implementation, **`filter` is only applied after fully reading all files from the archive in memory**. Do not rely on this option to limit the amount of memory used by `decompress` to the size of the files included by `filter`. `decompress` will read the entire compressed file into memory regardless.*
+
+##### map
+
+Type: `Function`
+
+Map files before extracting: E.g:
+
+```js
+decompress('unicorn.zip', 'dist', {
+	map: file => {
+		file.path = `unicorn-${file.path}`;
+		return file;
+	}
+}).then(files => {
+	console.log('done!');
+});
+```
+
+##### plugins
+
+Type: `Array`<br>
+Default: `[decompressTar(), decompressTarbz2(), decompressTargz(), decompressUnzip()]`
+
+Array of [plugins](https://www.npmjs.com/browse/keyword/decompressplugin) to use.
+
+##### strip
+
+Type: `number`<br>
+Default: `0`
+
+Remove leading directory components from extracted files.
+
+
+## License
+
+MIT © [Kevin Mårtensson](https://github.com/kevva)
