diff --git a/node_modules/fragment-cache/LICENSE b/node_modules/fragment-cache/LICENSE
new file mode 100644
index 0000000..b11cb79
--- /dev/null
+++ b/node_modules/fragment-cache/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016-2017, Jon Schlinkert
+
+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/fragment-cache/README.md b/node_modules/fragment-cache/README.md
new file mode 100644
index 0000000..541ef0f
--- /dev/null
+++ b/node_modules/fragment-cache/README.md
@@ -0,0 +1,156 @@
+# fragment-cache [![NPM version](https://img.shields.io/npm/v/fragment-cache.svg?style=flat)](https://www.npmjs.com/package/fragment-cache) [![NPM downloads](https://img.shields.io/npm/dm/fragment-cache.svg?style=flat)](https://npmjs.org/package/fragment-cache) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/fragment-cache.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/fragment-cache)
+
+> A cache for managing namespaced sub-caches
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save fragment-cache
+```
+
+## Usage
+
+```js
+var Fragment = require('fragment-cache');
+var fragment = new Fragment();
+```
+
+## API
+
+### [FragmentCache](index.js#L24)
+
+Create a new `FragmentCache` with an optional object to use for `caches`.
+
+**Example**
+
+```js
+var fragment = new FragmentCache();
+```
+
+**Params**
+
+* `cacheName` **{String}**
+* `returns` **{Object}**: Returns the [map-cache](https://github.com/jonschlinkert/map-cache) instance.
+
+### [.cache](index.js#L49)
+
+Get cache `name` from the `fragment.caches` object. Creates a new `MapCache` if it doesn't already exist.
+
+**Example**
+
+```js
+var cache = fragment.cache('files');
+console.log(fragment.caches.hasOwnProperty('files'));
+//=> true
+```
+
+**Params**
+
+* `cacheName` **{String}**
+* `returns` **{Object}**: Returns the [map-cache](https://github.com/jonschlinkert/map-cache) instance.
+
+### [.set](index.js#L67)
+
+Set a value for property `key` on cache `name`
+
+**Example**
+
+```js
+fragment.set('files', 'somefile.js', new File({path: 'somefile.js'}));
+```
+
+**Params**
+
+* `name` **{String}**
+* `key` **{String}**: Property name to set
+* `val` **{any}**: The value of `key`
+* `returns` **{Object}**: The cache instance for chaining
+
+### [.has](index.js#L93)
+
+Returns true if a non-undefined value is set for `key` on fragment cache `name`.
+
+**Example**
+
+```js
+var cache = fragment.cache('files');
+cache.set('somefile.js');
+
+console.log(cache.has('somefile.js'));
+//=> true
+
+console.log(cache.has('some-other-file.js'));
+//=> false
+```
+
+**Params**
+
+* `name` **{String}**: Cache name
+* `key` **{String}**: Optionally specify a property to check for on cache `name`
+* `returns` **{Boolean}**
+
+### [.get](index.js#L115)
+
+Get `name`, or if specified, the value of `key`. Invokes the [cache](#cache) method, so that cache `name` will be created it doesn't already exist. If `key` is not passed, the entire cache (`name`) is returned.
+
+**Example**
+
+```js
+var Vinyl = require('vinyl');
+var cache = fragment.cache('files');
+cache.set('somefile.js', new Vinyl({path: 'somefile.js'}));
+console.log(cache.get('somefile.js'));
+//=> <File "somefile.js">
+```
+
+**Params**
+
+* `name` **{String}**
+* `returns` **{Object}**: Returns cache `name`, or the value of `key` if specified
+
+## About
+
+### Related projects
+
+* [base](https://www.npmjs.com/package/base): base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… [more](https://github.com/node-base/base) | [homepage](https://github.com/node-base/base "base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like `set`, `get`, `del` and `use`.")
+* [map-cache](https://www.npmjs.com/package/map-cache): Basic cache object for storing key-value pairs. | [homepage](https://github.com/jonschlinkert/map-cache "Basic cache object for storing key-value pairs.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/fragment-cache/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 17, 2016._
\ No newline at end of file
diff --git a/node_modules/fragment-cache/index.js b/node_modules/fragment-cache/index.js
new file mode 100644
index 0000000..8ce6216
--- /dev/null
+++ b/node_modules/fragment-cache/index.js
@@ -0,0 +1,128 @@
+/*!
+ * fragment-cache <https://github.com/jonschlinkert/fragment-cache>
+ *
+ * Copyright (c) 2016-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var MapCache = require('map-cache');
+
+/**
+ * Create a new `FragmentCache` with an optional object to use for `caches`.
+ *
+ * ```js
+ * var fragment = new FragmentCache();
+ * ```
+ * @name FragmentCache
+ * @param {String} `cacheName`
+ * @return {Object} Returns the [map-cache][] instance.
+ * @api public
+ */
+
+function FragmentCache(caches) {
+  this.caches = caches || {};
+}
+
+/**
+ * Prototype
+ */
+
+FragmentCache.prototype = {
+
+  /**
+   * Get cache `name` from the `fragment.caches` object. Creates a new
+   * `MapCache` if it doesn't already exist.
+   *
+   * ```js
+   * var cache = fragment.cache('files');
+   * console.log(fragment.caches.hasOwnProperty('files'));
+   * //=> true
+   * ```
+   * @name .cache
+   * @param {String} `cacheName`
+   * @return {Object} Returns the [map-cache][] instance.
+   * @api public
+   */
+
+  cache: function(cacheName) {
+    return this.caches[cacheName] || (this.caches[cacheName] = new MapCache());
+  },
+
+  /**
+   * Set a value for property `key` on cache `name`
+   *
+   * ```js
+   * fragment.set('files', 'somefile.js', new File({path: 'somefile.js'}));
+   * ```
+   * @name .set
+   * @param {String} `name`
+   * @param {String} `key` Property name to set
+   * @param {any} `val` The value of `key`
+   * @return {Object} The cache instance for chaining
+   * @api public
+   */
+
+  set: function(cacheName, key, val) {
+    var cache = this.cache(cacheName);
+    cache.set(key, val);
+    return cache;
+  },
+
+  /**
+   * Returns true if a non-undefined value is set for `key` on fragment cache `name`.
+   *
+   * ```js
+   * var cache = fragment.cache('files');
+   * cache.set('somefile.js');
+   *
+   * console.log(cache.has('somefile.js'));
+   * //=> true
+   *
+   * console.log(cache.has('some-other-file.js'));
+   * //=> false
+   * ```
+   * @name .has
+   * @param {String} `name` Cache name
+   * @param {String} `key` Optionally specify a property to check for on cache `name`
+   * @return {Boolean}
+   * @api public
+   */
+
+  has: function(cacheName, key) {
+    return typeof this.get(cacheName, key) !== 'undefined';
+  },
+
+  /**
+   * Get `name`, or if specified, the value of `key`. Invokes the [cache]() method,
+   * so that cache `name` will be created it doesn't already exist. If `key` is not passed,
+   * the entire cache (`name`) is returned.
+   *
+   * ```js
+   * var Vinyl = require('vinyl');
+   * var cache = fragment.cache('files');
+   * cache.set('somefile.js', new Vinyl({path: 'somefile.js'}));
+   * console.log(cache.get('somefile.js'));
+   * //=> <File "somefile.js">
+   * ```
+   * @name .get
+   * @param {String} `name`
+   * @return {Object} Returns cache `name`, or the value of `key` if specified
+   * @api public
+   */
+
+  get: function(name, key) {
+    var cache = this.cache(name);
+    if (typeof key === 'string') {
+      return cache.get(key);
+    }
+    return cache;
+  }
+};
+
+/**
+ * Expose `FragmentCache`
+ */
+
+exports = module.exports = FragmentCache;
diff --git a/node_modules/fragment-cache/package.json b/node_modules/fragment-cache/package.json
new file mode 100644
index 0000000..5a7db40
--- /dev/null
+++ b/node_modules/fragment-cache/package.json
@@ -0,0 +1,93 @@
+{
+  "_from": "fragment-cache@^0.2.1",
+  "_id": "fragment-cache@0.2.1",
+  "_inBundle": false,
+  "_integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+  "_location": "/fragment-cache",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "fragment-cache@^0.2.1",
+    "name": "fragment-cache",
+    "escapedName": "fragment-cache",
+    "rawSpec": "^0.2.1",
+    "saveSpec": null,
+    "fetchSpec": "^0.2.1"
+  },
+  "_requiredBy": [
+    "/extglob",
+    "/micromatch",
+    "/nanomatch"
+  ],
+  "_resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+  "_shasum": "4290fad27f13e89be7f33799c6bc5a0abfff0d19",
+  "_spec": "fragment-cache@^0.2.1",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\micromatch",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/fragment-cache/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "map-cache": "^0.2.2"
+  },
+  "deprecated": false,
+  "description": "A cache for managing namespaced sub-caches",
+  "devDependencies": {
+    "gulp": "^3.9.1",
+    "gulp-eslint": "^3.0.1",
+    "gulp-format-md": "^0.1.11",
+    "gulp-istanbul": "^1.1.1",
+    "gulp-mocha": "^3.0.1",
+    "mocha": "^3.2.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/fragment-cache",
+  "keywords": [
+    "cache",
+    "fragment"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "fragment-cache",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/fragment-cache.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "reflinks": [
+      "map-cache",
+      "verb"
+    ],
+    "related": {
+      "list": [
+        "base",
+        "map-cache"
+      ]
+    },
+    "layout": "default",
+    "toc": false,
+    "tasks": [
+      "readme"
+    ],
+    "lint": {
+      "reflinks": true
+    }
+  },
+  "version": "0.2.1"
+}
