From 2eec82ffc96ae02a75b18ee2c426f7a162950b95 Mon Sep 17 00:00:00 2001
From: linwenling <3256558519@qq.com>
Date: 星期二, 12 九月 2023 09:51:32 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 package-lock.json                                |  263 ++++++++---
 node_modules/object-hash/readme.markdown         |   25 
 ruoyi-ui/src/views/collection/collectionInfo.vue |   39 +
 ruoyi-ui/src/views/self/memoInfo.vue             |   27 +
 node_modules/object-hash/index.js                |   54 +
 node_modules/eslint-loader/README.md             |  371 ++++++++++------
 ruoyi-ui/src/views/doctor/doctorInfo.vue         |   31 +
 ruoyi-ui/src/views/contacts/contactsInfo.vue     |   20 
 ruoyi-ui/src/views/wish/wishInfo.vue             |   28 +
 /dev/null                                        |   27 -
 ruoyi-ui/src/views/self/show.vue                 |    3 
 node_modules/object-hash/package.json            |  106 +---
 node_modules/eslint-loader/CHANGELOG.md          |   81 +++
 package.json                                     |    3 
 node_modules/eslint-loader/package.json          |  172 +++----
 ruoyi-ui/src/views/honor/honorInfo.vue           |   31 +
 16 files changed, 800 insertions(+), 481 deletions(-)

