diff --git a/node_modules/plur/index.d.ts b/node_modules/plur/index.d.ts
new file mode 100644
index 0000000..7ba5c84
--- /dev/null
+++ b/node_modules/plur/index.d.ts
@@ -0,0 +1,38 @@
+/**
+Pluralize a word.
+
+@param word - Word to pluralize.
+@param plural - Pluralized word.
+The plural suffix will match the case of the last letter in the word.
+This option is only for extreme edge-cases. You probably won't need it.
+
+Default:
+
+- Irregular nouns will use this [list](https://github.com/sindresorhus/irregular-plurals/blob/master/irregular-plurals.json).
+- Words ending in *s*, *x*, *z*, *ch*, *sh* will be pluralized with *-es* (eg. *foxes*).
+- Words ending in *y* that are preceded by a consonant will be pluralized by replacing *y* with *-ies* (eg. *puppies*).
+- All other words will have "s" added to the end (eg. *days*).
+
+@param count - Count to determine whether to use singular or plural.
+
+@example
+```
+import plur = require('plur');
+
+plur('unicorn', 4);
+//=> 'unicorns'
+
+plur('puppy', 2);
+//=> 'puppies'
+
+plur('box', 2);
+//=> 'boxes'
+
+plur('cactus', 2);
+//=> 'cacti'
+```
+ */
+declare function plur(word: string, count?: number): string;
+declare function plur(word: string, plural: string, count?: number): string;
+
+export = plur;
diff --git a/node_modules/plur/index.js b/node_modules/plur/index.js
new file mode 100644
index 0000000..826de8f
--- /dev/null
+++ b/node_modules/plur/index.js
@@ -0,0 +1,31 @@
+'use strict';
+const irregularPlurals = require('irregular-plurals');
+
+module.exports = (word, plural, count) => {
+	if (typeof plural === 'number') {
+		count = plural;
+	}
+
+	if (irregularPlurals.has(word.toLowerCase())) {
+		plural = irregularPlurals.get(word.toLowerCase());
+
+		const firstLetter = word.charAt(0);
+		const isFirstLetterUpperCase = firstLetter === firstLetter.toUpperCase();
+		if (isFirstLetterUpperCase) {
+			plural = firstLetter.toUpperCase() + plural.slice(1);
+		}
+
+		const isWholeWordUpperCase = word === word.toUpperCase();
+		if (isWholeWordUpperCase) {
+			plural = plural.toUpperCase();
+		}
+	} else if (typeof plural !== 'string') {
+		plural = (word.replace(/(?:s|x|z|ch|sh)$/i, '$&e').replace(/([^aeiou])y$/i, '$1ie') + 's')
+			.replace(/i?e?s$/i, match => {
+				const isTailLowerCase = word.slice(-1) === word.slice(-1).toLowerCase();
+				return isTailLowerCase ? match.toLowerCase() : match.toUpperCase();
+			});
+	}
+
+	return Math.abs(count) === 1 ? word : plural;
+};
diff --git a/node_modules/plur/license b/node_modules/plur/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/node_modules/plur/license
@@ -0,0 +1,9 @@
+MIT License
+
+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/plur/package.json b/node_modules/plur/package.json
new file mode 100644
index 0000000..03f9a5d
--- /dev/null
+++ b/node_modules/plur/package.json
@@ -0,0 +1,74 @@
+{
+  "_from": "plur@^3.0.1",
+  "_id": "plur@3.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==",
+  "_location": "/plur",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "plur@^3.0.1",
+    "name": "plur",
+    "escapedName": "plur",
+    "rawSpec": "^3.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.1"
+  },
+  "_requiredBy": [
+    "/grunt-contrib-imagemin"
+  ],
+  "_resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz",
+  "_shasum": "60267967866a8d811504fe58f2faaba237546a5b",
+  "_spec": "plur@^3.0.1",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\grunt-contrib-imagemin",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/plur/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "irregular-plurals": "^2.0.0"
+  },
+  "deprecated": false,
+  "description": "Pluralize a word",
+  "devDependencies": {
+    "ava": "^1.4.1",
+    "tsd": "^0.7.2",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/plur#readme",
+  "keywords": [
+    "plural",
+    "plurals",
+    "pluralize",
+    "singular",
+    "count",
+    "word",
+    "string",
+    "irregular",
+    "noun",
+    "nouns"
+  ],
+  "license": "MIT",
+  "name": "plur",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/plur.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "3.1.1"
+}
diff --git a/node_modules/plur/readme.md b/node_modules/plur/readme.md
new file mode 100644
index 0000000..9fe6e83
--- /dev/null
+++ b/node_modules/plur/readme.md
@@ -0,0 +1,67 @@
+# plur [![Build Status](https://travis-ci.org/sindresorhus/plur.svg?branch=master)](https://travis-ci.org/sindresorhus/plur)
+
+> Pluralize a word
+
+
+## Install
+
+```
+$ npm install plur
+```
+
+
+## Usage
+
+```js
+const plur = require('plur');
+
+plur('unicorn', 4);
+//=> 'unicorns'
+
+plur('puppy', 2);
+//=> 'puppies'
+
+plur('box', 2);
+//=> 'boxes'
+
+plur('cactus', 2);
+//=> 'cacti'
+```
+
+
+## API
+
+### plur(word, [plural], count)
+
+#### word
+
+Type: `string`
+
+Word to pluralize.
+
+#### plural
+
+Type: `string`<br>
+Default:
+
+- Irregular nouns will use this [list](https://github.com/sindresorhus/irregular-plurals/blob/master/irregular-plurals.json).
+- Words ending in *s*, *x*, *z*, *ch*, *sh* will be pluralized with *-es* (eg. *foxes*).
+- Words ending in *y* that are preceded by a consonant will be pluralized by replacing *y* with *-ies* (eg. *puppies*).
+- All other words will have "s" added to the end (eg. *days*).
+
+Pluralized word.
+
+The plural suffix will match the case of the last letter in the word.
+
+This option is only for extreme edge-cases. You probably won't need it.
+
+#### count
+
+Type: `number`
+
+Count to determine whether to use singular or plural.
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
