diff --git a/node_modules/imagemin-gifsicle/index.js b/node_modules/imagemin-gifsicle/index.js
new file mode 100644
index 0000000..5b5a08d
--- /dev/null
+++ b/node_modules/imagemin-gifsicle/index.js
@@ -0,0 +1,41 @@
+'use strict';
+const execBuffer = require('exec-buffer');
+const gifsicle = require('gifsicle');
+const isGif = require('is-gif');
+
+module.exports = opts => buf => {
+	opts = Object.assign({}, opts);
+
+	if (!Buffer.isBuffer(buf)) {
+		return Promise.reject(new TypeError('Expected a buffer'));
+	}
+
+	if (!isGif(buf)) {
+		return Promise.resolve(buf);
+	}
+
+	const args = ['--no-warnings', '--no-app-extensions'];
+
+	if (opts.interlaced) {
+		args.push('--interlace');
+	}
+
+	if (opts.optimizationLevel) {
+		args.push(`--optimize=${opts.optimizationLevel}`);
+	}
+
+	if (opts.colors) {
+		args.push(`--colors=${opts.colors}`);
+	}
+
+	args.push('--output', execBuffer.output, execBuffer.input);
+
+	return execBuffer({
+		input: buf,
+		bin: gifsicle,
+		args
+	}).catch(error => {
+		error.message = error.stderr || error.message;
+		throw error;
+	});
+};
diff --git a/node_modules/imagemin-gifsicle/license b/node_modules/imagemin-gifsicle/license
new file mode 100644
index 0000000..038c983
--- /dev/null
+++ b/node_modules/imagemin-gifsicle/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Imagemin (github.com/imagemin)
+
+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/imagemin-gifsicle/package.json b/node_modules/imagemin-gifsicle/package.json
new file mode 100644
index 0000000..d37fc50
--- /dev/null
+++ b/node_modules/imagemin-gifsicle/package.json
@@ -0,0 +1,69 @@
+{
+  "_from": "imagemin-gifsicle@^6.0.1",
+  "_id": "imagemin-gifsicle@6.0.1",
+  "_inBundle": false,
+  "_integrity": "sha512-kuu47c6iKDQ6R9J10xCwL0lgs0+sMz3LRHqRcJ2CRBWdcNmo3T5hUaM8hSZfksptZXJLGKk8heSAvwtSdB1Fng==",
+  "_location": "/imagemin-gifsicle",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "imagemin-gifsicle@^6.0.1",
+    "name": "imagemin-gifsicle",
+    "escapedName": "imagemin-gifsicle",
+    "rawSpec": "^6.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^6.0.1"
+  },
+  "_requiredBy": [
+    "/grunt-contrib-imagemin"
+  ],
+  "_resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-6.0.1.tgz",
+  "_shasum": "6abad4e95566d52e5a104aba1c24b4f3b48581b3",
+  "_spec": "imagemin-gifsicle@^6.0.1",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\grunt-contrib-imagemin",
+  "bugs": {
+    "url": "https://github.com/imagemin/imagemin-gifsicle/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "exec-buffer": "^3.0.0",
+    "gifsicle": "^4.0.0",
+    "is-gif": "^3.0.0"
+  },
+  "deprecated": false,
+  "description": "Imagemin plugin for Gifsicle",
+  "devDependencies": {
+    "ava": "^0.25.0",
+    "pify": "^4.0.0",
+    "xo": "^0.23.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/imagemin/imagemin-gifsicle#readme",
+  "keywords": [
+    "compress",
+    "gif",
+    "gifsicle",
+    "gulpplugin",
+    "image",
+    "imageminplugin",
+    "img",
+    "minify",
+    "optimize"
+  ],
+  "license": "MIT",
+  "name": "imagemin-gifsicle",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/imagemin/imagemin-gifsicle.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "6.0.1"
+}
diff --git a/node_modules/imagemin-gifsicle/readme.md b/node_modules/imagemin-gifsicle/readme.md
new file mode 100644
index 0000000..7ba6a8c
--- /dev/null
+++ b/node_modules/imagemin-gifsicle/readme.md
@@ -0,0 +1,76 @@
+# imagemin-gifsicle [![Build Status](http://img.shields.io/travis/imagemin/imagemin-gifsicle.svg?style=flat)](https://travis-ci.org/imagemin/imagemin-gifsicle) [![Build status](https://ci.appveyor.com/api/projects/status/51vfu1ntxwx7t949?svg=true)](https://ci.appveyor.com/project/ShinnosukeWatanabe/imagemin-gifsicle)
+
+> Imagemin plugin for [Gifsicle](https://www.lcdf.org/gifsicle/)
+
+
+## Install
+
+```
+$ npm install imagemin-gifsicle
+```
+
+
+## Usage
+
+```js
+const imagemin = require('imagemin');
+const imageminGifsicle = require('imagemin-gifsicle');
+
+(async () => {
+	await imagemin(['images/*.gif'], 'build/images', {
+		use: [
+			imageminGifsicle()
+		]
+	});
+
+	console.log('Images optimized');
+})();
+```
+
+
+## API
+
+### imageminGifsicle([options])(buffer)
+
+Returns a promise for a buffer.
+
+#### options
+
+Type: `Object`
+
+##### interlaced
+
+Type: `boolean`<br>
+Default: `false`
+
+Interlace gif for progressive rendering.
+
+##### optimizationLevel
+
+Type: `number`<br>
+Default: `1`
+
+Select an optimization level between `1` and `3`.
+
+> The optimization level determines how much optimization is done; higher levels take longer, but may have better results.
+
+1. Stores only the changed portion of each image.
+2. Also uses transparency to shrink the file further.
+3. Try several optimization methods (usually slower, sometimes better results)
+
+##### colors
+
+Type: `number`
+
+Reduce the number of distinct colors in each output GIF to num or less. Num must be between 2 and 256.
+
+#### buffer
+
+Type: `Buffer`
+
+Buffer to optimize.
+
+
+## License
+
+MIT © [imagemin](https://github.com/imagemin)
