~rbdr/tomato-sauce

a0666be3ab58ed83ad6d622cfe2b8293c40dffbb — Ruben Beltran del Rio 2 years ago c80b2f4
Update code and dpendencies
M .eslintrc => .eslintrc +5 -8
@@ 1,11 1,8 @@
{
  "extends": "eslint-config-hapi",
  "rules": {
    "indent": [
      2,
      2
    ],
    "no-undef": 2,
    "require-yield": 0
  "extends": [
    "plugin:@hapi/recommended"
  ],
  "parserOptions": {
    "ecmaVersion": 2020
  }
}

M bin/tomato_sauce.js => bin/tomato_sauce.js +20 -20
@@ 11,9 11,9 @@ const TomatoSauce = require('..');
const Util = require('../lib/util');

const config = {
  port: Getenv.int('TOMATO_SAUCE_PORT', 9999),
  frequency: Getenv.int('TOMATO_SAUCE_FREQUENCY', 333),
  modulation: Getenv.int('TOMATO_SAUCE_MODULATION_SPEED', 5)
    port: Getenv.int('TOMATO_SAUCE_PORT', 9999),
    frequency: Getenv.int('TOMATO_SAUCE_FREQUENCY', 333),
    modulation: Getenv.int('TOMATO_SAUCE_MODULATION_SPEED', 5)
};

const screenPath = Getenv('TOMATO_SAUCE_SCREEN_PATH', Path.join(__dirname, '../lib/screens'));


@@ 21,28 21,28 @@ const rendererPath = Getenv('TOMATO_SAUCE_RENDERER_PATH', Path.join(__dirname, '

Util.loadFiles(screenPath).then((screens) => {

  config.screens = screens;
  return Util.loadFiles(rendererPath);
    config.screens = screens;
    return Util.loadFiles(rendererPath);
})
  .then((renderers) => {
    .then((renderers) => {

    config.renderers = renderers;
  })
  .then(() => {
        config.renderers = renderers;
    })
    .then(() => {

    const tomatoSauce = new TomatoSauce(config);
        const tomatoSauce = new TomatoSauce(config);

    tomatoSauce.on('listening', (event) => {
        tomatoSauce.on('listening', (event) => {

      const address = event.data.server.address();
      console.log(`Tomato Sauce listening on: ${address.address}:${address.port}`);
    });
            const address = event.data.server.address();
            console.log(`Tomato Sauce listening on: ${address.address}:${address.port}`);
        });

    tomatoSauce.on('error', (error) => {
        tomatoSauce.on('error', (error) => {

      console.error(error.stack || error.message || error);
      process.exit(1);
    });
            console.error(error.stack || error.message || error);
            process.exit(1);
        });

    tomatoSauce.run();
  });
        tomatoSauce.run();
    });

M lib/renderers/256_colors.js => lib/renderers/256_colors.js +5 -5
@@ 9,11 9,11 @@
 */
module.exports = function (red, blue, green) {

  const redValue = Math.round(red * 5 / 255);
  const blueValue = Math.round(blue * 5 / 255);
  const greenValue = Math.round(green * 5 / 255);
    const redValue = Math.round(red * 5 / 255);
    const blueValue = Math.round(blue * 5 / 255);
    const greenValue = Math.round(green * 5 / 255);

  const colorNumber = 16 + 36 * redValue + 6 * greenValue + blueValue;
    const colorNumber = 16 + 36 * redValue + 6 * greenValue + blueValue;

  return `\x1B[48;5;${colorNumber}m`;
    return `\x1B[48;5;${colorNumber}m`;
};

M lib/renderers/ansi.js => lib/renderers/ansi.js +3 -3
@@ 9,8 9,8 @@
 */
module.exports = function (red, blue, green) {

  const colorOffset = Math.round((red + blue + green) * 7 / (255 * 3));
  const colorNumber = 40 + colorOffset;
    const colorOffset = Math.round((red + blue + green) * 7 / (255 * 3));
    const colorNumber = 40 + colorOffset;

  return `\x1B[${colorNumber}m`;
    return `\x1B[${colorNumber}m`;
};

M lib/renderers/fake_color.js => lib/renderers/fake_color.js +1 -1
@@ 8,5 8,5 @@
 */
module.exports = function (red, blue, green) {

  return `\x1B[28;2;${Math.round(red)};${Math.round(green)};${Math.round(blue)}m`;
    return `\x1B[28;2;${Math.round(red)};${Math.round(green)};${Math.round(blue)}m`;
};

M lib/renderers/true_color.js => lib/renderers/true_color.js +1 -1
@@ 15,5 15,5 @@
 */
module.exports = function (red, blue, green) {

  return `\x1B[48;2;${Math.round(red)};${Math.round(green)};${Math.round(blue)}m`;
    return `\x1B[48;2;${Math.round(red)};${Math.round(green)};${Math.round(blue)}m`;
};

M lib/screens/circle.js => lib/screens/circle.js +18 -18
@@ 8,29 8,29 @@
 */
module.exports = function (modulation, width, height, renderer) {

  const response = [];
    let response = '';

  const circles = width > height ? height : width;
    const circles = width > height ? height : width;

  for (let i = 0; i < circles; ++i) {
    const centerX = Math.round(width / 2) + 1;
    const centerY = Math.round(height / 2) + 1;
    for (let i = 0; i < circles; ++i) {
        const centerX = Math.round(width / 2) + 1;
        const centerY = Math.round(height / 2) + 1;

    const red = Math.floor(Math.random() * 255);
    const blue = Math.floor(Math.random() * 255);
    const green = Math.floor(Math.random() * 255);
        const red = Math.floor(Math.random() * 255);
        const blue = Math.floor(Math.random() * 255);
        const green = Math.floor(Math.random() * 255);

    for (let j = 0; j < 180; ++j) {
      const angle =  2 * j * (Math.PI / 180);
      const x = Math.round(centerX + Math.sin(angle) * i);
      const y = Math.round(centerY + Math.cos(angle) * i);
        for (let j = 0; j < 180; ++j) {
            const angle =  2 * j * (Math.PI / 180);
            const x = Math.round(centerX + Math.sin(angle) * i);
            const y = Math.round(centerY + Math.cos(angle) * i);

      if (x <= width && x > 0 && y <= height && y > 0) {
        const position = `\x1B[${y};${x}H`; // Move cursor to y,x (CSI y;x H)
        response += `${position}${renderer(red, blue, green)} `;
      }
            if (x <= width && x > 0 && y <= height && y > 0) {
                const position = `\x1B[${y};${x}H`; // Move cursor to y,x (CSI y;x H)
                response += `${position}${renderer(red, blue, green)} `;
            }
        }
    }
  }

  return response;
    return response;
};

M lib/screens/gradients.js => lib/screens/gradients.js +13 -13
@@ 8,22 8,22 @@
 */
module.exports = function (modulation, width, height, renderer) {

  let response = '';
    let response = '';

  for (let i = 0; i < height; ++i) {
    for (let j = 0; j < width; ++j) {
      const red = ((modulation + i) * 255 / height) % 255;
      const blue = ((modulation + j) * 255 / width) % 255;
      const green = ((modulation + i * j) * 255 / (width * height)) % 255;
    for (let i = 0; i < height; ++i) {
        for (let j = 0; j < width; ++j) {
            const red = ((modulation + i) * 255 / height) % 255;
            const blue = ((modulation + j) * 255 / width) % 255;
            const green = ((modulation + i * j) * 255 / (width * height)) % 255;

      response = response + renderer(red, blue, green);
      response = response + ' ';
    }
            response = response + renderer(red, blue, green);
            response = response + ' ';
        }

    if (i < height - 1) {
      response = response + '\n';
        if (i < height - 1) {
            response = response + '\n';
        }
    }
  }

  return response;
    return response;
};

M lib/screens/mirrors.js => lib/screens/mirrors.js +27 -27
@@ 8,33 8,33 @@
 */
module.exports = function (modulation, width, height, renderer) {

  const response = [];

  const scale = 2 + Math.round(Math.random() * 4);
  const scaledHeight = Math.floor(height / scale);
  const scaledWidth = Math.floor(width / scale);

  for (let i = 0; i < scaledHeight; ++i) {
    const row = [];
    for (let j = 0; j < scaledWidth; ++j) {
      const red = ((modulation + i) * 255 / height) % 255;
      const blue = ((modulation + j) * 255 / width) % 255;
      const green = ((modulation + i * j) * 255 / (width * height)) % 255;

      const cell = [renderer(red, blue, green), ' '];
      row.push(cell.join(''));
    }

    let rowText = '';
    for (let j = 0; j < scale; ++j) {
      rowText += row.reverse().join('');
    }

    for (let j = 1; j < scale; ++j) {
      response[j * i] = rowText;
      response[(height - 1 - (j * i))] = rowText;
    const response = [];

    const scale = 2 + Math.round(Math.random() * 4);
    const scaledHeight = Math.floor(height / scale);
    const scaledWidth = Math.floor(width / scale);

    for (let i = 0; i < scaledHeight; ++i) {
        const row = [];
        for (let j = 0; j < scaledWidth; ++j) {
            const red = ((modulation + i) * 255 / height) % 255;
            const blue = ((modulation + j) * 255 / width) % 255;
            const green = ((modulation + i * j) * 255 / (width * height)) % 255;

            const cell = [renderer(red, blue, green), ' '];
            row.push(cell.join(''));
        }

        let rowText = '';
        for (let j = 0; j < scale; ++j) {
            rowText += row.reverse().join('');
        }

        for (let j = 1; j < scale; ++j) {
            response[j * i] = rowText;
            response[(height - 1 - (j * i))] = rowText;
        }
    }
  }

  return response.join('\n');
    return response.join('\n');
};

M lib/screens/random.js => lib/screens/random.js +13 -13
@@ 8,22 8,22 @@
 */
module.exports = function (modulation, width, height, renderer) {

  let response = '';
    let response = '';

  for (let i = 0; i < height; ++i) {
    for (let j = 0; j < width; ++j) {
      const red = Math.floor(Math.random() * 255);
      const blue = Math.floor(Math.random() * 255);
      const green = Math.floor(Math.random() * 255);
    for (let i = 0; i < height; ++i) {
        for (let j = 0; j < width; ++j) {
            const red = Math.floor(Math.random() * 255);
            const blue = Math.floor(Math.random() * 255);
            const green = Math.floor(Math.random() * 255);

      response = response + renderer(red, blue, green);
      response = response + ' ';
    }
            response = response + renderer(red, blue, green);
            response = response + ' ';
        }

    if (i < height - 1) {
      response = response + '\n';
        if (i < height - 1) {
            response = response + '\n';
        }
    }
  }

  return response;
    return response;
};

M lib/screens/sprinkles.js => lib/screens/sprinkles.js +14 -14
@@ 9,24 9,24 @@
 */
module.exports = function (modulation, width, height, renderer) {

  let response = '';
    let response = '';

  const maxSprinkleCount = (width * height) / 2;
  const minSprinkleCount = (width * height) / 8;
  const sprinkleCount = Math.round(Math.random() * (maxSprinkleCount - minSprinkleCount)) + minSprinkleCount;
    const maxSprinkleCount = (width * height) / 2;
    const minSprinkleCount = (width * height) / 8;
    const sprinkleCount = Math.round(Math.random() * (maxSprinkleCount - minSprinkleCount)) + minSprinkleCount;

  const red = Math.floor(Math.random() * 255);
  const blue = Math.floor(Math.random() * 255);
  const green = Math.floor(Math.random() * 255);
    const red = Math.floor(Math.random() * 255);
    const blue = Math.floor(Math.random() * 255);
    const green = Math.floor(Math.random() * 255);

  for (let i = 0; i < sprinkleCount; ++i) {
    const x = Math.round(Math.random() * (width - 1)) + 1;
    const y = Math.round(Math.random() * (height - 1)) + 1;
    for (let i = 0; i < sprinkleCount; ++i) {
        const x = Math.round(Math.random() * (width - 1)) + 1;
        const y = Math.round(Math.random() * (height - 1)) + 1;

    const position = `\x1B[${y};${x}H`; // Move cursor to y,x (CSI y;x H)
        const position = `\x1B[${y};${x}H`; // Move cursor to y,x (CSI y;x H)

    response += `${position}${renderer(red, blue, green)} `;
  }
        response += `${position}${renderer(red, blue, green)} `;
    }

  return response;
    return response;
};

M lib/tomato_sauce.js => lib/tomato_sauce.js +87 -87
@@ 6,10 6,10 @@ const EventEmitter = require('events');
const Util = require('./util');

const internals = {
  // Interpret as Command Sequences.
  kEscape: new Buffer([0xFF, 0xF4, 0XFF, 0xFD, 0x06]), // IAC IP IAC DO TIMING_MARK
  kNAWSRequest: new Buffer([0xFF, 0xFD, 0X1F]), // IAC DO NAWS
  kNAWSResponse: new Buffer([0xFF, 0xFB, 0X1F, 0xFF, 0xFA, 0X1F]) // IAC WILL NAWS IAC SB NAWS
    // Interpret as Command Sequences.
    kEscape: Buffer.from([0xFF, 0xF4, 0XFF, 0xFD, 0x06]), // IAC IP IAC DO TIMING_MARK
    kNAWSRequest: Buffer.from([0xFF, 0xFD, 0X1F]), // IAC DO NAWS
    kNAWSResponse: Buffer.from([0xFF, 0xFB, 0X1F, 0xFF, 0xFA, 0X1F]) // IAC WILL NAWS IAC SB NAWS
};

/**


@@ 63,127 63,127 @@ const internals = {
 */
const TomatoSauce = class TomatoSauce extends EventEmitter {

  constructor(config = {}) {
    constructor(config = {}) {

    super();
        super();

    this.screens = [];
    this.renderers = [];
        this.screens = [];
        this.renderers = [];

    // Defaults.
    this.port = 9999;
    this.frequency = 333;
    this.modulation = 5;
        // Defaults.
        this.port = 9999;
        this.frequency = 333;
        this.modulation = 5;

    Object.assign(this, config);
  }
        Object.assign(this, config);
    }

  /**
    /**
   * Main entry point, initializes the server and binds events for connections
   *
   * @function run
   * @instance
   * @memberof TomatoSauce
   */
  run() {
    run() {

    this._startServer();
    this._bindEvents();
  }
        this._startServer();
        this._bindEvents();
    }

  // Creates a socket, server based on the configuration. Emits the
  // listening event when ready.
    // Creates a socket, server based on the configuration. Emits the
    // listening event when ready.

  _startServer() {
    _startServer() {

    const server = Net.createServer();
    this.server = server;
    server.listen(this.port, () => {
        const server = Net.createServer();
        this.server = server;
        server.listen(this.port, () => {

      this.emit('listening', {
        data: {
          server
        }
      });
    });
  }
            this.emit('listening', {
                data: {
                    server
                }
            });
        });
    }

  // Binds the connection and error events
    // Binds the connection and error events

  _bindEvents() {
    _bindEvents() {

    // Send the error event all the way up.
    this.server.on('error', (error) => {
        // Send the error event all the way up.
        this.server.on('error', (error) => {

      this.emit('error', {
        data: {
          error
        }
      });
    });
            this.emit('error', {
                data: {
                    error
                }
            });
        });

    // Send the error event all the way up.
    this.server.on('connection', (socket) => {
        // Send the error event all the way up.
        this.server.on('connection', (socket) => {

      this._renderScreen(socket);
    });
  }
            this._renderScreen(socket);
        });
    }

  // Obtains viewport size, and initializes a random screen with a random
  // renderer, setting the required interval to draw.
    // Obtains viewport size, and initializes a random screen with a random
    // renderer, setting the required interval to draw.

  _renderScreen(socket) {
    _renderScreen(socket) {

    const connectionData = {
      width: null,
      height: null,
      modulation: 0,
      screen: this._getScreen(),
      renderer: this._getRenderer(),
      socket
    };
    const interval = null;
        const connectionData = {
            width: null,
            height: null,
            modulation: 0,
            screen: this._getScreen(),
            renderer: this._getRenderer(),
            socket
        };
        let interval = null;

    socket.write(internals.kNAWSRequest);
        socket.write(internals.kNAWSRequest);

    socket.on('data', (data) => {
        socket.on('data', (data) => {

      if (data.slice(0, 6).compare(internals.kNAWSResponse) === 0) {
        connectionData.width = Util.parse16BitBuffer(data.slice(6, 8));
        connectionData.height = Util.parse16BitBuffer(data.slice(8, 10));
            if (data.slice(0, 6).compare(internals.kNAWSResponse) === 0) {
                connectionData.width = Util.parse16BitBuffer(data.slice(6, 8));
                connectionData.height = Util.parse16BitBuffer(data.slice(8, 10));

        socket.write('\x1B[2J'); // Clear the Screen (CSI 2 J)
        interval = setInterval(this._writeMessage.bind(this, connectionData), this.frequency);
      }
                socket.write('\x1B[2J'); // Clear the Screen (CSI 2 J)
                interval = setInterval(this._writeMessage.bind(this, connectionData), this.frequency);
            }

      if (data.compare(internals.kEscape) === 0) {
        socket.write('\n');
        clearInterval(interval);
        socket.end();
      }
    });
  }
            if (data.compare(internals.kEscape) === 0) {
                socket.write('\n');
                clearInterval(interval);
                socket.end();
            }
        });
    }

  // Resets the cursor, gets a frame and sends it to the socket.
    // Resets the cursor, gets a frame and sends it to the socket.

  _writeMessage(connectionData) {
    _writeMessage(connectionData) {

    const payload = connectionData.screen(connectionData.modulation, connectionData.width, connectionData.height, connectionData.renderer);
    const message = `\x1B[1;1H${payload}`; // reset cursor position before payload
        const payload = connectionData.screen(connectionData.modulation, connectionData.width, connectionData.height, connectionData.renderer);
        const message = `\x1B[1;1H${payload}`; // reset cursor position before payload

    connectionData.modulation = (connectionData.modulation + this.modulation) % 256;
    connectionData.socket.write(message);
  }
        connectionData.modulation = (connectionData.modulation + this.modulation) % 256;
        connectionData.socket.write(message);
    }

  _getScreen() {
    _getScreen() {

    return Util.pickRandom(this.screens);
  }
        return Util.pickRandom(this.screens);
    }

  _getRenderer() {
    _getRenderer() {

    return Util.pickRandom(this.renderers);
  }
        return Util.pickRandom(this.renderers);
    }
};

module.exports = TomatoSauce;

M lib/util.js => lib/util.js +31 -31
@@ 11,7 11,7 @@ const Path = require('path');
 */
const Util = {

  /**
    /**
   * Parses a 16 bit number buffer
   *
   * @function parse16BitBuffer


@@ 19,12 19,12 @@ const Util = {
   * @param {Array<String>} buffer the buffer to parse
   * @return {Number} the parsed value
   */
  parse16BitBuffer(buffer) {
    parse16BitBuffer(buffer) {

    return buffer[0] * 256 + buffer[1];
  },
        return buffer[0] * 256 + buffer[1];
    },

  /**
    /**
   * Picks a random element from an array
   *
   * @function pickRandom


@@ 32,12 32,12 @@ const Util = {
   * @param {Array} array the array to use
   * @return {Any} the picked element
   */
  pickRandom(array) {
    pickRandom(array) {

    return array[Math.floor(Math.random() * array.length)];
  },
        return array[Math.floor(Math.random() * array.length)];
    },

  /**
    /**
   * For a gi ven path, requires all of the files and returns an array
   * with the results. If the directory contains any non-requireable
   * files, it will fail.


@@ 47,36 47,36 @@ const Util = {
   * @param {String} path the path where the files are located
   * @return {Array} the array of all the loaded modules
   */
  loadFiles(path) {
    loadFiles(path) {

    return new Promise((resolve, reject) => {
        return new Promise((resolve, reject) => {

      Fs.readdir(path, (err, files) => {
            Fs.readdir(path, (err, files) => {

        if (err) {
          return reject(err);
        }
                if (err) {
                    return reject(err);
                }

        const loadedFiles = [];
                const loadedFiles = [];

        for (const file of files) {
          const filePath = Path.join(path, file);
          let loadedFile;
                for (const file of files) {
                    const filePath = Path.join(path, file);
                    let loadedFile;

          try {
            loadedFile = require(filePath);
          }
          catch (err) {
            return reject(err);
          }
                    try {
                        loadedFile = require(filePath);
                    }
                    catch (err) {
                        return reject(err);
                    }

          loadedFiles.push(loadedFile);
        }
                    loadedFiles.push(loadedFile);
                }

        resolve(loadedFiles);
      });
    });
  }
                resolve(loadedFiles);
            });
        });
    }
};

module.exports = Util;

M package-lock.json => package-lock.json +2346 -1193
@@ 1,182 1,1878 @@
{
  "name": "tomato-sauce",
  "version": "1.0.0",
  "lockfileVersion": 1,
  "version": "2.0.0",
  "lockfileVersion": 2,
  "requires": true,
  "dependencies": {
    "acorn": {
      "version": "5.7.1",
      "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
      "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
  "packages": {
    "": {
      "version": "2.0.0",
      "license": "MIT",
      "dependencies": {
        "getenv": "^1.0.0"
      },
      "devDependencies": {
        "@hapi/eslint-plugin": "^5.1.0",
        "eslint": "^8.5.0",
        "jsdoc-to-markdown": "^4.0.1"
      }
    },
    "node_modules/@eslint/eslintrc": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
      "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
      "dev": true,
      "dependencies": {
        "ajv": "^6.12.4",
        "debug": "^4.3.2",
        "espree": "^9.2.0",
        "globals": "^13.9.0",
        "ignore": "^4.0.6",
        "import-fresh": "^3.2.1",
        "js-yaml": "^4.1.0",
        "minimatch": "^3.0.4",
        "strip-json-comments": "^3.1.1"
      },
      "engines": {
        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
      }
    },
    "node_modules/@hapi/eslint-plugin": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/@hapi/eslint-plugin/-/eslint-plugin-5.1.0.tgz",
      "integrity": "sha512-D0OvhsjbWW4lhuw0LqERl8vqCIRMnePy9XGYhkf7krzwqzYNEAcBFCafiFsd0gIF6QiQj3O1vYmshRVFZMXdwQ==",
      "dev": true,
      "peerDependencies": {
        "@babel/core": "^7.14.3",
        "@babel/eslint-parser": "^7.14.3"
      },
      "peerDependenciesMeta": {
        "@babel/core": {
          "optional": true
        },
        "@babel/eslint-parser": {
          "optional": true
        }
      }
    },
    "node_modules/@humanwhocodes/config-array": {
      "version": "0.9.2",
      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz",
      "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==",
      "dev": true,
      "dependencies": {
        "@humanwhocodes/object-schema": "^1.2.1",
        "debug": "^4.1.1",
        "minimatch": "^3.0.4"
      },
      "engines": {
        "node": ">=10.10.0"
      }
    },
    "node_modules/@humanwhocodes/object-schema": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
      "dev": true
    },
    "node_modules/acorn": {
      "version": "8.6.0",
      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz",
      "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==",
      "dev": true,
      "bin": {
        "acorn": "bin/acorn"
      },
      "engines": {
        "node": ">=0.4.0"
      }
    },
    "node_modules/acorn-jsx": {
      "version": "5.3.2",
      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
      "dev": true,
      "peerDependencies": {
        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
      }
    },
    "node_modules/ajv": {
      "version": "6.12.6",
      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
      "dev": true,
      "dependencies": {
        "fast-deep-equal": "^3.1.1",
        "fast-json-stable-stringify": "^2.0.0",
        "json-schema-traverse": "^0.4.1",
        "uri-js": "^4.2.2"
      },
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/epoberezkin"
      }
    },
    "node_modules/ansi-colors": {
      "version": "4.1.1",
      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
      "dev": true,
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/ansi-escape-sequences": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz",
      "integrity": "sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==",
      "dev": true,
      "dependencies": {
        "array-back": "^3.0.1"
      },
      "engines": {
        "node": ">=8.0.0"
      }
    },
    "node_modules/ansi-escape-sequences/node_modules/array-back": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
      "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
      "dev": true,
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/ansi-regex": {
      "version": "5.0.1",
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
      "dev": true,
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/ansi-styles": {
      "version": "4.3.0",
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
      "dev": true,
      "dependencies": {
        "color-convert": "^2.0.1"
      },
      "engines": {
        "node": ">=8"
      },
      "funding": {
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
      }
    },
    "node_modules/argparse": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
      "dev": true
    },
    "node_modules/array-back": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
      "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
      "dev": true,
      "dependencies": {
        "typical": "^2.6.1"
      },
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/babylon": {
      "version": "7.0.0-beta.19",
      "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz",
      "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==",
      "dev": true,
      "bin": {
        "babylon": "bin/babylon.js"
      },
      "engines": {
        "node": ">=4.2.0"
      }
    },
    "node_modules/balanced-match": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
      "dev": true
    },
    "node_modules/bluebird": {
      "version": "3.5.5",
      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
      "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
      "dev": true
    },
    "node_modules/brace-expansion": {
      "version": "1.1.11",
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
      "dev": true,
      "dependencies": {
        "balanced-match": "^1.0.0",
        "concat-map": "0.0.1"
      }
    },
    "node_modules/cache-point": {
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/cache-point/-/cache-point-0.4.1.tgz",
      "integrity": "sha512-4TgWfe9SF+bUy5cCql8gWHqKNrviufNwSYxLjf2utB0pY4+bdcuFwMmY1hDB+67Gz/L1vmhFNhePAjJTFBtV+Q==",
      "dev": true,
      "dependencies": {
        "array-back": "^2.0.0",
        "fs-then-native": "^2.0.0",
        "mkdirp2": "^1.0.3"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/callsites": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
      "dev": true,
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/catharsis": {
      "version": "0.8.11",
      "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz",
      "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==",
      "dev": true,
      "dependencies": {
        "lodash": "^4.17.14"
      },
      "engines": {
        "node": ">= 8"
      }
    },
    "node_modules/chalk": {
      "version": "4.1.2",
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
      "dev": true,
      "dependencies": {
        "ansi-styles": "^4.1.0",
        "supports-color": "^7.1.0"
      },
      "engines": {
        "node": ">=10"
      },
      "funding": {
        "url": "https://github.com/chalk/chalk?sponsor=1"
      }
    },
    "node_modules/collect-all": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.4.tgz",
      "integrity": "sha512-RKZhRwJtJEP5FWul+gkSMEnaK6H3AGPTTWOiRimCcs+rc/OmQE3Yhy1Q7A7KsdkG3ZXVdZq68Y6ONSdvkeEcKA==",
      "dev": true,
      "dependencies": {
        "stream-connect": "^1.0.2",
        "stream-via": "^1.0.4"
      },
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/color-convert": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
      "dev": true,
      "dependencies": {
        "color-name": "~1.1.4"
      },
      "engines": {
        "node": ">=7.0.0"
      }
    },
    "node_modules/color-name": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
      "dev": true
    },
    "node_modules/command-line-args": {
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz",
      "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==",
      "dev": true,
      "dependencies": {
        "array-back": "^3.1.0",
        "find-replace": "^3.0.0",
        "lodash.camelcase": "^4.3.0",
        "typical": "^4.0.0"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/command-line-args/node_modules/array-back": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
      "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
      "dev": true,
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/command-line-args/node_modules/typical": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz",
      "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==",
      "dev": true,
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/command-line-tool": {
      "version": "0.8.0",
      "resolved": "https://registry.npmjs.org/command-line-tool/-/command-line-tool-0.8.0.tgz",
      "integrity": "sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==",
      "dev": true,
      "dependencies": {
        "ansi-escape-sequences": "^4.0.0",
        "array-back": "^2.0.0",
        "command-line-args": "^5.0.0",
        "command-line-usage": "^4.1.0",
        "typical": "^2.6.1"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/command-line-usage": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
      "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
      "dev": true,
      "dependencies": {
        "ansi-escape-sequences": "^4.0.0",
        "array-back": "^2.0.0",
        "table-layout": "^0.4.2",
        "typical": "^2.6.1"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/common-sequence": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-1.0.2.tgz",
      "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg=",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/concat-map": {
      "version": "0.0.1",
      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
      "dev": true
    },
    "node_modules/config-master": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz",
      "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=",
      "dev": true,
      "dependencies": {
        "walk-back": "^2.0.1"
      }
    },
    "node_modules/config-master/node_modules/walk-back": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz",
      "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/cross-spawn": {
      "version": "7.0.3",
      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
      "dev": true,
      "dependencies": {
        "path-key": "^3.1.0",
        "shebang-command": "^2.0.0",
        "which": "^2.0.1"
      },
      "engines": {
        "node": ">= 8"
      }
    },
    "node_modules/debug": {
      "version": "4.3.3",
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
      "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
      "dev": true,
      "dependencies": {
        "ms": "2.1.2"
      },
      "engines": {
        "node": ">=6.0"
      },
      "peerDependenciesMeta": {
        "supports-color": {
          "optional": true
        }
      }
    },
    "node_modules/deep-extend": {
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
      "dev": true,
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/deep-is": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
      "dev": true
    },
    "node_modules/dmd": {
      "version": "3.0.13",
      "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.13.tgz",
      "integrity": "sha512-FV/417bH2c/CYpe8BjFEAHoaHaItcJnPlKELi/qyPZdmUom8joyuC78OhhfPUdyKD/WcouTQ2LxQT4M/RoiJ3w==",
      "dev": true,
      "dependencies": {
        "array-back": "^2.0.0",
        "cache-point": "^0.4.1",
        "common-sequence": "^1.0.2",
        "file-set": "^2.0.0",
        "handlebars": "^4.0.11",
        "marked": "^0.3.16",
        "object-get": "^2.1.0",
        "reduce-flatten": "^1.0.1",
        "reduce-unique": "^1.0.0",
        "reduce-without": "^1.0.1",
        "test-value": "^3.0.0",
        "walk-back": "^3.0.0"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/doctrine": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
      "dev": true,
      "dependencies": {
        "esutils": "^2.0.2"
      },
      "engines": {
        "node": ">=6.0.0"
      }
    },
    "node_modules/enquirer": {
      "version": "2.3.6",
      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
      "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
      "dev": true,
      "dependencies": {
        "ansi-colors": "^4.1.1"
      },
      "engines": {
        "node": ">=8.6"
      }
    },
    "node_modules/escape-string-regexp": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
      "dev": true,
      "engines": {
        "node": ">=10"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/eslint": {
      "version": "8.5.0",
      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz",
      "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==",
      "dev": true,
      "dependencies": {
        "@eslint/eslintrc": "^1.0.5",
        "@humanwhocodes/config-array": "^0.9.2",
        "ajv": "^6.10.0",
        "chalk": "^4.0.0",
        "cross-spawn": "^7.0.2",
        "debug": "^4.3.2",
        "doctrine": "^3.0.0",
        "enquirer": "^2.3.5",
        "escape-string-regexp": "^4.0.0",
        "eslint-scope": "^7.1.0",
        "eslint-utils": "^3.0.0",
        "eslint-visitor-keys": "^3.1.0",
        "espree": "^9.2.0",
        "esquery": "^1.4.0",
        "esutils": "^2.0.2",
        "fast-deep-equal": "^3.1.3",
        "file-entry-cache": "^6.0.1",
        "functional-red-black-tree": "^1.0.1",
        "glob-parent": "^6.0.1",
        "globals": "^13.6.0",
        "ignore": "^4.0.6",
        "import-fresh": "^3.0.0",
        "imurmurhash": "^0.1.4",
        "is-glob": "^4.0.0",
        "js-yaml": "^4.1.0",
        "json-stable-stringify-without-jsonify": "^1.0.1",
        "levn": "^0.4.1",
        "lodash.merge": "^4.6.2",
        "minimatch": "^3.0.4",
        "natural-compare": "^1.4.0",
        "optionator": "^0.9.1",
        "progress": "^2.0.0",
        "regexpp": "^3.2.0",
        "semver": "^7.2.1",
        "strip-ansi": "^6.0.1",
        "strip-json-comments": "^3.1.0",
        "text-table": "^0.2.0",
        "v8-compile-cache": "^2.0.3"
      },
      "bin": {
        "eslint": "bin/eslint.js"
      },
      "engines": {
        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
      },
      "funding": {
        "url": "https://opencollective.com/eslint"
      }
    },
    "node_modules/eslint-scope": {
      "version": "7.1.0",
      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz",
      "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==",
      "dev": true,
      "dependencies": {
        "esrecurse": "^4.3.0",
        "estraverse": "^5.2.0"
      },
      "engines": {
        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
      }
    },
    "node_modules/eslint-utils": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
      "dev": true,
      "dependencies": {
        "eslint-visitor-keys": "^2.0.0"
      },
      "engines": {
        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
      },
      "funding": {
        "url": "https://github.com/sponsors/mysticatea"
      },
      "peerDependencies": {
        "eslint": ">=5"
      }
    },
    "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
      "dev": true,
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/eslint-visitor-keys": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz",
      "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==",
      "dev": true,
      "engines": {
        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
      }
    },
    "node_modules/espree": {
      "version": "9.2.0",
      "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz",
      "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==",
      "dev": true,
      "dependencies": {
        "acorn": "^8.6.0",
        "acorn-jsx": "^5.3.1",
        "eslint-visitor-keys": "^3.1.0"
      },
      "engines": {
        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
      }
    },
    "node_modules/esquery": {
      "version": "1.4.0",
      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
      "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
      "dev": true,
      "dependencies": {
        "estraverse": "^5.1.0"
      },
      "engines": {
        "node": ">=0.10"
      }
    },
    "node_modules/esrecurse": {
      "version": "4.3.0",
      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
      "dev": true,
      "dependencies": {
        "estraverse": "^5.2.0"
      },
      "engines": {
        "node": ">=4.0"
      }
    },
    "node_modules/estraverse": {
      "version": "5.3.0",
      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
      "dev": true,
      "engines": {
        "node": ">=4.0"
      }
    },
    "node_modules/esutils": {
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/fast-deep-equal": {
      "version": "3.1.3",
      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
      "dev": true
    },
    "node_modules/fast-json-stable-stringify": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
      "dev": true
    },
    "node_modules/fast-levenshtein": {
      "version": "2.0.6",
      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
      "dev": true
    },
    "node_modules/file-entry-cache": {
      "version": "6.0.1",
      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
      "dev": true,
      "dependencies": {
        "flat-cache": "^3.0.4"
      },
      "engines": {
        "node": "^10.12.0 || >=12.0.0"
      }
    },
    "node_modules/file-set": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.1.tgz",
      "integrity": "sha512-XgOUUpgR6FbbfYcniLw0qm1Am7PnNYIAkd+eXxRt42LiYhjaso0WiuQ+VmrNdtwotyM+cLCfZ56AZrySP3QnKA==",
      "dev": true,
      "dependencies": {
        "array-back": "^2.0.0",
        "glob": "^7.1.3"
      }
    },
    "node_modules/find-replace": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz",
      "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==",
      "dev": true,
      "dependencies": {
        "array-back": "^3.0.1"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/find-replace/node_modules/array-back": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
      "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
      "dev": true,
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/flat-cache": {
      "version": "3.0.4",
      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
      "dev": true,
      "dependencies": {
        "flatted": "^3.1.0",
        "rimraf": "^3.0.2"
      },
      "engines": {
        "node": "^10.12.0 || >=12.0.0"
      }
    },
    "node_modules/flatted": {
      "version": "3.2.4",
      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz",
      "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
      "dev": true
    },
    "node_modules/fs-then-native": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/fs-then-native/-/fs-then-native-2.0.0.tgz",
      "integrity": "sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc=",
      "dev": true,
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/fs.realpath": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
      "dev": true
    },
    "node_modules/functional-red-black-tree": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
      "dev": true
    },
    "node_modules/getenv": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz",
      "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==",
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/glob": {
      "version": "7.2.0",
      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
      "dev": true,
      "dependencies": {
        "fs.realpath": "^1.0.0",
        "inflight": "^1.0.4",
        "inherits": "2",
        "minimatch": "^3.0.4",
        "once": "^1.3.0",
        "path-is-absolute": "^1.0.0"
      },
      "engines": {
        "node": "*"
      },
      "funding": {
        "url": "https://github.com/sponsors/isaacs"
      }
    },
    "node_modules/glob-parent": {
      "version": "6.0.2",
      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
      "dev": true,
      "dependencies": {
        "is-glob": "^4.0.3"
      },
      "engines": {
        "node": ">=10.13.0"
      }
    },
    "node_modules/globals": {
      "version": "13.12.0",
      "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
      "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
      "dev": true,
      "dependencies": {
        "type-fest": "^0.20.2"
      },
      "engines": {
        "node": ">=8"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/graceful-fs": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
      "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
      "dev": true
    },
    "node_modules/handlebars": {
      "version": "4.7.7",
      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
      "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
      "dev": true,
      "dependencies": {
        "minimist": "^1.2.5",
        "neo-async": "^2.6.0",
        "source-map": "^0.6.1",
        "wordwrap": "^1.0.0"
      },
      "bin": {
        "handlebars": "bin/handlebars"
      },
      "engines": {
        "node": ">=0.4.7"
      },
      "optionalDependencies": {
        "uglify-js": "^3.1.4"
      }
    },
    "node_modules/has-flag": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
      "dev": true,
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/ignore": {
      "version": "4.0.6",
      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
      "dev": true,
      "engines": {
        "node": ">= 4"
      }
    },
    "node_modules/import-fresh": {
      "version": "3.3.0",
      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
      "dev": true,
      "dependencies": {
        "parent-module": "^1.0.0",
        "resolve-from": "^4.0.0"
      },
      "engines": {
        "node": ">=6"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/imurmurhash": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
      "dev": true,
      "engines": {
        "node": ">=0.8.19"
      }
    },
    "node_modules/inflight": {
      "version": "1.0.6",
      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
      "dev": true,
      "dependencies": {
        "once": "^1.3.0",
        "wrappy": "1"
      }
    },
    "node_modules/inherits": {
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
      "dev": true
    },
    "node_modules/is-extglob": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/is-glob": {
      "version": "4.0.3",
      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
      "dev": true,
      "dependencies": {
        "is-extglob": "^2.1.1"
      },
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/isexe": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
      "dev": true
    },
    "node_modules/js-yaml": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
      "dev": true,
      "dependencies": {
        "argparse": "^2.0.1"
      },
      "bin": {
        "js-yaml": "bin/js-yaml.js"
      }
    },
    "node_modules/js2xmlparser": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
      "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
      "dev": true,
      "dependencies": {
        "xmlcreate": "^1.0.1"
      }
    },
    "node_modules/jsdoc": {
      "version": "3.5.5",
      "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
      "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==",
      "dev": true,
      "dependencies": {
        "babylon": "7.0.0-beta.19",
        "bluebird": "~3.5.0",
        "catharsis": "~0.8.9",
        "escape-string-regexp": "~1.0.5",
        "js2xmlparser": "~3.0.0",
        "klaw": "~2.0.0",
        "marked": "~0.3.6",
        "mkdirp": "~0.5.1",
        "requizzle": "~0.2.1",
        "strip-json-comments": "~2.0.1",
        "taffydb": "2.6.2",
        "underscore": "~1.8.3"
      },
      "bin": {
        "jsdoc": "jsdoc.js"
      },
      "engines": {
        "node": ">=4.2.0"
      }
    },
    "node_modules/jsdoc-api": {
      "version": "4.0.3",
      "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-4.0.3.tgz",
      "integrity": "sha512-dfYq9JgB+XahY0XfSEw93PmXmocjwYcvJ5aMuQUJ/OdDRGWamf2SSOk3W06Bsj8qdjp/UdefzqpP/mpwsvHuvA==",
      "dev": true,
      "dependencies": {
        "array-back": "^2.0.0",
        "cache-point": "^0.4.1",
        "collect-all": "^1.0.3",
        "file-set": "^2.0.0",
        "fs-then-native": "^2.0.0",
        "jsdoc": "~3.5.5",
        "object-to-spawn-args": "^1.1.1",
        "temp-path": "^1.0.0",
        "walk-back": "^3.0.0"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/jsdoc-parse": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-3.0.1.tgz",
      "integrity": "sha512-btZLp4wYl90vcAfgk4hoGQbO17iBVrhh3LJRMKZNtZgniO3F8H2CjxXld0owBIB1XxN+j3bAcWZnZKMnSj3iMA==",
      "dev": true,
      "dependencies": {
        "array-back": "^2.0.0",
        "lodash.omit": "^4.5.0",
        "lodash.pick": "^4.4.0",
        "reduce-extract": "^1.0.0",
        "sort-array": "^2.0.0",
        "test-value": "^3.0.0"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/jsdoc-to-markdown": {
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-4.0.1.tgz",
      "integrity": "sha512-LHJRoLoLyDdxNcColgkLoB/rFG5iRP+PNJjMILI0x+95IdEAtyjSt0wJ6ZlKxRpkhBYtQXTQQ119hMqPIUZzTQ==",
      "dev": true,
      "dependencies": {
        "array-back": "^2.0.0",
        "command-line-tool": "^0.8.0",
        "config-master": "^3.1.0",
        "dmd": "^3.0.10",
        "jsdoc-api": "^4.0.1",
        "jsdoc-parse": "^3.0.1",
        "walk-back": "^3.0.0"
      },
      "bin": {
        "jsdoc2md": "bin/cli.js"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/jsdoc/node_modules/escape-string-regexp": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
      "dev": true,
      "engines": {
        "node": ">=0.8.0"
      }
    },
    "node_modules/jsdoc/node_modules/strip-json-comments": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/json-schema-traverse": {
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
      "dev": true
    },
    "node_modules/json-stable-stringify-without-jsonify": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
      "dev": true
    },
    "node_modules/klaw": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz",
      "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=",
      "dev": true,
      "dependencies": {
        "graceful-fs": "^4.1.9"
      }
    },
    "node_modules/levn": {
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
      "dev": true,
      "dependencies": {
        "prelude-ls": "^1.2.1",
        "type-check": "~0.4.0"
      },
      "engines": {
        "node": ">= 0.8.0"
      }
    },
    "node_modules/lodash": {
      "version": "4.17.21",
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
      "dev": true
    },
    "node_modules/lodash.camelcase": {
      "version": "4.3.0",
      "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
      "dev": true
    },
    "node_modules/lodash.merge": {
      "version": "4.6.2",
      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
      "dev": true
    },
    "node_modules/lodash.omit": {
      "version": "4.5.0",
      "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
      "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=",
      "dev": true
    },
    "node_modules/lodash.padend": {
      "version": "4.6.1",
      "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
      "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
      "dev": true
    },
    "node_modules/lodash.pick": {
      "version": "4.4.0",
      "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
      "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
      "dev": true
    },
    "node_modules/lru-cache": {
      "version": "6.0.0",
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
      "dev": true,
      "dependencies": {
        "yallist": "^4.0.0"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/marked": {
      "version": "0.3.19",
      "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
      "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==",
      "dev": true,
      "bin": {
        "marked": "bin/marked"
      },
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/minimatch": {
      "version": "3.0.4",
      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
      "dev": true,
      "dependencies": {
        "brace-expansion": "^1.1.7"
      },
      "engines": {
        "node": "*"
      }
    },
    "node_modules/minimist": {
      "version": "1.2.5",
      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
      "dev": true
    },
    "node_modules/mkdirp": {
      "version": "0.5.5",
      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
      "dev": true,
      "dependencies": {
        "minimist": "^1.2.5"
      },
      "bin": {
        "mkdirp": "bin/cmd.js"
      }
    },
    "node_modules/mkdirp2": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.5.tgz",
      "integrity": "sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==",
      "dev": true
    },
    "node_modules/ms": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
      "dev": true
    },
    "node_modules/natural-compare": {
      "version": "1.4.0",
      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
      "dev": true
    },
    "node_modules/neo-async": {
      "version": "2.6.2",
      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
      "dev": true
    },
    "node_modules/object-get": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.1.tgz",
      "integrity": "sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==",
      "dev": true
    },
    "node_modules/object-to-spawn-args": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/object-to-spawn-args/-/object-to-spawn-args-1.1.1.tgz",
      "integrity": "sha1-d9qIJ/Bz0BHJ4bFz+JV4FHAkZ4U=",
      "dev": true
    },
    "node_modules/once": {
      "version": "1.4.0",
      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
      "dev": true,
      "dependencies": {
        "wrappy": "1"
      }
    },
    "node_modules/optionator": {
      "version": "0.9.1",
      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
      "dev": true,
      "dependencies": {
        "deep-is": "^0.1.3",
        "fast-levenshtein": "^2.0.6",
        "levn": "^0.4.1",
        "prelude-ls": "^1.2.1",
        "type-check": "^0.4.0",
        "word-wrap": "^1.2.3"
      },
      "engines": {
        "node": ">= 0.8.0"
      }
    },
    "node_modules/parent-module": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
      "dev": true,
      "dependencies": {
        "callsites": "^3.0.0"
      },
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/path-is-absolute": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/path-key": {
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
      "dev": true,
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/prelude-ls": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
      "dev": true,
      "engines": {
        "node": ">= 0.8.0"
      }
    },
    "node_modules/progress": {
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
      "dev": true,
      "engines": {
        "node": ">=0.4.0"
      }
    },
    "node_modules/punycode": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
      "dev": true,
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/reduce-extract": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/reduce-extract/-/reduce-extract-1.0.0.tgz",
      "integrity": "sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU=",
      "dev": true,
      "dependencies": {
        "test-value": "^1.0.1"
      },
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/reduce-extract/node_modules/array-back": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
      "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
      "dev": true,
      "dependencies": {
        "typical": "^2.6.0"
      },
      "engines": {
        "node": ">=0.12.0"
      }
    },
    "node_modules/reduce-extract/node_modules/test-value": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz",
      "integrity": "sha1-oJE29y7AQ9J8iTcHwrFZv6196T8=",
      "dev": true,
      "dependencies": {
        "array-back": "^1.0.2",
        "typical": "^2.4.2"
      },
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/reduce-flatten": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
      "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/reduce-unique": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/reduce-unique/-/reduce-unique-1.0.0.tgz",
      "integrity": "sha1-flhrz4ek4ytter2Cd/rWzeyfSAM=",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/reduce-without": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/reduce-without/-/reduce-without-1.0.1.tgz",
      "integrity": "sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw=",
      "dev": true,
      "dependencies": {
        "test-value": "^2.0.0"
      },
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/reduce-without/node_modules/array-back": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
      "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
      "dev": true,
      "dependencies": {
        "typical": "^2.6.0"
      },
      "engines": {
        "node": ">=0.12.0"
      }
    },
    "node_modules/reduce-without/node_modules/test-value": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
      "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
      "dev": true,
      "dependencies": {
        "array-back": "^1.0.3",
        "typical": "^2.6.0"
      },
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/regexpp": {
      "version": "3.2.0",
      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
      "dev": true,
      "engines": {
        "node": ">=8"
      },
      "funding": {
        "url": "https://github.com/sponsors/mysticatea"
      }
    },
    "node_modules/requizzle": {
      "version": "0.2.3",
      "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz",
      "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==",
      "dev": true,
      "dependencies": {
        "lodash": "^4.17.14"
      }
    },
    "node_modules/resolve-from": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
      "dev": true,
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/rimraf": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
      "dev": true,
      "dependencies": {
        "glob": "^7.1.3"
      },
      "bin": {
        "rimraf": "bin.js"
      },
      "funding": {
        "url": "https://github.com/sponsors/isaacs"
      }
    },
    "node_modules/semver": {
      "version": "7.3.5",
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
      "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
      "dev": true,
      "dependencies": {
        "lru-cache": "^6.0.0"
      },
      "bin": {
        "semver": "bin/semver.js"
      },
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/shebang-command": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
      "dev": true,
      "dependencies": {
        "shebang-regex": "^3.0.0"
      },
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/shebang-regex": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
      "dev": true,
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/sort-array": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/sort-array/-/sort-array-2.0.0.tgz",
      "integrity": "sha1-OKnG2if9fRR7QuYFVPKBGHtN9HI=",
      "dev": true,
      "dependencies": {
        "array-back": "^1.0.4",
        "object-get": "^2.1.0",
        "typical": "^2.6.0"
      },
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/sort-array/node_modules/array-back": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
      "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
      "dev": true,
      "dependencies": {
        "typical": "^2.6.0"
      },
      "engines": {
        "node": ">=0.12.0"
      }
    },
    "node_modules/source-map": {
      "version": "0.6.1",
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/stream-connect": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz",
      "integrity": "sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc=",
      "dev": true,
      "dependencies": {
        "array-back": "^1.0.2"
      },
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/stream-connect/node_modules/array-back": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
      "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
      "dev": true,
      "dependencies": {
        "typical": "^2.6.0"
      },
      "engines": {
        "node": ">=0.12.0"
      }
    },
    "node_modules/stream-via": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz",
      "integrity": "sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/strip-ansi": {
      "version": "6.0.1",
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
      "dev": true,
      "dependencies": {
        "ansi-regex": "^5.0.1"
      },
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/strip-json-comments": {
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
      "dev": true,
      "engines": {
        "node": ">=8"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/supports-color": {
      "version": "7.2.0",
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
      "dev": true,
      "dependencies": {
        "has-flag": "^4.0.0"
      },
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/table-layout": {
      "version": "0.4.5",
      "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz",
      "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==",
      "dev": true,
      "dependencies": {
        "array-back": "^2.0.0",
        "deep-extend": "~0.6.0",
        "lodash.padend": "^4.6.1",
        "typical": "^2.6.1",
        "wordwrapjs": "^3.0.0"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/taffydb": {
      "version": "2.6.2",
      "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
      "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=",
      "dev": true
    },
    "node_modules/temp-path": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz",
      "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=",
      "dev": true
    },
    "node_modules/test-value": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
      "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
      "dev": true,
      "dependencies": {
        "array-back": "^2.0.0",
        "typical": "^2.6.1"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/text-table": {
      "version": "0.2.0",
      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
      "dev": true
    },
    "node_modules/type-check": {
      "version": "0.4.0",
      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
      "dev": true,
      "dependencies": {
        "prelude-ls": "^1.2.1"
      },
      "engines": {
        "node": ">= 0.8.0"
      }
    },
    "node_modules/type-fest": {
      "version": "0.20.2",
      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
      "dev": true,
      "engines": {
        "node": ">=10"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/typical": {
      "version": "2.6.1",
      "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
      "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
      "dev": true
    },
    "acorn-jsx": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
      "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
    "node_modules/uglify-js": {
      "version": "3.14.5",
      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz",
      "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==",
      "dev": true,
      "requires": {
        "acorn": "3.3.0"
      "optional": true,
      "bin": {
        "uglifyjs": "bin/uglifyjs"
      },
      "dependencies": {
        "acorn": {
          "version": "3.3.0",
          "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
          "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
          "dev": true
        }
      "engines": {
        "node": ">=0.8.0"
      }
    },
    "ajv": {
      "version": "5.5.2",
      "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
      "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
    "node_modules/underscore": {
      "version": "1.8.3",
      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
      "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
      "dev": true
    },
    "node_modules/uri-js": {
      "version": "4.4.1",
      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
      "dev": true,
      "requires": {
        "co": "4.6.0",
        "fast-deep-equal": "1.1.0",
        "fast-json-stable-stringify": "2.0.0",
        "json-schema-traverse": "0.3.1"
      "dependencies": {
        "punycode": "^2.1.0"
      }
    },
    "ajv-keywords": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
      "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
    "node_modules/v8-compile-cache": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
      "dev": true
    },
    "align-text": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
    "node_modules/walk-back": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.1.tgz",
      "integrity": "sha512-umiNB2qLO731Sxbp6cfZ9pwURJzTnftxE4Gc7hq8n/ehkuXC//s9F65IEIJA2ZytQZ1ZOsm/Fju4IWx0bivkUQ==",
      "dev": true,
      "requires": {
        "kind-of": "3.2.2",
        "longest": "1.0.1",
        "repeat-string": "1.6.1"
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "amdefine": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
      "dev": true
    "node_modules/which": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
      "dev": true,
      "dependencies": {
        "isexe": "^2.0.0"
      },
      "bin": {
        "node-which": "bin/node-which"
      },
      "engines": {
        "node": ">= 8"
      }
    },
    "ansi-escape-sequences": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
      "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
    "node_modules/word-wrap": {
      "version": "1.2.3",
      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0"
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "ansi-escapes": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
      "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
    "node_modules/wordwrap": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
      "dev": true
    },
    "ansi-regex": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
    "node_modules/wordwrapjs": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
      "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
      "dev": true,
      "dependencies": {
        "reduce-flatten": "^1.0.1",
        "typical": "^2.6.1"
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/wrappy": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
      "dev": true
    },
    "ansi-styles": {
      "version": "2.2.1",
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
    "node_modules/xmlcreate": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
      "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=",
      "dev": true
    },
    "argparse": {
      "version": "1.0.10",
      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
    "node_modules/yallist": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
      "dev": true
    }
  },
  "dependencies": {
    "@eslint/eslintrc": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
      "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
      "dev": true,
      "requires": {
        "sprintf-js": "1.0.3"
        "ajv": "^6.12.4",
        "debug": "^4.3.2",
        "espree": "^9.2.0",
        "globals": "^13.9.0",
        "ignore": "^4.0.6",
        "import-fresh": "^3.2.1",
        "js-yaml": "^4.1.0",
        "minimatch": "^3.0.4",
        "strip-json-comments": "^3.1.1"
      }
    },
    "argv-tools": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
      "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
    "@hapi/eslint-plugin": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/@hapi/eslint-plugin/-/eslint-plugin-5.1.0.tgz",
      "integrity": "sha512-D0OvhsjbWW4lhuw0LqERl8vqCIRMnePy9XGYhkf7krzwqzYNEAcBFCafiFsd0gIF6QiQj3O1vYmshRVFZMXdwQ==",
      "dev": true,
      "requires": {}
    },
    "@humanwhocodes/config-array": {
      "version": "0.9.2",
      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz",
      "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "find-replace": "2.0.1"
        "@humanwhocodes/object-schema": "^1.2.1",
        "debug": "^4.1.1",
        "minimatch": "^3.0.4"
      }
    },
    "array-back": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
      "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
    "@humanwhocodes/object-schema": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
      "dev": true
    },
    "acorn": {
      "version": "8.6.0",
      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz",
      "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==",
      "dev": true
    },
    "acorn-jsx": {
      "version": "5.3.2",
      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
      "dev": true,
      "requires": {}
    },
    "ajv": {
      "version": "6.12.6",
      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
      "dev": true,
      "requires": {
        "typical": "2.6.1"
        "fast-deep-equal": "^3.1.1",
        "fast-json-stable-stringify": "^2.0.0",
        "json-schema-traverse": "^0.4.1",
        "uri-js": "^4.2.2"
      }
    },
    "array-union": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
    "ansi-colors": {
      "version": "4.1.1",
      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
      "dev": true
    },
    "ansi-escape-sequences": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz",
      "integrity": "sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==",
      "dev": true,
      "requires": {
        "array-uniq": "1.0.3"
        "array-back": "^3.0.1"
      },
      "dependencies": {
        "array-back": {
          "version": "3.1.0",
          "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
          "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
          "dev": true
        }
      }
    },
    "array-uniq": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
    "ansi-regex": {
      "version": "5.0.1",
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
      "dev": true
    },
    "arrify": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
      "dev": true
    "ansi-styles": {
      "version": "4.3.0",
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
      "dev": true,
      "requires": {
        "color-convert": "^2.0.1"
      }
    },
    "async": {
      "version": "1.5.2",
      "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
      "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
    "argparse": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
      "dev": true
    },
    "babel-code-frame": {
      "version": "6.26.0",
      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
    "array-back": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
      "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
      "dev": true,
      "requires": {
        "chalk": "1.1.3",
        "esutils": "2.0.2",
        "js-tokens": "3.0.2"
      },
      "dependencies": {
        "chalk": {
          "version": "1.1.3",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
          "dev": true,
          "requires": {
            "ansi-styles": "2.2.1",
            "escape-string-regexp": "1.0.5",
            "has-ansi": "2.0.0",
            "strip-ansi": "3.0.1",
            "supports-color": "2.0.0"
          }
        },
        "strip-ansi": {
          "version": "3.0.1",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
          "dev": true,
          "requires": {
            "ansi-regex": "2.1.1"
          }
        }
        "typical": "^2.6.1"
      }
    },
    "babylon": {


@@ 186,15 1882,15 @@
      "dev": true
    },
    "balanced-match": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
      "dev": true
    },
    "bluebird": {
      "version": "3.5.1",
      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
      "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
      "version": "3.5.5",
      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
      "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
      "dev": true
    },
    "brace-expansion": {


@@ 203,190 1899,95 @@
      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
      "dev": true,
      "requires": {
        "balanced-match": "1.0.0",
        "balanced-match": "^1.0.0",
        "concat-map": "0.0.1"
      }
    },
    "buffer-from": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
      "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
      "dev": true
    },
    "cache-point": {
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/cache-point/-/cache-point-0.4.1.tgz",
      "integrity": "sha512-4TgWfe9SF+bUy5cCql8gWHqKNrviufNwSYxLjf2utB0pY4+bdcuFwMmY1hDB+67Gz/L1vmhFNhePAjJTFBtV+Q==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "fs-then-native": "2.0.0",
        "mkdirp2": "1.0.4"
      }
    },
    "caller-path": {
      "version": "0.1.0",
      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
      "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
      "dev": true,
      "requires": {
        "callsites": "0.2.0"
        "array-back": "^2.0.0",
        "fs-then-native": "^2.0.0",
        "mkdirp2": "^1.0.3"
      }
    },
    "callsites": {
      "version": "0.2.0",
      "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
      "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
      "dev": true
    },
    "camelcase": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
      "dev": true,
      "optional": true
    },
    "catharsis": {
      "version": "0.8.9",
      "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz",
      "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=",
      "dev": true,
      "requires": {
        "underscore-contrib": "0.3.0"
      }
    },
    "center-align": {
      "version": "0.1.3",
      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
      "version": "0.8.11",
      "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz",
      "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==",
      "dev": true,
      "optional": true,
      "requires": {
        "align-text": "0.1.4",
        "lazy-cache": "1.0.4"
        "lodash": "^4.17.14"
      }
    },
    "chalk": {
      "version": "2.4.1",
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
      "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
      "dev": true,
      "requires": {
        "ansi-styles": "3.2.1",
        "escape-string-regexp": "1.0.5",
        "supports-color": "5.4.0"
      },
      "dependencies": {
        "ansi-styles": {
          "version": "3.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
          "dev": true,
          "requires": {
            "color-convert": "1.9.2"
          }
        },
        "supports-color": {
          "version": "5.4.0",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
          "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
          "dev": true,
          "requires": {
            "has-flag": "3.0.0"
          }
        }
      }
    },
    "chardet": {
      "version": "0.4.2",
      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
      "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
      "dev": true
    },
    "circular-json": {
      "version": "0.3.3",
      "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
      "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
      "dev": true
    },
    "cli-cursor": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
      "dev": true,
      "requires": {
        "restore-cursor": "2.0.0"
      }
    },
    "cli-width": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
      "dev": true
    },
    "cliui": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
      "version": "4.1.2",
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
      "dev": true,
      "optional": true,
      "requires": {
        "center-align": "0.1.3",
        "right-align": "0.1.3",
        "wordwrap": "0.0.2"
      },
      "dependencies": {
        "wordwrap": {
          "version": "0.0.2",
          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
          "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
          "dev": true,
          "optional": true
        }
        "ansi-styles": "^4.1.0",
        "supports-color": "^7.1.0"
      }
    },
    "co": {
      "version": "4.6.0",
      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
      "dev": true
    },
    "collect-all": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.3.tgz",
      "integrity": "sha512-0y0rBgoX8IzIjBAUnO73SEtSb4Mhk3IoceWJq5zZSxb9mWORhWH8xLYo4EDSOE1jRBk1LhmfjqWFFt10h/+MEA==",
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.4.tgz",
      "integrity": "sha512-RKZhRwJtJEP5FWul+gkSMEnaK6H3AGPTTWOiRimCcs+rc/OmQE3Yhy1Q7A7KsdkG3ZXVdZq68Y6ONSdvkeEcKA==",
      "dev": true,
      "requires": {
        "stream-connect": "1.0.2",
        "stream-via": "1.0.4"
        "stream-connect": "^1.0.2",
        "stream-via": "^1.0.4"
      }
    },
    "color-convert": {
      "version": "1.9.2",
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
      "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
      "dev": true,
      "requires": {
        "color-name": "1.1.1"
        "color-name": "~1.1.4"
      }
    },
    "color-name": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
      "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
      "dev": true
    },
    "command-line-args": {
      "version": "5.0.2",
      "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
      "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz",
      "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==",
      "dev": true,
      "requires": {
        "argv-tools": "0.1.1",
        "array-back": "2.0.0",
        "find-replace": "2.0.1",
        "lodash.camelcase": "4.3.0",
        "typical": "2.6.1"
        "array-back": "^3.1.0",
        "find-replace": "^3.0.0",
        "lodash.camelcase": "^4.3.0",
        "typical": "^4.0.0"
      },
      "dependencies": {
        "array-back": {
          "version": "3.1.0",
          "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
          "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
          "dev": true
        },
        "typical": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz",
          "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==",
          "dev": true
        }
      }
    },
    "command-line-tool": {


@@ 395,11 1996,11 @@
      "integrity": "sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==",
      "dev": true,
      "requires": {
        "ansi-escape-sequences": "4.0.0",
        "array-back": "2.0.0",
        "command-line-args": "5.0.2",
        "command-line-usage": "4.1.0",
        "typical": "2.6.1"
        "ansi-escape-sequences": "^4.0.0",
        "array-back": "^2.0.0",
        "command-line-args": "^5.0.0",
        "command-line-usage": "^4.1.0",
        "typical": "^2.6.1"
      }
    },
    "command-line-usage": {


@@ 408,10 2009,10 @@
      "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
      "dev": true,
      "requires": {
        "ansi-escape-sequences": "4.0.0",
        "array-back": "2.0.0",
        "table-layout": "0.4.4",
        "typical": "2.6.1"
        "ansi-escape-sequences": "^4.0.0",
        "array-back": "^2.0.0",
        "table-layout": "^0.4.2",
        "typical": "^2.6.1"
      }
    },
    "common-sequence": {


@@ 426,25 2027,13 @@
      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
      "dev": true
    },
    "concat-stream": {
      "version": "1.6.2",
      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
      "dev": true,
      "requires": {
        "buffer-from": "1.1.0",
        "inherits": "2.0.3",
        "readable-stream": "2.3.6",
        "typedarray": "0.0.6"
      }
    },
    "config-master": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz",
      "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=",
      "dev": true,
      "requires": {
        "walk-back": "2.0.1"
        "walk-back": "^2.0.1"
      },
      "dependencies": {
        "walk-back": {


@@ 455,39 2044,26 @@
        }
      }
    },
    "core-util-is": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
      "dev": true
    },
    "cross-spawn": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
      "version": "7.0.3",
      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
      "dev": true,
      "requires": {
        "lru-cache": "4.1.3",
        "shebang-command": "1.2.0",
        "which": "1.3.1"
        "path-key": "^3.1.0",
        "shebang-command": "^2.0.0",
        "which": "^2.0.1"
      }
    },
    "debug": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
      "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
      "version": "4.3.3",
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
      "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
      "dev": true,
      "requires": {
        "ms": "2.0.0"
        "ms": "2.1.2"
      }
    },
    "decamelize": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
      "dev": true,
      "optional": true
    },
    "deep-extend": {
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",


@@ 495,209 2071,185 @@
      "dev": true
    },
    "deep-is": {
      "version": "0.1.3",
      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
      "dev": true
    },
    "del": {
      "version": "2.2.2",
      "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
      "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
    "dmd": {
      "version": "3.0.13",
      "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.13.tgz",
      "integrity": "sha512-FV/417bH2c/CYpe8BjFEAHoaHaItcJnPlKELi/qyPZdmUom8joyuC78OhhfPUdyKD/WcouTQ2LxQT4M/RoiJ3w==",
      "dev": true,
      "requires": {
        "globby": "5.0.0",
        "is-path-cwd": "1.0.0",
        "is-path-in-cwd": "1.0.1",
        "object-assign": "4.1.1",
        "pify": "2.3.0",
        "pinkie-promise": "2.0.1",
        "rimraf": "2.6.2"
        "array-back": "^2.0.0",
        "cache-point": "^0.4.1",
        "common-sequence": "^1.0.2",
        "file-set": "^2.0.0",
        "handlebars": "^4.0.11",
        "marked": "^0.3.16",
        "object-get": "^2.1.0",
        "reduce-flatten": "^1.0.1",
        "reduce-unique": "^1.0.0",
        "reduce-without": "^1.0.1",
        "test-value": "^3.0.0",
        "walk-back": "^3.0.0"
      }
    },
    "dmd": {
      "version": "3.0.12",
      "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.12.tgz",
      "integrity": "sha512-79w644JdsB2TthYpVl2bDurX7i9Abaegg2E7X46Ajc135aASTMXxrHzJ9mOa5X5nbmnXwlBYiF68K+1baX+BzQ==",
    "doctrine": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "cache-point": "0.4.1",
        "common-sequence": "1.0.2",
        "file-set": "2.0.0",
        "handlebars": "4.0.11",
        "marked": "0.3.19",
        "object-get": "2.1.0",
        "reduce-flatten": "1.0.1",
        "reduce-unique": "1.0.0",
        "reduce-without": "1.0.1",
        "test-value": "3.0.0",
        "walk-back": "3.0.0"
        "esutils": "^2.0.2"
      }
    },
    "doctrine": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
    "enquirer": {
      "version": "2.3.6",
      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
      "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
      "dev": true,
      "requires": {
        "esutils": "2.0.2"
        "ansi-colors": "^4.1.1"
      }
    },
    "escape-string-regexp": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
      "dev": true
    },
    "eslint": {
      "version": "4.19.1",
      "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
      "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
      "dev": true,
      "requires": {
        "ajv": "5.5.2",
        "babel-code-frame": "6.26.0",
        "chalk": "2.4.1",
        "concat-stream": "1.6.2",
        "cross-spawn": "5.1.0",
        "debug": "3.1.0",
        "doctrine": "2.1.0",
        "eslint-scope": "3.7.1",
        "eslint-visitor-keys": "1.0.0",
        "espree": "3.5.4",
        "esquery": "1.0.1",
        "esutils": "2.0.2",
        "file-entry-cache": "2.0.0",
        "functional-red-black-tree": "1.0.1",
        "glob": "7.1.2",
        "globals": "11.7.0",
        "ignore": "3.3.10",
        "imurmurhash": "0.1.4",
        "inquirer": "3.3.0",
        "is-resolvable": "1.1.0",
        "js-yaml": "3.12.0",
        "json-stable-stringify-without-jsonify": "1.0.1",
        "levn": "0.3.0",
        "lodash": "4.17.10",
        "minimatch": "3.0.4",
        "mkdirp": "0.5.1",
        "natural-compare": "1.4.0",
        "optionator": "0.8.2",
        "path-is-inside": "1.0.2",
        "pluralize": "7.0.0",
        "progress": "2.0.0",
        "regexpp": "1.1.0",
        "require-uncached": "1.0.3",
        "semver": "5.5.0",
        "strip-ansi": "4.0.0",
        "strip-json-comments": "2.0.1",
        "table": "4.0.2",
        "text-table": "0.2.0"
      }
    },
    "eslint-config-hapi": {
      "version": "11.1.0",
      "resolved": "https://registry.npmjs.org/eslint-config-hapi/-/eslint-config-hapi-11.1.0.tgz",
      "integrity": "sha512-fCw0uLgkZLQBqYu/lR5MA6cXB+D4c2EEtzrVmhHbGQq3iRCFSaUEOE/N4Sujd1Qh5jkaUc0/kuB/gdv2upt5aQ==",
      "dev": true
    },
    "eslint-plugin-hapi": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/eslint-plugin-hapi/-/eslint-plugin-hapi-4.1.0.tgz",
      "integrity": "sha512-z1yUoSWArx6pXaC0FoWRFpqjbHn8QWonJiTVhJmiC14jOAT7FZKdKWCkhM4jQrgrkEK9YEv3p2HuzSf5dtWmuQ==",
      "version": "8.5.0",
      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz",
      "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==",
      "dev": true,
      "requires": {
        "@eslint/eslintrc": "^1.0.5",
        "@humanwhocodes/config-array": "^0.9.2",
        "ajv": "^6.10.0",
        "chalk": "^4.0.0",
        "cross-spawn": "^7.0.2",
        "debug": "^4.3.2",
        "doctrine": "^3.0.0",
        "enquirer": "^2.3.5",
        "escape-string-regexp": "^4.0.0",
        "eslint-scope": "^7.1.0",
        "eslint-utils": "^3.0.0",
        "eslint-visitor-keys": "^3.1.0",
        "espree": "^9.2.0",
        "esquery": "^1.4.0",
        "esutils": "^2.0.2",
        "fast-deep-equal": "^3.1.3",
        "file-entry-cache": "^6.0.1",
        "functional-red-black-tree": "^1.0.1",
        "glob-parent": "^6.0.1",
        "globals": "^13.6.0",
        "ignore": "^4.0.6",
        "import-fresh": "^3.0.0",
        "imurmurhash": "^0.1.4",
        "is-glob": "^4.0.0",
        "js-yaml": "^4.1.0",
        "json-stable-stringify-without-jsonify": "^1.0.1",
        "levn": "^0.4.1",
        "lodash.merge": "^4.6.2",
        "minimatch": "^3.0.4",
        "natural-compare": "^1.4.0",
        "optionator": "^0.9.1",
        "progress": "^2.0.0",
        "regexpp": "^3.2.0",
        "semver": "^7.2.1",
        "strip-ansi": "^6.0.1",
        "strip-json-comments": "^3.1.0",
        "text-table": "^0.2.0",
        "v8-compile-cache": "^2.0.3"
      }
    },
    "eslint-scope": {
      "version": "7.1.0",
      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz",
      "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==",
      "dev": true,
      "requires": {
        "hapi-capitalize-modules": "1.1.6",
        "hapi-for-you": "1.0.0",
        "hapi-no-var": "1.0.1",
        "hapi-scope-start": "2.1.1",
        "no-arrowception": "1.0.0"
        "esrecurse": "^4.3.0",
        "estraverse": "^5.2.0"
      }
    },
    "eslint-scope": {
      "version": "3.7.1",
      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
      "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
    "eslint-utils": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
      "dev": true,
      "requires": {
        "esrecurse": "4.2.1",
        "estraverse": "4.2.0"
        "eslint-visitor-keys": "^2.0.0"
      },
      "dependencies": {
        "eslint-visitor-keys": {
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
          "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
          "dev": true
        }
      }
    },
    "eslint-visitor-keys": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
      "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz",
      "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==",
      "dev": true
    },
    "espree": {
      "version": "3.5.4",
      "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
      "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
      "version": "9.2.0",
      "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz",
      "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==",
      "dev": true,
      "requires": {
        "acorn": "5.7.1",
        "acorn-jsx": "3.0.1"
        "acorn": "^8.6.0",
        "acorn-jsx": "^5.3.1",
        "eslint-visitor-keys": "^3.1.0"
      }
    },
    "esprima": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
      "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
      "dev": true
    },
    "esquery": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
      "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
      "version": "1.4.0",
      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
      "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
      "dev": true,
      "requires": {
        "estraverse": "4.2.0"
        "estraverse": "^5.1.0"
      }
    },
    "esrecurse": {
      "version": "4.2.1",
      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
      "version": "4.3.0",
      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
      "dev": true,
      "requires": {
        "estraverse": "4.2.0"
        "estraverse": "^5.2.0"
      }
    },
    "estraverse": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
      "version": "5.3.0",
      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
      "dev": true
    },
    "esutils": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
      "dev": true
    },
    "external-editor": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
      "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
      "dev": true,
      "requires": {
        "chardet": "0.4.2",
        "iconv-lite": "0.4.23",
        "tmp": "0.0.33"
      }
    },
    "fast-deep-equal": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
      "version": "3.1.3",
      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
      "dev": true
    },
    "fast-json-stable-stringify": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
      "dev": true
    },
    "fast-levenshtein": {


@@ 706,57 2258,58 @@
      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
      "dev": true
    },
    "figures": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
      "dev": true,
      "requires": {
        "escape-string-regexp": "1.0.5"
      }
    },
    "file-entry-cache": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
      "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
      "version": "6.0.1",
      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
      "dev": true,
      "requires": {
        "flat-cache": "1.3.0",
        "object-assign": "4.1.1"
        "flat-cache": "^3.0.4"
      }
    },
    "file-set": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.0.tgz",
      "integrity": "sha512-cCWXfw+nrYoIoUVmEF7Xsw91lGWuObtSnTEZ7AmdvZou1A/6Xx237HfxdQyC/ayKRvQSMbNOBwg62OjN5JxbXw==",
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.1.tgz",
      "integrity": "sha512-XgOUUpgR6FbbfYcniLw0qm1Am7PnNYIAkd+eXxRt42LiYhjaso0WiuQ+VmrNdtwotyM+cLCfZ56AZrySP3QnKA==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "glob": "7.1.2"
        "array-back": "^2.0.0",
        "glob": "^7.1.3"
      }
    },
    "find-replace": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
      "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz",
      "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "test-value": "3.0.0"
        "array-back": "^3.0.1"
      },
      "dependencies": {
        "array-back": {
          "version": "3.1.0",
          "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
          "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
          "dev": true
        }
      }
    },
    "flat-cache": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
      "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
      "version": "3.0.4",
      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
      "dev": true,
      "requires": {
        "circular-json": "0.3.3",
        "del": "2.2.2",
        "graceful-fs": "4.1.11",
        "write": "0.2.1"
        "flatted": "^3.1.0",
        "rimraf": "^3.0.2"
      }
    },
    "flatted": {
      "version": "3.2.4",
      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz",
      "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
      "dev": true
    },
    "fs-then-native": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/fs-then-native/-/fs-then-native-2.0.0.tgz",