diff --git a/node_modules/eslint-loader/CHANGELOG.md b/node_modules/eslint-loader/CHANGELOG.md
index 96b1002..ec0bb91 100644
--- a/node_modules/eslint-loader/CHANGELOG.md
+++ b/node_modules/eslint-loader/CHANGELOG.md
@@ -1,3 +1,84 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [4.0.2](https://github.com/webpack-contrib/eslint-loader/compare/v3.0.4...v4.0.2) (2020-04-24)
+
+
+### Bug Fixes
+
+* use fs-extra ^8.1.0 ([7febae0](https://github.com/webpack-contrib/eslint-loader/commit/7febae056ac6271c4cf76b8e387f8fae5800a879))
+
+### [4.0.1](https://github.com/webpack-contrib/eslint-loader/compare/v3.0.4...v4.0.1) (2020-04-24)
+
+### Refactor
+
+* new cache implementation ([#320](https://github.com/webpack-contrib/eslint-loader/pull/320)) ([6bb1fa6](https://github.com/webpack-contrib/eslint-loader/commit/acae2be88678228e6589b40122a93f88437b8e47))
+
+## [4.0.0](https://github.com/webpack-contrib/eslint-loader/compare/v3.0.4...v4.0.0) (2020-04-03)
+
+### Breaking Changes
+
+* drop support for Node < 10.13.0
+* minimum supported eslint version is 6
+
+### [3.0.4](https://github.com/webpack-contrib/eslint-loader/compare/v3.0.3...v3.0.4) (2020-04-02)
+
+
+### Bug Fixes
+
+* [#316](https://github.com/webpack-contrib/eslint-loader/issues/316) updating loader-fs-cache min version ([#317](https://github.com/webpack-contrib/eslint-loader/issues/317)) ([796e3d1](https://github.com/webpack-contrib/eslint-loader/commit/796e3d130a030ce48e14ee3421809ca40d25cde1))
+
+### [3.0.3](https://github.com/webpack-contrib/eslint-loader/compare/v3.0.2...v3.0.3) (2019-12-06)
+
+
+### Bug Fixes
+
+* check result object ([#311](https://github.com/webpack-contrib/eslint-loader/issues/311)) ([6bb1fa6](https://github.com/webpack-contrib/eslint-loader/commit/6bb1fa68d043f00de63cda4d9babd3a2c9a50d58))
+* support webpack 5 ([#312](https://github.com/webpack-contrib/eslint-loader/issues/312)) ([c0a9d0c](https://github.com/webpack-contrib/eslint-loader/commit/c0a9d0c118155c56c41dc344460f333a9e969eaf))
+
+### [3.0.2](https://github.com/webpack-contrib/eslint-loader/compare/v3.0.1...v3.0.2) (2019-09-27)
+
+
+### Bug Fixes
+
+* check if contain results ([#300](https://github.com/webpack-contrib/eslint-loader/issues/300)) ([7d1d1fe](https://github.com/webpack-contrib/eslint-loader/commit/7d1d1fe))
+* ensure output file path ([#299](https://github.com/webpack-contrib/eslint-loader/issues/299)) ([16e9ccf](https://github.com/webpack-contrib/eslint-loader/commit/16e9ccf))
+
+### [3.0.1](https://github.com/webpack-contrib/eslint-loader/compare/v3.0.0...v3.0.1) (2019-09-25)
+
+
+### Bug Fixes
+
+* module build failed error at Linter.parseResults ([#294](https://github.com/webpack-contrib/eslint-loader/issues/294)) ([360e69c](https://github.com/webpack-contrib/eslint-loader/commit/360e69c))
+
+### [3.0.0](https://github.com/webpack-contrib/eslint-loader/compare/v2.2.1...v3.0.0) (2019-08-24)
+
+
+### Bugfix
+
+* fix corrupted filenames if cwd == "/"
+* cannot use string formatter in outputReport
+* no Output Report in File when build fails under webpack 4
+* add posibility to use absolute file path in outputReport.filePath
+* it should be possible to use absolute file path in outputReport.filePath
+* try load official formatter ([#285](https://github.com/webpack-contrib/eslint-loader/issues/285)) ([997cce5](https://github.com/webpack-contrib/eslint-loader/commit/997cce5))
+* emit warning/error if no config was found/given ([#286](https://github.com/webpack-contrib/eslint-loader/issues/286)) ([4204560](https://github.com/webpack-contrib/eslint-loader/commit/4204560))
+
+
+### Features
+
+* validate schema options
+
+
+### Breaking Changes
+
+* drop support for Node < 8.9.0
+* minimum supported webpack version is 4
+* minimum supported eslint version is 5
+
+
+
 # 2.2.1 - 2019-07-04
 
 - Fixed: path to eslint version for cache
diff --git a/node_modules/eslint-loader/README.md b/node_modules/eslint-loader/README.md
index 25d1855..ad6ac89 100644
--- a/node_modules/eslint-loader/README.md
+++ b/node_modules/eslint-loader/README.md
@@ -1,22 +1,35 @@
-# eslint-loader [![Build Status](https://travis-ci.org/webpack-contrib/eslint-loader.svg?branch=master)](https://travis-ci.org/webpack-contrib/eslint-loader)
+<div align="center">
+  <a href="https://github.com/eslint/eslint"><img width="200" height="200" src="https://cdn.worldvectorlogo.com/logos/eslint.svg"></a>
+  <a href="https://github.com/webpack/webpack"><img width="200" height="200" src="https://webpack.js.org/assets/icon-square-big.svg"></a>
+</div>
 
-> eslint loader for webpack
+[![npm][npm]][npm-url]
+[![node][node]][node-url]
+[![deps][deps]][deps-url]
+[![tests][tests]][tests-url]
+[![coverage][cover]][cover-url]
+[![chat][chat]][chat-url]
+[![size][size]][size-url]
+
+# eslint-loader
+
+> A ESlint loader for webpack
 
 ## Install
 
-```console
-$ npm install eslint-loader --save-dev
+```bash
+npm install eslint-loader --save-dev
 ```
 
-**NOTE**: You also need to install `eslint` from npm, if you haven't already:
+**Note**: You also need to install `eslint` from npm, if you haven't already:
 
-```console
-$ npm install eslint --save-dev
+```bash
+npm install eslint --save-dev
 ```
 
 ## Usage
 
-In your webpack configuration
+In your webpack configuration:
 
 ```js
 module.exports = {
@@ -26,19 +39,18 @@
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "eslint-loader",
+        loader: 'eslint-loader',
         options: {
           // eslint options (if necessary)
-        }
-      }
-    ]
-  }
+        },
+      },
+    ],
+  },
   // ...
 };
 ```
 
-When using with transpiling loaders (like `babel-loader`), make sure they are in correct order
-(bottom to top). Otherwise files will be checked after being processed by `babel-loader`
+When using with transpiling loaders (like `babel-loader`), make sure they are in correct order (bottom to top). Otherwise files will be checked after being processed by `babel-loader`:
 
 ```js
 module.exports = {
@@ -48,16 +60,15 @@
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        use: ["babel-loader", "eslint-loader"]
-      }
-    ]
-  }
+        use: ['babel-loader', 'eslint-loader'],
+      },
+    ],
+  },
   // ...
 };
 ```
 
-To be safe, you can use `enforce: "pre"` section to check source files, not modified
-by other loaders (like `babel-loader`)
+To be safe, you can use `enforce: 'pre'` section to check source files, not modified by other loaders (like `babel-loader`):
 
 ```js
 module.exports = {
@@ -65,258 +76,338 @@
   module: {
     rules: [
       {
-        enforce: "pre",
+        enforce: 'pre',
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "eslint-loader"
+        loader: 'eslint-loader',
       },
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "babel-loader"
-      }
-    ]
-  }
+        loader: 'babel-loader',
+      },
+    ],
+  },
   // ...
 };
 ```
 
-### Options
+## Options
 
-You can pass [eslint options](http://eslint.org/docs/developer-guide/nodejs-api#cliengine)
-using standard webpack [loader options](https://webpack.js.org/configuration/module/#useentry).
+You can pass [eslint options](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) using standard webpack [loader options](https://webpack.js.org/configuration/module/#useentry).
 
-Note that the config option you provide will be passed to the `CLIEngine`.
-This is a different set of options than what you'd specify in `package.json` or `.eslintrc`.
-See the [eslint docs](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) for more detail.
+**Note**: That the config option you provide will be passed to the `CLIEngine`. This is a different set of options than what you'd specify in `package.json` or `.eslintrc`. See the [eslint docs](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) for more detail.
 
-#### `fix` (default: false)
+### `cache`
 
-This option will enable
-[ESLint autofix feature](http://eslint.org/docs/user-guide/command-line-interface#fix).
+- Type: `Boolean|String`
+- Default: `false`
 
-**Be careful: this option will change source files.**
-
-#### `cache` (default: false)
-
-This option will enable caching of the linting results into a file.
-This is particularly useful in reducing linting time when doing a full build.
+This option will enable caching of the linting results into a file. This is particularly useful in reducing linting time when doing a full build.
 
 This can either be a `boolean` value or the cache directory path(ex: `'./.eslint-loader-cache'`).
 
-If `cache: true` is used, the cache file is written to the `./node_modules/.cache` directory.
-This is the recommended usage.
-
-#### `formatter` (default: eslint stylish formatter)
-
-Loader accepts a function that will have one argument: an array of eslint messages (object).
-The function must return the output as a string.
-You can use official eslint formatters.
+If `cache: true` is used, the cache is written to the `./node_modules/.cache/eslint-loader` directory. This is the recommended usage.
 
 ```js
 module.exports = {
-  entry: "...",
+  entry: '...',
   module: {
     rules: [
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "eslint-loader",
+        loader: 'eslint-loader',
+        options: {
+          cache: true,
+        },
+      },
+    ],
+  },
+};
+```
+
+### `eslintPath`
+
+- Type: `String`
+- Default: `eslint`
+
+Path to `eslint` instance that will be used for linting. If the `eslintPath` is a folder like a official eslint, or specify a `formatter` option. Now you dont have to install `eslint`.
+
+```js
+module.exports = {
+  entry: '...',
+  module: {
+    rules: [
+      {
+        test: /\.js$/,
+        exclude: /node_modules/,
+        loader: 'eslint-loader',
+        options: {
+          eslintPath: path.join(__dirname, 'reusable-eslint'),
+        },
+      },
+    ],
+  },
+};
+```
+
+### `fix`
+
+- Type: `Boolean`
+- Default: `false`
+
+This option will enable [ESLint autofix feature](http://eslint.org/docs/user-guide/command-line-interface#fix).
+
+**Be careful: this option will change source files.**
+
+```js
+module.exports = {
+  entry: '...',
+  module: {
+    rules: [
+      {
+        test: /\.js$/,
+        exclude: /node_modules/,
+        loader: 'eslint-loader',
+        options: {
+          fix: true,
+        },
+      },
+    ],
+  },
+};
+```
+
+### `formatter`
+
+- Type: `String|Function`
+- Default: `stylish`
+
+This option accepts a function that will have one argument: an array of eslint messages (object). The function must return the output as a string. You can use official [eslint formatters](https://eslint.org/docs/user-guide/formatters/).
+
+```js
+module.exports = {
+  entry: '...',
+  module: {
+    rules: [
+      {
+        test: /\.js$/,
+        exclude: /node_modules/,
+        loader: 'eslint-loader',
         options: {
           // several examples !
 
           // default value
-          formatter: require("eslint/lib/formatters/stylish"),
+          formatter: 'stylish',
 
           // community formatter
-          formatter: require("eslint-friendly-formatter"),
+          formatter: require('eslint-friendly-formatter'),
 
           // custom formatter
-          formatter: function(results) {
+          formatter: function (results) {
             // `results` format is available here
             // http://eslint.org/docs/developer-guide/nodejs-api.html#executeonfiles()
 
             // you should return a string
             // DO NOT USE console.*() directly !
-            return "OUTPUT";
-          }
-        }
-      }
-    ]
-  }
+            return 'OUTPUT';
+          },
+        },
+      },
+    ],
+  },
 };
 ```
 
-#### `eslintPath` (default: "eslint")
+### Errors and Warning
 
-Path to `eslint` instance that will be used for linting.  
-If the `eslintPath` is a folder like a official eslint, or specify a `formatter` option. now you dont have to install `eslint` .
+**By default the loader will auto adjust error reporting depending on eslint errors/warnings counts.** You can still force this behavior by using `emitError` **or** `emitWarning` options:
+
+#### `emitError`
+
+- Type: `Boolean`
+- Default: `false`
+
+Will always return errors, if this option is set to `true`.
 
 ```js
 module.exports = {
-  entry: "...",
+  entry: '...',
   module: {
     rules: [
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "eslint-loader",
+        loader: 'eslint-loader',
         options: {
-          eslintPath: path.join(__dirname, "reusable-eslint")
-        }
-      }
-    ]
-  }
+          emitError: true,
+        },
+      },
+    ],
+  },
 };
 ```
 
-#### Errors and Warning
+#### `emitWarning`
 
-**By default the loader will auto adjust error reporting depending
-on eslint errors/warnings counts.**
-You can still force this behavior by using `emitError` **or** `emitWarning` options:
+- Type: `Boolean`
+- Default: `false`
 
-##### `emitError` (default: `false`)
-
-Loader will always return errors if this option is set to `true`.
+Will always return warnings, if option is set to `true`. **If you're using hot module replacement, you may wish to enable this in development, or else updates will be skipped when there's an eslint error.**
 
 ```js
 module.exports = {
-  entry: "...",
+  entry: '...',
   module: {
     rules: [
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "eslint-loader",
+        loader: 'eslint-loader',
         options: {
-          emitError: true
-        }
-      }
-    ]
-  }
+          emitWarning: true,
+        },
+      },
+    ],
+  },
 };
 ```
 
-##### `emitWarning` (default: `false`)
+#### `failOnError`
 
-Loader will always return warnings if option is set to `true`. If you're using hot module replacement, you may wish to enable this in development, or else updates will be skipped when there's an eslint error.
+- Type: `Boolean`
+- Default: `false`
 
-#### `quiet` (default: `false`)
-
-Loader will process and report errors only and ignore warnings if this option is set to true
+Will cause the module build to fail if there are any errors, if option is set to `true`.
 
 ```js
 module.exports = {
-  entry: "...",
+  entry: '...',
   module: {
     rules: [
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "eslint-loader",
+        loader: 'eslint-loader',
         options: {
-          quiet: true
-        }
-      }
-    ]
-  }
+          failOnError: true,
+        },
+      },
+    ],
+  },
 };
 ```
 
-##### `failOnWarning` (default: `false`)
+#### `failOnWarning`
 
-Loader will cause the module build to fail if there are any eslint warnings.
+- Type: `Boolean`
+- Default: `false`
+
+Will cause the module build to fail if there are any warnings, if option is set to `true`.
 
 ```js
 module.exports = {
-  entry: "...",
+  entry: '...',
   module: {
     rules: [
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "eslint-loader",
+        loader: 'eslint-loader',
         options: {
-          failOnWarning: true
-        }
-      }
-    ]
-  }
+          failOnWarning: true,
+        },
+      },
+    ],
+  },
 };
 ```
 
-##### `failOnError` (default: `false`)
+#### `quiet`
 
-Loader will cause the module build to fail if there are any eslint errors.
+- Type: `Boolean`
+- Default: `false`
+
+Will process and report errors only and ignore warnings, if this option is set to `true`.
 
 ```js
 module.exports = {
-  entry: "...",
+  entry: '...',
   module: {
     rules: [
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "eslint-loader",
+        loader: 'eslint-loader',
         options: {
-          failOnError: true
-        }
-      }
-    ]
-  }
+          quiet: true,
+        },
+      },
+    ],
+  },
 };
 ```
 
-##### `outputReport` (default: `false`)
+#### `outputReport`
 
-Write the output of the errors to a file, for example a checkstyle xml file for use for reporting on Jenkins CI
+- Type: `Boolean|Object`
+- Default: `false`
 
-The `filePath` is relative to the webpack config: output.path
-You can pass in a different formatter for the output file, if none is passed in the default/configured formatter will be used
+Write the output of the errors to a file, for example a checkstyle xml file for use for reporting on Jenkins CI.
+
+The `filePath` is an absolute path or relative to the webpack config: `output.path`. You can pass in a different `formatter` for the output file, if none is passed in the default/configured formatter will be used.
 
 ```js
 module.exports = {
-  entry: "...",
+  entry: '...',
   module: {
     rules: [
       {
         test: /\.js$/,
         exclude: /node_modules/,
-        loader: "eslint-loader",
+        loader: 'eslint-loader',
         options: {
           outputReport: {
-            filePath: "checkstyle.xml",
-            formatter: require("eslint/lib/formatters/checkstyle")
-          }
-        }
-      }
-    ]
-  }
+            filePath: 'checkstyle.xml',
+            formatter: 'checkstyle',
+          },
+        },
+      },
+    ],
+  },
 };
 ```
 
 ## Gotchas
 
-### NoErrorsPlugin
+### NoEmitOnErrorsPlugin
 
-`NoErrorsPlugin` prevents webpack from outputting anything into a bundle. So even ESLint warnings
-will fail the build. No matter what error settings are used for `eslint-loader`.
-
-So if you want to see ESLint warnings in console during development using `WebpackDevServer`
-remove `NoErrorsPlugin` from webpack config.
+`NoEmitOnErrorsPlugin` is now automatically enabled in webpack 4, when mode is either unset, or set to production. So even ESLint warnings will fail the build. No matter what error settings are used for `eslint-loader`, except if `emitWarning` enabled.
 
 ### Defining `configFile` or using `eslint -c path/.eslintrc`
 
-Bear in mind that when you define `configFile`, `eslint` doesn't automatically look for
-`.eslintrc` files in the directory of the file to be linted.
-More information is available in official eslint documentation in section [_Using Configuration Files_](http://eslint.org/docs/user-guide/configuring#using-configuration-files).
-See [#129](https://github.com/webpack-contrib/eslint-loader/issues/129).
-
----
+Bear in mind that when you define `configFile`, `eslint` doesn't automatically look for `.eslintrc` files in the directory of the file to be linted. More information is available in official eslint documentation in section [_Using Configuration Files_](http://eslint.org/docs/user-guide/configuring#using-configuration-files). See [#129](https://github.com/webpack-contrib/eslint-loader/issues/129).
 
 ## Changelog
+
 [Changelog](CHANGELOG.md)
 
 ## License
+
 [MIT](./LICENSE)
+
+[npm]: https://img.shields.io/npm/v/eslint-loader.svg
+[npm-url]: https://npmjs.com/package/eslint-loader
+[node]: https://img.shields.io/node/v/eslint-loader.svg
+[node-url]: https://nodejs.org
+[deps]: https://david-dm.org/webpack-contrib/eslint-loader.svg
+[deps-url]: https://david-dm.org/webpack-contrib/eslint-loader
+[tests]: https://dev.azure.com/webpack-contrib/eslint-loader/_apis/build/status/webpack-contrib.eslint-loader?branchName=master
+[tests-url]: https://dev.azure.com/webpack-contrib/eslint-loader/_build/latest?definitionId=4&branchName=master
+[cover]: https://codecov.io/gh/webpack-contrib/eslint-loader/branch/master/graph/badge.svg
+[cover-url]: https://codecov.io/gh/webpack-contrib/eslint-loader
+[chat]: https://badges.gitter.im/webpack/webpack.svg
+[chat-url]: https://gitter.im/webpack/webpack
+[size]: https://packagephobia.now.sh/badge?p=eslint-loader
+[size-url]: https://packagephobia.now.sh/result?p=eslint-loader
diff --git a/node_modules/eslint-loader/index.js b/node_modules/eslint-loader/index.js
deleted file mode 100644
index 3fa050a..0000000
--- a/node_modules/eslint-loader/index.js
+++ /dev/null
@@ -1,279 +0,0 @@
-"use strict";
-
-//var fs = require("fs");
-var assign = require("object-assign");
-var loaderUtils = require("loader-utils");
-var objectHash = require("object-hash");
-var createCache = require("loader-fs-cache");
-
-var pkg = require("./package.json");
-
-var cache = createCache("eslint-loader");
-
-var engines = {};
-
-/**
- * Class representing an ESLintError.
- * @extends Error
- */
-class ESLintError extends Error {
-  /**
-   * Create an ESLintError.
-   * @param {string} messages - Formatted eslint errors.
-   */
-  constructor(messages) {
-    super();
-    this.name = "ESLintError";
-    this.message = messages;
-    this.stack = "";
-  }
-
-  /**
-   * Returns a stringified representation of our error. This method is called
-   * when an error is consumed by console methods
-   * ex: console.error(new ESLintError(formattedMessage))
-   * @return {string} error - A stringified representation of the error.
-   */
-  inspect() {
-    return this.message;
-  }
-}
-
-/**
- * printLinterOutput
- *
- * @param {Object} eslint.executeOnText return value
- * @param {Object} config eslint configuration
- * @param {Object} webpack webpack instance
- * @return {void}
- */
-function printLinterOutput(res, config, webpack) {
-  // skip ignored file warning
-  if (
-    !(
-      res.warningCount === 1 &&
-      res.results[0].messages[0] &&
-      res.results[0].messages[0].message &&
-      res.results[0].messages[0].message.indexOf("ignore") > 1
-    )
-  ) {
-    // quiet filter done now
-    // eslint allow rules to be specified in the input between comments
-    // so we can found warnings defined in the input itself
-    if (res.warningCount && config.quiet) {
-      res.warningCount = 0;
-      res.results[0].warningCount = 0;
-      res.results[0].messages = res.results[0].messages.filter(function(
-        message
-      ) {
-        return message.severity !== 1;
-      });
-    }
-
-    // if enabled, use eslint auto-fixing where possible
-    if (
-      config.fix &&
-      (res.results[0].output !== res.src ||
-        res.results[0].fixableErrorCount > 0 ||
-        res.results[0].fixableWarningCount > 0)
-    ) {
-      var eslint = require(config.eslintPath);
-      eslint.CLIEngine.outputFixes(res);
-    }
-
-    if (res.errorCount || res.warningCount) {
-      // add filename for each results so formatter can have relevant filename
-      res.results.forEach(function(r) {
-        r.filePath = webpack.resourcePath;
-      });
-      var messages = config.formatter(res.results);
-
-      if (config.outputReport && config.outputReport.filePath) {
-        var reportOutput;
-        // if a different formatter is passed in as an option use that
-        if (config.outputReport.formatter) {
-          reportOutput = config.outputReport.formatter(res.results);
-        } else {
-          reportOutput = messages;
-        }
-        var filePath = loaderUtils.interpolateName(
-          webpack,
-          config.outputReport.filePath,
-          {
-            content: res.results
-              .map(function(r) {
-                return r.source;
-              })
-              .join("\n")
-          }
-        );
-        webpack.emitFile(filePath, reportOutput);
-      }
-
-      // default behavior: emit error only if we have errors
-      var emitter = res.errorCount ? webpack.emitError : webpack.emitWarning;
-
-      // force emitError or emitWarning if user want this
-      if (config.emitError) {
-        emitter = webpack.emitError;
-      } else if (config.emitWarning) {
-        emitter = webpack.emitWarning;
-      }
-
-      if (emitter) {
-        if (config.failOnError && res.errorCount) {
-          throw new ESLintError(
-            "Module failed because of a eslint error.\n" + messages
-          );
-        } else if (config.failOnWarning && res.warningCount) {
-          throw new ESLintError(
-            "Module failed because of a eslint warning.\n" + messages
-          );
-        }
-
-        emitter(new ESLintError(messages));
-      } else {
-        throw new Error(
-          "Your module system doesn't support emitWarning. " +
-            "Update available? \n" +
-            messages
-        );
-      }
-    }
-  }
-}
-
-/**
- * webpack loader
- *
- * @param  {String|Buffer} input JavaScript string
- * @param {Object} map input source map
- * @return {void}
- */
-module.exports = function(input, map) {
-  var webpack = this;
-
-  var userOptions = assign(
-    // user defaults
-    (webpack.options && webpack.options.eslint) || webpack.query || {},
-    // loader query string
-    loaderUtils.getOptions(webpack)
-  );
-
-  var eslintPkgPath = "eslint/package.json";
-  var userEslintPath = eslintPkgPath;
-
-  if (userOptions.eslintPath) {
-    userEslintPath = userOptions.eslintPath + "/package.json";
-  }
-
-  var eslintVersion;
-
-  try {
-    eslintVersion = require(require.resolve(userEslintPath)).version;
-  } catch (_) {
-    // ignored
-  }
-
-  if (!eslintVersion) {
-    try {
-      eslintVersion = require(require.resolve(eslintPkgPath)).version;
-    } catch (_) {
-      // ignored
-    }
-  }
-
-  var config = assign(
-    // loader defaults
-    {
-      cacheIdentifier: JSON.stringify({
-        "eslint-loader": pkg.version,
-        eslint: eslintVersion || "unknown version"
-      }),
-      eslintPath: "eslint"
-    },
-    userOptions
-  );
-
-  if (typeof config.formatter === "string") {
-    try {
-      config.formatter = require(config.formatter);
-      if (
-        config.formatter &&
-        typeof config.formatter !== "function" &&
-        typeof config.formatter.default === "function"
-      ) {
-        config.formatter = config.formatter.default;
-      }
-    } catch (_) {
-      // ignored
-    }
-  }
-
-  var cacheDirectory = config.cache;
-  var cacheIdentifier = config.cacheIdentifier;
-
-  delete config.cacheIdentifier;
-
-  // Create the engine only once per config
-  var configHash = objectHash(config);
-
-  if (!engines[configHash]) {
-    var eslint = require(config.eslintPath);
-    engines[configHash] = new eslint.CLIEngine(config);
-  }
-
-  var engine = engines[configHash];
-  if (config.formatter == null || typeof config.formatter !== "function") {
-    config.formatter = engine.getFormatter("stylish");
-  }
-
-  webpack.cacheable();
-
-  var resourcePath = webpack.resourcePath;
-  var cwd = process.cwd();
-
-  // remove cwd from resource path in case webpack has been started from project
-  // root, to allow having relative paths in .eslintignore
-  if (resourcePath.indexOf(cwd) === 0) {
-    resourcePath = resourcePath.substr(cwd.length + 1);
-  }
-
-  // return early if cached
-  if (config.cache) {
-    var callback = webpack.async();
-    return cache(
-      {
-        directory: cacheDirectory,
-        identifier: cacheIdentifier,
-        options: config,
-        source: input,
-        transform: function() {
-          return lint(engine, input, resourcePath);
-        }
-      },
-      function(err, res) {
-        if (err) {
-          return callback(err);
-        }
-
-        try {
-          printLinterOutput(
-            assign({}, res || {}, { src: input }),
-            config,
-            webpack
-          );
-        } catch (e) {
-          err = e;
-        }
-        return callback(err, input, map);
-      }
-    );
-  }
-  printLinterOutput(lint(engine, input, resourcePath), config, webpack);
-  webpack.callback(null, input, map);
-};
-
-function lint(engine, input, resourcePath) {
-  return engine.executeOnText(input, resourcePath, true);
-}
diff --git a/node_modules/eslint-loader/node_modules/.bin/json5 b/node_modules/eslint-loader/node_modules/.bin/json5
deleted file mode 100644
index 882cecd..0000000
--- a/node_modules/eslint-loader/node_modules/.bin/json5
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
-
-case `uname` in
-    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
-esac
-
-if [ -x "$basedir/node" ]; then
-  "$basedir/node"  "$basedir/../json5/lib/cli.js" "$@"
-  ret=$?
-else 
-  node  "$basedir/../json5/lib/cli.js" "$@"
-  ret=$?
-fi
-exit $ret
diff --git a/node_modules/eslint-loader/node_modules/.bin/json5.cmd b/node_modules/eslint-loader/node_modules/.bin/json5.cmd
deleted file mode 100644
index b030d83..0000000
--- a/node_modules/eslint-loader/node_modules/.bin/json5.cmd
+++ /dev/null
@@ -1,17 +0,0 @@
-@ECHO off
-SETLOCAL
-CALL :find_dp0
-
-IF EXIST "%dp0%\node.exe" (
-  SET "_prog=%dp0%\node.exe"
-) ELSE (
-  SET "_prog=node"
-  SET PATHEXT=%PATHEXT:;.JS;=;%
-)
-
-"%_prog%"  "%dp0%\..\json5\lib\cli.js" %*
-ENDLOCAL
-EXIT /b %errorlevel%
-:find_dp0
-SET dp0=%~dp0
-EXIT /b
diff --git a/node_modules/eslint-loader/node_modules/.bin/json5.ps1 b/node_modules/eslint-loader/node_modules/.bin/json5.ps1
deleted file mode 100644
index 585f9ad..0000000
--- a/node_modules/eslint-loader/node_modules/.bin/json5.ps1
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env pwsh
-$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
-
-$exe=""
-if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
-  # Fix case when both the Windows and Linux builds of Node
-  # are installed in the same directory
-  $exe=".exe"
-}
-$ret=0
-if (Test-Path "$basedir/node$exe") {
-  & "$basedir/node$exe"  "$basedir/../json5/lib/cli.js" $args
-  $ret=$LASTEXITCODE
-} else {
-  & "node$exe"  "$basedir/../json5/lib/cli.js" $args
-  $ret=$LASTEXITCODE
-}
-exit $ret
diff --git a/node_modules/eslint-loader/node_modules/json5/LICENSE.md b/node_modules/eslint-loader/node_modules/json5/LICENSE.md
deleted file mode 100644
index 2171aca..0000000
--- a/node_modules/eslint-loader/node_modules/json5/LICENSE.md
+++ /dev/null
@@ -1,23 +0,0 @@
-MIT License
-
-Copyright (c) 2012-2018 Aseem Kishore, and [others].
-
-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.
-
-[others]: https://github.com/json5/json5/contributors
diff --git a/node_modules/eslint-loader/node_modules/json5/README.md b/node_modules/eslint-loader/node_modules/json5/README.md
deleted file mode 100644
index 8e03554..0000000
--- a/node_modules/eslint-loader/node_modules/json5/README.md
+++ /dev/null
@@ -1,234 +0,0 @@
-# JSON5 鈥� JSON for Humans
-
-[![Build Status](https://travis-ci.org/json5/json5.svg)][Build Status]
-[![Coverage
-Status](https://coveralls.io/repos/github/json5/json5/badge.svg)][Coverage
-Status]
-
-The JSON5 Data Interchange Format (JSON5) is a superset of [JSON] that aims to
-alleviate some of the limitations of JSON by expanding its syntax to include
-some productions from [ECMAScript 5.1].
-
-This JavaScript library is the official reference implementation for JSON5
-parsing and serialization libraries.
-
-[Build Status]: https://travis-ci.org/json5/json5
-
-[Coverage Status]: https://coveralls.io/github/json5/json5
-
-[JSON]: https://tools.ietf.org/html/rfc7159
-
-[ECMAScript 5.1]: https://www.ecma-international.org/ecma-262/5.1/
-
-## Summary of Features
-The following ECMAScript 5.1 features, which are not supported in JSON, have
-been extended to JSON5.
-
-### Objects
-- Object keys may be an ECMAScript 5.1 _[IdentifierName]_.
-- Objects may have a single trailing comma.
-
-### Arrays
-- Arrays may have a single trailing comma.
-
-### Strings
-- Strings may be single quoted.
-- Strings may span multiple lines by escaping new line characters.
-- Strings may include character escapes.
-
-### Numbers
-- Numbers may be hexadecimal.
-- Numbers may have a leading or trailing decimal point.
-- Numbers may be [IEEE 754] positive infinity, negative infinity, and NaN.
-- Numbers may begin with an explicit plus sign.
-
-### Comments
-- Single and multi-line comments are allowed.
-
-### White Space
-- Additional white space characters are allowed.
-
-[IdentifierName]: https://www.ecma-international.org/ecma-262/5.1/#sec-7.6
-
-[IEEE 754]: http://ieeexplore.ieee.org/servlet/opac?punumber=4610933
-
-## Short Example
-```js
-{
-  // comments
-  unquoted: 'and you can quote me on that',
-  singleQuotes: 'I can use "double quotes" here',
-  lineBreaks: "Look, Mom! \
-No \\n's!",
-  hexadecimal: 0xdecaf,
-  leadingDecimalPoint: .8675309, andTrailing: 8675309.,
-  positiveSign: +1,
-  trailingComma: 'in objects', andIn: ['arrays',],
-  "backwardsCompatible": "with JSON",
-}
-```
-
-## Specification
-For a detailed explanation of the JSON5 format, please read the [official
-specification](https://json5.github.io/json5-spec/).
-
-## Installation
-### Node.js
-```sh
-npm install json5
-```
-
-```js
-const JSON5 = require('json5')
-```
-
-### Browsers
-```html
-<script src="https://unpkg.com/json5@^1.0.0"></script>
-```
-
-This will create a global `JSON5` variable.
-
-## API
-The JSON5 API is compatible with the [JSON API].
-
-[JSON API]:
-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON
-
-### JSON5.parse()
-Parses a JSON5 string, constructing the JavaScript value or object described by
-the string. An optional reviver function can be provided to perform a
-transformation on the resulting object before it is returned.
-
-#### Syntax
-    JSON5.parse(text[, reviver])
-
-#### Parameters
-- `text`: The string to parse as JSON5.
-- `reviver`: If a function, this prescribes how the value originally produced by
-  parsing is transformed, before being returned.
-
-#### Return value
-The object corresponding to the given JSON5 text.
-
-### JSON5.stringify()
-Converts a JavaScript value to a JSON5 string, optionally replacing values if a
-replacer function is specified, or optionally including only the specified
-properties if a replacer array is specified.
-
-#### Syntax
-    JSON5.stringify(value[, replacer[, space]])
-    JSON5.stringify(value[, options])
-
-#### Parameters
-- `value`: The value to convert to a JSON5 string.
-- `replacer`: A function that alters the behavior of the stringification
-  process, or an array of String and Number objects that serve as a whitelist
-  for selecting/filtering the properties of the value object to be included in
-  the JSON5 string. If this value is null or not provided, all properties of the
-  object are included in the resulting JSON5 string.
-- `space`: A String or Number object that's used to insert white space into the
-  output JSON5 string for readability purposes. If this is a Number, it
-  indicates the number of space characters to use as white space; this number is
-  capped at 10 (if it is greater, the value is just 10). Values less than 1
-  indicate that no space should be used. If this is a String, the string (or the
-  first 10 characters of the string, if it's longer than that) is used as white
-  space. If this parameter is not provided (or is null), no white space is used.
-  If white space is used, trailing commas will be used in objects and arrays.
-- `options`: An object with the following properties:
-  - `replacer`: Same as the `replacer` parameter.
-  - `space`: Same as the `space` parameter.
-  - `quote`: A String representing the quote character to use when serializing
-    strings.
-
-#### Return value
-A JSON5 string representing the value.
-
-### Node.js `require()` JSON5 files
-When using Node.js, you can `require()` JSON5 files by adding the following
-statement.
-
-```js
-require('json5/lib/register')
-```
-
-Then you can load a JSON5 file with a Node.js `require()` statement. For
-example:
-
-```js
-const config = require('./config.json5')
-```
-
-## CLI
-Since JSON is more widely used than JSON5, this package includes a CLI for
-converting JSON5 to JSON and for validating the syntax of JSON5 documents.
-
-### Installation
-```sh
-npm install --global json5
-```
-
-### Usage
-```sh
-json5 [options] <file>
-```
-
-If `<file>` is not provided, then STDIN is used.
-
-#### Options:
-- `-s`, `--space`: The number of spaces to indent or `t` for tabs
-- `-o`, `--out-file [file]`: Output to the specified file, otherwise STDOUT
-- `-v`, `--validate`: Validate JSON5 but do not output JSON
-- `-V`, `--version`: Output the version number
-- `-h`, `--help`: Output usage information
-
-## Contibuting
-### Development
-```sh
-git clone https://github.com/json5/json5
-cd json5
-npm install
-```
-
-When contributing code, please write relevant tests and run `npm test` and `npm
-run lint` before submitting pull requests. Please use an editor that supports
-[EditorConfig](http://editorconfig.org/).
-
-### Issues
-To report bugs or request features regarding the JSON5 data format, please
-submit an issue to the [official specification
-repository](https://github.com/json5/json5-spec).
-
-To report bugs or request features regarding the JavaScript implentation of
-JSON5, please submit an issue to this repository.
-
-## License
-MIT. See [LICENSE.md](./LICENSE.md) for details.
-
-## Credits
-[Assem Kishore](https://github.com/aseemk) founded this project.
-
-[Michael Bolin](http://bolinfest.com/) independently arrived at and published
-some of these same ideas with awesome explanations and detail. Recommended
-reading: [Suggested Improvements to JSON](http://bolinfest.com/essays/json.html)
-
-[Douglas Crockford](http://www.crockford.com/) of course designed and built
-JSON, but his state machine diagrams on the [JSON website](http://json.org/), as
-cheesy as it may sound, gave us motivation and confidence that building a new
-parser to implement these ideas was within reach! The original
-implementation of JSON5 was also modeled directly off of Doug鈥檚 open-source
-[json_parse.js] parser. We鈥檙e grateful for that clean and well-documented
-code.
-
-[json_parse.js]:
-https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js
-
-[Max Nanasy](https://github.com/MaxNanasy) has been an early and prolific
-supporter, contributing multiple patches and ideas.
-
-[Andrew Eisenberg](https://github.com/aeisenberg) contributed the original
-`stringify` method.
-
-[Jordan Tucker](https://github.com/jordanbtucker) has aligned JSON5 more closely
-with ES5, wrote the official JSON5 specification, completely rewrote the
-codebase from the ground up, and is actively maintaining this project.
diff --git a/node_modules/eslint-loader/node_modules/json5/lib/cli.js b/node_modules/eslint-loader/node_modules/json5/lib/cli.js
deleted file mode 100644
index d15aef0..0000000
--- a/node_modules/eslint-loader/node_modules/json5/lib/cli.js
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env node
-'use strict';var _fs=require('fs');var _fs2=_interopRequireDefault(_fs);var _path=require('path');var _path2=_interopRequireDefault(_path);var _minimist=require('minimist');var _minimist2=_interopRequireDefault(_minimist);var _package=require('../package.json');var _package2=_interopRequireDefault(_package);var _=require('./');var _2=_interopRequireDefault(_);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var argv=(0,_minimist2.default)(process.argv.slice(2),{alias:{'convert':'c','space':'s','validate':'v','out-file':'o','version':'V','help':'h'},boolean:['convert','validate','version','help'],string:['space','out-file']});if(argv.version){version()}else if(argv.help){usage()}else{var inFilename=argv._[0];var readStream=void 0;if(inFilename){readStream=_fs2.default.createReadStream(inFilename)}else{readStream=process.stdin}var json5='';readStream.on('data',function(data){json5+=data});readStream.on('end',function(){var space=void 0;if(argv.space==='t'||argv.space==='tab'){space='\t'}else{space=Number(argv.space)}var value=void 0;try{value=_2.default.parse(json5);if(!argv.validate){var json=JSON.stringify(value,null,space);var writeStream=void 0;if(argv.convert&&inFilename&&!argv.o){var parsedFilename=_path2.default.parse(inFilename);var outFilename=_path2.default.format(Object.assign(parsedFilename,{base:_path2.default.basename(parsedFilename.base,parsedFilename.ext)+'.json'}));writeStream=_fs2.default.createWriteStream(outFilename)}else if(argv.o){writeStream=_fs2.default.createWriteStream(argv.o)}else{writeStream=process.stdout}writeStream.write(json)}}catch(err){console.error(err.message);process.exit(1)}})}function version(){console.log(_package2.default.version)}function usage(){console.log('\n  Usage: json5 [options] <file>\n\n  If <file> is not provided, then STDIN is used.\n\n  Options:\n\n    -s, --space              The number of spaces to indent or \'t\' for tabs\n    -o, --out-file [file]    Output to the specified file, otherwise STDOUT\n    -v, --validate           Validate JSON5 but do not output JSON\n    -V, --version            Output the version number\n    -h, --help               Output usage information')}
\ No newline at end of file
diff --git a/node_modules/eslint-loader/node_modules/json5/lib/index.js b/node_modules/eslint-loader/node_modules/json5/lib/index.js
deleted file mode 100644
index c943e65..0000000
--- a/node_modules/eslint-loader/node_modules/json5/lib/index.js
+++ /dev/null
@@ -1 +0,0 @@
-'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _parse=require('./parse');var _parse2=_interopRequireDefault(_parse);var _stringify=require('./stringify');var _stringify2=_interopRequireDefault(_stringify);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default={parse:_parse2.default,stringify:_stringify2.default};module.exports=exports['default'];
\ No newline at end of file
diff --git a/node_modules/eslint-loader/node_modules/json5/lib/parse.js b/node_modules/eslint-loader/node_modules/json5/lib/parse.js
deleted file mode 100644
index f368930..0000000
--- a/node_modules/eslint-loader/node_modules/json5/lib/parse.js
+++ /dev/null
@@ -1 +0,0 @@
-'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=parse;var _util=require('./util');var util=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}var source=void 0;var parseState=void 0;var stack=void 0;var pos=void 0;var line=void 0;var column=void 0;var token=void 0;var key=void 0;var root=void 0;function parse(text,reviver){source=String(text);parseState='start';stack=[];pos=0;line=1;column=0;token=undefined;key=undefined;root=undefined;do{token=lex();parseStates[parseState]()}while(token.type!=='eof');if(typeof reviver==='function'){return internalize({'':root},'',reviver)}return root}function internalize(holder,name,reviver){var value=holder[name];if(value!=null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){if(Array.isArray(value)){for(var i=0;i<value.length;i++){var _key=String(i);var replacement=internalize(value,_key,reviver);if(replacement===undefined){delete value[_key]}else{Object.defineProperty(value,_key,{value:replacement,writable:true,enumerable:true,configurable:true})}}}else{for(var _key2 in value){var _replacement=internalize(value,_key2,reviver);if(_replacement===undefined){delete value[_key2]}else{Object.defineProperty(value,_key2,{value:_replacement,writable:true,enumerable:true,configurable:true})}}}}return reviver.call(holder,name,value)}var lexState=void 0;var buffer=void 0;var doubleQuote=void 0;var _sign=void 0;var c=void 0;function lex(){lexState='default';buffer='';doubleQuote=false;_sign=1;for(;;){c=peek();var _token=lexStates[lexState]();if(_token){return _token}}}function peek(){if(source[pos]){return String.fromCodePoint(source.codePointAt(pos))}}function read(){var c=peek();if(c==='\n'){line++;column=0}else if(c){column+=c.length}else{column++}if(c){pos+=c.length}return c}var lexStates={default:function _default(){switch(c){case'\t':case'\x0B':case'\f':case' ':case'\xA0':case'\uFEFF':case'\n':case'\r':case'\u2028':case'\u2029':read();return;case'/':read();lexState='comment';return;case undefined:read();return newToken('eof');}if(util.isSpaceSeparator(c)){read();return}return lexStates[parseState]()},comment:function comment(){switch(c){case'*':read();lexState='multiLineComment';return;case'/':read();lexState='singleLineComment';return;}throw invalidChar(read())},multiLineComment:function multiLineComment(){switch(c){case'*':read();lexState='multiLineCommentAsterisk';return;case undefined:throw invalidChar(read());}read()},multiLineCommentAsterisk:function multiLineCommentAsterisk(){switch(c){case'*':read();return;case'/':read();lexState='default';return;case undefined:throw invalidChar(read());}read();lexState='multiLineComment'},singleLineComment:function singleLineComment(){switch(c){case'\n':case'\r':case'\u2028':case'\u2029':read();lexState='default';return;case undefined:read();return newToken('eof');}read()},value:function value(){switch(c){case'{':case'[':return newToken('punctuator',read());case'n':read();literal('ull');return newToken('null',null);case't':read();literal('rue');return newToken('boolean',true);case'f':read();literal('alse');return newToken('boolean',false);case'-':case'+':if(read()==='-'){_sign=-1}lexState='sign';return;case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);case'"':case'\'':doubleQuote=read()==='"';buffer='';lexState='string';return;}throw invalidChar(read())},identifierNameStartEscape:function identifierNameStartEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':break;default:if(!util.isIdStartChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName'},identifierName:function identifierName(){switch(c){case'$':case'_':case'\u200C':case'\u200D':buffer+=read();return;case'\\':read();lexState='identifierNameEscape';return;}if(util.isIdContinueChar(c)){buffer+=read();return}return newToken('identifier',buffer)},identifierNameEscape:function identifierNameEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':case'\u200C':case'\u200D':break;default:if(!util.isIdContinueChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName'},sign:function sign(){switch(c){case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',_sign*Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);}throw invalidChar(read())},zero:function zero(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;case'x':case'X':buffer+=read();lexState='hexadecimal';return;}return newToken('numeric',_sign*0)},decimalInteger:function decimalInteger(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalPointLeading:function decimalPointLeading(){if(util.isDigit(c)){buffer+=read();lexState='decimalFraction';return}throw invalidChar(read())},decimalPoint:function decimalPoint(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();lexState='decimalFraction';return}return newToken('numeric',_sign*Number(buffer))},decimalFraction:function decimalFraction(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalExponent:function decimalExponent(){switch(c){case'+':case'-':buffer+=read();lexState='decimalExponentSign';return;}if(util.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentSign:function decimalExponentSign(){if(util.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentInteger:function decimalExponentInteger(){if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},hexadecimal:function hexadecimal(){if(util.isHexDigit(c)){buffer+=read();lexState='hexadecimalInteger';return}throw invalidChar(read())},hexadecimalInteger:function hexadecimalInteger(){if(util.isHexDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},string:function string(){switch(c){case'\\':read();buffer+=escape();return;case'"':if(doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\'':if(!doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\n':case'\r':throw invalidChar(read());case'\u2028':case'\u2029':separatorChar(c);break;case undefined:throw invalidChar(read());}buffer+=read()},start:function start(){switch(c){case'{':case'[':return newToken('punctuator',read());}lexState='value'},beforePropertyName:function beforePropertyName(){switch(c){case'$':case'_':buffer=read();lexState='identifierName';return;case'\\':read();lexState='identifierNameStartEscape';return;case'}':return newToken('punctuator',read());case'"':case'\'':doubleQuote=read()==='"';lexState='string';return;}if(util.isIdStartChar(c)){buffer+=read();lexState='identifierName';return}throw invalidChar(read())},afterPropertyName:function afterPropertyName(){if(c===':'){return newToken('punctuator',read())}throw invalidChar(read())},beforePropertyValue:function beforePropertyValue(){lexState='value'},afterPropertyValue:function afterPropertyValue(){switch(c){case',':case'}':return newToken('punctuator',read());}throw invalidChar(read())},beforeArrayValue:function beforeArrayValue(){if(c===']'){return newToken('punctuator',read())}lexState='value'},afterArrayValue:function afterArrayValue(){switch(c){case',':case']':return newToken('punctuator',read());}throw invalidChar(read())},end:function end(){throw invalidChar(read())}};function newToken(type,value){return{type:type,value:value,line:line,column:column}}function literal(s){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=s[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _c=_step.value;var p=peek();if(p!==_c){throw invalidChar(read())}read()}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}function escape(){var c=peek();switch(c){case'b':read();return'\b';case'f':read();return'\f';case'n':read();return'\n';case'r':read();return'\r';case't':read();return'\t';case'v':read();return'\x0B';case'0':read();if(util.isDigit(peek())){throw invalidChar(read())}return'\0';case'x':read();return hexEscape();case'u':read();return unicodeEscape();case'\n':case'\u2028':case'\u2029':read();return'';case'\r':read();if(peek()==='\n'){read()}return'';case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':throw invalidChar(read());case undefined:throw invalidChar(read());}return read()}function hexEscape(){var buffer='';var c=peek();if(!util.isHexDigit(c)){throw invalidChar(read())}buffer+=read();c=peek();if(!util.isHexDigit(c)){throw invalidChar(read())}buffer+=read();return String.fromCodePoint(parseInt(buffer,16))}function unicodeEscape(){var buffer='';var count=4;while(count-->0){var _c2=peek();if(!util.isHexDigit(_c2)){throw invalidChar(read())}buffer+=read()}return String.fromCodePoint(parseInt(buffer,16))}var parseStates={start:function start(){if(token.type==='eof'){throw invalidEOF()}push()},beforePropertyName:function beforePropertyName(){switch(token.type){case'identifier':case'string':key=token.value;parseState='afterPropertyName';return;case'punctuator':pop();return;case'eof':throw invalidEOF();}},afterPropertyName:function afterPropertyName(){if(token.type==='eof'){throw invalidEOF()}parseState='beforePropertyValue'},beforePropertyValue:function beforePropertyValue(){if(token.type==='eof'){throw invalidEOF()}push()},beforeArrayValue:function beforeArrayValue(){if(token.type==='eof'){throw invalidEOF()}if(token.type==='punctuator'&&token.value===']'){pop();return}push()},afterPropertyValue:function afterPropertyValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforePropertyName';return;case'}':pop();}},afterArrayValue:function afterArrayValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforeArrayValue';return;case']':pop();}},end:function end(){}};function push(){var value=void 0;switch(token.type){case'punctuator':switch(token.value){case'{':value={};break;case'[':value=[];break;}break;case'null':case'boolean':case'numeric':case'string':value=token.value;break;}if(root===undefined){root=value}else{var parent=stack[stack.length-1];if(Array.isArray(parent)){parent.push(value)}else{Object.defineProperty(parent,key,{value:value,writable:true,enumerable:true,configurable:true})}}if(value!==null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){stack.push(value);if(Array.isArray(value)){parseState='beforeArrayValue'}else{parseState='beforePropertyName'}}else{var current=stack[stack.length-1];if(current==null){parseState='end'}else if(Array.isArray(current)){parseState='afterArrayValue'}else{parseState='afterPropertyValue'}}}function pop(){stack.pop();var current=stack[stack.length-1];if(current==null){parseState='end'}else if(Array.isArray(current)){parseState='afterArrayValue'}else{parseState='afterPropertyValue'}}function invalidChar(c){if(c===undefined){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}return syntaxError('JSON5: invalid character \''+formatChar(c)+'\' at '+line+':'+column)}function invalidEOF(){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}function invalidIdentifier(){column-=5;return syntaxError('JSON5: invalid identifier character at '+line+':'+column)}function separatorChar(c){console.warn('JSON5: \''+c+'\' is not valid ECMAScript; consider escaping')}function formatChar(c){var replacements={'\'':'\\\'','"':'\\"','\\':'\\\\','\b':'\\b','\f':'\\f','\n':'\\n','\r':'\\r','\t':'\\t','\x0B':'\\v','\0':'\\0','\u2028':'\\u2028','\u2029':'\\u2029'};if(replacements[c]){return replacements[c]}if(c<' '){var hexString=c.charCodeAt(0).toString(16);return'\\x'+('00'+hexString).substring(hexString.length)}return c}function syntaxError(message){var err=new SyntaxError(message);err.lineNumber=line;err.columnNumber=column;return err}module.exports=exports['default'];
\ No newline at end of file
diff --git a/node_modules/eslint-loader/node_modules/json5/lib/register.js b/node_modules/eslint-loader/node_modules/json5/lib/register.js
deleted file mode 100644
index aa16e96..0000000
--- a/node_modules/eslint-loader/node_modules/json5/lib/register.js
+++ /dev/null
@@ -1 +0,0 @@
-'use strict';var _fs=require('fs');var _fs2=_interopRequireDefault(_fs);var _=require('./');var _2=_interopRequireDefault(_);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}require.extensions['.json5']=function(module,filename){var content=_fs2.default.readFileSync(filename,'utf8');try{module.exports=_2.default.parse(content)}catch(err){err.message=filename+': '+err.message;throw err}};
\ No newline at end of file
diff --git a/node_modules/eslint-loader/node_modules/json5/lib/require.js b/node_modules/eslint-loader/node_modules/json5/lib/require.js
deleted file mode 100644
index dfdc039..0000000
--- a/node_modules/eslint-loader/node_modules/json5/lib/require.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";require("./register");console.warn("'json5/require' is deprecated. Please use 'json5/register' instead.");
\ No newline at end of file
diff --git a/node_modules/eslint-loader/node_modules/json5/lib/stringify.js b/node_modules/eslint-loader/node_modules/json5/lib/stringify.js
deleted file mode 100644
index ce6917e..0000000
--- a/node_modules/eslint-loader/node_modules/json5/lib/stringify.js
+++ /dev/null
@@ -1 +0,0 @@
-'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=stringify;var _util=require('./util');var util=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function stringify(value,replacer,space){var stack=[];var indent='';var propertyList=void 0;var replacerFunc=void 0;var gap='';var quote=void 0;if(replacer!=null&&(typeof replacer==='undefined'?'undefined':_typeof(replacer))==='object'&&!Array.isArray(replacer)){space=replacer.space;quote=replacer.quote;replacer=replacer.replacer}if(typeof replacer==='function'){replacerFunc=replacer}else if(Array.isArray(replacer)){propertyList=[];var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=replacer[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var v=_step.value;var item=void 0;if(typeof v==='string'){item=v}else if(typeof v==='number'||v instanceof String||v instanceof Number){item=String(v)}if(item!==undefined&&propertyList.indexOf(item)<0){propertyList.push(item)}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}if(space instanceof Number){space=Number(space)}else if(space instanceof String){space=String(space)}if(typeof space==='number'){if(space>0){space=Math.min(10,Math.floor(space));gap='          '.substr(0,space)}}else if(typeof space==='string'){gap=space.substr(0,10)}return serializeProperty('',{'':value});function serializeProperty(key,holder){var value=holder[key];if(value!=null){if(typeof value.toJSON5==='function'){value=value.toJSON5(key)}else if(typeof value.toJSON==='function'){value=value.toJSON(key)}}if(replacerFunc){value=replacerFunc.call(holder,key,value)}if(value instanceof Number){value=Number(value)}else if(value instanceof String){value=String(value)}else if(value instanceof Boolean){value=value.valueOf()}switch(value){case null:return'null';case true:return'true';case false:return'false';}if(typeof value==='string'){return quoteString(value,false)}if(typeof value==='number'){return String(value)}if((typeof value==='undefined'?'undefined':_typeof(value))==='object'){return Array.isArray(value)?serializeArray(value):serializeObject(value)}return undefined}function quoteString(value){var quotes={'\'':0.1,'"':0.2};var replacements={'\'':'\\\'','"':'\\"','\\':'\\\\','\b':'\\b','\f':'\\f','\n':'\\n','\r':'\\r','\t':'\\t','\x0B':'\\v','\0':'\\0','\u2028':'\\u2028','\u2029':'\\u2029'};var product='';var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=value[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var c=_step2.value;switch(c){case'\'':case'"':quotes[c]++;product+=c;continue;}if(replacements[c]){product+=replacements[c];continue}if(c<' '){var hexString=c.charCodeAt(0).toString(16);product+='\\x'+('00'+hexString).substring(hexString.length);continue}product+=c}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2}}}var quoteChar=quote||Object.keys(quotes).reduce(function(a,b){return quotes[a]<quotes[b]?a:b});product=product.replace(new RegExp(quoteChar,'g'),replacements[quoteChar]);return quoteChar+product+quoteChar}function serializeObject(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var keys=propertyList||Object.keys(value);var partial=[];var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=keys[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var key=_step3.value;var propertyString=serializeProperty(key,value);if(propertyString!==undefined){var member=serializeKey(key)+':';if(gap!==''){member+=' '}member+=propertyString;partial.push(member)}}}catch(err){_didIteratorError3=true;_iteratorError3=err}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return()}}finally{if(_didIteratorError3){throw _iteratorError3}}}var final=void 0;if(partial.length===0){final='{}'}else{var properties=void 0;if(gap===''){properties=partial.join(',');final='{'+properties+'}'}else{var separator=',\n'+indent;properties=partial.join(separator);final='{\n'+indent+properties+',\n'+stepback+'}'}}stack.pop();indent=stepback;return final}function serializeKey(key){if(key.length===0){return quoteString(key,true)}var firstChar=String.fromCodePoint(key.codePointAt(0));if(!util.isIdStartChar(firstChar)){return quoteString(key,true)}for(var i=firstChar.length;i<key.length;i++){if(!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))){return quoteString(key,true)}}return key}function serializeArray(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var partial=[];for(var i=0;i<value.length;i++){var propertyString=serializeProperty(String(i),value);partial.push(propertyString!==undefined?propertyString:'null')}var final=void 0;if(partial.length===0){final='[]'}else{if(gap===''){var properties=partial.join(',');final='['+properties+']'}else{var separator=',\n'+indent;var _properties=partial.join(separator);final='[\n'+indent+_properties+',\n'+stepback+']'}}stack.pop();indent=stepback;return final}}module.exports=exports['default'];
\ No newline at end of file
diff --git a/node_modules/eslint-loader/node_modules/json5/lib/unicode.js b/node_modules/eslint-loader/node_modules/json5/lib/unicode.js
deleted file mode 100644
index fa664cf..0000000
--- a/node_modules/eslint-loader/node_modules/json5/lib/unicode.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Space_Separator=exports.Space_Separator=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/;var ID_Start=exports.ID_Start=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/;var ID_Continue=exports.ID_Continue=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/;
\ No newline at end of file
diff --git a/node_modules/eslint-loader/node_modules/json5/lib/util.js b/node_modules/eslint-loader/node_modules/json5/lib/util.js
deleted file mode 100644
index d884887..0000000
--- a/node_modules/eslint-loader/node_modules/json5/lib/util.js
+++ /dev/null
@@ -1 +0,0 @@
-'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.isSpaceSeparator=isSpaceSeparator;exports.isIdStartChar=isIdStartChar;exports.isIdContinueChar=isIdContinueChar;exports.isDigit=isDigit;exports.isHexDigit=isHexDigit;var _unicode=require('../lib/unicode');var unicode=_interopRequireWildcard(_unicode);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function isSpaceSeparator(c){return unicode.Space_Separator.test(c)}function isIdStartChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c==='$'||c==='_'||unicode.ID_Start.test(c)}function isIdContinueChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9'||c==='$'||c==='_'||c==='\u200C'||c==='\u200D'||unicode.ID_Continue.test(c)}function isDigit(c){return /[0-9]/.test(c)}function isHexDigit(c){return /[0-9A-Fa-f]/.test(c)}
\ No newline at end of file
diff --git a/node_modules/eslint-loader/node_modules/json5/package.json b/node_modules/eslint-loader/node_modules/json5/package.json
deleted file mode 100644
index 8b2e524..0000000
--- a/node_modules/eslint-loader/node_modules/json5/package.json
+++ /dev/null
@@ -1,115 +0,0 @@
-{
-  "_from": "json5@^1.0.1",
-  "_id": "json5@1.0.2",
-  "_inBundle": false,
-  "_integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-  "_location": "/eslint-loader/json5",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "json5@^1.0.1",
-    "name": "json5",
-    "escapedName": "json5",
-    "rawSpec": "^1.0.1",
-    "saveSpec": null,
-    "fetchSpec": "^1.0.1"
-  },
-  "_requiredBy": [
-    "/eslint-loader/loader-utils"
-  ],
-  "_resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-  "_shasum": "63d98d60f21b313b77c4d6da18bfa69d80e1d593",
-  "_spec": "json5@^1.0.1",
-  "_where": "C:\\Users\\feige\\Desktop\\RuoYi-Vue-master\\RuoYi-Vue-master\\ruoyi-ui\\node_modules\\eslint-loader\\node_modules\\loader-utils",
-  "author": {
-    "name": "Aseem Kishore",
-    "email": "aseem.kishore@gmail.com"
-  },
-  "bin": {
-    "json5": "lib/cli.js"
-  },
-  "browser": "dist/index.js",
-  "bugs": {
-    "url": "https://github.com/json5/json5/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Max Nanasy",
-      "email": "max.nanasy@gmail.com"
-    },
-    {
-      "name": "Andrew Eisenberg",
-      "email": "andrew@eisenberg.as"
-    },
-    {
-      "name": "Jordan Tucker",
-      "email": "jordanbtucker@gmail.com"
-    }
-  ],
-  "dependencies": {
-    "minimist": "^1.2.0"
-  },
-  "deprecated": false,
-  "description": "JSON for humans.",
-  "devDependencies": {
-    "babel-cli": "^6.26.0",
-    "babel-core": "^6.26.0",
-    "babel-plugin-add-module-exports": "^0.2.1",
-    "babel-plugin-external-helpers": "^6.22.0",
-    "babel-plugin-istanbul": "^4.1.5",
-    "babel-preset-env": "^1.6.1",
-    "babel-register": "^6.26.0",
-    "babelrc-rollup": "^3.0.0",
-    "coveralls": "^3.0.0",
-    "cross-env": "^5.1.4",
-    "del": "^3.0.0",
-    "eslint": "^4.18.2",
-    "eslint-config-standard": "^11.0.0",
-    "eslint-plugin-import": "^2.9.0",
-    "eslint-plugin-node": "^6.0.1",
-    "eslint-plugin-promise": "^3.7.0",
-    "eslint-plugin-standard": "^3.0.1",
-    "mocha": "^5.0.4",
-    "nyc": "^11.4.1",
-    "regenerate": "^1.3.3",
-    "rollup": "^0.56.5",
-    "rollup-plugin-babel": "^3.0.3",
-    "rollup-plugin-commonjs": "^9.0.0",
-    "rollup-plugin-node-resolve": "^3.2.0",
-    "rollup-plugin-uglify": "^3.0.0",
-    "sinon": "^4.4.2",
-    "unicode-9.0.0": "^0.7.5"
-  },
-  "files": [
-    "lib/",
-    "dist/"
-  ],
-  "homepage": "http://json5.org/",
-  "keywords": [
-    "json",
-    "json5",
-    "es5",
-    "es2015",
-    "ecmascript"
-  ],
-  "license": "MIT",
-  "main": "lib/index.js",
-  "name": "json5",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/json5/json5.git"
-  },
-  "scripts": {
-    "build": "babel-node build/build.js && babel src -d lib && rollup -c",
-    "coverage": "nyc report --reporter=text-lcov | coveralls",
-    "lint": "eslint --fix build src",
-    "prepublishOnly": "npm run lint && npm test && npm run production",
-    "pretest": "cross-env NODE_ENV=test npm run build",
-    "preversion": "npm run lint && npm test && npm run production",
-    "production": "cross-env NODE_ENV=production npm run build",
-    "test": "nyc --reporter=html --reporter=text mocha"
-  },
-  "version": "1.0.2"
-}
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/LICENSE b/node_modules/eslint-loader/node_modules/loader-utils/LICENSE
deleted file mode 100644
index 8c11fc7..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright JS Foundation and other contributors
-
-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/eslint-loader/node_modules/loader-utils/README.md b/node_modules/eslint-loader/node_modules/loader-utils/README.md
deleted file mode 100644
index 37fb15d..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/README.md
+++ /dev/null
@@ -1,275 +0,0 @@
-# loader-utils
-
-## Methods
-
-### `getOptions`
-
-Recommended way to retrieve the options of a loader invocation:
-
-```javascript
-// inside your loader
-const options = loaderUtils.getOptions(this);
-```
-
-1. If `this.query` is a string:
-	- Tries to parse the query string and returns a new object
-	- Throws if it's not a valid query string
-2. If `this.query` is object-like, it just returns `this.query`
-3. In any other case, it just returns `null`
-
-**Please note:** The returned `options` object is *read-only*. It may be re-used across multiple invocations.
-If you pass it on to another library, make sure to make a *deep copy* of it:
-
-```javascript
-const options = Object.assign(
-	{},
-	defaultOptions,
-	loaderUtils.getOptions(this) // it is safe to pass null to Object.assign()
-);
-// don't forget nested objects or arrays
-options.obj = Object.assign({}, options.obj); 
-options.arr = options.arr.slice();
-someLibrary(options);
-```
-
-[clone](https://www.npmjs.com/package/clone) is a good library to make a deep copy of the options.
-
-#### Options as query strings
-
-If the loader options have been passed as loader query string (`loader?some&params`), the string is parsed by using [`parseQuery`](#parsequery).
-
-### `parseQuery`
-
-Parses a passed string (e.g. `loaderContext.resourceQuery`) as a query string, and returns an object.
-
-``` javascript
-const params = loaderUtils.parseQuery(this.resourceQuery); // resource: `file?param1=foo`
-if (params.param1 === "foo") {
-	// do something
-}
-```
-
-The string is parsed like this:
-
-``` text
-                             -> Error
-?                            -> {}
-?flag                        -> { flag: true }
-?+flag                       -> { flag: true }
-?-flag                       -> { flag: false }
-?xyz=test                    -> { xyz: "test" }
-?xyz=1                       -> { xyz: "1" } // numbers are NOT parsed
-?xyz[]=a                     -> { xyz: ["a"] }
-?flag1&flag2                 -> { flag1: true, flag2: true }
-?+flag1,-flag2               -> { flag1: true, flag2: false }
-?xyz[]=a,xyz[]=b             -> { xyz: ["a", "b"] }
-?a%2C%26b=c%2C%26d           -> { "a,&b": "c,&d" }
-?{data:{a:1},isJSON5:true}   -> { data: { a: 1 }, isJSON5: true }
-```
-
-### `stringifyRequest`
-
-Turns a request into a string that can be used inside `require()` or `import` while avoiding absolute paths.
-Use it instead of `JSON.stringify(...)` if you're generating code inside a loader.
-
-**Why is this necessary?** Since webpack calculates the hash before module paths are translated into module ids, we must avoid absolute paths to ensure
-consistent hashes across different compilations.
-
-This function:
-
-- resolves absolute requests into relative requests if the request and the module are on the same hard drive
-- replaces `\` with `/` if the request and the module are on the same hard drive
-- won't change the path at all if the request and the module are on different hard drives
-- applies `JSON.stringify` to the result
-
-```javascript
-loaderUtils.stringifyRequest(this, "./test.js");
-// "\"./test.js\""
-
-loaderUtils.stringifyRequest(this, ".\\test.js");
-// "\"./test.js\""
-
-loaderUtils.stringifyRequest(this, "test");
-// "\"test\""
-
-loaderUtils.stringifyRequest(this, "test/lib/index.js");
-// "\"test/lib/index.js\""
-
-loaderUtils.stringifyRequest(this, "otherLoader?andConfig!test?someConfig");
-// "\"otherLoader?andConfig!test?someConfig\""
-
-loaderUtils.stringifyRequest(this, require.resolve("test"));
-// "\"../node_modules/some-loader/lib/test.js\""
-
-loaderUtils.stringifyRequest(this, "C:\\module\\test.js");
-// "\"../../test.js\"" (on Windows, in case the module and the request are on the same drive)
-
-loaderUtils.stringifyRequest(this, "C:\\module\\test.js");
-// "\"C:\\module\\test.js\"" (on Windows, in case the module and the request are on different drives)
-
-loaderUtils.stringifyRequest(this, "\\\\network-drive\\test.js");
-// "\"\\\\network-drive\\\\test.js\"" (on Windows, in case the module and the request are on different drives)
-```
-
-### `urlToRequest`
-
-Converts some resource URL to a webpack module request.
-
-> i Before call `urlToRequest` you need call `isUrlRequest` to ensure it is requestable url
-
-```javascript
-const url = "path/to/module.js";
-
-if (loaderUtils.isUrlRequest(url)) {
-  // Logic for requestable url
-  const request = loaderUtils.urlToRequest(url);
-} else {
-  // Logic for not requestable url
-}
-```
-
-Simple example:
-
-```javascript
-const url = "path/to/module.js";
-const request = loaderUtils.urlToRequest(url); // "./path/to/module.js"
-```
-
-#### Module URLs
-
-Any URL containing a `~` will be interpreted as a module request. Anything after the `~` will be considered the request path.
-
-```javascript
-const url = "~path/to/module.js";
-const request = loaderUtils.urlToRequest(url); // "path/to/module.js"
-```
-
-#### Root-relative URLs
-
-URLs that are root-relative (start with `/`) can be resolved relative to some arbitrary path by using the `root` parameter:
-
-```javascript
-const url = "/path/to/module.js";
-const root = "./root";
-const request = loaderUtils.urlToRequest(url, root); // "./root/path/to/module.js"
-```
-
-To convert a root-relative URL into a module URL, specify a `root` value that starts with `~`:
-
-```javascript
-const url = "/path/to/module.js";
-const root = "~";
-const request = loaderUtils.urlToRequest(url, root); // "path/to/module.js"
-```
-
-### `interpolateName`
-
-Interpolates a filename template using multiple placeholders and/or a regular expression.
-The template and regular expression are set as query params called `name` and `regExp` on the current loader's context.
-
-```javascript
-const interpolatedName = loaderUtils.interpolateName(loaderContext, name, options);
-```
-
-The following tokens are replaced in the `name` parameter:
-
-* `[ext]` the extension of the resource
-* `[name]` the basename of the resource
-* `[path]` the path of the resource relative to the `context` query parameter or option.
-* `[folder]` the folder the resource is in
-* `[query]` the queryof the resource, i.e. `?foo=bar`
-* `[emoji]` a random emoji representation of `options.content`
-* `[emoji:<length>]` same as above, but with a customizable number of emojis
-* `[contenthash]` the hash of `options.content` (Buffer) (by default it's the hex digest of the md5 hash)
-* `[<hashType>:contenthash:<digestType>:<length>]` optionally one can configure
-  * other `hashType`s, i. e. `sha1`, `md5`, `sha256`, `sha512`
-  * other `digestType`s, i. e. `hex`, `base26`, `base32`, `base36`, `base49`, `base52`, `base58`, `base62`, `base64`
-  * and `length` the length in chars
-* `[hash]` the hash of `options.content` (Buffer) (by default it's the hex digest of the md5 hash)
-* `[<hashType>:hash:<digestType>:<length>]` optionally one can configure
-  * other `hashType`s, i. e. `sha1`, `md5`, `sha256`, `sha512`
-  * other `digestType`s, i. e. `hex`, `base26`, `base32`, `base36`, `base49`, `base52`, `base58`, `base62`, `base64`
-  * and `length` the length in chars
-* `[N]` the N-th match obtained from matching the current file name against `options.regExp`
-
-In loader context `[hash]` and `[contenthash]` are the same, but we recommend using `[contenthash]` for avoid misleading.
-
-Examples
-
-``` javascript
-// loaderContext.resourcePath = "/absolute/path/to/app/js/javascript.js"
-loaderUtils.interpolateName(loaderContext, "js/[hash].script.[ext]", { content: ... });
-// => js/9473fdd0d880a43c21b7778d34872157.script.js
-
-// loaderContext.resourcePath = "/absolute/path/to/app/js/javascript.js"
-// loaderContext.resourceQuery = "?foo=bar"
-loaderUtils.interpolateName(loaderContext, "js/[hash].script.[ext][query]", { content: ... });
-// => js/9473fdd0d880a43c21b7778d34872157.script.js?foo=bar
-
-// loaderContext.resourcePath = "/absolute/path/to/app/js/javascript.js"
-loaderUtils.interpolateName(loaderContext, "js/[contenthash].script.[ext]", { content: ... });
-// => js/9473fdd0d880a43c21b7778d34872157.script.js
-
-// loaderContext.resourcePath = "/absolute/path/to/app/page.html"
-loaderUtils.interpolateName(loaderContext, "html-[hash:6].html", { content: ... });
-// => html-9473fd.html
-
-// loaderContext.resourcePath = "/absolute/path/to/app/flash.txt"
-loaderUtils.interpolateName(loaderContext, "[hash]", { content: ... });
-// => c31e9820c001c9c4a86bce33ce43b679
-
-// loaderContext.resourcePath = "/absolute/path/to/app/img/image.gif"
-loaderUtils.interpolateName(loaderContext, "[emoji]", { content: ... });
-// => 馃憤
-
-// loaderContext.resourcePath = "/absolute/path/to/app/img/image.gif"
-loaderUtils.interpolateName(loaderContext, "[emoji:4]", { content: ... });
-// => 馃檷馃彚馃摛馃悵
-
-// loaderContext.resourcePath = "/absolute/path/to/app/img/image.png"
-loaderUtils.interpolateName(loaderContext, "[sha512:hash:base64:7].[ext]", { content: ... });
-// => 2BKDTjl.png
-// use sha512 hash instead of md5 and with only 7 chars of base64
-
-// loaderContext.resourcePath = "/absolute/path/to/app/img/myself.png"
-// loaderContext.query.name =
-loaderUtils.interpolateName(loaderContext, "picture.png");
-// => picture.png
-
-// loaderContext.resourcePath = "/absolute/path/to/app/dir/file.png"
-loaderUtils.interpolateName(loaderContext, "[path][name].[ext]?[hash]", { content: ... });
-// => /app/dir/file.png?9473fdd0d880a43c21b7778d34872157
-
-// loaderContext.resourcePath = "/absolute/path/to/app/js/page-home.js"
-loaderUtils.interpolateName(loaderContext, "script-[1].[ext]", { regExp: "page-(.*)\\.js", content: ... });
-// => script-home.js
-
-// loaderContext.resourcePath = "/absolute/path/to/app/js/javascript.js"
-// loaderContext.resourceQuery = "?foo=bar"
-loaderUtils.interpolateName(
-  loaderContext, 
-  (resourcePath, resourceQuery) => { 
-    // resourcePath - `/app/js/javascript.js`
-    // resourceQuery - `?foo=bar`
-
-    return "js/[hash].script.[ext]"; 
-  }, 
-  { content: ... }
-);
-// => js/9473fdd0d880a43c21b7778d34872157.script.js
-```
-
-### `getHashDigest`
-
-``` javascript
-const digestString = loaderUtils.getHashDigest(buffer, hashType, digestType, maxLength);
-```
-
-* `buffer` the content that should be hashed
-* `hashType` one of `sha1`, `md5`, `sha256`, `sha512` or any other node.js supported hash type
-* `digestType` one of `hex`, `base26`, `base32`, `base36`, `base49`, `base52`, `base58`, `base62`, `base64`
-* `maxLength` the maximum length in chars
-
-## License
-
-MIT (http://www.opensource.org/licenses/mit-license.php)
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/getCurrentRequest.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/getCurrentRequest.js
deleted file mode 100644
index 4818563..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/getCurrentRequest.js
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-function getCurrentRequest(loaderContext) {
-  if (loaderContext.currentRequest) {
-    return loaderContext.currentRequest;
-  }
-
-  const request = loaderContext.loaders
-    .slice(loaderContext.loaderIndex)
-    .map((obj) => obj.request)
-    .concat([loaderContext.resource]);
-
-  return request.join('!');
-}
-
-module.exports = getCurrentRequest;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/getHashDigest.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/getHashDigest.js
deleted file mode 100644
index bbc4e03..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/getHashDigest.js
+++ /dev/null
@@ -1,69 +0,0 @@
-'use strict';
-
-const baseEncodeTables = {
-  26: 'abcdefghijklmnopqrstuvwxyz',
-  32: '123456789abcdefghjkmnpqrstuvwxyz', // no 0lio
-  36: '0123456789abcdefghijklmnopqrstuvwxyz',
-  49: 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no lIO
-  52: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
-  58: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no 0lIO
-  62: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
-  64: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_',
-};
-
-function encodeBufferToBase(buffer, base) {
-  const encodeTable = baseEncodeTables[base];
-  if (!encodeTable) {
-    throw new Error('Unknown encoding base' + base);
-  }
-
-  const readLength = buffer.length;
-  const Big = require('big.js');
-
-  Big.RM = Big.DP = 0;
-  let b = new Big(0);
-
-  for (let i = readLength - 1; i >= 0; i--) {
-    b = b.times(256).plus(buffer[i]);
-  }
-
-  let output = '';
-  while (b.gt(0)) {
-    output = encodeTable[b.mod(base)] + output;
-    b = b.div(base);
-  }
-
-  Big.DP = 20;
-  Big.RM = 1;
-
-  return output;
-}
-
-function getHashDigest(buffer, hashType, digestType, maxLength) {
-  hashType = hashType || 'md5';
-  maxLength = maxLength || 9999;
-
-  const hash = require('crypto').createHash(hashType);
-
-  hash.update(buffer);
-
-  if (
-    digestType === 'base26' ||
-    digestType === 'base32' ||
-    digestType === 'base36' ||
-    digestType === 'base49' ||
-    digestType === 'base52' ||
-    digestType === 'base58' ||
-    digestType === 'base62' ||
-    digestType === 'base64'
-  ) {
-    return encodeBufferToBase(hash.digest(), digestType.substr(4)).substr(
-      0,
-      maxLength
-    );
-  } else {
-    return hash.digest(digestType || 'hex').substr(0, maxLength);
-  }
-}
-
-module.exports = getHashDigest;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/getOptions.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/getOptions.js
deleted file mode 100644
index 9cbbed4..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/getOptions.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const parseQuery = require('./parseQuery');
-
-function getOptions(loaderContext) {
-  const query = loaderContext.query;
-
-  if (typeof query === 'string' && query !== '') {
-    return parseQuery(loaderContext.query);
-  }
-
-  if (!query || typeof query !== 'object') {
-    // Not object-like queries are not supported.
-    return null;
-  }
-
-  return query;
-}
-
-module.exports = getOptions;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/getRemainingRequest.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/getRemainingRequest.js
deleted file mode 100644
index 5839b2f..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/getRemainingRequest.js
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-function getRemainingRequest(loaderContext) {
-  if (loaderContext.remainingRequest) {
-    return loaderContext.remainingRequest;
-  }
-
-  const request = loaderContext.loaders
-    .slice(loaderContext.loaderIndex + 1)
-    .map((obj) => obj.request)
-    .concat([loaderContext.resource]);
-
-  return request.join('!');
-}
-
-module.exports = getRemainingRequest;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/index.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/index.js
deleted file mode 100644
index 2591310..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-'use strict';
-
-const getOptions = require('./getOptions');
-const parseQuery = require('./parseQuery');
-const stringifyRequest = require('./stringifyRequest');
-const getRemainingRequest = require('./getRemainingRequest');
-const getCurrentRequest = require('./getCurrentRequest');
-const isUrlRequest = require('./isUrlRequest');
-const urlToRequest = require('./urlToRequest');
-const parseString = require('./parseString');
-const getHashDigest = require('./getHashDigest');
-const interpolateName = require('./interpolateName');
-
-exports.getOptions = getOptions;
-exports.parseQuery = parseQuery;
-exports.stringifyRequest = stringifyRequest;
-exports.getRemainingRequest = getRemainingRequest;
-exports.getCurrentRequest = getCurrentRequest;
-exports.isUrlRequest = isUrlRequest;
-exports.urlToRequest = urlToRequest;
-exports.parseString = parseString;
-exports.getHashDigest = getHashDigest;
-exports.interpolateName = interpolateName;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/interpolateName.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/interpolateName.js
deleted file mode 100644
index 0cd3932..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/interpolateName.js
+++ /dev/null
@@ -1,151 +0,0 @@
-'use strict';
-
-const path = require('path');
-const emojisList = require('emojis-list');
-const getHashDigest = require('./getHashDigest');
-
-const emojiRegex = /[\uD800-\uDFFF]./;
-const emojiList = emojisList.filter((emoji) => emojiRegex.test(emoji));
-const emojiCache = {};
-
-function encodeStringToEmoji(content, length) {
-  if (emojiCache[content]) {
-    return emojiCache[content];
-  }
-
-  length = length || 1;
-
-  const emojis = [];
-
-  do {
-    if (!emojiList.length) {
-      throw new Error('Ran out of emoji');
-    }
-
-    const index = Math.floor(Math.random() * emojiList.length);
-
-    emojis.push(emojiList[index]);
-    emojiList.splice(index, 1);
-  } while (--length > 0);
-
-  const emojiEncoding = emojis.join('');
-
-  emojiCache[content] = emojiEncoding;
-
-  return emojiEncoding;
-}
-
-function interpolateName(loaderContext, name, options) {
-  let filename;
-
-  const hasQuery =
-    loaderContext.resourceQuery && loaderContext.resourceQuery.length > 1;
-
-  if (typeof name === 'function') {
-    filename = name(
-      loaderContext.resourcePath,
-      hasQuery ? loaderContext.resourceQuery : undefined
-    );
-  } else {
-    filename = name || '[hash].[ext]';
-  }
-
-  const context = options.context;
-  const content = options.content;
-  const regExp = options.regExp;
-
-  let ext = 'bin';
-  let basename = 'file';
-  let directory = '';
-  let folder = '';
-  let query = '';
-
-  if (loaderContext.resourcePath) {
-    const parsed = path.parse(loaderContext.resourcePath);
-    let resourcePath = loaderContext.resourcePath;
-
-    if (parsed.ext) {
-      ext = parsed.ext.substr(1);
-    }
-
-    if (parsed.dir) {
-      basename = parsed.name;
-      resourcePath = parsed.dir + path.sep;
-    }
-
-    if (typeof context !== 'undefined') {
-      directory = path
-        .relative(context, resourcePath + '_')
-        .replace(/\\/g, '/')
-        .replace(/\.\.(\/)?/g, '_$1');
-      directory = directory.substr(0, directory.length - 1);
-    } else {
-      directory = resourcePath.replace(/\\/g, '/').replace(/\.\.(\/)?/g, '_$1');
-    }
-
-    if (directory.length === 1) {
-      directory = '';
-    } else if (directory.length > 1) {
-      folder = path.basename(directory);
-    }
-  }
-
-  if (loaderContext.resourceQuery && loaderContext.resourceQuery.length > 1) {
-    query = loaderContext.resourceQuery;
-
-    const hashIdx = query.indexOf('#');
-
-    if (hashIdx >= 0) {
-      query = query.substr(0, hashIdx);
-    }
-  }
-
-  let url = filename;
-
-  if (content) {
-    // Match hash template
-    url = url
-      // `hash` and `contenthash` are same in `loader-utils` context
-      // let's keep `hash` for backward compatibility
-      .replace(
-        /\[(?:([^[:\]]+):)?(?:hash|contenthash)(?::([a-z]+\d*))?(?::(\d+))?\]/gi,
-        (all, hashType, digestType, maxLength) =>
-          getHashDigest(content, hashType, digestType, parseInt(maxLength, 10))
-      )
-      .replace(/\[emoji(?::(\d+))?\]/gi, (all, length) =>
-        encodeStringToEmoji(content, parseInt(length, 10))
-      );
-  }
-
-  url = url
-    .replace(/\[ext\]/gi, () => ext)
-    .replace(/\[name\]/gi, () => basename)
-    .replace(/\[path\]/gi, () => directory)
-    .replace(/\[folder\]/gi, () => folder)
-    .replace(/\[query\]/gi, () => query);
-
-  if (regExp && loaderContext.resourcePath) {
-    const match = loaderContext.resourcePath.match(new RegExp(regExp));
-
-    match &&
-      match.forEach((matched, i) => {
-        url = url.replace(new RegExp('\\[' + i + '\\]', 'ig'), matched);
-      });
-  }
-
-  if (
-    typeof loaderContext.options === 'object' &&
-    typeof loaderContext.options.customInterpolateName === 'function'
-  ) {
-    url = loaderContext.options.customInterpolateName.call(
-      loaderContext,
-      url,
-      name,
-      options
-    );
-  }
-
-  return url;
-}
-
-module.exports = interpolateName;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/isUrlRequest.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/isUrlRequest.js
deleted file mode 100644
index 4592cb1..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/isUrlRequest.js
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-
-const path = require('path');
-
-function isUrlRequest(url, root) {
-  // An URL is not an request if
-
-  // 1. It's an absolute url and it is not `windows` path like `C:\dir\file`
-  if (/^[a-z][a-z0-9+.-]*:/i.test(url) && !path.win32.isAbsolute(url)) {
-    return false;
-  }
-
-  // 2. It's a protocol-relative
-  if (/^\/\//.test(url)) {
-    return false;
-  }
-
-  // 3. It's some kind of url for a template
-  if (/^[{}[\]#*;,'搂$%&(=?`麓^掳<>]/.test(url)) {
-    return false;
-  }
-
-  // 4. It's also not an request if root isn't set and it's a root-relative url
-  if ((root === undefined || root === false) && /^\//.test(url)) {
-    return false;
-  }
-
-  return true;
-}
-
-module.exports = isUrlRequest;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/parseQuery.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/parseQuery.js
deleted file mode 100644
index 3dd7cb9..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/parseQuery.js
+++ /dev/null
@@ -1,68 +0,0 @@
-'use strict';
-
-const JSON5 = require('json5');
-
-const specialValues = {
-  null: null,
-  true: true,
-  false: false,
-};
-
-function parseQuery(query) {
-  if (query.substr(0, 1) !== '?') {
-    throw new Error(
-      "A valid query string passed to parseQuery should begin with '?'"
-    );
-  }
-
-  query = query.substr(1);
-
-  if (!query) {
-    return {};
-  }
-
-  if (query.substr(0, 1) === '{' && query.substr(-1) === '}') {
-    return JSON5.parse(query);
-  }
-
-  const queryArgs = query.split(/[,&]/g);
-  const result = Object.create(null);
-
-  queryArgs.forEach((arg) => {
-    const idx = arg.indexOf('=');
-
-    if (idx >= 0) {
-      let name = arg.substr(0, idx);
-      let value = decodeURIComponent(arg.substr(idx + 1));
-
-      if (specialValues.hasOwnProperty(value)) {
-        value = specialValues[value];
-      }
-
-      if (name.substr(-2) === '[]') {
-        name = decodeURIComponent(name.substr(0, name.length - 2));
-
-        if (!Array.isArray(result[name])) {
-          result[name] = [];
-        }
-
-        result[name].push(value);
-      } else {
-        name = decodeURIComponent(name);
-        result[name] = value;
-      }
-    } else {
-      if (arg.substr(0, 1) === '-') {
-        result[decodeURIComponent(arg.substr(1))] = false;
-      } else if (arg.substr(0, 1) === '+') {
-        result[decodeURIComponent(arg.substr(1))] = true;
-      } else {
-        result[decodeURIComponent(arg)] = true;
-      }
-    }
-  });
-
-  return result;
-}
-
-module.exports = parseQuery;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/parseString.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/parseString.js
deleted file mode 100644
index 6e36f29..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/parseString.js
+++ /dev/null
@@ -1,23 +0,0 @@
-'use strict';
-
-function parseString(str) {
-  try {
-    if (str[0] === '"') {
-      return JSON.parse(str);
-    }
-
-    if (str[0] === "'" && str.substr(str.length - 1) === "'") {
-      return parseString(
-        str
-          .replace(/\\.|"/g, (x) => (x === '"' ? '\\"' : x))
-          .replace(/^'|'$/g, '"')
-      );
-    }
-
-    return JSON.parse('"' + str + '"');
-  } catch (e) {
-    return str;
-  }
-}
-
-module.exports = parseString;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/stringifyRequest.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/stringifyRequest.js
deleted file mode 100644
index 9bd5593..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/stringifyRequest.js
+++ /dev/null
@@ -1,51 +0,0 @@
-'use strict';
-
-const path = require('path');
-
-const matchRelativePath = /^\.\.?[/\\]/;
-
-function isAbsolutePath(str) {
-  return path.posix.isAbsolute(str) || path.win32.isAbsolute(str);
-}
-
-function isRelativePath(str) {
-  return matchRelativePath.test(str);
-}
-
-function stringifyRequest(loaderContext, request) {
-  const splitted = request.split('!');
-  const context =
-    loaderContext.context ||
-    (loaderContext.options && loaderContext.options.context);
-
-  return JSON.stringify(
-    splitted
-      .map((part) => {
-        // First, separate singlePath from query, because the query might contain paths again
-        const splittedPart = part.match(/^(.*?)(\?.*)/);
-        const query = splittedPart ? splittedPart[2] : '';
-        let singlePath = splittedPart ? splittedPart[1] : part;
-
-        if (isAbsolutePath(singlePath) && context) {
-          singlePath = path.relative(context, singlePath);
-
-          if (isAbsolutePath(singlePath)) {
-            // If singlePath still matches an absolute path, singlePath was on a different drive than context.
-            // In this case, we leave the path platform-specific without replacing any separators.
-            // @see https://github.com/webpack/loader-utils/pull/14
-            return singlePath + query;
-          }
-
-          if (isRelativePath(singlePath) === false) {
-            // Ensure that the relative path starts at least with ./ otherwise it would be a request into the modules directory (like node_modules).
-            singlePath = './' + singlePath;
-          }
-        }
-
-        return singlePath.replace(/\\/g, '/') + query;
-      })
-      .join('!')
-  );
-}
-
-module.exports = stringifyRequest;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/lib/urlToRequest.js b/node_modules/eslint-loader/node_modules/loader-utils/lib/urlToRequest.js
deleted file mode 100644
index e2b60d3..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/lib/urlToRequest.js
+++ /dev/null
@@ -1,60 +0,0 @@
-'use strict';
-
-// we can't use path.win32.isAbsolute because it also matches paths starting with a forward slash
-const matchNativeWin32Path = /^[A-Z]:[/\\]|^\\\\/i;
-
-function urlToRequest(url, root) {
-  // Do not rewrite an empty url
-  if (url === '') {
-    return '';
-  }
-
-  const moduleRequestRegex = /^[^?]*~/;
-  let request;
-
-  if (matchNativeWin32Path.test(url)) {
-    // absolute windows path, keep it
-    request = url;
-  } else if (root !== undefined && root !== false && /^\//.test(url)) {
-    // if root is set and the url is root-relative
-    switch (typeof root) {
-      // 1. root is a string: root is prefixed to the url
-      case 'string':
-        // special case: `~` roots convert to module request
-        if (moduleRequestRegex.test(root)) {
-          request = root.replace(/([^~/])$/, '$1/') + url.slice(1);
-        } else {
-          request = root + url;
-        }
-        break;
-      // 2. root is `true`: absolute paths are allowed
-      //    *nix only, windows-style absolute paths are always allowed as they doesn't start with a `/`
-      case 'boolean':
-        request = url;
-        break;
-      default:
-        throw new Error(
-          "Unexpected parameters to loader-utils 'urlToRequest': url = " +
-            url +
-            ', root = ' +
-            root +
-            '.'
-        );
-    }
-  } else if (/^\.\.?\//.test(url)) {
-    // A relative url stays
-    request = url;
-  } else {
-    // every other url is threaded like a relative url
-    request = './' + url;
-  }
-
-  // A `~` makes the url an module
-  if (moduleRequestRegex.test(request)) {
-    request = request.replace(moduleRequestRegex, '');
-  }
-
-  return request;
-}
-
-module.exports = urlToRequest;
diff --git a/node_modules/eslint-loader/node_modules/loader-utils/package.json b/node_modules/eslint-loader/node_modules/loader-utils/package.json
deleted file mode 100644
index a99a924..0000000
--- a/node_modules/eslint-loader/node_modules/loader-utils/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "_from": "loader-utils@^1.0.2",
-  "_id": "loader-utils@1.4.2",
-  "_inBundle": false,
-  "_integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-  "_location": "/eslint-loader/loader-utils",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "loader-utils@^1.0.2",
-    "name": "loader-utils",
-    "escapedName": "loader-utils",
-    "rawSpec": "^1.0.2",
-    "saveSpec": null,
-    "fetchSpec": "^1.0.2"
-  },
-  "_requiredBy": [
-    "/eslint-loader"
-  ],
-  "_resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
-  "_shasum": "29a957f3a63973883eb684f10ffd3d151fec01a3",
-  "_spec": "loader-utils@^1.0.2",
-  "_where": "C:\\Users\\feige\\Desktop\\RuoYi-Vue-master\\RuoYi-Vue-master\\ruoyi-ui\\node_modules\\eslint-loader",
-  "author": {
-    "name": "Tobias Koppers @sokra"
-  },
-  "bugs": {
-    "url": "https://github.com/webpack/loader-utils/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "big.js": "^5.2.2",
-    "emojis-list": "^3.0.0",
-    "json5": "^1.0.1"
-  },
-  "deprecated": false,
-  "description": "utils for webpack loaders",
-  "devDependencies": {
-    "coveralls": "^3.0.2",
-    "eslint": "^5.11.0",
-    "eslint-plugin-node": "^8.0.0",
-    "eslint-plugin-prettier": "^3.0.0",
-    "jest": "^21.2.1",
-    "prettier": "^1.19.1",
-    "standard-version": "^4.0.0"
-  },
-  "engines": {
-    "node": ">=4.0.0"
-  },
-  "files": [
-    "lib"
-  ],
-  "homepage": "https://github.com/webpack/loader-utils#readme",
-  "license": "MIT",
-  "main": "lib/index.js",
-  "name": "loader-utils",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/webpack/loader-utils.git"
-  },
-  "scripts": {
-    "lint": "eslint lib test",
-    "pretest": "yarn lint",
-    "release": "yarn test && standard-version",
-    "test": "jest",
-    "test:ci": "jest --coverage"
-  },
-  "version": "1.4.2"
-}
diff --git a/node_modules/eslint-loader/package.json b/node_modules/eslint-loader/package.json
index 4dd3f6b..78b83b3 100644
--- a/node_modules/eslint-loader/package.json
+++ b/node_modules/eslint-loader/package.json
@@ -1,99 +1,85 @@
 {
-  "_from": "eslint-loader@^2.2.1",
-  "_id": "eslint-loader@2.2.1",
-  "_inBundle": false,
-  "_integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
-  "_location": "/eslint-loader",
-  "_phantomChildren": {
-    "big.js": "5.2.2",
-    "emojis-list": "3.0.0",
-    "minimist": "1.2.8"
-  },
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "eslint-loader@^2.2.1",
-    "name": "eslint-loader",
-    "escapedName": "eslint-loader",
-    "rawSpec": "^2.2.1",
-    "saveSpec": null,
-    "fetchSpec": "^2.2.1"
-  },
-  "_requiredBy": [
-    "/@vue/cli-plugin-eslint"
-  ],
-  "_resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
-  "_shasum": "28b9c12da54057af0845e2a6112701a2f6bf8337",
-  "_spec": "eslint-loader@^2.2.1",
-  "_where": "C:\\Users\\feige\\Desktop\\RuoYi-Vue-master\\RuoYi-Vue-master\\ruoyi-ui\\node_modules\\@vue\\cli-plugin-eslint",
-  "author": {
-    "name": "Maxime Thirouin"
-  },
-  "ava": {
-    "files": [
-      "test/*.js"
-    ],
-    "verbose": true
-  },
-  "bugs": {
-    "url": "https://github.com/webpack-contrib/eslint-loader/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "loader-fs-cache": "^1.0.0",
-    "loader-utils": "^1.0.2",
-    "object-assign": "^4.0.1",
-    "object-hash": "^1.1.4",
-    "rimraf": "^2.6.1"
-  },
-  "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin",
-  "description": "eslint loader (for webpack)",
-  "devDependencies": {
-    "ava": "^0.17.0",
-    "eslint": "^6.0.1",
-    "eslint-config-i-am-meticulous": "^11.0.0",
-    "eslint-friendly-formatter": "^2.0.4",
-    "husky": "^0.14.3",
-    "mkdirp": "^0.5.1",
-    "npmpub": "^4.0.1",
-    "prettier": "^1.13.7",
-    "pretty-quick": "^1.6.0",
-    "webpack": "^4.0.0"
-  },
-  "eslintConfig": {
-    "extends": "eslint-config-i-am-meticulous",
-    "rules": {
-      "no-var": 0,
-      "prefer-const": 0
-    }
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/webpack-contrib/eslint-loader#readme",
-  "keywords": [
-    "lint",
-    "linter",
-    "eslint",
-    "loader",
-    "webpack"
-  ],
-  "license": "MIT",
   "name": "eslint-loader",
-  "peerDependencies": {
-    "eslint": ">=1.6.0 <7.0.0",
-    "webpack": ">=2.0.0 <5.0.0"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/webpack-contrib/eslint-loader.git"
+  "version": "4.0.2",
+  "description": "A ESlint loader for webpack",
+  "license": "MIT",
+  "repository": "webpack-contrib/eslint-loader",
+  "author": "Maxime Thirouin",
+  "contributors": [
+    "Ricardo Gobbo de Souza <ricardogobbosouza@yahoo.com.br>"
+  ],
+  "homepage": "https://github.com/webpack-contrib/eslint-loader",
+  "bugs": "https://github.com/webpack-contrib/eslint-loader/issues",
+  "main": "dist/cjs.js",
+  "engines": {
+    "node": ">= 10.13.0"
   },
   "scripts": {
-    "ava": "ava",
-    "lint": "eslint .",
-    "precommit": "pretty-quick --staged",
-    "release": "npmpub",
-    "test": "npm run lint && npm run ava"
+    "start": "npm run build -- -w",
+    "clean": "del-cli dist",
+    "prebuild": "npm run clean",
+    "build": "cross-env NODE_ENV=production babel src -d dist --copy-files",
+    "commitlint": "commitlint --from=master",
+    "security": "npm audit",
+    "lint:prettier": "prettier \"{**/*,*}.{js,json,md,yml,css,ts}\" --list-different",
+    "lint:js": "eslint --cache .",
+    "lint": "npm-run-all -l -p \"lint:**\"",
+    "test:only": "cross-env NODE_ENV=test jest",
+    "test:watch": "npm run test:only -- --watch",
+    "test:coverage": "npm run test:only -- --collectCoverageFrom=\"src/**/*.js\" --coverage",
+    "pretest": "npm run lint",
+    "test": "npm run test:coverage",
+    "prepare": "npm run build",
+    "release": "standard-version",
+    "defaults": "webpack-defaults"
   },
-  "version": "2.2.1"
+  "files": [
+    "dist"
+  ],
+  "peerDependencies": {
+    "eslint": "^6.0.0 || ^7.0.0",
+    "webpack": "^4.0.0 || ^5.0.0"
+  },
+  "dependencies": {
+    "find-cache-dir": "^3.3.1",
+    "fs-extra": "^8.1.0",
+    "loader-utils": "^2.0.0",
+    "object-hash": "^2.0.3",
+    "schema-utils": "^2.6.5"
+  },
+  "devDependencies": {
+    "@babel/cli": "^7.8.4",
+    "@babel/core": "^7.9.0",
+    "@babel/preset-env": "^7.9.0",
+    "@commitlint/cli": "^8.3.5",
+    "@commitlint/config-conventional": "^8.3.4",
+    "@webpack-contrib/defaults": "^6.3.0",
+    "@webpack-contrib/eslint-config-webpack": "^3.0.0",
+    "babel-eslint": "^10.1.0",
+    "babel-jest": "^25.2.6",
+    "chokidar": "^3.3.1",
+    "commitlint-azure-pipelines-cli": "^1.0.3",
+    "cross-env": "^7.0.2",
+    "del": "^5.1.0",
+    "del-cli": "^3.0.0",
+    "eslint": "^6.8.0",
+    "eslint-config-prettier": "^6.10.1",
+    "eslint-friendly-formatter": "^4.0.1",
+    "eslint-plugin-import": "^2.20.2",
+    "husky": "^4.2.3",
+    "jest": "^25.2.6",
+    "jest-junit": "^10.0.0",
+    "lint-staged": "^10.1.1",
+    "npm-run-all": "^4.1.5",
+    "prettier": "^2.0.2",
+    "standard-version": "^7.1.0",
+    "webpack": "^4.42.1"
+  },
+  "keywords": [
+    "eslint",
+    "lint",
+    "linter",
+    "loader",
+    "webpack"
+  ]
 }
diff --git a/node_modules/object-hash/.jshintrc b/node_modules/object-hash/.jshintrc
deleted file mode 100644
index c842cc3..0000000
--- a/node_modules/object-hash/.jshintrc
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "curly": true,
-  "expr": true,
-  "eqeqeq": true,
-  "immed": true,
-  "newcap": true,
-  "noarg": true,
-  "sub": true,
-  "undef": true,
-  "unused": true,
-  "boss": true,
-  "eqnull": true,
-  "node": true,
-  "globals": {
-    "require": true,
-    "exports": true,
-    "console": true
-  }
-}
diff --git a/node_modules/object-hash/.travis.yml b/node_modules/object-hash/.travis.yml
deleted file mode 100644
index f252a48..0000000
--- a/node_modules/object-hash/.travis.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-language: node_js
-node_js:
-  - "0.10"
-  - "0.12"
-  - "4"
-  - "6"
-  - "8"
-sudo: false
-# use g++-4.8 for karma
-cache:
-  - apt
-addons:
-  apt:
-    sources:
-      - ubuntu-toolchain-r-test
-    packages:
-      - g++-4.8
-      - libstdc++-4.8-dev
-  firefox: "39.0"
-before_install:
-  - export CXX="g++-4.8" CC="gcc-4.8"
-  - export "PATH=./node_modules/.bin:$PATH"
-install: npm install
-# start X server for firefox
-before_script:
-  - "export DISPLAY=:99.0"
-  - "sh -e /etc/init.d/xvfb start"
-  - sleep 3 # give xvfb some time to start
-script:
-  - gulp lint
-  - gulp dist
-  - gulp test karma
-after_success:
-  - gulp coveralls
-
diff --git a/node_modules/object-hash/bower.json b/node_modules/object-hash/bower.json
deleted file mode 100644
index a226335..0000000
--- a/node_modules/object-hash/bower.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  "name": "object-hash",
-  "homepage": "https://github.com/puleos/object-hash",
-  "description": "Generate hashes from javascript objects in node and the browser",
-  "main": "dist/object_hash.js",
-  "author": "Scott Puleo <puleos@gmail.com>",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "test",
-    "tests"
-  ]
-}
diff --git a/node_modules/object-hash/gulpfile.js b/node_modules/object-hash/gulpfile.js
deleted file mode 100644
index 3bba749..0000000
--- a/node_modules/object-hash/gulpfile.js
+++ /dev/null
@@ -1,97 +0,0 @@
-'use strict';
-
-var gulp = require('gulp');
-var jshint = require('gulp-jshint');
-var exec = require('gulp-exec');
-var stylish = require('jshint-stylish');
-var browserify = require('gulp-browserify');
-var uglify = require('gulp-uglify');
-var rename = require('gulp-rename');
-var karma = require('karma');
-var coveralls = require('gulp-coveralls');
-var istanbul = require('gulp-istanbul');
-var mocha = require('gulp-mocha');
-
-var paths = {
-  index: './index.js',
-  tests: './test/**/*.js'
-};
-
-function preTest(src) {
-  return gulp.src(src)
-    .pipe(istanbul())
-    .pipe(istanbul.hookRequire());
-}
-
-function test(src){
-  return gulp.src(src)
-    .pipe(mocha())
-    .pipe(istanbul.writeReports());
-}
-
-function testKarma(done){
-  new karma.Server({
-    configFile: __dirname + '/karma.conf.js',
-    singleRun: true
-  }, done).start();
-}
-
-function lint(src){
-  return gulp.src(src)
-    .pipe(jshint('.jshintrc'))
-    .pipe(jshint.reporter(stylish));
-}
-
-gulp.task('dist', function(){
-  gulp.src([paths.index])
-    .pipe(browserify({
-      insertGlobals : true,
-      debug: true,
-      standalone: 'objectHash'
-    }))
-    .pipe(rename('object_hash.js'))
-    .pipe(uglify({outSourceMap: true}))
-    .pipe(gulp.dest('./dist'));
-    // tests
-  gulp.src([paths.tests])
-    .pipe(browserify())
-    .pipe(rename('object_hash_test.js'))
-    .pipe(gulp.dest('./dist'));
-});
-
-gulp.task('pre-test', function() {
-  preTest([paths.index]);
-});
-
-gulp.task('test', ['pre-test'], function() {
-  test([paths.tests]);
-});
-
-gulp.task('karma', function() {
-  testKarma();
-});
-
-gulp.task('coveralls', function() {
-  gulp.src('coverage/**/lcov.info')
-    .pipe(coveralls());
-});
-
-gulp.task('lint', function () {
-  return lint([paths.index]);
-});
-
-gulp.task('watch', function () {
-
-  // watch and lint any files that are added or changed
-  gulp.watch([paths.index, paths.tests], function(event){
-    if(event.type !== 'deleted') {
-      lint([event.path]);
-    }
-  });
-
-  // run the tests when something changes
-  gulp.watch([paths.index, paths.tests], ['test', 'karma']);
-
-});
-
-gulp.task('default', ['watch']);
diff --git a/node_modules/object-hash/index.js b/node_modules/object-hash/index.js
index 0b1b169..657aff2 100644
--- a/node_modules/object-hash/index.js
+++ b/node_modules/object-hash/index.js
@@ -58,22 +58,25 @@
 hashes.push('passthrough');
 var encodings = ['buffer', 'hex', 'binary', 'base64'];
 
-function applyDefaults(object, options){
-  options = options || {};
-  options.algorithm = options.algorithm || 'sha1';
-  options.encoding = options.encoding || 'hex';
-  options.excludeValues = options.excludeValues ? true : false;
+function applyDefaults(object, sourceOptions){
+  sourceOptions = sourceOptions || {};
+
+  // create a copy rather than mutating
+  var options = {};
+  options.algorithm = sourceOptions.algorithm || 'sha1';
+  options.encoding = sourceOptions.encoding || 'hex';
+  options.excludeValues = sourceOptions.excludeValues ? true : false;
   options.algorithm = options.algorithm.toLowerCase();
   options.encoding = options.encoding.toLowerCase();
-  options.ignoreUnknown = options.ignoreUnknown !== true ? false : true; // default to false
-  options.respectType = options.respectType === false ? false : true; // default to true
-  options.respectFunctionNames = options.respectFunctionNames === false ? false : true;
-  options.respectFunctionProperties = options.respectFunctionProperties === false ? false : true;
-  options.unorderedArrays = options.unorderedArrays !== true ? false : true; // default to false
-  options.unorderedSets = options.unorderedSets === false ? false : true; // default to false
-  options.unorderedObjects = options.unorderedObjects === false ? false : true; // default to true
-  options.replacer = options.replacer || undefined;
-  options.excludeKeys = options.excludeKeys || undefined;
+  options.ignoreUnknown = sourceOptions.ignoreUnknown !== true ? false : true; // default to false
+  options.respectType = sourceOptions.respectType === false ? false : true; // default to true
+  options.respectFunctionNames = sourceOptions.respectFunctionNames === false ? false : true;
+  options.respectFunctionProperties = sourceOptions.respectFunctionProperties === false ? false : true;
+  options.unorderedArrays = sourceOptions.unorderedArrays !== true ? false : true; // default to false
+  options.unorderedSets = sourceOptions.unorderedSets === false ? false : true; // default to false
+  options.unorderedObjects = sourceOptions.unorderedObjects === false ? false : true; // default to true
+  options.replacer = sourceOptions.replacer || undefined;
+  options.excludeKeys = sourceOptions.excludeKeys || undefined;
 
   if(typeof object === 'undefined') {
     throw new Error('Object argument required.');
@@ -126,8 +129,9 @@
 
   var hasher = typeHasher(options, hashingStream);
   hasher.dispatch(object);
-  if (!hashingStream.update)
-    hashingStream.end('')
+  if (!hashingStream.update) {
+    hashingStream.end('');
+  }
 
   if (hashingStream.digest) {
     return hashingStream.digest(options.encoding === 'buffer' ? undefined : options.encoding);
@@ -163,11 +167,12 @@
 function typeHasher(options, writeTo, context){
   context = context || [];
   var write = function(str) {
-    if (writeTo.update)
+    if (writeTo.update) {
       return writeTo.update(str, 'utf8');
-    else
+    } else {
       return writeTo.write(str, 'utf8');
-  }
+    }
+  };
 
   return {
     dispatch: function(value){
@@ -209,7 +214,7 @@
         return write(object);
       }
 
-      if(objType !== 'object' && objType !== 'function') {
+      if(objType !== 'object' && objType !== 'function' && objType !== 'asyncfunction') {
         if(this['_' + objType]) {
           this['_' + objType](object);
         } else if (options.ignoreUnknown) {
@@ -387,6 +392,10 @@
       var arr = Array.from(set);
       return this._array(arr, options.unorderedSets !== false);
     },
+    _file: function(file) {
+      write('file:');
+      return this.dispatch([file.name, file.size, file.type, file.lastModfied]);
+    },
     _blob: function() {
       if (options.ignoreUnknown) {
         return write('[blob]');
@@ -397,6 +406,9 @@
         'Use "options.replacer" or "options.ignoreUnknown"\n');
     },
     _domwindow: function() { return write('domwindow'); },
+    _bigint: function(number){
+      return write('bigint:' + number.toString());
+    },
     /* Node.js standard native objects */
     _process: function() { return write('process'); },
     _timer: function() { return write('timer'); },
@@ -414,7 +426,7 @@
     _dataview: function() { return write('dataview'); },
     _signal: function() { return write('signal'); },
     _fsevent: function() { return write('fsevent'); },
-    _tlswrap: function() { return write('tlswrap'); }
+    _tlswrap: function() { return write('tlswrap'); },
   };
 }
 
diff --git a/node_modules/object-hash/karma.conf.js b/node_modules/object-hash/karma.conf.js
deleted file mode 100644
index 8f0758d..0000000
--- a/node_modules/object-hash/karma.conf.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// Karma configuration
-// Generated on Thu Dec 10 2015 03:01:27 GMT+0100 (CET)
-
-module.exports = function(config) {
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['mocha'],
-
-
-    // list of files / patterns to load in the browser
-    files: [
-      'dist/*.js'
-    ],
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-    },
-
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['progress'],
-
-
-    // web server port
-    port: 9876,
-
-
-    // enable / disable colors in the output (reporters and logs)
-    colors: true,
-
-
-    // level of logging
-    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
-    logLevel: config.LOG_INFO,
-
-
-    // enable / disable watching file and executing tests whenever any file changes
-    autoWatch: true,
-
-
-    // start these browsers
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS', 'Firefox'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false,
-
-    // Concurrency level
-    // how many browser should be started simultanous
-    concurrency: Infinity
-  })
-}
diff --git a/node_modules/object-hash/package.json b/node_modules/object-hash/package.json
index 7fd4c09..6396ae6 100644
--- a/node_modules/object-hash/package.json
+++ b/node_modules/object-hash/package.json
@@ -1,79 +1,53 @@
 {
-  "_from": "object-hash@^1.1.4",
-  "_id": "object-hash@1.3.1",
-  "_inBundle": false,
-  "_integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
-  "_location": "/object-hash",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "object-hash@^1.1.4",
-    "name": "object-hash",
-    "escapedName": "object-hash",
-    "rawSpec": "^1.1.4",
-    "saveSpec": null,
-    "fetchSpec": "^1.1.4"
-  },
-  "_requiredBy": [
-    "/eslint-loader"
-  ],
-  "_resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
-  "_shasum": "fde452098a951cb145f039bb7d455449ddc126df",
-  "_spec": "object-hash@^1.1.4",
-  "_where": "C:\\Users\\feige\\Desktop\\RuoYi-Vue-master\\RuoYi-Vue-master\\ruoyi-ui\\node_modules\\eslint-loader",
-  "author": {
-    "name": "Scott Puleo",
-    "email": "puleos@gmail.com"
-  },
-  "browser": "./dist/object_hash.js",
-  "bugs": {
-    "url": "https://github.com/puleos/object-hash/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
+  "name": "object-hash",
+  "version": "2.2.0",
   "description": "Generate hashes from javascript objects in node and the browser.",
-  "devDependencies": {
-    "browserify": "^13.0.0",
-    "gulp": "^3.9.0",
-    "gulp-browserify": "^0.5.1",
-    "gulp-coveralls": "^0.1.4",
-    "gulp-exec": "^2.1.2",
-    "gulp-istanbul": "^0.10.3",
-    "gulp-jshint": "^2.0.0",
-    "gulp-mocha": "^2.2.0",
-    "gulp-rename": "^1.2.0",
-    "gulp-uglify": "^1.5.1",
-    "jshint": "^2.8.0",
-    "jshint-stylish": "^2.1.0",
-    "karma": "^0.13.15",
-    "karma-chrome-launcher": "^0.2.2",
-    "karma-firefox-launcher": "^0.1.7",
-    "karma-mocha": "^0.2.1",
-    "karma-phantomjs-launcher": "^0.2.1",
-    "mocha": "^2.3.4",
-    "phantomjs": "^1.9.19"
-  },
-  "engines": {
-    "node": ">= 0.10.0"
-  },
   "homepage": "https://github.com/puleos/object-hash",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/puleos/object-hash"
+  },
   "keywords": [
     "object",
     "hash",
     "sha1",
     "md5"
   ],
-  "license": "MIT",
-  "main": "./index.js",
-  "name": "object-hash",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/puleos/object-hash.git"
+  "bugs": {
+    "url": "https://github.com/puleos/object-hash/issues"
   },
   "scripts": {
-    "prepublish": "gulp dist",
-    "test": "node ./node_modules/.bin/mocha test"
+    "test": "node ./node_modules/.bin/mocha test",
+    "prepublish": "gulp dist"
   },
-  "version": "1.3.1"
+  "author": "Scott Puleo <puleos@gmail.com>",
+  "files": [
+    "index.js",
+    "dist/object_hash.js"
+  ],
+  "license": "MIT",
+  "devDependencies": {
+    "browserify": "^16.2.3",
+    "gulp": "^4.0.0",
+    "gulp-browserify": "^0.5.1",
+    "gulp-coveralls": "^0.1.4",
+    "gulp-exec": "^3.0.1",
+    "gulp-istanbul": "^1.1.3",
+    "gulp-jshint": "^2.0.0",
+    "gulp-mocha": "^5.0.0",
+    "gulp-rename": "^1.2.0",
+    "gulp-replace": "^1.0.0",
+    "gulp-uglify": "^3.0.0",
+    "jshint": "^2.8.0",
+    "jshint-stylish": "^2.1.0",
+    "karma": "^4.2.0",
+    "karma-chrome-launcher": "^2.2.0",
+    "karma-mocha": "^1.3.0",
+    "mocha": "^6.2.0"
+  },
+  "engines": {
+    "node": ">= 6"
+  },
+  "main": "./index.js",
+  "browser": "./dist/object_hash.js"
 }
diff --git a/node_modules/object-hash/readme.markdown b/node_modules/object-hash/readme.markdown
index 633c7e2..0f4fe30 100644
--- a/node_modules/object-hash/readme.markdown
+++ b/node_modules/object-hash/readme.markdown
@@ -30,7 +30,9 @@
 
 ## hash(value, options);
 Generate a hash from any object or type.  Defaults to sha1 with hex encoding.
-*  `algorithm` hash algo to be used: 'sha1', 'md5'. default: sha1
+*  `algorithm` hash algo to be used: 'sha1', 'md5', 'passthrough'. default: sha1
+  *  This supports the algorithms returned by `crypto.getHashes()`. Note that the default of SHA-1 is not considered secure, and a stronger algorithm should be used if a cryptographical hash is desired.
+  * This also supports the `passthrough` algorith, which will return the information that would otherwise have been hashed.
 *  `excludeValues` {true|false} hash object keys, values ignored. default: false
 *  `encoding` hash encoding, supports 'buffer', 'hex', 'binary', 'base64'. default: hex
 *  `ignoreUnknown` {true|*false} ignore unknown object types. default: false
@@ -44,10 +46,12 @@
 *  `unorderedSets` {true|false} Sort `Set` and `Map` instances before hashing, i.e. make
    `hash(new Set([1, 2])) == hash(new Set([2, 1]))` return `true`. default: true
 *  `unorderedObjects` {true|false} Sort objects before hashing, i.e. make `hash({ x: 1, y: 2 }) === hash({ y: 2, x: 1 })`. default: true
-*  `excludeKeys` optional function for exclude specific key(s) from hashing, if returns true then exclude from hash. default: include all keys   
+*  `excludeKeys` optional function for exclude specific key(s) from hashing, if returns true then exclude from hash. default: include all keys
 
 ## hash.sha1(value);
 Hash using the sha1 algorithm.
+
+Note that SHA-1 is not considered secure, and a stronger algorithm should be used if a cryptographical hash is desired.
 
 *Sugar method, equivalent to hash(value, {algorithm: 'sha1'})*
 
@@ -59,10 +63,14 @@
 ## hash.MD5(value);
 Hash using the md5 algorithm.
 
+Note that the MD5 is not considered secure, and a stronger algorithm should be used if a cryptographical hash is desired.
+
 *Sugar method, equivalent to hash(value, {algorithm: 'md5'})*
 
 ## hash.keysMD5(value);
 Hash object keys using the md5 algorithm, values ignored.
+
+Note that the MD5 is not considered secure, and a stronger algorithm should be used if a cryptographical hash is desired.
 
 *Sugar method, equivalent to hash(value, {algorithm: 'md5', excludeValues: true})*
 
@@ -85,8 +93,8 @@
 <script src="object_hash.js" type="text/javascript"></script>
 
 <script>
-  var hash = objectHash.sha1({foo:'bar'}); 
-  
+  var hash = objectHash.sha1({foo:'bar'});
+
   console.log(hash); // e003c89cdf35cdf46d8239b4692436364b7259f9
 </script>
 ```
@@ -143,7 +151,7 @@
 ```
 
 ## Legacy Browser Support
-IE <= 8 and Opera <= 11 support dropped in version 0.3.0.  If you require 
+IE <= 8 and Opera <= 11 support dropped in version 0.3.0.  If you require
 legacy browser support you must either use an ES5 shim or use version 0.2.5
 of this module.
 
@@ -167,3 +175,10 @@
 
 ## License
 MIT
+
+## Changelog
+
+### v2.0.0
+
+Only Node.js versions `>= 6.0.0` are being tested in CI now.
+No other breaking changes were introduced.
diff --git a/node_modules/object-hash/test/blob.js b/node_modules/object-hash/test/blob.js
deleted file mode 100644
index 7608771..0000000
--- a/node_modules/object-hash/test/blob.js
+++ /dev/null
@@ -1,41 +0,0 @@
-'use strict';
-
-var assert = require('assert');
-var hash = require('../index');
-
-if (typeof Blob !== 'undefined') {
-describe('hash()ing Blob objects', function() {
-  var blob;
-  before('create blob', function() {
-    try {
-      blob = new Blob(['ABC']);
-    } catch(e) {
-      // https://github.com/ariya/phantomjs/issues/11013
-      if (!e.message.match(/'\[object BlobConstructor\]' is not a constructor/)) {
-        throw e;
-      }
-      
-      var builder = new WebKitBlobBuilder();
-      builder.append('ABC');
-      blob = builder.getBlob();
-    }
-  });
-
-  it('should throw when trying to hash a blob', function() {
-    assert.throws(function() {
-      hash(blob);
-    }, /not supported/);
-    
-    assert.throws(function() {
-      hash({abcdef: blob});
-    }, /not supported/);
-  });
-
-  it('should not throw when trying to hash a blob with ignoreUnknown', function() {
-    var opt = {ignoreUnknown: true};
-    
-    assert.ok(validSha1.test(hash(blob, opt)), 'ignore Blob');
-    assert.ok(validSha1.test(hash({abcdef: blob}, opt)), 'ignore Blob');
-  });
-});
-}
diff --git a/node_modules/object-hash/test/index.js b/node_modules/object-hash/test/index.js
deleted file mode 100644
index 39eba6f..0000000
--- a/node_modules/object-hash/test/index.js
+++ /dev/null
@@ -1,290 +0,0 @@
-'use strict';
-
-var assert = require('assert');
-var crypto = require('crypto');
-var hash = require('../index');
-var validSha1 = /^[0-9a-f]{40}$/i;
-
-describe('hash', function() {
-  it('throws when nothing to hash', function () {
-    assert.throws(hash, 'no arguments');
-    assert.throws(function() {
-      hash(undefined, {algorithm: 'md5'});
-    }, 'undefined');
-  });
-
-  it('throws when passed an invalid options', function() {
-    assert.throws(function() {
-      hash({foo: 'bar'}, {algorithm: 'shalala'});
-    }, 'bad algorithm');
-    assert.throws(function() {
-      hash({foo: 'bar'}, {encoding: 'base16'});
-    }, 'bad encoding');
-  });
-
-  it('hashes a simple object', function() {
-    assert.ok(validSha1.test(hash({foo: 'bar', bar: 'baz'})), 'hash object');
-  });
-
-  if (typeof Buffer !== 'undefined') {
-    it('can return buffers', function() {
-      assert.ok(Buffer.isBuffer(hash({foo: 'bar', bar: 'baz'}, {encoding: 'buffer'})), 'hash object');
-    });
-  }
-
-  it('hashes identical objects with different key ordering', function() {
-    var hash1 = hash({foo: 'bar', bar: 'baz'});
-    var hash2 = hash({bar: 'baz', foo: 'bar'});
-    var hash3 = hash({bar: 'foo', foo: 'baz'});
-    assert.equal(hash1, hash2, 'hashes are equal');
-    assert.notEqual(hash1, hash3, 'different objects not equal');
-  });
-
-  it('respects object key ordering when unorderedObjects = false', function() {
-    var hash1 = hash({foo: 'bar', bar: 'baz'}, { unorderedObjects: false });
-    var hash2 = hash({bar: 'baz', foo: 'bar'}, { unorderedObjects: false });
-    assert.notEqual(hash1, hash2, 'hashes are not equal');
-  });
-
-  it('hashes only object keys when excludeValues option is set', function() {
-    var hash1 = hash({foo: false, bar: 'OK'}, { excludeValues: true });
-    var hash2 = hash({foo: true, bar: 'NO'}, { excludeValues: true });
-    var hash3 = hash({foo: true, bar: 'OK', baz: false}, { excludeValues: true });
-    assert.equal(hash1, hash2, 'values not in hash digest');
-    assert.notEqual(hash1, hash3, 'different keys not equal');
-  });
-
-  it('array values are hashed', function() {
-    var hash1 = hash({foo: ['bar', 'baz'], bax: true });
-    var hash2 = hash({foo: ['baz', 'bar'], bax: true });
-    assert.notEqual(hash1, hash2, 'different array orders are unique');
-  });
-
-  it('nested object values are hashed', function() {
-    var hash1 = hash({foo: {bar: true, bax: 1}});
-    var hash2 = hash({foo: {bar: true, bax: 1}});
-    var hash3 = hash({foo: {bar: false, bax: 1}});
-    assert.equal(hash1, hash2, 'hashes are equal');
-    assert.notEqual(hash1, hash3, 'different objects not equal');
-  });
-
-  it('sugar methods should be equivalent', function() {
-    var obj = {foo: 'bar', baz: true};
-    assert.equal(hash.keys(obj), hash(obj, {excludeValues: true}), 'keys');
-    assert.equal(hash.sha1(obj), hash(obj, {algorithm: 'sha1'}), 'sha1');
-    assert.equal(hash.MD5(obj), hash(obj, {algorithm: 'md5'}), 'md5');
-    assert.equal(hash.keysMD5(obj),
-      hash(obj, {algorithm: 'md5', excludeValues: true}), 'keys md5');
-  });
-
-  it('array of nested object values are hashed', function() {
-    var hash1 = hash({foo: [ {bar: true, bax: 1}, {bar: false, bax: 2} ] });
-    var hash2 = hash({foo: [ {bar: true, bax: 1}, {bar: false, bax: 2} ] });
-    var hash3 = hash({foo: [ {bar: false, bax: 2} ] });
-    assert.equal(hash1, hash2, 'hashes are equal');
-    assert.notEqual(hash1, hash3, 'different objects not equal');
-  });
-
-  it("recursive objects don't blow up stack", function() {
-    var hash1 = {foo: 'bar'};
-    hash1.recursive = hash1;
-    assert.doesNotThrow(function() {hash(hash1);}, /Maximum call stack size exceeded/, 'Should not throw an stack size exceeded exception');
-  });
-
-  it("recursive arrays don't blow up stack", function() {
-    var hash1 = ['foo', 'bar'];
-    hash1.push(hash1);
-    assert.doesNotThrow(function() {hash(hash1);}, /Maximum call stack size exceeded/, 'Should not throw an stack size exceeded exception');
-  });
-
-  it("recursive arrays don't blow up stack with unorderedArrays", function() {
-    var hash1 = ['foo', 'bar'];
-    hash1.push(hash1);
-    assert.doesNotThrow(function() {hash(hash1, {unorderedArrays: true});}, /Maximum call stack size exceeded/, 'Should not throw an stack size exceeded exception');
-  });
-
-  it("recursive handling tracks identity", function() {
-    var hash1 = {k1: {k: 'v'}, k2: {k: 'k2'}};
-    hash1.k1.r1 = hash1.k1;
-    hash1.k2.r2 = hash1.k2;
-    var hash2 = {k1: {k: 'v'}, k2: {k: 'k2'}};
-    hash2.k1.r1 = hash2.k2;
-    hash2.k2.r2 = hash2.k1;
-    assert.notEqual(hash(hash1), hash(hash2), "order of recursive objects should matter");
-  });
-
-  it("object types are hashed", function() {
-    var hash1 = hash({foo: 'bar'});
-    var hash2 = hash(['foo', 'bar']);
-    assert.notEqual(hash1, hash2, "arrays and objects should not produce identical hashes");
-  });
-
-  it("utf8 strings are hashed correctly", function() {
-    var hash1 = hash('\u03c3'); // cf 83 in utf8
-    var hash2 = hash('\u01c3'); // c7 83 in utf8
-    assert.notEqual(hash1, hash2, "different strings with similar utf8 encodings should produce different hashes");
-  });
-
-  it("strings passed as new String are hashed correctly", function() {
-    var hash1 = hash(new String('foo'));
-    assert.equal(hash1, '7cd3edacc4c9dd43908177508c112608a398bb9a');
-    var hash2 = hash({foo: new String('bar')});
-    assert.equal(hash2, 'a75c05bdca7d704bdfcd761913e5a4e4636e956b');
-  });
-
-  it("various hashes in crypto.getHashes() should be supported", function() {
-    var hashes = ['sha1', 'md5'];
-
-    if (crypto.getHashes) {
-      // take all hashes from crypto.getHashes() starting with MD or SHA
-      hashes = crypto.getHashes().filter(RegExp.prototype.test.bind(/^(md|sha)/i));
-    }
-
-    var obj = {randomText: 'bananas'};
-
-    for (var i = 0; i < hashes.length; i++) {
-      assert.ok(hash(obj, {algorithm: hashes[i]}), 'Algorithm ' + hashes[i] + ' should be supported');
-    }
-  });
-
-  it("null and 'Null' string produce different hashes", function() {
-    var hash1 = hash({foo: null});
-    var hash2 = hash({foo: 'Null'});
-    assert.notEqual(hash1, hash2, "null and 'Null' should not produce identical hashes");
-  });
-
-  it('Distinguish functions based on their properties', function() {
-
-    var a, b, c, d;
-    function Foo() {}
-    a = hash(Foo);
-
-    Foo.foo = 22;
-    b = hash(Foo);
-
-    Foo.bar = "42";
-    c = hash(Foo);
-
-    Foo.foo = "22";
-    d = hash(Foo);
-
-    assert.notEqual(a,b, 'adding a property changes the hash');
-    assert.notEqual(b,c, 'adding another property changes the hash');
-    assert.notEqual(c,d, 'changing a property changes the hash');
-  });
-
-  it('respectFunctionProperties = false', function() {
-
-    var a, b;
-    function Foo() {}
-    a = hash(Foo, {respectFunctionProperties: false});
-
-    Foo.foo = 22;
-    b = hash(Foo, {respectFunctionProperties: false});
-
-    assert.equal(a,b, 'function properties are ignored');
-  });
-
-  it('Distinguish functions based on prototype properties', function() {
-
-    var a, b, c, d;
-    function Foo() {}
-    a = hash(Foo);
-
-    Foo.prototype.foo = 22;
-    b = hash(Foo);
-
-    Foo.prototype.bar = "42";
-    c = hash(Foo);
-
-    Foo.prototype.foo = "22";
-    d = hash(Foo);
-
-    assert.notEqual(a,b, 'adding a property to the prototype changes the hash');
-    assert.notEqual(b,c, 'adding another property to the prototype changes the hash');
-    assert.notEqual(c,d, 'changing a property in the prototype changes the hash');
-  });
-
-  it('Distinguish objects based on their type', function() {
-
-    function Foo() {}
-    function Bar() {}
-
-    var f = new Foo(), b = new Bar();
-
-    assert.notEqual(hash(Foo), hash(Bar), 'Functions with different names should produce a different Hash.');
-    assert.notEqual(hash(f), hash(b), 'Objects with different constructor should have a different Hash.');
-  });
-
-  it('respectType = false', function() {
-    var opt = { respectType: false };
-
-
-    function Foo() {}
-    function Bar() {}
-
-    var f = new Foo(), b = new Bar();
-    assert.equal(hash(f, opt), hash(b, opt), 'Hashing should disregard the different constructor');
-
-
-    var ha, hb;
-    function F() {}
-    ha = hash(F, opt);
-
-    F.prototype.meaningOfLife = 42;
-    hb = hash(F, opt);
-
-    assert.equal(ha, hb, 'Hashing should disregard changes in the function\'s prototype');
-  });
-
-  it('unorderedArrays = false', function() {
-    var ha, hb;
-    ha = hash([1, 2, 3]);
-    hb = hash([3, 2, 1]);
-
-    assert.notEqual(ha, hb, 'Hashing should respect the order of array entries');
-  });
-
-  it('unorderedArrays = true', function() {
-    var opt = { unorderedArrays: true };
-
-    var ha, hb;
-    ha = hash([1, 2, 3], opt);
-    hb = hash([3, 2, 1], opt);
-
-    assert.equal(ha, hb, 'Hashing should not respect the order of array entries');
-
-    ha = hash([{a: 1}, {a: 2}], opt);
-    hb = hash([{a: 2}, {a: 1}], opt);
-
-    assert.equal(ha, hb, 'Hashing should not respect the order of array entries');
-  });
-
-  it('excludeKeys works', function() {
-    var ha, hb;
-    ha = hash({a: 1, b: 4}, { excludeKeys: function(key) { return key === 'b' } });
-    hb = hash({a: 1});
-
-    assert.equal(ha, hb, 'Hashing should ignore key `b`');
-  });
-
-  if (typeof Set !== 'undefined') {
-    it('unorderedSets = false', function() {
-      var opt = { unorderedSets: false };
-
-      var ha, hb;
-      ha = hash(new Set([1, 2, 3]), opt);
-      hb = hash(new Set([3, 2, 1]), opt);
-
-      assert.notEqual(ha, hb, 'Hashing should respect the order of Set entries');
-    });
-
-    it('unorderedSets = true', function() {
-      var ha, hb;
-      ha = hash(new Set([1, 2, 3]));
-      hb = hash(new Set([3, 2, 1]));
-
-      assert.equal(ha, hb, 'Hashing should not respect the order of Set entries');
-    });
-  }
-});
diff --git a/node_modules/object-hash/test/object-classes.js b/node_modules/object-hash/test/object-classes.js
deleted file mode 100644
index 8e3cdff..0000000
--- a/node_modules/object-hash/test/object-classes.js
+++ /dev/null
@@ -1,106 +0,0 @@
-'use strict';
-
-var assert = require('assert');
-var crypto = require('crypto');
-var stream = require('stream');
-var hash = require('../index');
-var validSha1 = /^[0-9a-f]{40}$/i;
-
-describe('hash() objects with custom class names', function() {
-  var builtinToString;
-  beforeEach(function() {
-    builtinToString = Object.prototype.toString;
-    Object.prototype.toString = function() {
-      if (this && typeof this.__className !== 'undefined') {
-        return this.__className;
-      }
-      
-      return builtinToString.apply(this, arguments);
-    };
-  });
-  
-  afterEach(function() {
-    Object.prototype.toString = builtinToString;
-  });
-  
-  it('should throw when trying to hash an unknown object', function() {
-    assert.throws(function() {
-      hash({a:1, __className: '[object Foo]'});
-    }, /Unknown object type "foo"/);
-    
-    assert.throws(function() {
-      hash({a:1, __className: 'Foo'});
-    }, /Unknown object type/);
-  });
-
-  it('should not throw when trying to hash an unknown object with ignoreUnknown', function() {
-    var opt = {ignoreUnknown: true};
-    
-    assert.ok(validSha1.test(hash({a:1, __className: '[object Foo]'}, opt)));
-  });
-
-  it('should not throw when trying to hash a weirdly-named object with ignoreUnknown', function() {
-    var opt = {ignoreUnknown: true};
-    
-    assert.ok(validSha1.test(hash({a:1, __className: 'Foo'}, opt)));
-  });
-  
-  it('should not delve further into a number of native types', function() {
-    var nativeTypes = [
-      'domwindow',
-      'process', 'timer', 'pipe', 'tcp', 'udp', 'tty', 'statwatcher',
-      'securecontext', 'connection', 'zlib', 'context', 'nodescript',
-      'httpparser', 'dataview', 'signal', 'fsevent', 'tlswrap'
-    ];
-    
-    for (var i = 0; i < nativeTypes.length; i++) {
-      var obj = { foobar: 1, __className: '[object ' + nativeTypes[i] + ']' };
-      var serialized = hash(obj, { algorithm: 'passthrough', encoding: 'utf8' });
-      assert.strictEqual(serialized, nativeTypes[i]);
-    }
-  });
-  
-  it('should hash xml based on its string representation', function() {
-    var obj = {
-      __className: '[object xml]',
-      toString: function() { return 'Banan盲' }
-    };
-    
-    var serialized = hash(obj, { algorithm: 'passthrough', encoding: 'utf8' });
-    assert.strictEqual(serialized, 'xml:Banan盲');
-  });
-  
-  it('should hash URLs based on its string representation', function() {
-    var obj = {
-      __className: '[object url]',
-      toString: function() { return 'https://example.com/' }
-    };
-    
-    var serialized = hash(obj, { algorithm: 'passthrough', encoding: 'utf8' });
-    assert.strictEqual(serialized, 'url:https://example.com/');
-  });
-  
-  it('should not hash blobs without ignoreUnknown', function() {
-    var obj = {
-      __className: '[object blob]'
-    };
-    
-    assert.throws(function() {
-      hash(obj);
-    }, /not supported/);
-  });
-  
-  it('should ignore blobs with ignoreUnknown', function() {
-    var obj = {
-      __className: '[object blob]'
-    };
-    
-    var serialized = hash(obj, {
-      algorithm: 'passthrough',
-      encoding: 'utf8',
-      ignoreUnknown: true
-    });
-    
-    assert.strictEqual(serialized, '[blob]');
-  });
-});
diff --git a/node_modules/object-hash/test/old-crypto.js b/node_modules/object-hash/test/old-crypto.js
deleted file mode 100644
index 88cefd2..0000000
--- a/node_modules/object-hash/test/old-crypto.js
+++ /dev/null
@@ -1,60 +0,0 @@
-'use strict';
-
-var assert = require('assert');
-var crypto = require('crypto');
-var hash = require('../index');
-var validSha1 = /^[0-9a-f]{40}$/i;
-var validBase64 = /^([A-Za-z0-9+\/]{4})*([A-Za-z0-9+\/==]{4})$/;
-
-describe('hash() without crypto.getHashes', function() {
-  var getHashes_;
-  beforeEach(function() {
-    getHashes_ = crypto.getHashes;
-    delete crypto.getHashes;
-  });
-  
-  afterEach(function() {
-    crypto.getHashes = getHashes_;
-  });
-  
-  it('should work fine for SHA1', function() {
-    assert.ok(validSha1.test(hash(42)), 'hash some value');
-    assert.ok(validSha1.test(hash(NaN)), 'hash some value');
-  });
-});
-
-describe('hash() without Duplex streams', function() {
-  var createHash_;
-  beforeEach(function() {
-    createHash_ = crypto.createHash;
-    crypto.createHash = function(algorithm) {
-      var strm = createHash_(algorithm);
-      
-      return {
-        update: strm.write.bind(strm),
-        digest: strm.digest.bind(strm)
-      };
-    };
-  });
-  
-  afterEach(function() {
-    crypto.createHash = createHash_;
-  });
-  
-  it('should work fine for SHA1 without .write()/.read()', function() {
-    assert.ok(validSha1.test(hash(42)), 'hash some value');
-    assert.ok(validSha1.test(hash(NaN)), 'hash some value');
-  });
-  
-  it('should work fine for SHA1 without .write()/.read() with base64', function() {
-    assert.ok(validBase64.test(hash(42, {encoding: 'base64'})), 'hash some value');
-    assert.ok(validBase64.test(hash(NaN, {encoding: 'base64'})), 'hash some value');
-  });
-  
-  if (typeof Buffer !== 'undefined') {
-    it('should work fine for SHA1 without .write()/.read() with buffer', function() {
-      assert.ok(Buffer.isBuffer(hash(42, {encoding: 'buffer'})), 'hash some value');
-      assert.ok(Buffer.isBuffer(hash(NaN, {encoding: 'buffer'})), 'hash some value');
-    });
-  }
-});
diff --git a/node_modules/object-hash/test/replacer.js b/node_modules/object-hash/test/replacer.js
deleted file mode 100644
index e2e8f03..0000000
--- a/node_modules/object-hash/test/replacer.js
+++ /dev/null
@@ -1,36 +0,0 @@
-'use strict';
-
-var assert = require('assert');
-var stream = require('stream');
-var hash = require('../index');
-
-describe('replacer option', function() {
-  it('should emit information about an object to a stream', function() {
-    var strm = new stream.PassThrough();
-    
-    var replacer = function(value) {
-      try {
-        return JSON.stringify(value);
-      } catch (e) {
-        return value;
-      }
-    };
-    
-    var obj = {foo: 'bar'};
-    hash.writeToStream(obj, {replacer: replacer}, strm);
-    var result = strm.read().toString();
-    assert.strictEqual(typeof result, 'string');
-    assert.notStrictEqual(result.indexOf(JSON.stringify(obj)), -1);
-  });
-
-  it('should not reach property values when excludeValues = true', function() {
-    var strm = new stream.PassThrough();
-    
-    var replacer = function(k) {
-      assert.notStrictEqual(k, 'bar');
-      return k;
-    };
-    
-    hash.writeToStream({foo: 'bar'}, {excludeValues: true}, strm);
-  });
-});
diff --git a/node_modules/object-hash/test/types.js b/node_modules/object-hash/test/types.js
deleted file mode 100644
index d59e2e9..0000000
--- a/node_modules/object-hash/test/types.js
+++ /dev/null
@@ -1,174 +0,0 @@
-'use strict';
-
-var assert = require('assert');
-var crypto = require('crypto');
-var hash = require('../index');
-var validSha1 = /^[0-9a-f]{40}$/i;
-
-describe('hash()ing different types', function() {
-  it('hashes non-object types', function() {
-    var func = function(a){ return a + 1; };
-    assert.ok(validSha1.test(hash('Shazbot!')), 'hash string');
-    assert.ok(validSha1.test(hash(42)), 'hash number');
-    assert.ok(validSha1.test(hash(NaN)), 'hash bool');
-    assert.ok(validSha1.test(hash(true)), 'hash bool');
-    assert.ok(validSha1.test(hash(func)), 'hash function');
-  });
-
-  it('hashes special object types', function() {
-    var dt = new Date();
-    dt.setDate(dt.getDate() + 1);
-
-    assert.ok(validSha1.test(hash([1,2,3,4])), 'hash array');
-    assert.notEqual(hash([1,2,3,4]), hash([4,3,2,1]), 'different arrays not equal');
-    assert.ok(validSha1.test(hash(new Date())), 'hash date');
-    assert.notEqual(hash(new Date()), hash(dt), 'different dates not equal');
-    assert.ok(validSha1.test(hash(null)), 'hash Null');
-    assert.ok(validSha1.test(hash(Number.NaN)), 'hash NaN');
-    assert.ok(validSha1.test(hash({ foo: undefined })), 'hash Undefined value');
-    assert.ok(validSha1.test(hash(new RegExp())), 'hash regex');
-    assert.ok(validSha1.test(hash(new Error())), 'hash error');
-  });
-
-  it('hashes node.js-internal object types', function() {
-    if (typeof process !== 'undefined') {
-      assert.ok(validSha1.test(hash(process)), 'hash process');
-    }
-    
-    var timer = setTimeout(function() {}, 0);
-    assert.ok(validSha1.test(hash(timer)), 'hash timer');
-  });
-
-  if (typeof Symbol !== 'undefined') {
-    it('hashes Symbols', function() {
-      assert.ok(validSha1.test(hash(Symbol('Banana'))), 'hash error');
-    });
-  }
-
-  if (typeof Buffer !== 'undefined') {
-    it("Buffers can be hashed", function() {
-      assert.ok(validSha1.test(hash(new Buffer('Banana'))), 'hashes Buffers');
-    });
-  }
-
-  if (typeof Uint8Array !== 'undefined') {
-    it("Typed arrays can be hashed", function() {
-      
-      assert.ok(validSha1.test(hash(new Uint8Array([1,2,3,4]))), 'hashes Uint8Array');
-      assert.ok(validSha1.test(hash(new  Int8Array([1,2,3,4]))), 'hashes  Int8Array');
-      assert.ok(validSha1.test(hash(new Uint16Array([1,2,3,4]))), 'hashes Uint16Array');
-      assert.ok(validSha1.test(hash(new  Int16Array([1,2,3,4]))), 'hashes  Int16Array');
-      assert.ok(validSha1.test(hash(new Uint32Array([1,2,3,4]))), 'hashes Uint32Array');
-      assert.ok(validSha1.test(hash(new  Int32Array([1,2,3,4]))), 'hashes  Int32Array');
-      assert.ok(validSha1.test(hash(new Float32Array([1,2,3,4]))), 'hashes Float32Array');
-      if (typeof Float64Array !== 'undefined')
-      assert.ok(validSha1.test(hash(new Float64Array([1,2,3,4]))), 'hashes Float64Array');
-      if (typeof Uint8ClampedArray !== 'undefined')
-      assert.ok(validSha1.test(hash(new Uint8ClampedArray([1,2,3,4]))), 'hashes Uint8ClampedArray');
-      assert.ok(validSha1.test(hash(new Uint8Array([1,2,3,4]).buffer)), 'hashes ArrayBuffer');
-    });
-  }
-
-  if (typeof Map !== 'undefined') {
-    it("Maps can be hashed", function() {
-      var map = new Map([['a',1],['b',2]]);
-      assert.ok(validSha1.test(hash(map)), 'hashes Maps');
-    });
-  }
-
-  if (typeof WeakMap !== 'undefined') {
-    it("WeakMaps can鈥檛 be hashed", function() {
-      var map = new WeakMap([[{foo: 'bar'},1]]);
-      assert.throws(function() {
-        validSha1.test(hash(map))
-      }, 'does not hash WeakMaps');
-    });
-  }
-
-  if (typeof Set !== 'undefined') {
-    it("Sets can be hashed", function() {
-      var set = new Set(['you', 'du', 'tu', '銇傘仾銇�', '鎮�']);
-      assert.ok(validSha1.test(hash(set)), 'hashes Sets');
-    });
-  }
-
-  if (typeof WeakSet !== 'undefined') {
-    it("WeakSets can鈥檛 be hashed", function() {
-      var obj = {foo: 'bar'};
-      var set = new WeakSet([obj]);
-      assert.throws(function() {
-        validSha1.test(hash(set))
-      }, 'does not hash WeakSets');
-    });
-  }
-
-  it("Builtin types themselves can be hashed", function() {
-    var hashcount = {};
-    var types = [Object, Date, Number, String, Function, RegExp,
-      Error, 0, null, NaN];
-    if (typeof WeakSet !== 'undefined') types.push(WeakSet);
-    if (typeof Set !== 'undefined') types.push(Set);
-    if (typeof WeakMap !== 'undefined') types.push(WeakMap);
-    if (typeof Map !== 'undefined') types.push(Map);
-    if (typeof Symbol !== 'undefined') types.push(Symbol);
-    if (typeof Uint8Array !== 'undefined') types.push(Uint8Array);
-
-    // Hash each type
-    for (var idx in types) {
-      var h = hash(types[idx]);
-      assert.ok(validSha1.test(h));
-      hashcount[h] = (hashcount[h] || 0) + 1;
-    }
-
-    // Check for collisions
-    var no = 0;
-    for (var h in hashcount) {
-      assert.equal(hashcount[h], 1);
-      no++;
-    }
-
-    // Self check; did we really hash all the types?
-    assert.equal(no, types.length);
-  });
-  
-  it("Builtin types might result in identical hashes with respectFunctionNames = false", function() {
-    var hashcount = {};
-    var types = [Object, Date, Number, String, Function, RegExp,
-      Error, 0, null, NaN];
-    if (typeof WeakSet !== 'undefined') types.push(WeakSet);
-    if (typeof Set !== 'undefined') types.push(Set);
-    if (typeof WeakMap !== 'undefined') types.push(WeakMap);
-    if (typeof Map !== 'undefined') types.push(Map);
-    if (typeof Symbol !== 'undefined') types.push(Symbol);
-    if (typeof Uint8Array !== 'undefined') types.push(Uint8Array);
-
-    // Hash each type
-    for (var idx in types) {
-      var h = hash(types[idx], { respectFunctionNames: false });
-      assert.ok(validSha1.test(h));
-      hashcount[h] = (hashcount[h] || 0) + 1;
-    }
-
-    // Check for collisions
-    var no = 0;
-    for (var h in hashcount) {
-      assert.ok(hashcount[h] >= 1);
-      no += hashcount[h];
-    }
-
-    // Self check; did we really hash all the types?
-    assert.equal(no, types.length);
-  });
-  
-  it("Functions with identical bodies and different names result in identical hashes with respectFunctionNames = false", function() {
-    var fn1 = function a() {};
-    var fn2 = function b() {};
-    var toStringDummy = function() { return '...'; };
-    fn1.toString = toStringDummy;
-    fn2.toString = toStringDummy;
-    
-    var h1 = hash(fn1, { respectFunctionNames: false });
-    var h2 = hash(fn2, { respectFunctionNames: false });
-    assert.strictEqual(h1, h2);
-  });
-});
diff --git a/node_modules/object-hash/test/writeToStream.js b/node_modules/object-hash/test/writeToStream.js
deleted file mode 100644
index b3e3c77..0000000
--- a/node_modules/object-hash/test/writeToStream.js
+++ /dev/null
@@ -1,27 +0,0 @@
-'use strict';
-
-var assert = require('assert');
-var stream = require('stream');
-var hash = require('../index');
-
-describe('writeToStream', function() {
-  it('should emit information about an object to a stream', function() {
-    var strm = new stream.PassThrough();
-    
-    hash.writeToStream({foo: 'bar'}, strm);
-    var result = strm.read().toString();
-    assert.strictEqual(typeof result, 'string');
-    assert.notStrictEqual(result.indexOf('foo'), -1);
-    assert.notStrictEqual(result.indexOf('bar'), -1);
-  });
-
-  it('should leave out keys when excludeValues = true', function() {
-    var strm = new stream.PassThrough();
-    
-    hash.writeToStream({foo: 'bar'}, {excludeValues: true}, strm);
-    var result = strm.read().toString();
-    assert.strictEqual(typeof result, 'string');
-    assert.notStrictEqual(result.indexOf('foo'), -1);
-    assert.   strictEqual(result.indexOf('bar'), -1);
-  });
-});
diff --git a/package-lock.json b/package-lock.json
index 5e14e17..a70f614 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26,10 +26,12 @@
         "quill": "1.3.7",
         "screenfull": "5.0.2",
         "sortablejs": "1.10.2",
+        "uri-js": "^4.4.1",
         "vue": "2.6.12",
         "vue-count-to": "1.0.13",
         "vue-cropper": "0.5.5",
         "vue-meta": "2.4.0",
+        "vue-print-nb": "^1.7.5",
         "vue-router": "3.4.9",
         "vuedraggable": "2.24.3",
         "vuex": "3.6.0"
@@ -44,6 +46,7 @@
         "compression-webpack-plugin": "5.0.2",
         "connect": "3.6.6",
         "eslint": "7.15.0",
+        "eslint-loader": "^4.0.2",
         "eslint-plugin-vue": "7.2.0",
         "lint-staged": "10.5.3",
         "runjs": "4.4.2",
@@ -2519,6 +2522,59 @@
       "peerDependencies": {
         "@vue/cli-service": "^3.0.0 || ^4.0.0-0",
         "eslint": ">= 1.6.0"
+      }
+    },
+    "node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/eslint-loader/-/eslint-loader-2.2.1.tgz",
+      "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
+      "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin",
+      "dev": true,
+      "dependencies": {
+        "loader-fs-cache": "^1.0.0",
+        "loader-utils": "^1.0.2",
+        "object-assign": "^4.0.1",
+        "object-hash": "^1.1.4",
+        "rimraf": "^2.6.1"
+      },
+      "peerDependencies": {
+        "eslint": ">=1.6.0 <7.0.0",
+        "webpack": ">=2.0.0 <5.0.0"
+      }
+    },
+    "node_modules/@vue/cli-plugin-eslint/node_modules/json5": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",
+      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+      "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.0"
+      },
+      "bin": {
+        "json5": "lib/cli.js"
+      }
+    },
+    "node_modules/@vue/cli-plugin-eslint/node_modules/loader-utils": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz",
+      "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+      "dev": true,
+      "dependencies": {
+        "big.js": "^5.2.2",
+        "emojis-list": "^3.0.0",
+        "json5": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/@vue/cli-plugin-eslint/node_modules/object-hash": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-1.3.1.tgz",
+      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.10.0"
       }
     },
     "node_modules/@vue/cli-plugin-router": {
@@ -7271,47 +7327,38 @@
       }
     },
     "node_modules/eslint-loader": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
-      "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/eslint-loader/-/eslint-loader-4.0.2.tgz",
+      "integrity": "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==",
       "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin",
       "dev": true,
       "dependencies": {
-        "loader-fs-cache": "^1.0.0",
-        "loader-utils": "^1.0.2",
-        "object-assign": "^4.0.1",
-        "object-hash": "^1.1.4",
-        "rimraf": "^2.6.1"
-      },
-      "peerDependencies": {
-        "eslint": ">=1.6.0 <7.0.0",
-        "webpack": ">=2.0.0 <5.0.0"
-      }
-    },
-    "node_modules/eslint-loader/node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/eslint-loader/node_modules/loader-utils": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
-      "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-      "dev": true,
-      "dependencies": {
-        "big.js": "^5.2.2",
-        "emojis-list": "^3.0.0",
-        "json5": "^1.0.1"
+        "find-cache-dir": "^3.3.1",
+        "fs-extra": "^8.1.0",
+        "loader-utils": "^2.0.0",
+        "object-hash": "^2.0.3",
+        "schema-utils": "^2.6.5"
       },
       "engines": {
-        "node": ">=4.0.0"
+        "node": ">= 10.13.0"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0",
+        "webpack": "^4.0.0 || ^5.0.0"
+      }
+    },
+    "node_modules/eslint-loader/node_modules/fs-extra": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz",
+      "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+      "dev": true,
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=6 <7 || >=8"
       }
     },
     "node_modules/eslint-plugin-vue": {
@@ -10659,7 +10706,7 @@
     },
     "node_modules/loader-fs-cache": {
       "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
+      "resolved": "https://registry.npmmirror.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
       "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==",
       "dev": true,
       "dependencies": {
@@ -10669,7 +10716,7 @@
     },
     "node_modules/loader-fs-cache/node_modules/find-cache-dir": {
       "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+      "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
       "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==",
       "dev": true,
       "dependencies": {
@@ -10683,7 +10730,7 @@
     },
     "node_modules/loader-fs-cache/node_modules/find-up": {
       "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz",
       "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
       "dev": true,
       "dependencies": {
@@ -10696,7 +10743,7 @@
     },
     "node_modules/loader-fs-cache/node_modules/mkdirp": {
       "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+      "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
       "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
       "dev": true,
       "dependencies": {
@@ -10708,7 +10755,7 @@
     },
     "node_modules/loader-fs-cache/node_modules/path-exists": {
       "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+      "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz",
       "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
       "dev": true,
       "dependencies": {
@@ -10720,7 +10767,7 @@
     },
     "node_modules/loader-fs-cache/node_modules/pkg-dir": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+      "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-1.0.0.tgz",
       "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==",
       "dev": true,
       "dependencies": {
@@ -11824,12 +11871,12 @@
       }
     },
     "node_modules/object-hash": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
-      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-2.2.0.tgz",
+      "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
       "dev": true,
       "engines": {
-        "node": ">= 0.10.0"
+        "node": ">= 6"
       }
     },
     "node_modules/object-inspect": {
@@ -13447,7 +13494,6 @@
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
       "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-      "dev": true,
       "engines": {
         "node": ">=6"
       }
@@ -16571,9 +16617,8 @@
     },
     "node_modules/uri-js": {
       "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+      "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
       "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
       "dependencies": {
         "punycode": "^2.1.0"
       }
@@ -16948,6 +16993,14 @@
       "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
       "engines": {
         "node": ">=0.10.0"
+      }
+    },
+    "node_modules/vue-print-nb": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/vue-print-nb/-/vue-print-nb-1.7.5.tgz",
+      "integrity": "sha512-iNbNyUVRWz0Ha1UTiCKxMPtHLUDGgNI8e8xmD3xqm9RlXIUeX9bT7DgNAfY8vPzqyFRHqGjxLI1rycKH366ziQ==",
+      "dependencies": {
+        "vue": "^2.6.11"
       }
     },
     "node_modules/vue-router": {
@@ -20003,6 +20056,47 @@
         "inquirer": "^7.1.0",
         "webpack": "^4.0.0",
         "yorkie": "^2.0.0"
+      },
+      "dependencies": {
+        "eslint-loader": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmmirror.com/eslint-loader/-/eslint-loader-2.2.1.tgz",
+          "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
+          "dev": true,
+          "requires": {
+            "loader-fs-cache": "^1.0.0",
+            "loader-utils": "^1.0.2",
+            "object-assign": "^4.0.1",
+            "object-hash": "^1.1.4",
+            "rimraf": "^2.6.1"
+          }
+        },
+        "json5": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",
+          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "loader-utils": {
+          "version": "1.4.2",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz",
+          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "object-hash": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-1.3.1.tgz",
+          "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+          "dev": true
+        }
       }
     },
     "@vue/cli-plugin-router": {
@@ -24086,36 +24180,27 @@
       }
     },
     "eslint-loader": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
-      "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/eslint-loader/-/eslint-loader-4.0.2.tgz",
+      "integrity": "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==",
       "dev": true,
       "requires": {
-        "loader-fs-cache": "^1.0.0",
-        "loader-utils": "^1.0.2",
-        "object-assign": "^4.0.1",
-        "object-hash": "^1.1.4",
-        "rimraf": "^2.6.1"
+        "find-cache-dir": "^3.3.1",
+        "fs-extra": "^8.1.0",
+        "loader-utils": "^2.0.0",
+        "object-hash": "^2.0.3",
+        "schema-utils": "^2.6.5"
       },
       "dependencies": {
-        "json5": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+        "fs-extra": {
+          "version": "8.1.0",
+          "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz",
+          "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
           "dev": true,
           "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.2",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
-          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-          "dev": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
+            "graceful-fs": "^4.2.0",
+            "jsonfile": "^4.0.0",
+            "universalify": "^0.1.0"
           }
         }
       }
@@ -26691,7 +26776,7 @@
     },
     "loader-fs-cache": {
       "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
+      "resolved": "https://registry.npmmirror.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
       "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==",
       "dev": true,
       "requires": {
@@ -26701,7 +26786,7 @@
       "dependencies": {
         "find-cache-dir": {
           "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+          "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
           "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==",
           "dev": true,
           "requires": {
@@ -26712,7 +26797,7 @@
         },
         "find-up": {
           "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+          "resolved": "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz",
           "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
           "dev": true,
           "requires": {
@@ -26722,7 +26807,7 @@
         },
         "mkdirp": {
           "version": "0.5.6",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+          "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
           "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
           "dev": true,
           "requires": {
@@ -26731,7 +26816,7 @@
         },
         "path-exists": {
           "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+          "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz",
           "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
           "dev": true,
           "requires": {
@@ -26740,7 +26825,7 @@
         },
         "pkg-dir": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+          "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-1.0.0.tgz",
           "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==",
           "dev": true,
           "requires": {
@@ -27666,9 +27751,9 @@
       }
     },
     "object-hash": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
-      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-2.2.0.tgz",
+      "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
       "dev": true
     },
     "object-inspect": {
@@ -29056,8 +29141,7 @@
     "punycode": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-      "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-      "dev": true
+      "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
     },
     "q": {
       "version": "1.5.1",
@@ -31640,9 +31724,8 @@
     },
     "uri-js": {
       "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+      "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
       "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
       "requires": {
         "punycode": "^2.1.0"
       }
@@ -31954,6 +32037,14 @@
         }
       }
     },
+    "vue-print-nb": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/vue-print-nb/-/vue-print-nb-1.7.5.tgz",
+      "integrity": "sha512-iNbNyUVRWz0Ha1UTiCKxMPtHLUDGgNI8e8xmD3xqm9RlXIUeX9bT7DgNAfY8vPzqyFRHqGjxLI1rycKH366ziQ==",
+      "requires": {
+        "vue": "^2.6.11"
+      }
+    },
     "vue-router": {
       "version": "3.4.9",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.9.tgz",
diff --git a/package.json b/package.json
index b1f98db..df6370c 100644
--- a/package.json
+++ b/package.json
@@ -53,10 +53,12 @@
     "quill": "1.3.7",
     "screenfull": "5.0.2",
     "sortablejs": "1.10.2",
+    "uri-js": "^4.4.1",
     "vue": "2.6.12",
     "vue-count-to": "1.0.13",
     "vue-cropper": "0.5.5",
     "vue-meta": "2.4.0",
+    "vue-print-nb": "^1.7.5",
     "vue-router": "3.4.9",
     "vuedraggable": "2.24.3",
     "vuex": "3.6.0"
@@ -71,6 +73,7 @@
     "compression-webpack-plugin": "5.0.2",
     "connect": "3.6.6",
     "eslint": "7.15.0",
+    "eslint-loader": "^4.0.2",
     "eslint-plugin-vue": "7.2.0",
     "lint-staged": "10.5.3",
     "runjs": "4.4.2",
diff --git a/ruoyi-ui/src/views/collection/collectionInfo.vue b/ruoyi-ui/src/views/collection/collectionInfo.vue
index 6145d2e..225f568 100644
--- a/ruoyi-ui/src/views/collection/collectionInfo.vue
+++ b/ruoyi-ui/src/views/collection/collectionInfo.vue
@@ -1,7 +1,15 @@
 <template>
-  <div class="app-container">
+  <div class="app-container" id="printable-content">
     <div class="form-header mt">
-      <h4 class="dt h4">鏀惰棌涓庤崳瑾夎缁嗕俊鎭� </h4>
+      <h1 style="font-size:21px;padding-top:30px;display: flex;justify-content: space-between;align-items: center;" >
+        <span>鏀惰棌涓庤崳瑾夎缁嗕俊鎭�</span>
+        <div style="display: flex; align-items: center;">
+        <el-button size="mini" type="text"  v-print="'#printable-content'" v-hasPermi="['person:information:memo']">
+        <div class="form" ><el-icon  style="padding-right:100px;"></el-icon>
+          <span class="text" style="width: 69px;height: 26px;font-size: 16px;
+            font-family: Microsoft YaHei-Regular, Microsoft YaHei; color: #EBA4AA;">鎵撳嵃</span></div>
+      </el-button></div>
+      </h1>
 <!--      <el-button v-if="isShow" type="primary" class="pt"  icon="el-icon-edit" @click="handleEdit()" >缂栬緫</el-button>-->
       <!--      <br>-->
       <!--      <el-button type="primary" class="pt"   @click="handleExport"-->
@@ -82,6 +90,8 @@
             multiple
             :http-request="requestUpload"
             :file-list="fileList"
+            :disabled="!btn"
+            :class="{ hide: !btn }"
           >
             <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
             <i v-if="!uploading" slot="default" class="el-icon-plus"></i>
@@ -133,6 +143,8 @@
             :on-remove="handleRemoveFile"
             :http-request="requestUpload"
             :show-file-list="true"
+            :disabled="!btn"
+            :class="{ hide: !btn }"
           >
 
             <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
@@ -193,6 +205,7 @@
 import {blobValidate} from "@/utils/ruoyi";
 import errorCode from "@/utils/errorCode";
 import {Message} from "element-ui";
+import {addRole, updateRole} from "@/api/system/role";
 import {getCollection, updateCollection,download,uploadPic,listType} from "@/api/collection/index";
 
 
@@ -203,8 +216,7 @@
     return {
       cdi:"鏀惰棌涓庤崳瑾夎缁嗕俊鎭�",
       udi:"鏀惰棌涓庤崳瑾変俊鎭鎯�",
-      fot:['.bmp','.jpg','.jpeg','.png','.tif','.gif','.pcx','.tga','.exif','.fpx',
-        '.svg','.psd','.cdr','.pcd','.dxf','.ufo','.eps','.ai','.aw','.WMF','.webp','.apng'],
+      fot:[".jpg",".jif"],
       fileList:[
       ],
       fileListOther:[
@@ -230,6 +242,7 @@
         remark:undefined,
         url: undefined,
       },
+      desurl:'',
       dialogImageUrl: '',
       dialogVisible: false,
       disabled: false,
@@ -301,6 +314,7 @@
       document.title = "鏀惰棌涓庤崳瑾夎缁嗕俊鎭�";
       this.$route.meta.title = "鏀惰棌涓庤崳瑾夎缁嗕俊鎭�";//鍒楄〃鐨勫悕绉�
       this.isShow=false
+      this.btn = false;
     }
 
     let _this = this
@@ -342,17 +356,6 @@
   },
   mounted() {},
   methods: {
-    /** 鏌ヨ绫诲埆淇℃伅 */
-    // getCateInfor()
-    // {
-    //   let _this = this
-    //   getCategory().then(response=>{
-    //
-    //     response.data.itemValues.replace("{","").replace("}","").split(",").map(elem=>{
-    //       _this.typeOptions.push({"label":elem.split(":")[0], "value":elem.split(":")[0]})
-    //     })
-    //   })
-    // },
     //绫诲埆
     addNewOption() {
       const newOption = this.newOption.trim();
@@ -522,6 +525,12 @@
   display: block;
   position: absolute;
 }
+.hide .el-upload--picture-card {
+  display: none;
+}
+.form{
+  background:center/11% no-repeat url('../../assets/icons/form.png') ;
+}
 .form_item{
   font-size: 12px;
   font-family: Microsoft YaHei-Regular, Microsoft YaHei;
diff --git a/ruoyi-ui/src/views/contacts/contactsInfo.vue b/ruoyi-ui/src/views/contacts/contactsInfo.vue
index 9263e66..4292fc1 100644
--- a/ruoyi-ui/src/views/contacts/contactsInfo.vue
+++ b/ruoyi-ui/src/views/contacts/contactsInfo.vue
@@ -1,7 +1,15 @@
 <template>
-  <div class="app-container">
+  <div class="app-container" id="printable-content">
     <div class="form-header mt">
-      <h4 class="dt h4">閫氳褰曡缁嗕俊鎭� </h4>
+      <h1 style="font-size:21px;padding-top:30px;display: flex;justify-content: space-between;align-items: center;" >
+        <span>閫氳褰曡缁嗕俊鎭�</span>
+        <div style="display: flex; align-items: center;">
+          <el-button size="mini" type="text"  v-print="'#printable-content'" v-hasPermi="['person:information:memo']">
+            <div class="form" ><el-icon  style="padding-right:100px;"></el-icon>
+              <span class="text" style="width: 69px;height: 26px;font-size: 16px;
+            font-family: Microsoft YaHei-Regular, Microsoft YaHei; color: #EBA4AA;">鎵撳嵃</span></div>
+          </el-button></div>
+      </h1>
     </div>
     <div style="padding-left:15px">
      <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-position="left" label-width="100px">
@@ -226,6 +234,7 @@
         remark:undefined,
         url: undefined,
       },
+      desurl:'',
       dialogImageUrl: '',
       dialogVisible: false,
       disabled: false,
@@ -284,6 +293,7 @@
       document.title = "閫氳褰曡缁嗕俊鎭�";
       this.$route.meta.title = "閫氳褰曡缁嗕俊鎭�";//鍒楄〃鐨勫悕绉�
       this.isShow=false
+      this.btn = false;
     }
 
     let _this = this
@@ -467,4 +477,10 @@
   display: block;
   position: absolute;
 }
+.hide .el-upload--picture-card {
+  display: none;
+}
+.form{
+  background:center/11% no-repeat url('../../assets/icons/form.png') ;
+}
 </style>
diff --git a/ruoyi-ui/src/views/doctor/doctorInfo.vue b/ruoyi-ui/src/views/doctor/doctorInfo.vue
index 6811e92..ee514fb 100644
--- a/ruoyi-ui/src/views/doctor/doctorInfo.vue
+++ b/ruoyi-ui/src/views/doctor/doctorInfo.vue
@@ -1,11 +1,15 @@
 <template>
-  <div class="app-container">
+  <div class="app-container" id="printable-content">
     <div class="form-header mt">
-      <h4 class="dt h4">灏卞尰璁板綍璇︾粏淇℃伅 </h4>
-<!--      <el-button v-if="isShow" type="primary" class="pt"  icon="el-icon-edit" @click="handleEdit()" >缂栬緫</el-button>-->
-      <!--      <br>-->
-      <!--      <el-button type="primary" class="pt"   @click="handleExport"-->
-      <!--                 v-hasPermi="['self:user:export']" >瀵煎嚭</el-button>-->
+      <h1 style="font-size:21px;padding-top:30px;display: flex;justify-content: space-between;align-items: center;" >
+        <span>灏卞尰璁板綍璇︾粏淇℃伅</span>
+        <div style="display: flex; align-items: center;">
+          <el-button size="mini" type="text"  v-print="'#printable-content'" v-hasPermi="['person:information:memo']">
+            <div class="form" ><el-icon  style="padding-right:100px;"></el-icon>
+              <span class="text" style="width: 69px;height: 26px;font-size: 16px;
+            font-family: Microsoft YaHei-Regular, Microsoft YaHei; color: #EBA4AA;">鎵撳嵃</span></div>
+          </el-button></div>
+      </h1>
     </div>
     <div>
       <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-position="left" label-width="100px">
@@ -84,6 +88,8 @@
         multiple
         :http-request="requestUpload"
         :file-list="fileList"
+        :disabled="!btn"
+        :class="{ hide: !btn }"
       >
         <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
         <i v-if="!uploading" slot="default" class="el-icon-plus"></i>
@@ -135,6 +141,8 @@
             :on-remove="handleRemoveFile"
             :http-request="requestUpload"
             :show-file-list="true"
+            :disabled="!btn"
+            :class="{ hide: !btn }"
           >
               <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
               <i v-if="!uploading" slot="default" class="el-icon-plus"></i>
@@ -201,8 +209,7 @@
     return {
       cdi:"灏卞尰璁板綍璇︾粏淇℃伅",
       udi:"灏卞尰璁板綍淇℃伅璇︽儏",
-      fot:['.bmp','.jpg','.jpeg','.png','.tif','.gif','.pcx','.tga','.exif','.fpx',
-        '.svg','.psd','.cdr','.pcd','.dxf','.ufo','.eps','.ai','.aw','.WMF','.webp','.apng'],
+      fot:[".jpg",".jif"],
       fileList:[],
       fileListOther:[],
       dsb:true,
@@ -225,6 +232,7 @@
         remark:undefined,
         url: undefined,
       },
+      desurl:'',
       dialogImageUrl: '',
       dialogVisible: false,
       disabled: false,
@@ -296,6 +304,7 @@
       document.title = "灏卞尰璁板綍璇︾粏淇℃伅";
       this.$route.meta.title = "灏卞尰璁板綍璇︾粏淇℃伅";//鍒楄〃鐨勫悕绉�
       this.isShow=false
+      this.btn = false;
     }
 
     let _this = this
@@ -513,4 +522,10 @@
   display: block;
   position: absolute;
 }
+.hide .el-upload--picture-card {
+  display: none;
+}
+.form{
+  background:center/11% no-repeat url('../../assets/icons/form.png') ;
+}
 </style>
diff --git a/ruoyi-ui/src/views/honor/honorInfo.vue b/ruoyi-ui/src/views/honor/honorInfo.vue
index 7f88aea..1c0f243 100644
--- a/ruoyi-ui/src/views/honor/honorInfo.vue
+++ b/ruoyi-ui/src/views/honor/honorInfo.vue
@@ -1,11 +1,15 @@
 <template>
-  <div class="app-container">
+  <div class="app-container" id="printable-content">
     <div class="form-header mt">
-      <h4 class="dt h4">鑽h獕璇佷功璇︾粏淇℃伅 </h4>
-      <!--      <el-button v-if="isShow" type="primary" class="pt"  icon="el-icon-edit" @click="handleEdit()" >缂栬緫</el-button>-->
-      <!--      <br>-->
-      <!--      <el-button type="primary" class="pt"   @click="handleExport"-->
-      <!--                 v-hasPermi="['self:user:export']" >瀵煎嚭</el-button>-->
+      <h1 style="font-size:21px;padding-top:30px;display: flex;justify-content: space-between;align-items: center;" >
+        <span>鑽h獕璇佷功璇︾粏淇℃伅</span>
+        <div style="display: flex; align-items: center;">
+          <el-button size="mini" type="text"  v-print="'#printable-content'" v-hasPermi="['person:information:memo']">
+            <div class="form" ><el-icon  style="padding-right:100px;"></el-icon>
+              <span class="text" style="width: 69px;height: 26px;font-size: 16px;
+            font-family: Microsoft YaHei-Regular, Microsoft YaHei; color: #EBA4AA;">鎵撳嵃</span></div>
+          </el-button></div>
+      </h1>
     </div>
     <div>
       <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-position="left" label-width="100px">
@@ -89,6 +93,8 @@
           multiple
           :http-request="requestUpload"
           :file-list="fileList"
+          :disabled="!btn"
+          :class="{ hide: !btn }"
         >
           <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
           <i v-if="!uploading" slot="default" class="el-icon-plus"></i>
@@ -138,6 +144,8 @@
           :on-remove="handleRemoveFile"
           :http-request="requestUpload"
           :show-file-list="true"
+          :disabled="!btn"
+          :class="{ hide: !btn }"
         >
           <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
           <i v-if="!uploading" slot="default" class="el-icon-plus"></i>
@@ -205,8 +213,7 @@
     return {
       cdi:"鑽h獕璇佷功璇︾粏淇℃伅",
       udi:"鑽h獕璇佷功淇℃伅璇︽儏",
-      fot:['.bmp','.jpg','.jpeg','.png','.tif','.gif','.pcx','.tga','.exif','.fpx',
-        '.svg','.psd','.cdr','.pcd','.dxf','.ufo','.eps','.ai','.aw','.WMF','.webp','.apng'],
+      fot:[".jpg",".jif"],
       fileList:[],
       fileListOther:[],
       dsb:true,
@@ -231,6 +238,7 @@
         remark:undefined,
         url: undefined,
       },
+      desurl:'',
       dialogImageUrl: '',
       dialogVisible: false,
       disabled: false,
@@ -317,6 +325,7 @@
       document.title = "鏌ョ湅鑽h獕璇佷功璇︾粏淇℃伅";
       this.$route.meta.title = "鏌ョ湅鑽h獕璇佷功璇︾粏淇℃伅";//鍒楄〃鐨勫悕绉�
       this.isShow=false
+      this.btn = false;
     }
 
     let _this = this
@@ -570,4 +579,10 @@
   display: block;
   position: absolute;
 }
+.hide .el-upload--picture-card {
+  display: none;
+}
+.form{
+  background:center/11% no-repeat url('../../assets/icons/form.png') ;
+}
 </style>
diff --git a/ruoyi-ui/src/views/self/memoInfo.vue b/ruoyi-ui/src/views/self/memoInfo.vue
index a739a96..44f7c3b 100644
--- a/ruoyi-ui/src/views/self/memoInfo.vue
+++ b/ruoyi-ui/src/views/self/memoInfo.vue
@@ -1,8 +1,17 @@
 <template>
-  <div class="app-container">
+  <div class="app-container" id="printable-content">
     <div class="form-header mt">
-      <el-page-header @back="goBack" content="涓汉璁颁簨鏈缁嗕俊鎭�">
-      </el-page-header>
+      <h1 style="font-size:21px;padding-top:30px;display: flex;justify-content: space-between;align-items: center;" >
+              <el-page-header @back="goBack" content="涓汉璁颁簨鏈缁嗕俊鎭�">
+              </el-page-header>
+<!--        <span>涓汉璁颁簨鏈缁嗕俊鎭�</span>-->
+        <div style="display: flex; align-items: center;">
+          <el-button size="mini" type="text"  v-print="'#printable-content'" v-hasPermi="['person:information:memo']">
+            <div class="form" ><el-icon  style="padding-right:100px;"></el-icon>
+              <span class="text" style="width: 69px;height: 26px;font-size: 16px;
+            font-family: Microsoft YaHei-Regular, Microsoft YaHei; color: #EBA4AA;">鎵撳嵃</span></div>
+          </el-button></div>
+      </h1>
 <!--      <h4 class="dt h4"> </h4>-->
     </div>
     <div>
@@ -53,6 +62,8 @@
           multiple
           :http-request="requestUpload"
           :file-list="fileList"
+          :disabled="!btn"
+          :class="{ hide: !btn }"
         >
           <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
           <i v-if="!uploading" slot="default" class="el-icon-plus"></i>
@@ -104,6 +115,8 @@
           :on-remove="handleRemoveFile"
           :http-request="requestUpload"
           :show-file-list="true"
+          :disabled="!btn"
+          :class="{ hide: !btn }"
         >
           <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
           <i v-if="!uploading" slot="default" class="el-icon-plus"></i>
@@ -189,6 +202,7 @@
         remark:undefined,
         url: undefined,
       },
+      desurl:'',
       dialogImageUrl: '',
       dialogVisible: false,
       disabled: false,
@@ -241,6 +255,7 @@
       document.title = "涓汉璁颁簨鏈缁嗕俊鎭�";
       this.$route.meta.title = "涓汉璁颁簨鏈缁嗕俊鎭�";//鍒楄〃鐨勫悕绉�
       this.isShow=false
+      this.btn = false;
     }
 
     let _this = this
@@ -431,4 +446,10 @@
   display: block;
   position: absolute;
 }
+.hide .el-upload--picture-card {
+  display: none;
+}
+.form{
+  background:center/11% no-repeat url('../../assets/icons/form.png') ;
+}
 </style>
diff --git a/ruoyi-ui/src/views/self/show.vue b/ruoyi-ui/src/views/self/show.vue
index 2889f83..0e2cf44 100644
--- a/ruoyi-ui/src/views/self/show.vue
+++ b/ruoyi-ui/src/views/self/show.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="app-container">
+  <div class="app-container" id="printable-content">
     <!--  鍒锋柊椤甸潰  -->
 <!--    <MyComponent :key="componentKey" />-->
     <!--    鍥炲埌椤堕儴-->
@@ -35,6 +35,7 @@
             size="mini"
             style=" width: 67px;height: 27px;background: #FFDDE3;
             border-radius: 7px 7px 7px 7px;opacity: 1; margin-left: 20px;"
+            v-print="'#printable-content'"
             v-hasPermi="['family:note:export']"
           >鎵撳嵃</el-button>
       </div>
diff --git a/ruoyi-ui/src/views/wish/wishInfo.vue b/ruoyi-ui/src/views/wish/wishInfo.vue
index 95fa711..4dd26be 100644
--- a/ruoyi-ui/src/views/wish/wishInfo.vue
+++ b/ruoyi-ui/src/views/wish/wishInfo.vue
@@ -1,11 +1,15 @@
 <template>
-  <div class="app-container">
+  <div class="app-container" id="printable-content">
     <div class="form-header mt">
-      <h4 class="dt h4">鐧惧勾蹇冩効璇︾粏淇℃伅 </h4>
-      <!--      <el-button v-if="isShow" type="primary" class="pt"  icon="el-icon-edit" @click="handleEdit()" >缂栬緫</el-button>-->
-      <!--      <br>-->
-      <!--      <el-button type="primary" class="pt"   @click="handleExport"-->
-      <!--                 v-hasPermi="['self:user:export']" >瀵煎嚭</el-button>-->
+      <h1 style="font-size:21px;padding-top:30px;display: flex;justify-content: space-between;align-items: center;" >
+        <span>鐧惧勾蹇冩効璇︾粏淇℃伅</span>
+        <div style="display: flex; align-items: center;">
+          <el-button size="mini" type="text"  v-print="'#printable-content'" v-hasPermi="['person:information:memo']">
+            <div class="form" ><el-icon  style="padding-right:100px;"></el-icon>
+              <span class="text" style="width: 69px;height: 26px;font-size: 16px;
+            font-family: Microsoft YaHei-Regular, Microsoft YaHei; color: #EBA4AA;">鎵撳嵃</span></div>
+          </el-button></div>
+      </h1>
     </div>
     <div style="padding-left:15px">
       <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-position="left" label-width="120px">
@@ -79,6 +83,8 @@
           multiple
           :http-request="requestUpload"
           :file-list="fileList"
+          :disabled="!btn"
+          :class="{ hide: !btn }"
         >
           <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
           <i v-if="!uploading" slot="default" class="el-icon-plus"></i>
@@ -130,6 +136,8 @@
           :on-remove="handleRemoveFile"
           :http-request="requestUpload"
           :show-file-list="true"
+          :disabled="!btn"
+          :class="{ hide: !btn }"
         >
           <div v-if="uploading" class="upload-status">姝e湪涓婁紶...</div>
           <i v-if="!uploading" slot="default" class="el-icon-plus"></i>
@@ -224,6 +232,7 @@
         remark:undefined,
         url: undefined,
       },
+      desurl:'',
       dialogImageUrl: '',
       dialogVisible: false,
       disabled: false,
@@ -292,6 +301,7 @@
       document.title = "鐧惧勾蹇冩効璇︾粏淇℃伅";
       this.$route.meta.title = "鐧惧勾蹇冩効璇︾粏淇℃伅";//鍒楄〃鐨勫悕绉�
       this.isShow=false
+      this.btn = false;
     }
 
     let _this = this
@@ -479,6 +489,12 @@
   display: block;
   position: absolute;
 }
+.hide .el-upload--picture-card {
+  display: none;
+}
+.form{
+  background:center/11% no-repeat url('../../assets/icons/form.png') ;
+}
 .form_item{
   font-size: 12px;
   font-family: Microsoft YaHei-Regular, Microsoft YaHei;

--
Gitblit v1.9.1