diff --git a/node_modules/vinyl-sourcemap/LICENSE b/node_modules/vinyl-sourcemap/LICENSE
new file mode 100644
index 0000000..82c8d55
--- /dev/null
+++ b/node_modules/vinyl-sourcemap/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Blaine Bublitz <blaine.bublitz@gmail.com>, Eric Schoffstall <yo@contra.io> and other contributors (Based on code from gulp-sourcemaps - ISC License - Copyright (c) 2014, Florian Reiterer)
+
+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/vinyl-sourcemap/README.md b/node_modules/vinyl-sourcemap/README.md
new file mode 100644
index 0000000..6ffc0ef
--- /dev/null
+++ b/node_modules/vinyl-sourcemap/README.md
@@ -0,0 +1,79 @@
+<p align="center">
+  <a href="http://gulpjs.com">
+    <img height="257" width="114" src="https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png">
+  </a>
+</p>
+
+# vinyl-sourcemap
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Add/write sourcemaps to/from Vinyl files.
+
+## Usage
+
+```js
+sourcemap.add(file, function(err, updatedFile) {
+  // updatedFile will have a .sourceMap property
+});
+
+// The 2nd argument can be given as a path string
+sourcemap.write(file, './maps', function(err, updatedFile, sourcemapFile) {
+  // sourcemapFile will be a Vinyl file to be written to some location
+  // updatedFile will have the .contents property updated with a sourceMappingURL that resolves to sourcemapFile
+});
+
+// If not defined, the sourcemap is inlined
+sourcemap.write(file, function(err, updatedFile, sourcemapFile) {
+  // sourcemapFile is undefined
+  // updatedFile will have the .contents property updated with a sourceMappingURL that is an inlined sourcemap
+});
+```
+
+## API
+
+### `sourcemap.add(file, callback)`
+
+Takes a [Vinyl][vinyl] `file` object and a `callback` function. It attempts to parse an inline sourcemap or load an external sourcemap for the file. If a valid sourcemap is found, the `sources` & `sourcesContent` properties are resolved to actual files (if possible) and a fully resolved sourcemap is attached as `file.sourceMap`. If a sourcemap is not found, a stub sourcemap is generated for the file and attached as `file.sourceMap`.
+
+Once all resolution is complete, the `callback(err, updatedFile)` is called with the `updatedFile`. If an error occurs, it will be passed as `err` and `updatedFile` will be undefined. __Note:__ The original file is mutated but `updatedFile` is passed to the callback as a convenience.
+
+If the `file` is not a Vinyl object or the contents are streaming, an Error will be passed to the `callback`.
+
+If the `file` has a `.sourceMap` property or the contents are null, the `callback` will be called immediately without mutation to the file.
+
+All filesystem operations are optional & non-fatal so any errors will not be bubbled to the `callback`.
+
+### `sourcemap.write(file, [outputPath,] callback)`
+
+Takes a [Vinyl][vinyl] `file` object, (optionally) an `outputPath` string and a `callback` function.
+
+If `outputPath` is not passed, an inline sourcemap will be generated from the `file.sourceMap` property and appended to the `file.contents`. Once the inline sourcemap is appended, the `callback(err, updatedFile)` is called with the `updatedFile`. If an error occurs, it will be passed as `err` and `updatedFile` will be undefined. __Note:__ The original file is mutated but `updatedFile` is passed to the callback as a convenience.
+
+If `outputPath` is passed, a new Vinyl file will be generated using `file.cwd` and `file.base` from the original file, the path to the external sourcemap, and the `file.sourceMap` (as contents). The external location will be appended to the `file.contents` of the original file. Once the new file is created and location appended, the `callback(err, updatedFile, sourcemapFile)` is called with the `updatedFile` and the `sourcemapFile`. If an error occurs, it will be passed as `err` and `updatedFile`/`sourcemapFile` will be undefined. __Note:__ The original file is mutated but `updatedFile` is passed to the callback as a convenience.
+
+If the `file` is not a Vinyl object or the contents are streaming, an Error will be passed to the `callback`.
+
+If the `file` doesn't have a `.sourceMap` property or the contents are null, the `callback` will be called immediately without mutation to the file.
+
+## License
+
+MIT
+
+[vinyl]: https://github.com/gulpjs/vinyl
+
+[downloads-image]: http://img.shields.io/npm/dm/vinyl-sourcemap.svg
+[npm-url]: https://npmjs.com/package/vinyl-sourcemap
+[npm-image]: http://img.shields.io/npm/v/vinyl-sourcemap.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/vinyl-sourcemap
+[travis-image]: http://img.shields.io/travis/gulpjs/vinyl-sourcemap.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/vinyl-sourcemap
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/vinyl-sourcemap.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/vinyl-sourcemap
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/vinyl-sourcemap/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.png
diff --git a/node_modules/vinyl-sourcemap/index.js b/node_modules/vinyl-sourcemap/index.js
new file mode 100644
index 0000000..93d5062
--- /dev/null
+++ b/node_modules/vinyl-sourcemap/index.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var File = require('vinyl');
+
+var helpers = require('./lib/helpers');
+
+var PLUGIN_NAME = 'vinyl-sourcemap';
+
+function add(file, callback) {
+
+  // Bail early an error if the file argument is not a Vinyl file
+  if (!File.isVinyl(file)) {
+    return callback(new Error(PLUGIN_NAME + '-add: Not a vinyl file'));
+  }
+
+  // Bail early with an error if file has streaming contents
+  if (file.isStream()) {
+    return callback(new Error(PLUGIN_NAME + '-add: Streaming not supported'));
+  }
+
+  // Bail early successfully if file is null or already has a sourcemap
+  if (file.isNull() || file.sourceMap) {
+    return callback(null, file);
+  }
+
+  var state = {
+    path: '', // Root path for the sources in the map
+    map: null,
+    content: file.contents.toString(),
+    // TODO: handle this?
+    preExistingComment: null,
+  };
+
+  helpers.addSourceMaps(file, state, callback);
+}
+
+function write(file, destPath, callback) {
+
+  // Check if options or a callback are passed as second argument
+  if (typeof destPath === 'function') {
+    callback = destPath;
+    destPath = undefined;
+  }
+
+  // Bail early with an error if the file argument is not a Vinyl file
+  if (!File.isVinyl(file)) {
+    return callback(new Error(PLUGIN_NAME + '-write: Not a vinyl file'));
+  }
+
+  // Bail early with an error if file has streaming contents
+  if (file.isStream()) {
+    return callback(new Error(PLUGIN_NAME + '-write: Streaming not supported'));
+  }
+
+  // Bail early successfully if file is null or doesn't have sourcemap
+  if (file.isNull() || !file.sourceMap) {
+    return callback(null, file);
+  }
+
+  helpers.writeSourceMaps(file, destPath, callback);
+}
+
+module.exports = {
+  add: add,
+  write: write,
+};
diff --git a/node_modules/vinyl-sourcemap/lib/helpers.js b/node_modules/vinyl-sourcemap/lib/helpers.js
new file mode 100644
index 0000000..626d82f
--- /dev/null
+++ b/node_modules/vinyl-sourcemap/lib/helpers.js
@@ -0,0 +1,243 @@
+'use strict';
+
+var path = require('path');
+
+var fs = require('graceful-fs');
+var nal = require('now-and-later');
+var File = require('vinyl');
+var convert = require('convert-source-map');
+var removeBOM = require('remove-bom-buffer');
+var appendBuffer = require('append-buffer');
+var normalizePath = require('normalize-path');
+
+var urlRegex = /^(https?|webpack(-[^:]+)?):\/\//;
+
+function isRemoteSource(source) {
+  return source.match(urlRegex);
+}
+
+function parse(data) {
+  try {
+    return JSON.parse(removeBOM(data));
+  } catch (err) {
+    // TODO: should this log a debug?
+  }
+}
+
+function loadSourceMap(file, state, callback) {
+  // Try to read inline source map
+  state.map = convert.fromSource(state.content);
+
+  if (state.map) {
+    state.map = state.map.toObject();
+    // Sources in map are relative to the source file
+    state.path = file.dirname;
+    state.content = convert.removeComments(state.content);
+    // Remove source map comment from source
+    file.contents = new Buffer(state.content, 'utf8');
+    return callback();
+  }
+
+  // Look for source map comment referencing a source map file
+  var mapComment = convert.mapFileCommentRegex.exec(state.content);
+
+  var mapFile;
+  if (mapComment) {
+    mapFile = path.resolve(file.dirname, mapComment[1] || mapComment[2]);
+    state.content = convert.removeMapFileComments(state.content);
+    // Remove source map comment from source
+    file.contents = new Buffer(state.content, 'utf8');
+  } else {
+    // If no comment try map file with same name as source file
+    mapFile = file.path + '.map';
+  }
+
+  // Sources in external map are relative to map file
+  state.path = path.dirname(mapFile);
+
+  fs.readFile(mapFile, onRead);
+
+  function onRead(err, data) {
+    if (err) {
+      return callback();
+    }
+    state.map = parse(data);
+    callback();
+  }
+}
+
+// Fix source paths and sourceContent for imported source map
+function fixImportedSourceMap(file, state, callback) {
+  if (!state.map) {
+    return callback();
+  }
+
+  state.map.sourcesContent = state.map.sourcesContent || [];
+
+  nal.map(state.map.sources, normalizeSourcesAndContent, callback);
+
+  function assignSourcesContent(sourceContent, idx) {
+    state.map.sourcesContent[idx] = sourceContent;
+  }
+
+  function normalizeSourcesAndContent(sourcePath, idx, cb) {
+    var sourceRoot = state.map.sourceRoot || '';
+    var sourceContent = state.map.sourcesContent[idx] || null;
+
+    if (isRemoteSource(sourcePath)) {
+      assignSourcesContent(sourceContent, idx);
+      return cb();
+    }
+
+    if (state.map.sourcesContent[idx]) {
+      return cb();
+    }
+
+    if (sourceRoot && isRemoteSource(sourceRoot)) {
+      assignSourcesContent(sourceContent, idx);
+      return cb();
+    }
+
+    var basePath = path.resolve(file.base, sourceRoot);
+    var absPath = path.resolve(state.path, sourceRoot, sourcePath);
+    var relPath = path.relative(basePath, absPath);
+    var unixRelPath = normalizePath(relPath);
+
+    state.map.sources[idx] = unixRelPath;
+
+    if (absPath !== file.path) {
+      // Load content from file async
+      return fs.readFile(absPath, onRead);
+    }
+
+    // If current file: use content
+    assignSourcesContent(state.content, idx);
+    cb();
+
+    function onRead(err, data) {
+      if (err) {
+        assignSourcesContent(null, idx);
+        return cb();
+      }
+      assignSourcesContent(removeBOM(data).toString('utf8'), idx);
+      cb();
+    }
+  }
+}
+
+function mapsLoaded(file, state, callback) {
+
+  if (!state.map) {
+    state.map = {
+      version: 3,
+      names: [],
+      mappings: '',
+      sources: [normalizePath(file.relative)],
+      sourcesContent: [state.content],
+    };
+  }
+
+  state.map.file = normalizePath(file.relative);
+  file.sourceMap = state.map;
+
+  callback();
+}
+
+function addSourceMaps(file, state, callback) {
+  var tasks = [
+    loadSourceMap,
+    fixImportedSourceMap,
+    mapsLoaded,
+  ];
+
+  function apply(fn, key, cb) {
+    fn(file, state, cb);
+  }
+
+  nal.mapSeries(tasks, apply, done);
+
+  function done() {
+    callback(null, file);
+  }
+}
+
+/* Write Helpers */
+function createSourceMapFile(opts) {
+  return new File({
+    cwd: opts.cwd,
+    base: opts.base,
+    path: opts.path,
+    contents: new Buffer(JSON.stringify(opts.content)),
+    stat: {
+      isFile: function() {
+        return true;
+      },
+      isDirectory: function() {
+        return false;
+      },
+      isBlockDevice: function() {
+        return false;
+      },
+      isCharacterDevice: function() {
+        return false;
+      },
+      isSymbolicLink: function() {
+        return false;
+      },
+      isFIFO: function() {
+        return false;
+      },
+      isSocket: function() {
+        return false;
+      },
+    },
+  });
+}
+
+var needsMultiline = ['.css'];
+
+function getCommentOptions(extname) {
+  var opts = {
+    multiline: (needsMultiline.indexOf(extname) !== -1),
+  };
+
+  return opts;
+}
+
+function writeSourceMaps(file, destPath, callback) {
+  var sourceMapFile;
+  var commentOpts = getCommentOptions(file.extname);
+
+  var comment;
+  if (destPath == null) {
+    // Encode source map into comment
+    comment = convert.fromObject(file.sourceMap).toComment(commentOpts);
+  } else {
+    var mapFile = path.join(destPath, file.relative) + '.map';
+    var sourceMapPath = path.join(file.base, mapFile);
+
+    // Create new sourcemap File
+    sourceMapFile = createSourceMapFile({
+      cwd: file.cwd,
+      base: file.base,
+      path: sourceMapPath,
+      content: file.sourceMap,
+    });
+
+    var sourcemapLocation = path.relative(file.dirname, sourceMapPath);
+
+    sourcemapLocation = normalizePath(sourcemapLocation);
+
+    comment = convert.generateMapFileComment(sourcemapLocation, commentOpts);
+  }
+
+  // Append source map comment
+  file.contents = appendBuffer(file.contents, comment);
+
+  callback(null, file, sourceMapFile);
+}
+
+module.exports = {
+  addSourceMaps: addSourceMaps,
+  writeSourceMaps: writeSourceMaps,
+};
diff --git a/node_modules/vinyl-sourcemap/package.json b/node_modules/vinyl-sourcemap/package.json
new file mode 100644
index 0000000..1c2f9a0
--- /dev/null
+++ b/node_modules/vinyl-sourcemap/package.json
@@ -0,0 +1,94 @@
+{
+  "_from": "vinyl-sourcemap@^1.1.0",
+  "_id": "vinyl-sourcemap@1.1.0",
+  "_inBundle": false,
+  "_integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=",
+  "_location": "/vinyl-sourcemap",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "vinyl-sourcemap@^1.1.0",
+    "name": "vinyl-sourcemap",
+    "escapedName": "vinyl-sourcemap",
+    "rawSpec": "^1.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.1.0"
+  },
+  "_requiredBy": [
+    "/vinyl-fs"
+  ],
+  "_resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
+  "_shasum": "92a800593a38703a8cdb11d8b300ad4be63b3e16",
+  "_spec": "vinyl-sourcemap@^1.1.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\vinyl-fs",
+  "author": {
+    "name": "Gulp Team",
+    "email": "team@gulpjs.com",
+    "url": "http://gulpjs.com/"
+  },
+  "bugs": {
+    "url": "https://github.com/gulpjs/vinyl-sourcemap/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Robin Venneman"
+    },
+    {
+      "name": "Blaine Bublitz",
+      "email": "blaine.bublitz@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "append-buffer": "^1.0.2",
+    "convert-source-map": "^1.5.0",
+    "graceful-fs": "^4.1.6",
+    "normalize-path": "^2.1.1",
+    "now-and-later": "^2.0.0",
+    "remove-bom-buffer": "^3.0.0",
+    "vinyl": "^2.0.0"
+  },
+  "deprecated": false,
+  "description": "Add/write sourcemaps to/from Vinyl files.",
+  "devDependencies": {
+    "eslint": "^1.10.3",
+    "eslint-config-gulp": "^2.0.0",
+    "expect": "^1.20.2",
+    "istanbul": "^0.4.3",
+    "istanbul-coveralls": "^1.0.3",
+    "jscs": "^2.4.0",
+    "jscs-preset-gulp": "^1.0.0",
+    "mississippi": "^1.3.0",
+    "mocha": "^3.2.0"
+  },
+  "engines": {
+    "node": ">= 0.10"
+  },
+  "files": [
+    "LICENSE",
+    "index.js",
+    "lib/"
+  ],
+  "homepage": "https://github.com/gulpjs/vinyl-sourcemap#readme",
+  "keywords": [
+    "vinyl",
+    "sourcemap",
+    "gulp"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "vinyl-sourcemap",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gulpjs/vinyl-sourcemap.git"
+  },
+  "scripts": {
+    "cover": "istanbul cover _mocha --report lcovonly",
+    "coveralls": "npm run cover && istanbul-coveralls",
+    "lint": "eslint index.js lib/ test/add.js test/write.js && jscs index.js lib/ test/add.js test/write.js",
+    "pretest": "npm run lint",
+    "test": "mocha --async-only"
+  },
+  "version": "1.1.0"
+}