@@ 776,116 2329,83 @@
      "dev": true
    },
    "getenv": {
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/getenv/-/getenv-0.6.0.tgz",
      "integrity": "sha1-SBo1F3RudLOPh8XXDoBuEFr1TfU="
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz",
      "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg=="
    },
    "glob": {
      "version": "7.1.2",
      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
      "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
      "version": "7.2.0",
      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
      "dev": true,
      "requires": {
        "fs.realpath": "1.0.0",
        "inflight": "1.0.6",
        "inherits": "2.0.3",
        "minimatch": "3.0.4",
        "once": "1.4.0",
        "path-is-absolute": "1.0.1"
        "fs.realpath": "^1.0.0",
        "inflight": "^1.0.4",
        "inherits": "2",
        "minimatch": "^3.0.4",
        "once": "^1.3.0",
        "path-is-absolute": "^1.0.0"
      }
    },
    "globals": {
      "version": "11.7.0",
      "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz",
      "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==",
      "dev": true
    "glob-parent": {
      "version": "6.0.2",
      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
      "dev": true,
      "requires": {
        "is-glob": "^4.0.3"
      }
    },
    "globby": {
      "version": "5.0.0",
      "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
      "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
    "globals": {
      "version": "13.12.0",
      "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
      "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
      "dev": true,
      "requires": {
        "array-union": "1.0.2",
        "arrify": "1.0.1",
        "glob": "7.1.2",
        "object-assign": "4.1.1",
        "pify": "2.3.0",
        "pinkie-promise": "2.0.1"
        "type-fest": "^0.20.2"
      }
    },
    "graceful-fs": {
      "version": "4.1.11",
      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
      "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
      "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
      "dev": true
    },
    "handlebars": {
      "version": "4.0.11",
      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
      "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
      "version": "4.7.7",
      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
      "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
      "dev": true,
      "requires": {
        "async": "1.5.2",
        "optimist": "0.6.1",
        "source-map": "0.4.4",
        "uglify-js": "2.8.29"
        "minimist": "^1.2.5",
        "neo-async": "^2.6.0",
        "source-map": "^0.6.1",
        "uglify-js": "^3.1.4",
        "wordwrap": "^1.0.0"
      }
    },
    "hapi-capitalize-modules": {
      "version": "1.1.6",
      "resolved": "https://registry.npmjs.org/hapi-capitalize-modules/-/hapi-capitalize-modules-1.1.6.tgz",
      "integrity": "sha1-eZEXFBXhXmqjIx5k3ac8gUZmUxg=",
      "dev": true
    },
    "hapi-for-you": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/hapi-for-you/-/hapi-for-you-1.0.0.tgz",
      "integrity": "sha1-02L77o172pwseAHiB+WlzRoLans=",
      "dev": true
    },
    "hapi-no-var": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/hapi-no-var/-/hapi-no-var-1.0.1.tgz",
      "integrity": "sha512-kk2xyyTzI+eQ/oA1rO4eVdCpYsrPHVERHa6+mTHD08XXFLaAkkaEs6reMg1VyqGh2o5xPt//DO4EhCacLx/cRA==",
      "dev": true
    },
    "hapi-scope-start": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/hapi-scope-start/-/hapi-scope-start-2.1.1.tgz",
      "integrity": "sha1-dJWnJv5yt7yo3izcwdh82M5qtPI=",
    "has-flag": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
      "dev": true
    },
    "has-ansi": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
      "dev": true,
      "requires": {
        "ansi-regex": "2.1.1"
      }
    },
    "has-flag": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
    "ignore": {
      "version": "4.0.6",
      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
      "dev": true
    },
    "iconv-lite": {
      "version": "0.4.23",
      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
      "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
    "import-fresh": {
      "version": "3.3.0",
      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
      "dev": true,
      "requires": {
        "safer-buffer": "2.1.2"
        "parent-module": "^1.0.0",
        "resolve-from": "^4.0.0"
      }
    },
    "ignore": {
      "version": "3.3.10",
      "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
      "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
      "dev": true
    },
    "imurmurhash": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",


@@ 898,112 2418,44 @@
      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
      "dev": true,
      "requires": {
        "once": "1.4.0",
        "wrappy": "1.0.2"
        "once": "^1.3.0",
        "wrappy": "1"
      }
    },
    "inherits": {
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
      "dev": true
    },
    "inquirer": {
      "version": "3.3.0",
      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
      "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
      "dev": true,
      "requires": {
        "ansi-escapes": "3.1.0",
        "chalk": "2.4.1",
        "cli-cursor": "2.1.0",
        "cli-width": "2.2.0",
        "external-editor": "2.2.0",
        "figures": "2.0.0",
        "lodash": "4.17.10",
        "mute-stream": "0.0.7",
        "run-async": "2.3.0",
        "rx-lite": "4.0.8",
        "rx-lite-aggregates": "4.0.8",
        "string-width": "2.1.1",
        "strip-ansi": "4.0.0",
        "through": "2.3.8"
      }
    },
    "is-buffer": {
      "version": "1.1.6",
      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
      "dev": true
    },
    "is-fullwidth-code-point": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
      "dev": true
    },
    "is-path-cwd": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
    "is-extglob": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
      "dev": true
    },
    "is-path-in-cwd": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
      "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
      "dev": true,
      "requires": {
        "is-path-inside": "1.0.1"
      }
    },
    "is-path-inside": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
    "is-glob": {
      "version": "4.0.3",
      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
      "dev": true,
      "requires": {
        "path-is-inside": "1.0.2"
        "is-extglob": "^2.1.1"
      }
    },
    "is-promise": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
      "dev": true
    },
    "is-resolvable": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
      "dev": true
    },
    "isarray": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
      "dev": true
    },
    "isexe": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
      "dev": true
    },
    "js-tokens": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
      "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
      "dev": true
    },
    "js-yaml": {
      "version": "3.12.0",
      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
      "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
      "dev": true,
      "requires": {
        "argparse": "1.0.10",
        "esprima": "4.0.0"
        "argparse": "^2.0.1"
      }
    },
    "js2xmlparser": {


@@ 1012,7 2464,7 @@
      "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
      "dev": true,
      "requires": {
        "xmlcreate": "1.0.2"
        "xmlcreate": "^1.0.1"
      }
    },
    "jsdoc": {


@@ 1022,17 2474,31 @@
      "dev": true,
      "requires": {
        "babylon": "7.0.0-beta.19",
        "bluebird": "3.5.1",
        "catharsis": "0.8.9",
        "escape-string-regexp": "1.0.5",
        "js2xmlparser": "3.0.0",
        "klaw": "2.0.0",
        "marked": "0.3.19",
        "mkdirp": "0.5.1",
        "requizzle": "0.2.1",
        "strip-json-comments": "2.0.1",
        "bluebird": "~3.5.0",
        "catharsis": "~0.8.9",
        "escape-string-regexp": "~1.0.5",
        "js2xmlparser": "~3.0.0",
        "klaw": "~2.0.0",
        "marked": "~0.3.6",
        "mkdirp": "~0.5.1",
        "requizzle": "~0.2.1",
        "strip-json-comments": "~2.0.1",
        "taffydb": "2.6.2",
        "underscore": "1.8.3"
        "underscore": "~1.8.3"
      },
      "dependencies": {
        "escape-string-regexp": {
          "version": "1.0.5",
          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
          "dev": true
        },
        "strip-json-comments": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
          "dev": true
        }
      }
    },
    "jsdoc-api": {


@@ 1041,15 2507,15 @@
      "integrity": "sha512-dfYq9JgB+XahY0XfSEw93PmXmocjwYcvJ5aMuQUJ/OdDRGWamf2SSOk3W06Bsj8qdjp/UdefzqpP/mpwsvHuvA==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "cache-point": "0.4.1",
        "collect-all": "1.0.3",
        "file-set": "2.0.0",
        "fs-then-native": "2.0.0",
        "jsdoc": "3.5.5",
        "object-to-spawn-args": "1.1.1",
        "temp-path": "1.0.0",
        "walk-back": "3.0.0"
        "array-back": "^2.0.0",
        "cache-point": "^0.4.1",
        "collect-all": "^1.0.3",
        "file-set": "^2.0.0",
        "fs-then-native": "^2.0.0",
        "jsdoc": "~3.5.5",
        "object-to-spawn-args": "^1.1.1",
        "temp-path": "^1.0.0",
        "walk-back": "^3.0.0"
      }
    },
    "jsdoc-parse": {


@@ 1058,12 2524,12 @@
      "integrity": "sha512-btZLp4wYl90vcAfgk4hoGQbO17iBVrhh3LJRMKZNtZgniO3F8H2CjxXld0owBIB1XxN+j3bAcWZnZKMnSj3iMA==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "lodash.omit": "4.5.0",
        "lodash.pick": "4.4.0",
        "reduce-extract": "1.0.0",
        "sort-array": "2.0.0",
        "test-value": "3.0.0"
        "array-back": "^2.0.0",
        "lodash.omit": "^4.5.0",
        "lodash.pick": "^4.4.0",
        "reduce-extract": "^1.0.0",
        "sort-array": "^2.0.0",
        "test-value": "^3.0.0"
      }
    },
    "jsdoc-to-markdown": {


@@ 1072,19 2538,19 @@
      "integrity": "sha512-LHJRoLoLyDdxNcColgkLoB/rFG5iRP+PNJjMILI0x+95IdEAtyjSt0wJ6ZlKxRpkhBYtQXTQQ119hMqPIUZzTQ==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "command-line-tool": "0.8.0",
        "config-master": "3.1.0",
        "dmd": "3.0.12",
        "jsdoc-api": "4.0.3",
        "jsdoc-parse": "3.0.1",
        "walk-back": "3.0.0"
        "array-back": "^2.0.0",
        "command-line-tool": "^0.8.0",
        "config-master": "^3.1.0",
        "dmd": "^3.0.10",
        "jsdoc-api": "^4.0.1",
        "jsdoc-parse": "^3.0.1",
        "walk-back": "^3.0.0"
      }
    },
    "json-schema-traverse": {
      "version": "0.3.1",
      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
      "dev": true
    },
    "json-stable-stringify-without-jsonify": {


@@ 1093,45 2559,29 @@
      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
      "dev": true
    },
    "kind-of": {
      "version": "3.2.2",
      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
      "dev": true,
      "requires": {
        "is-buffer": "1.1.6"
      }
    },
    "klaw": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz",
      "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=",
      "dev": true,
      "requires": {
        "graceful-fs": "4.1.11"
        "graceful-fs": "^4.1.9"
      }
    },
    "lazy-cache": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
      "dev": true,
      "optional": true
    },
    "levn": {
      "version": "0.3.0",
      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
      "dev": true,
      "requires": {
        "prelude-ls": "1.1.2",
        "type-check": "0.3.2"
        "prelude-ls": "^1.2.1",
        "type-check": "~0.4.0"
      }
    },
    "lodash": {
      "version": "4.17.10",
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
      "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
      "version": "4.17.21",
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
      "dev": true
    },
    "lodash.camelcase": {


@@ 1140,6 2590,12 @@
      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
      "dev": true
    },
    "lodash.merge": {
      "version": "4.6.2",
      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
      "dev": true
    },
    "lodash.omit": {
      "version": "4.5.0",
      "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",


@@ 1158,20 2614,13 @@
      "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
      "dev": true
    },
    "longest": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
      "dev": true
    },
    "lru-cache": {
      "version": "4.1.3",
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
      "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
      "version": "6.0.0",
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
      "dev": true,
      "requires": {
        "pseudomap": "1.0.2",
        "yallist": "2.1.2"
        "yallist": "^4.0.0"
      }
    },
    "marked": {


@@ 1180,52 2629,40 @@
      "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==",
      "dev": true
    },
    "mimic-fn": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
      "dev": true
    },
    "minimatch": {
      "version": "3.0.4",
      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
      "dev": true,
      "requires": {
        "brace-expansion": "1.1.11"
        "brace-expansion": "^1.1.7"
      }
    },
    "minimist": {
      "version": "0.0.8",
      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
      "version": "1.2.5",
      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
      "dev": true
    },
    "mkdirp": {
      "version": "0.5.1",
      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
      "version": "0.5.5",
      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
      "dev": true,
      "requires": {
        "minimist": "0.0.8"
        "minimist": "^1.2.5"
      }
    },
    "mkdirp2": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.4.tgz",
      "integrity": "sha512-Q2PKB4ZR4UPtjLl76JfzlgSCUZhSV1AXQgAZa1qt5RiaALFjP/CDrGvFBrOz7Ck6McPcwMAxTsJvWOUjOU8XMw==",
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.5.tgz",
      "integrity": "sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==",
      "dev": true
    },
    "ms": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
      "dev": true
    },
    "mute-stream": {
      "version": "0.0.7",
      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
      "dev": true
    },
    "natural-compare": {


@@ 1234,22 2671,16 @@
      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
      "dev": true
    },
    "no-arrowception": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/no-arrowception/-/no-arrowception-1.0.0.tgz",
      "integrity": "sha1-W/PpXrnEG1c4SoBTM9qjtzTuMno=",
      "dev": true
    },
    "object-assign": {
      "version": "4.1.1",
      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
    "neo-async": {
      "version": "2.6.2",
      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
      "dev": true
    },
    "object-get": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.0.tgz",
      "integrity": "sha1-ciu9tgA576R8rTxtws5RqFwCxa4=",
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.1.tgz",
      "integrity": "sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==",
      "dev": true
    },
    "object-to-spawn-args": {


@@ 1264,141 2695,69 @@
      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
      "dev": true,
      "requires": {
        "wrappy": "1.0.2"
      }
    },
    "onetime": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
      "dev": true,
      "requires": {
        "mimic-fn": "1.2.0"
        "wrappy": "1"
      }
    },
    "optimist": {
      "version": "0.6.1",
      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
    "optionator": {
      "version": "0.9.1",
      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
      "dev": true,
      "requires": {
        "minimist": "0.0.8",
        "wordwrap": "0.0.3"
      },
      "dependencies": {
        "wordwrap": {
          "version": "0.0.3",
          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
          "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
          "dev": true
        }
        "deep-is": "^0.1.3",
        "fast-levenshtein": "^2.0.6",
        "levn": "^0.4.1",
        "prelude-ls": "^1.2.1",
        "type-check": "^0.4.0",
        "word-wrap": "^1.2.3"
      }
    },
    "optionator": {
      "version": "0.8.2",
      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
    "parent-module": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
      "dev": true,
      "requires": {
        "deep-is": "0.1.3",
        "fast-levenshtein": "2.0.6",
        "levn": "0.3.0",
        "prelude-ls": "1.1.2",
        "type-check": "0.3.2",
        "wordwrap": "1.0.0"
        "callsites": "^3.0.0"
      }
    },
    "os-tmpdir": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
      "dev": true
    },
    "path-is-absolute": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
      "dev": true
    },
    "path-is-inside": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
      "dev": true
    },
    "pify": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
      "dev": true
    },
    "pinkie": {
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
      "dev": true
    },
    "pinkie-promise": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
      "dev": true,
      "requires": {
        "pinkie": "2.0.4"
      }
    },
    "pluralize": {
      "version": "7.0.0",
      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
      "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
    "path-key": {
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
      "dev": true
    },
    "prelude-ls": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
      "dev": true
    },
    "process-nextick-args": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
      "dev": true
    },
    "progress": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
      "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
      "dev": true
    },
    "pseudomap": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
    "punycode": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
      "dev": true
    },
    "readable-stream": {
      "version": "2.3.6",
      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
      "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
      "dev": true,
      "requires": {
        "core-util-is": "1.0.2",
        "inherits": "2.0.3",
        "isarray": "1.0.0",
        "process-nextick-args": "2.0.0",
        "safe-buffer": "5.1.2",
        "string_decoder": "1.1.1",
        "util-deprecate": "1.0.2"
      }
    },
    "reduce-extract": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/reduce-extract/-/reduce-extract-1.0.0.tgz",
      "integrity": "sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU=",
      "dev": true,
      "requires": {
        "test-value": "1.1.0"
        "test-value": "^1.0.1"
      },
      "dependencies": {
        "array-back": {


@@ 1407,7 2766,7 @@
          "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
          "dev": true,
          "requires": {
            "typical": "2.6.1"
            "typical": "^2.6.0"
          }
        },
        "test-value": {


@@ 1416,8 2775,8 @@
          "integrity": "sha1-oJE29y7AQ9J8iTcHwrFZv6196T8=",
          "dev": true,
          "requires": {
            "array-back": "1.0.4",
            "typical": "2.6.1"
            "array-back": "^1.0.2",
            "typical": "^2.4.2"
          }
        }
      }


