diff --git a/node_modules/currently-unhandled/browser.js b/node_modules/currently-unhandled/browser.js
new file mode 100644
index 0000000..aa9e56f
--- /dev/null
+++ b/node_modules/currently-unhandled/browser.js
@@ -0,0 +1,27 @@
+'use strict';
+var core = require('./core');
+
+function unwrapEvent(event) {
+	if (event && event.detail && event.detail.promise) {
+		return event.detail;
+	}
+
+	return event;
+}
+
+module.exports = function (w) {
+	w = w || window;
+	var c = core();
+
+	w.addEventListener('unhandledrejection', function (event) {
+		event = unwrapEvent(event);
+		c.onUnhandledRejection(event.reason, event.promise);
+	});
+
+	w.addEventListener('rejectionhandled', function (event) {
+		event = unwrapEvent(event);
+		c.onRejectionHandled(event.promise);
+	});
+
+	return c.currentlyUnhandled;
+};
diff --git a/node_modules/currently-unhandled/core.js b/node_modules/currently-unhandled/core.js
new file mode 100644
index 0000000..73db22e
--- /dev/null
+++ b/node_modules/currently-unhandled/core.js
@@ -0,0 +1,33 @@
+'use strict';
+var arrayFindIndex = require('array-find-index');
+
+module.exports = function () {
+	var unhandledRejections = [];
+
+	function onUnhandledRejection(reason, promise) {
+		unhandledRejections.push({reason: reason, promise: promise});
+	}
+
+	function onRejectionHandled(promise) {
+		var index = arrayFindIndex(unhandledRejections, function (x) {
+			return x.promise === promise;
+		});
+
+		unhandledRejections.splice(index, 1);
+	}
+
+	function currentlyUnhandled() {
+		return unhandledRejections.map(function (entry) {
+			return {
+				reason: entry.reason,
+				promise: entry.promise
+			};
+		});
+	}
+
+	return {
+		onUnhandledRejection: onUnhandledRejection,
+		onRejectionHandled: onRejectionHandled,
+		currentlyUnhandled: currentlyUnhandled
+	};
+};
diff --git a/node_modules/currently-unhandled/index.js b/node_modules/currently-unhandled/index.js
new file mode 100644
index 0000000..238b9d9
--- /dev/null
+++ b/node_modules/currently-unhandled/index.js
@@ -0,0 +1,12 @@
+'use strict';
+var core = require('./core');
+
+module.exports = function (p) {
+	p = p || process;
+	var c = core();
+
+	p.on('unhandledRejection', c.onUnhandledRejection);
+	p.on('rejectionHandled', c.onRejectionHandled);
+
+	return c.currentlyUnhandled;
+};
diff --git a/node_modules/currently-unhandled/license b/node_modules/currently-unhandled/license
new file mode 100644
index 0000000..ad5d021
--- /dev/null
+++ b/node_modules/currently-unhandled/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) James Talmage <james@talmage.io> (github.com/jamestalmage)
+
+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/currently-unhandled/package.json b/node_modules/currently-unhandled/package.json
new file mode 100644
index 0000000..1902121
--- /dev/null
+++ b/node_modules/currently-unhandled/package.json
@@ -0,0 +1,103 @@
+{
+  "_from": "currently-unhandled@^0.4.1",
+  "_id": "currently-unhandled@0.4.1",
+  "_inBundle": false,
+  "_integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+  "_location": "/currently-unhandled",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "currently-unhandled@^0.4.1",
+    "name": "currently-unhandled",
+    "escapedName": "currently-unhandled",
+    "rawSpec": "^0.4.1",
+    "saveSpec": null,
+    "fetchSpec": "^0.4.1"
+  },
+  "_requiredBy": [
+    "/loud-rejection"
+  ],
+  "_resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+  "_shasum": "988df33feab191ef799a61369dd76c17adf957ea",
+  "_spec": "currently-unhandled@^0.4.1",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\loud-rejection",
+  "author": {
+    "name": "James Talmage",
+    "email": "james@talmage.io",
+    "url": "github.com/jamestalmage"
+  },
+  "ava": {
+    "files": "test.js"
+  },
+  "browser": {
+    "./index.js": "./browser.js"
+  },
+  "bugs": {
+    "url": "https://github.com/jamestalmage/currently-unhandled/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "array-find-index": "^1.0.1"
+  },
+  "deprecated": false,
+  "description": "Track the list of currently unhandled promise rejections.",
+  "devDependencies": {
+    "ava": "^0.15.1",
+    "bluebird": "^3.4.0",
+    "browserify": "^13.0.1",
+    "coveralls": "^2.11.9",
+    "delay": "^1.3.1",
+    "is-ci": "^1.0.8",
+    "karma": "^0.13.22",
+    "karma-browserify": "^5.0.5",
+    "karma-chrome-launcher": "^1.0.1",
+    "karma-firefox-launcher": "^1.0.0",
+    "karma-mocha": "^1.0.1",
+    "mocha": "^2.5.3",
+    "nyc": "^6.4.0",
+    "watchify": "^3.7.0",
+    "xo": "^0.15.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js",
+    "core.js",
+    "browser.js"
+  ],
+  "homepage": "https://github.com/jamestalmage/currently-unhandled#readme",
+  "keywords": [
+    "unhandled",
+    "unhandledRejection",
+    "rejected",
+    "promises"
+  ],
+  "license": "MIT",
+  "name": "currently-unhandled",
+  "nyc": {
+    "reporter": [
+      "lcov",
+      "text"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jamestalmage/currently-unhandled.git"
+  },
+  "scripts": {
+    "test": "xo && nyc ava"
+  },
+  "version": "0.4.1",
+  "xo": {
+    "ignores": [
+      "browser-bluebird-test.js"
+    ],
+    "envs": [
+      "browser",
+      "mocha",
+      "node"
+    ]
+  }
+}
diff --git a/node_modules/currently-unhandled/readme.md b/node_modules/currently-unhandled/readme.md
new file mode 100644
index 0000000..b73c568
--- /dev/null
+++ b/node_modules/currently-unhandled/readme.md
@@ -0,0 +1,44 @@
+# currently-unhandled [![Build Status](https://travis-ci.org/jamestalmage/currently-unhandled.svg?branch=master)](https://travis-ci.org/jamestalmage/currently-unhandled) [![Coverage Status](https://coveralls.io/repos/github/jamestalmage/currently-unhandled/badge.svg?branch=master)](https://coveralls.io/github/jamestalmage/currently-unhandled?branch=master)
+
+> Track the list of currently unhandled promise rejections.
+
+
+## Install
+
+```
+$ npm install --save currently-unhandled
+```
+
+
+## Usage
+
+```js
+const currentlyUnhandled = require('currently-unhandled')(); // <- note the invocation
+
+var fooError = new Error('foo');
+var p = Promise.reject(new Error('foo'));
+
+// on the next tick - unhandled rejected promise is added to the list:
+currentlyUnhandled();
+//=> [{promise: p, reason: fooError}]'
+
+p.catch(() => {});
+
+// on the next tick - handled promise is now removed from the list:
+currentlyUnhandled();
+//=> [];
+```
+
+## API
+
+### currentlyUnhandled()
+
+Returns an array of objects with `promise` and `reason` properties representing the rejected promises that currently do not have a rejection handler. The list grows and shrinks as unhandledRejections are published, and later handled.
+
+## Browser Support
+
+This module can be bundled with `browserify`. At time of writing, it will work with native Promises in the Chrome browser only. For best cross-browser support, use `bluebird` instead of native Promise support in browsers.
+
+## License
+
+MIT © [James Talmage](http://github.com/jamestalmage)