@@ 1440,7 2799,7 @@
      "integrity": "sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw=",
      "dev": true,
      "requires": {
        "test-value": "2.1.0"
        "test-value": "^2.0.0"
      },
      "dependencies": {
        "array-back": {


@@ 1449,7 2808,7 @@
          "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
          "dev": true,
          "requires": {
            "typical": "2.6.1"
            "typical": "^2.6.0"
          }
        },
        "test-value": {


@@ 1458,167 2817,75 @@
          "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
          "dev": true,
          "requires": {
            "array-back": "1.0.4",
            "typical": "2.6.1"
            "array-back": "^1.0.3",
            "typical": "^2.6.0"
          }
        }
      }
    },
    "regexpp": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
      "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
      "dev": true
    },
    "repeat-string": {
      "version": "1.6.1",
      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
      "version": "3.2.0",
      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
      "dev": true
    },
    "require-uncached": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
      "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
      "dev": true,
      "requires": {
        "caller-path": "0.1.0",
        "resolve-from": "1.0.1"
      }
    },
    "requizzle": {
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz",
      "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=",
      "version": "0.2.3",
      "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz",
      "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==",
      "dev": true,
      "requires": {
        "underscore": "1.6.0"
      },
      "dependencies": {
        "underscore": {
          "version": "1.6.0",
          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
          "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
          "dev": true
        }
        "lodash": "^4.17.14"
      }
    },
    "resolve-from": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
      "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
      "dev": true
    },
    "restore-cursor": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
      "dev": true,
      "requires": {
        "onetime": "2.0.1",
        "signal-exit": "3.0.2"
      }
    },
    "right-align": {
      "version": "0.1.3",
      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
      "dev": true,
      "optional": true,
      "requires": {
        "align-text": "0.1.4"
      }
    },
    "rimraf": {
      "version": "2.6.2",
      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
      "dev": true,
      "requires": {
        "glob": "7.1.2"
      }
    },
    "run-async": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
      "dev": true,
      "requires": {
        "is-promise": "2.1.0"
        "glob": "^7.1.3"
      }
    },
    "rx-lite": {
      "version": "4.0.8",
      "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
      "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
      "dev": true
    },
    "rx-lite-aggregates": {
      "version": "4.0.8",
      "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
      "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
    "semver": {
      "version": "7.3.5",
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
      "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
      "dev": true,
      "requires": {
        "rx-lite": "4.0.8"
        "lru-cache": "^6.0.0"
      }
    },
    "safe-buffer": {
      "version": "5.1.2",
      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
      "dev": true
    },
    "safer-buffer": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
      "dev": true
    },
    "semver": {
      "version": "5.5.0",
      "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
      "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
      "dev": true
    },
    "shebang-command": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
      "dev": true,
      "requires": {
        "shebang-regex": "1.0.0"
        "shebang-regex": "^3.0.0"
      }
    },
    "shebang-regex": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
      "dev": true
    },
    "signal-exit": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
      "dev": true
    },
    "slice-ansi": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
      "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
      "dev": true,
      "requires": {
        "is-fullwidth-code-point": "2.0.0"
      }
    },
    "sort-array": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/sort-array/-/sort-array-2.0.0.tgz",
      "integrity": "sha1-OKnG2if9fRR7QuYFVPKBGHtN9HI=",
      "dev": true,
      "requires": {
        "array-back": "1.0.4",
        "object-get": "2.1.0",
        "typical": "2.6.1"
        "array-back": "^1.0.4",
        "object-get": "^2.1.0",
        "typical": "^2.6.0"
      },
      "dependencies": {
        "array-back": {


@@ 1627,24 2894,15 @@
          "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
          "dev": true,
          "requires": {
            "typical": "2.6.1"
            "typical": "^2.6.0"
          }
        }
      }
    },
    "source-map": {
      "version": "0.4.4",
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
      "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
      "dev": true,
      "requires": {
        "amdefine": "1.0.1"
      }
    },
    "sprintf-js": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
      "version": "0.6.1",
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
      "dev": true
    },
    "stream-connect": {


@@ 1653,7 2911,7 @@
      "integrity": "sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc=",
      "dev": true,
      "requires": {
        "array-back": "1.0.4"
        "array-back": "^1.0.2"
      },
      "dependencies": {
        "array-back": {


@@ 1662,7 2920,7 @@
          "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
          "dev": true,
          "requires": {
            "typical": "2.6.1"
            "typical": "^2.6.0"
          }
        }
      }


@@ 1673,79 2931,41 @@
      "integrity": "sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==",
      "dev": true
    },
    "string_decoder": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
      "dev": true,
      "requires": {
        "safe-buffer": "5.1.2"
      }
    },
    "string-width": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
      "dev": true,
      "requires": {
        "is-fullwidth-code-point": "2.0.0",
        "strip-ansi": "4.0.0"
      }
    },
    "strip-ansi": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
      "version": "6.0.1",
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
      "dev": true,
      "requires": {
        "ansi-regex": "3.0.0"
      },
      "dependencies": {
        "ansi-regex": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
          "dev": true
        }
        "ansi-regex": "^5.0.1"
      }
    },
    "strip-json-comments": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
      "dev": true
    },
    "supports-color": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
      "dev": true
    },
    "table": {
      "version": "4.0.2",
      "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
      "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
      "version": "7.2.0",
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
      "dev": true,
      "requires": {
        "ajv": "5.5.2",
        "ajv-keywords": "2.1.1",
        "chalk": "2.4.1",
        "lodash": "4.17.10",
        "slice-ansi": "1.0.0",
        "string-width": "2.1.1"
        "has-flag": "^4.0.0"
      }
    },
    "table-layout": {
      "version": "0.4.4",
      "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.4.tgz",
      "integrity": "sha512-uNaR3SRMJwfdp9OUr36eyEi6LLsbcTqTO/hfTsNviKsNeyMBPICJCC7QXRF3+07bAP6FRwA8rczJPBqXDc0CkQ==",
      "version": "0.4.5",
      "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz",
      "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "deep-extend": "0.6.0",
        "lodash.padend": "4.6.1",
        "typical": "2.6.1",
        "wordwrapjs": "3.0.0"
        "array-back": "^2.0.0",
        "deep-extend": "~0.6.0",
        "lodash.padend": "^4.6.1",
        "typical": "^2.6.1",
        "wordwrapjs": "^3.0.0"
      }
    },
    "taffydb": {


@@ 1766,8 2986,8 @@
      "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
      "dev": true,
      "requires": {
        "array-back": "2.0.0",
        "typical": "2.6.1"
        "array-back": "^2.0.0",
        "typical": "^2.6.1"
      }
    },
    "text-table": {


@@ 1776,34 2996,19 @@
      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
      "dev": true
    },
    "through": {
      "version": "2.3.8",
      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
      "dev": true
    },
    "tmp": {
      "version": "0.0.33",
      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
      "dev": true,
      "requires": {
        "os-tmpdir": "1.0.2"
      }
    },
    "type-check": {
      "version": "0.3.2",
      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
      "version": "0.4.0",
      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
      "dev": true,
      "requires": {
        "prelude-ls": "1.1.2"
        "prelude-ls": "^1.2.1"
      }
    },
    "typedarray": {
      "version": "0.0.6",
      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
    "type-fest": {
      "version": "0.20.2",
      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
      "dev": true
    },
    "typical": {


@@ 1813,30 3018,9 @@
      "dev": true
    },
    "uglify-js": {
      "version": "2.8.29",
      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
      "dev": true,
      "optional": true,
      "requires": {
        "source-map": "0.5.7",
        "uglify-to-browserify": "1.0.2",
        "yargs": "3.10.0"
      },
      "dependencies": {
        "source-map": {
          "version": "0.5.7",
          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
          "dev": true,
          "optional": true
        }
      }
    },
    "uglify-to-browserify": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
      "version": "3.14.5",
      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz",
      "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==",
      "dev": true,
      "optional": true
    },


@@ 1846,50 3030,41 @@
      "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
      "dev": true
    },
    "underscore-contrib": {
      "version": "0.3.0",
      "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz",
      "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=",
    "uri-js": {
      "version": "4.4.1",
      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
      "dev": true,
      "requires": {
        "underscore": "1.6.0"
      },
      "dependencies": {
        "underscore": {
          "version": "1.6.0",
          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
          "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
          "dev": true
        }
        "punycode": "^2.1.0"
      }
    },
    "util-deprecate": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
    "v8-compile-cache": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
      "dev": true
    },
    "walk-back": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.0.tgz",
      "integrity": "sha1-I1h4ejXakQMtrV6S+AsSNw2HlcU=",
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.1.tgz",
      "integrity": "sha512-umiNB2qLO731Sxbp6cfZ9pwURJzTnftxE4Gc7hq8n/ehkuXC//s9F65IEIJA2ZytQZ1ZOsm/Fju4IWx0bivkUQ==",
      "dev": true
    },
    "which": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
      "dev": true,
      "requires": {
        "isexe": "2.0.0"
        "isexe": "^2.0.0"
      }
    },
    "window-size": {
      "version": "0.1.0",
      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
      "dev": true,
      "optional": true
    "word-wrap": {
      "version": "1.2.3",
      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
      "dev": true
    },
    "wordwrap": {
      "version": "1.0.0",


@@ 1903,8 3078,8 @@
      "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
      "dev": true,
      "requires": {
        "reduce-flatten": "1.0.1",
        "typical": "2.6.1"
        "reduce-flatten": "^1.0.1",
        "typical": "^2.6.1"
      }
    },
    "wrappy": {


@@ 1913,15 3088,6 @@
      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
      "dev": true
    },
    "write": {
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
      "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
      "dev": true,
      "requires": {
        "mkdirp": "0.5.1"
      }
    },
    "xmlcreate": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",


@@ 1929,23 3095,10 @@
      "dev": true
    },
    "yallist": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
      "dev": true
    },
    "yargs": {
      "version": "3.10.0",
      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
      "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
      "dev": true,
      "optional": true,
      "requires": {
        "camelcase": "1.2.1",
        "cliui": "2.1.0",
        "decamelize": "1.2.0",
        "window-size": "0.1.0"
      }
    }
  }
}

M package.json => package.json +6 -12
@@ 1,6 1,6 @@
{
  "name": "tomato-sauce",
  "version": "1.0.0",
  "version": "2.0.0",
  "description": "Telnet based drawing functions and renderers",
  "main": "lib/tomato_sauce.js",
  "scripts": {


@@ 11,7 11,7 @@
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/rbdr/tomato-sauce.git"
    "url": "git+https://gitlab.com/rbdr/tomato-sauce.git"
  },
  "keywords": [
    "tomato",


@@ 20,20 20,14 @@
    "ansi",
    "colors"
  ],
  "author": "Rubén Beltrán del Río <ben@nsovocal.com>",
  "author": "Rubén Beltrán del Río <subscriptions@unlimited.pizza>",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/rbdr/tomato-sauce/issues"
  },
  "homepage": "https://github.com/rbdr/tomato-sauce#readme",
  "dependencies": {
    "getenv": "^0.6.0"
    "getenv": "^1.0.0"
  },
  "devDependencies": {
    "eslint": "^4.19.1",
    "eslint-config-hapi": "^11.0.0",
    "eslint-plugin-hapi": "^4.1.0",
    "jsdoc": "^3.5.5",
    "@hapi/eslint-plugin": "^5.1.0",
    "eslint": "^8.5.0",
    "jsdoc-to-markdown": "^4.0.1"
  }
}