diff --git a/.core/.cli/commands/electron/builder/actions.js b/.core/.cli/commands/electron/builder/actions.js
deleted file mode 100644
index 14004e06..00000000
--- a/.core/.cli/commands/electron/builder/actions.js
+++ /dev/null
@@ -1,364 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const run = require('gulp-run');
-const moment = require('moment');
-const op = require('object-path');
-const prettier = require('prettier').format;
-const handlebars = require('handlebars').compile;
-
-const timestamp = () => `[${chalk.magenta(moment().format('HH:mm:ss'))}]`;
-const msg = (...msg) => console.log(timestamp(), ...msg);
-
-const gulpOverride = `
-module.${chalk.cyan('exports')} = ${chalk.magenta('config')} => {
-    config.${chalk.cyan('dest')}.${chalk.cyan('electron')} = ${chalk.magenta(
-    "'build-electron'",
-)};
-    config.${chalk.cyan('dest')}.${chalk.cyan('static')} = ${chalk.magenta(
-    "'build-electron/app/public'",
-)};
-    config.${chalk.cyan('electron')} = {
-        ${chalk.cyan('config')}: {
-            ${chalk.cyan('width')}: ${chalk.white(1024)},
-            ${chalk.cyan('height')}: ${chalk.white(768)},
-            ${chalk.cyan('show')}: ${chalk.white('false')},
-            ${chalk.cyan('title')}: ${chalk.magenta("'App Title'")},
-            ${chalk.cyan('backgroundColor')}: ${chalk.magenta("'#000000'")},
-        },
-        ${chalk.cyan('devtools')}: ${chalk.white('true')},
-    };
-    config.${chalk.cyan('open')} = ${chalk.white('false')};
-
-    return ${chalk.magenta('config')};
-};
-`;
-
-/*
-const manifestOverride = `
-module.${chalk.cyan('exports')} = ${chalk.magenta('config')} => {
-    config.${chalk.cyan('contexts.components.mode')} = ${chalk.magenta(
-    "'sync'",
-)};
-    config.${chalk.cyan('contexts.common.mode')} = ${chalk.magenta("'sync'")};
-    config.${chalk.cyan('contexts.toolkit.mode')} = ${chalk.magenta("'sync'")};
-    config.${chalk.cyan('contexts.core.mode')} = ${chalk.magenta("'sync'")};
-
-    return ${chalk.magenta('config')};
-};
-`;
-*/
-
-let cwd;
-let gulpConfig;
-let manifestConfig;
-let reactiumConfig;
-
-module.exports = () => {
-    return {
-        setup: ({ action, props }) =>
-            new Promise(resolve => {
-                cwd = op.get(props, 'cwd');
-                reactiumConfig = require(path.join(
-                    cwd,
-                    '.core',
-                    'reactium-config.js',
-                ));
-
-                gulpConfig = reactiumConfig.build;
-                manifestConfig = reactiumConfig.manifest;
-
-                if (!op.has(gulpConfig, 'dest.electron')) {
-                    msg(
-                        `The following ${chalk.cyan(
-                            'gulp.config.override.js',
-                        )} values need to be set:`,
-                    );
-                    console.log('\n');
-                    console.log(gulpOverride);
-                    console.log(`${chalk.magenta('Action cancelled')}!`);
-                    console.log('\n');
-
-                    process.exit(0);
-                }
-
-                /*
-                if (
-                    op.get(manifestConfig, 'contexts.components.mode') !==
-                    'sync'
-                ) {
-                    msg(
-                        `The following ${chalk.cyan(
-                            'manifest.config.override.js',
-                        )} values need to be set:`,
-                    );
-                    console.log('\n');
-                    console.log(manifestOverride);
-                    console.log(`${chalk.magenta('Action cancelled')}!`);
-                    console.log('\n');
-
-                    process.exit(0);
-                }
-                */
-
-                resolve({ action, status: 200 });
-            }),
-
-        config: ({ action, props }) =>
-            new Promise(resolve => {
-                const configFile = path.join(
-                    cwd,
-                    gulpConfig.dest.electron,
-                    'app.config.js',
-                );
-
-                if (!fs.existsSync(configFile)) {
-                    msg('Generating', chalk.cyan('app.config.js') + '...');
-
-                    const appConfig = {
-                        port: op.get(gulpConfig, 'port'),
-                        electron: op.get(gulpConfig, 'electron'),
-                    };
-
-                    fs.ensureFileSync(configFile);
-
-                    const templateFile = path.join(
-                        __dirname,
-                        'template',
-                        'app.config.hbs',
-                    );
-
-                    const template = handlebars(
-                        fs.readFileSync(templateFile, 'utf-8'),
-                    )({
-                        config: String(
-                            prettier(JSON.stringify(appConfig, null, 4), {
-                                parser: 'json5',
-                            }),
-                        ).trim(),
-                    });
-
-                    fs.writeFileSync(configFile, template);
-                }
-
-                resolve({ action, status: 200 });
-            }),
-
-        build: ({ action, props }) =>
-            new Promise(resolve => {
-                msg('Building', chalk.cyan('app') + '...');
-                const cmd = new run.Command(
-                    `cross-env NODE_ENV=production gulp --color`,
-                    { verbosity: 0 },
-                );
-                setTimeout(
-                    () =>
-                        cmd.exec(null, () => resolve({ action, status: 200 })),
-                    1,
-                );
-            }),
-
-        compileCore: ({ action, props }) =>
-            new Promise(resolve => {
-                msg('Compiling', chalk.cyan('core') + '...');
-                const srcDir = path.join(cwd, '.core');
-                const outDir = path.join(
-                    cwd,
-                    op.get(gulpConfig, 'dest.build', 'build/.core'),
-                );
-                const cmd = new run.Command(
-                    `cross-env NODE_ENV=production babel "${srcDir}" --out-dir "${outDir}"`,
-                    { verbosity: 0 },
-                );
-                setTimeout(
-                    () =>
-                        cmd.exec(null, () => resolve({ action, status: 200 })),
-                    1,
-                );
-            }),
-
-        compileSrc: ({ action, props }) =>
-            new Promise(resolve => {
-                msg('Compiling', chalk.cyan('src') + '...');
-                const srcDir = path.join(cwd, 'src');
-                const outDir = path.join(
-                    cwd,
-                    op.get(gulpConfig, 'dest.buildSrc', 'build/src'),
-                );
-                const cmd = new run.Command(
-                    `cross-env NODE_ENV=production babel "${srcDir}" --out-dir "${outDir}"`,
-                    { verbosity: 0 },
-                );
-                setTimeout(
-                    () =>
-                        cmd.exec(null, () => resolve({ action, status: 200 })),
-                    1,
-                );
-            }),
-
-        static: ({ action, props }) =>
-            new Promise(resolve => {
-                // Clear output directory
-                fs.removeSync(
-                    path.join(
-                        cwd,
-                        op.get(
-                            gulpConfig,
-                            'dest.static',
-                            'build-electron/app/public',
-                        ),
-                    ),
-                );
-
-                const cmd = new run.Command(`gulp static --color`, {
-                    verbosity: 0,
-                });
-                setTimeout(
-                    () =>
-                        cmd.exec(null, () => resolve({ action, status: 200 })),
-                    1,
-                );
-            }),
-
-        main: ({ action, props }) =>
-            new Promise(resolve => {
-                const destFile = path.join(
-                    cwd,
-                    gulpConfig.dest.electron,
-                    'main.js',
-                );
-
-                if (!fs.existsSync(destFile)) {
-                    msg('Generating', chalk.cyan('main.js') + '...');
-
-                    const templateFile = path.join(
-                        __dirname,
-                        'template',
-                        'main.js',
-                    );
-
-                    fs.ensureFileSync(destFile);
-                    fs.copySync(templateFile, destFile);
-                }
-
-                resolve({ action, status: 200 });
-            }),
-
-        resources: ({ action, props }) =>
-            new Promise(resolve => {
-                const destDir = path.join(
-                    cwd,
-                    gulpConfig.dest.electron,
-                    'resources',
-                );
-
-                if (!fs.existsSync(destDir)) {
-                    msg(`Copying ${chalk.cyan('resources')}...`);
-                    const templateDir = path.join(
-                        __dirname,
-                        'template',
-                        'resources',
-                    );
-
-                    fs.ensureDirSync(destDir);
-                    fs.copySync(templateDir, destDir);
-                }
-
-                resolve({ action, status: 200 });
-            }),
-
-        package: ({ action, props }) =>
-            new Promise(resolve => {
-                const destFile = path.join(
-                    cwd,
-                    gulpConfig.dest.electron,
-                    'package.json',
-                );
-
-                if (!fs.existsSync(destFile)) {
-                    msg(`Generating ${chalk.cyan('package.json')}...`);
-
-                    const templateFile = path.join(
-                        __dirname,
-                        'template',
-                        'package.json',
-                    );
-
-                    fs.ensureFileSync(destFile);
-                    fs.copySync(templateFile, destFile);
-                }
-
-                resolve({ action, status: 200 });
-            }),
-
-        icon: ({ action, props }) =>
-            new Promise(resolve => {
-                msg(`Generating ${chalk.cyan('icons')}...`);
-
-                const shFile = path.join(
-                    cwd,
-                    gulpConfig.dest.electron,
-                    'resources',
-                    'icon_gen.sh',
-                );
-
-                const icon = path.join(
-                    cwd,
-                    gulpConfig.dest.electron,
-                    'resources',
-                    'icon.png',
-                );
-
-                const output = path.join(
-                    cwd,
-                    gulpConfig.dest.electron,
-                    'resources',
-                );
-
-                const cmd = new run.Command(
-                    `sh "${shFile}" "${icon}" "${output}"`,
-                    { verbosity: 0 },
-                );
-                cmd.exec(null, () => resolve({ action, status: 200 }));
-            }),
-
-        installElectron: ({ action, props }) =>
-            new Promise(resolve => {
-                msg(`Installing ${chalk.cyan('Electron')}...`);
-                let cmd = new run.Command(`npm install --save-dev electron`, {
-                    verbosity: 0,
-                });
-
-                setTimeout(
-                    () =>
-                        cmd.exec(null, () => resolve({ action, status: 200 })),
-                    1,
-                );
-            }),
-
-        install: ({ action, props }) =>
-            new Promise(resolve => {
-                msg(`Installing ${chalk.cyan('dependencies')}...`);
-                let cmd = new run.Command(
-                    `cd ${gulpConfig.dest.electron} && npm install`,
-                    { verbosity: 0 },
-                );
-
-                setTimeout(
-                    () =>
-                        cmd.exec(null, () => resolve({ action, status: 200 })),
-                    1,
-                );
-            }),
-
-        complete: ({ action }) =>
-            new Promise(resolve => {
-                setTimeout(() => {
-                    msg('Build', chalk.cyan('Complete') + '!');
-                    console.log('\n');
-                    resolve({ action, status: 200 });
-                }, 3000);
-            }),
-    };
-};
diff --git a/.core/.cli/commands/electron/builder/generator.js b/.core/.cli/commands/electron/builder/generator.js
deleted file mode 100644
index 5a3cb3d8..00000000
--- a/.core/.cli/commands/electron/builder/generator.js
+++ /dev/null
@@ -1,12 +0,0 @@
-const ActionSequence = require('action-sequence');
-
-module.exports = ({ action, props }) => {
-    const actions = require('./actions')();
-
-    return ActionSequence({
-        actions,
-        options: { props },
-    })
-        .then(success => success)
-        .catch(error => error);
-};
diff --git a/.core/.cli/commands/electron/builder/index.js b/.core/.cli/commands/electron/builder/index.js
deleted file mode 100644
index 39d7027b..00000000
--- a/.core/.cli/commands/electron/builder/index.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const generator = require('./generator');
-const path = require('path');
-const op = require('object-path');
-const mod = path.dirname(require.main.filename);
-const { error, message } = require(`${mod}/lib/messenger`);
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli electron-build
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'electron-build';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Command for building Reactium into an Electron app.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'electron-build canceled!';
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () =>
-    console.log(`
-Example:
-  $ arcli electron-build
-`);
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ opt, props }) =>
-    generator({ props })
-        .then(() => console.log(''))
-        .catch(err => console.log(err));
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/electron/builder/template/app.config.hbs b/.core/.cli/commands/electron/builder/template/app.config.hbs
deleted file mode 100644
index 76052ce5..00000000
--- a/.core/.cli/commands/electron/builder/template/app.config.hbs
+++ /dev/null
@@ -1,6 +0,0 @@
-// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-//   FILE GENERATED BY: $ arcli electron-build
-//   DONOT DIRECTLY EDIT
-// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-module.exports = {{{config}}};
diff --git a/.core/.cli/commands/electron/builder/template/main.js b/.core/.cli/commands/electron/builder/template/main.js
deleted file mode 100644
index 053279f7..00000000
--- a/.core/.cli/commands/electron/builder/template/main.js
+++ /dev/null
@@ -1,76 +0,0 @@
-// Get the process env.
-const env = process.env;
-
-const path = require('path');
-const { app, BrowserWindow } = require('electron');
-const config = require(path.join(__dirname, 'app.config'));
-
-let mainWindow;
-
-const createWindow = async () => {
-    // Create the browser window.
-    mainWindow = new BrowserWindow(config.electron.mainWindow);
-
-    // Show the window when ready and focus it
-    mainWindow.once('ready-to-show', () => {
-        setTimeout(() => {
-            mainWindow.show();
-            mainWindow.focus();
-            if (config.electron.devtools === true) {
-                mainWindow.webContents.openDevTools();
-            }
-        }, 1000);
-    });
-
-    // Emitted when the window is closed.
-    mainWindow.on('closed', function() {
-        mainWindow = null;
-    });
-
-    // Load the localhost of the app.
-    if (env.NODE_ENV === 'development') {
-        const port = config.port.browsersync || 3000;
-        mainWindow.loadURL(`http://localhost:${port}`);
-    } else {
-        const fs = require('fs');
-        const http = require('http');
-        const getPort = require('get-port');
-        const server = http.createServer((req, res) => {
-            if (req.url === '/') {
-                const rs = fs.createReadStream(
-                    path.join(__dirname, 'app', 'public', 'index.html'),
-                );
-                rs.pipe(res);
-            } else if (req.url.match(/^\/assets/)) {
-                const asset = req.url.replace(/^\/assets/, '');
-                const rs = fs.createReadStream(
-                    path.join(__dirname, 'app', 'public', 'assets', asset),
-                );
-                rs.pipe(res);
-            } else {
-                res.writeHead(404);
-                res.end();
-            }
-        });
-
-        const port = await getPort();
-        server.listen(port, () =>
-            mainWindow.loadURL(`http://localhost:${port}`),
-        );
-    }
-};
-
-app.on('ready', createWindow);
-
-// Quit when all windows are closed.
-app.on('window-all-closed', function() {
-    if (process.platform !== 'darwin') {
-        app.quit();
-    }
-});
-
-app.on('activate', function() {
-    if (mainWindow === null) {
-        createWindow();
-    }
-});
diff --git a/.core/.cli/commands/electron/builder/template/package.json b/.core/.cli/commands/electron/builder/template/package.json
deleted file mode 100644
index 291497a1..00000000
--- a/.core/.cli/commands/electron/builder/template/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "name": "reactium-electron",
-  "version": "0.0.1",
-  "description": "Electron app build with Reactium.",
-  "productName": "Reactium App",
-  "author": "Reactium LLC",
-  "main": "main.js",
-  "scripts": {
-    "start": "electron main.js",
-    "pack": "build --dir",
-    "dist": "build"
-  },
-  "build": {
-    "appId": "com.reactium.demo",
-    "directories": {
-      "buildResources": "resources",
-      "output": "release"
-    },
-    "dmg": {
-      "contents": [
-        {
-          "x": 110,
-          "y": 250
-        },
-        {
-          "x": 320,
-          "y": 250,
-          "type": "link",
-          "path": "/Applications"
-        }
-      ]
-    },
-    "linux": {
-      "target": [
-        "AppImage",
-        "deb"
-      ]
-    },
-    "win": {
-      "target": "squirrel",
-      "icon": "build/icon.ico"
-    }
-  },
-  "repository": "https://github.com/Atomic-Reactor/Reactium.git",
-  "keywords": [
-    "Electron",
-    "React",
-    "Reactium"
-  ],
-  "license": "CC0-1.0",
-  "devDependencies": {
-    "cross-env": "^5.2.0",
-    "electron": "^2.0.18",
-    "electron-builder": "^20.44.4"
-  },
-  "dependencies": {
-    "get-port": "^5.0.0",
-    "globby": "^9.2.0"
-  }
-}
diff --git a/.core/.cli/commands/electron/builder/template/package.json.hbs b/.core/.cli/commands/electron/builder/template/package.json.hbs
deleted file mode 100644
index 607dc521..00000000
--- a/.core/.cli/commands/electron/builder/template/package.json.hbs
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "name": "{{appName}}",
-  "version": "{{version}}",
-  "description": "{{description}}",
-  "productName": "{{productName}}",
-  "author": "{{author}}",
-  "main": "main.js",
-  "scripts": {
-    "start": "cross-env NODE_ENV=production electron main.js",
-    "pack": "build --dir",
-    "dist": "build"
-  },
-  "build": {
-    "appId": "{{appId}}",
-    "directories": {
-      "buildResources": "resources",
-      "output": "release"
-    },
-    "dmg": {
-      "contents": [
-        {
-          "x": 110,
-          "y": 250
-        },
-        {
-          "x": 320,
-          "y": 250,
-          "type": "link",
-          "path": "/Applications"
-        }
-      ]
-    },
-    "linux": {
-      "target": [
-        "AppImage",
-        "deb"
-      ]
-    },
-    "win": {
-      "target": "squirrel",
-      "icon": "build/icon.ico"
-    }
-  },
-  "repository": "https://github.com",
-  "keywords": [
-    "Electron",
-    "app"
-  ],
-  "license": "CC0-1.0",
-  "devDependencies": {
-    "cross-env": "^5.2.0",
-    "electron": "^2.0.18",
-    "electron-builder": "^20.44.4"
-  },
-  "dependencies": {
-    "get-port": "^5.0.0",
-    "globby": "^9.2.0"
-  }
-}
diff --git a/.core/.cli/commands/electron/builder/template/resources/icon.ico b/.core/.cli/commands/electron/builder/template/resources/icon.ico
deleted file mode 100644
index 1aea6b66..00000000
Binary files a/.core/.cli/commands/electron/builder/template/resources/icon.ico and /dev/null differ
diff --git a/.core/.cli/commands/electron/builder/template/resources/icon.png b/.core/.cli/commands/electron/builder/template/resources/icon.png
deleted file mode 100644
index 739f9fdc..00000000
Binary files a/.core/.cli/commands/electron/builder/template/resources/icon.png and /dev/null differ
diff --git a/.core/.cli/commands/electron/builder/template/resources/icon_gen.sh b/.core/.cli/commands/electron/builder/template/resources/icon_gen.sh
deleted file mode 100644
index 6602de64..00000000
--- a/.core/.cli/commands/electron/builder/template/resources/icon_gen.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/bash
-# Creates an icns file from a source image
-
-src_image="$1"
-if [ -z "$1" ]; then
-    echo "No source image was passed to this script"
-    exit 1
-fi
-
-output_path="$2"
-if [ -z "$1" ]; then
-    echo "No output path specified"
-    exit 1
-fi
-
-icns_name="icon"
-
-if [ "${src_image:(-3)}" != "png" ]; then
-    echo "Source image is not a PNG, making a converted copy..."
-    /usr/bin/sips -s format png "$src_image" --out "${src_image}.png"
-    if [ $? -ne 0 ]; then
-        echo "The source image could not be converted to PNG format."
-        exit 1
-    fi
-    src_image="${src_image}.png"
-fi
-
-iconset_path="${output_path}/${icns_name}.iconset"
-if [ -e "$iconset_path" ]; then
-    /bin/rm -r "$iconset_path"
-    if [ $? -ne 0 ]; then
-        echo "There is a pre-existing file/dir $iconset_path the could not be deleted"
-        exit 1
-    fi
-fi
-
-/bin/mkdir "$iconset_path"
-
-icon_file_list=(
-    "icon_16x16.png"
-    "icon_16x16@2x.png"
-    "icon_32x32.png"
-    "icon_32x32@2x.png"
-    "icon_128x128.png"
-    "icon_128x128@2x.png"
-    "icon_256x256.png"
-    "icon_256x256@2x.png"
-    "icon_512x512.png"
-    "icon_512x512@2x.png"
-    )
-
-icon_size=(
-    '16'
-    '32'
-    '32'
-    '64'
-    '128'
-    '256'
-    '256'
-    '512'
-    '512'
-    '1024'
-    )
-
-counter=0
-for a in ${icon_file_list[@]}; do
-    icon="${iconset_path}/${a}"
-    /bin/cp "$src_image" "$icon"
-    icon_size=${icon_size[$counter]}
-    /usr/bin/sips -z $icon_size $icon_size "$icon"
-    counter=$(($counter + 1))
-done
-
-echo "Creating .icns file from $iconset_path"
-/usr/bin/iconutil -c icns "$iconset_path"
-if [ $? -ne 0 ]; then
-    echo "There was an error creating the .icns file"
-    exit 1
-fi
-
-echo "Done"
-exit 0
diff --git a/.core/.cli/commands/electron/run/actions.js b/.core/.cli/commands/electron/run/actions.js
deleted file mode 100644
index 3784e705..00000000
--- a/.core/.cli/commands/electron/run/actions.js
+++ /dev/null
@@ -1,126 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const run = require('gulp-run');
-const op = require('object-path');
-const moment = require('moment');
-const { spawn } = require('child_process');
-
-const timestamp = () => `[${chalk.magenta(moment().format('HH:mm:ss'))}]`;
-const msg = (...msg) => console.log(timestamp(), ...msg);
-
-let cwd;
-let gulpConfig;
-let reactiumConfig;
-
-module.exports = () => {
-    let appUI;
-    let appE;
-    let tick = 0;
-
-    return {
-        setup: ({ action, params, props }) => {
-            cwd = op.get(props, 'cwd');
-            reactiumConfig = require(path.join(
-                cwd,
-                '.core',
-                'reactium-config.js',
-            ));
-
-            gulpConfig = reactiumConfig.build;
-
-            const buildDir = path.join(
-                cwd,
-                op.get(gulpConfig, 'dest.electron', 'build-electron'),
-            );
-
-            if (!fs.existsSync(buildDir)) {
-                msg(
-                    'Run the',
-                    `${chalk.cyan('$ arcli electron-build')}`,
-                    'command before continuing',
-                );
-                console.log('\n');
-                console.log(`${chalk.magenta('Action cancelled')}!`);
-                console.log('\n');
-
-                process.exit(0);
-            } else {
-                msg('Electron', chalk.cyan('initializing') + '...');
-                return Promise.resolve({ action, status: 200 });
-            }
-        },
-        reactium: ({ action, params, props }) =>
-            new Promise((resolve, reject) => {
-                msg('Reactium', chalk.cyan('building') + '...');
-
-                const { ui } = params;
-                const p = path.join(ui, 'gulpfile.js');
-                let launching = false;
-
-                appUI = spawn('gulp', ['local', '--gulpfile', p, '--color'], {
-                    env: { ...process.env, NODE_ENV: 'development' },
-                });
-
-                appUI.stderr.pipe(process.stderr);
-                appUI.stdout.pipe(process.stdout);
-                appUI.stdout.on('data', data => {
-                    if (!appE) {
-                        if (
-                            data.toString().indexOf('Compiled successfully') >
-                            -1
-                        ) {
-                            tick += 1;
-                        }
-                        if (data.toString().indexOf('UI External') > -1) {
-                            tick += 1;
-                        }
-
-                        if (tick < 2) {
-                            return;
-                        }
-
-                        if (launching === true) {
-                            return;
-                        }
-
-                        launching = true;
-
-                        setTimeout(
-                            () => msg('Launching', chalk.cyan('app') + '...'),
-                            500,
-                        );
-
-                        setTimeout(() => {
-                            msg('Launched', chalk.cyan('app') + '!');
-
-                            const { electron } = params;
-                            appE = spawn('electron', [electron], {
-                                env: {
-                                    ...process.env,
-                                    NODE_ENV: 'development',
-                                },
-                            });
-                            appE.stdout.pipe(process.stdout);
-                            appE.stderr.pipe(process.stderr);
-
-                            resolve({ action, status: 200 });
-                        }, 5000);
-                    }
-                });
-
-                process.on('SIGINT', () => {
-                    try {
-                        appUI.kill();
-                    } catch (err) {}
-
-                    try {
-                        appE.kill();
-                    } catch (err) {}
-
-                    process.exit(0);
-                });
-            }),
-    };
-};
diff --git a/.core/.cli/commands/electron/run/generator.js b/.core/.cli/commands/electron/run/generator.js
deleted file mode 100644
index 58f5acaf..00000000
--- a/.core/.cli/commands/electron/run/generator.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const ActionSequence = require('action-sequence');
-
-module.exports = ({ action, params, props }) => {
-    const actions = require('./actions')();
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            return success;
-        })
-        .catch(error => {
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/electron/run/index.js b/.core/.cli/commands/electron/run/index.js
deleted file mode 100644
index 146d85da..00000000
--- a/.core/.cli/commands/electron/run/index.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const op = require('object-path');
-const mod = path.dirname(require.main.filename);
-const { error, message } = require(`${mod}/lib/messenger`);
-
-const formatDestination = (val, props) => {
-    const { cwd } = props;
-
-    val = path.normalize(val);
-    val = String(val).replace(/^~\/|^\/cwd\/|^cwd\/|^cwd$/i, `${cwd}/`);
-    return path.normalize(val);
-};
-
-const NAME = 'electron-run';
-
-const DESC = 'Run the UI and Electron app locally';
-
-const CANCELED = 'Run canceled!';
-
-const HELP = () =>
-    console.log(`
-Example:
-  $ arcli electron-run
-  $ arcli electorn-run -e cwd/my/path -u cwd/other/path
-
-** Note: by default the ${chalk.cyan(
-        path.join(__dirname, '..', '..', '..', 'electron.js'),
-    )} and ${chalk.cyan(
-        path.join(__dirname, '..', '..', '..', 'gulpfile.js'),
-    )} are used.
-`);
-
-const FLAGS = ['electron', 'ui'];
-
-const FLAGS_TO_PARAMS = ({ opt = {} }) =>
-    FLAGS.reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? undefined : val;
-
-        if (val) {
-            obj[key] = val;
-        }
-
-        return obj;
-    }, {});
-
-const CONFORM = ({ input, props }) => {
-    const { cwd } = props;
-
-    let output = {};
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (String(key).toLowerCase()) {
-            case 'electron':
-            case 'ui':
-                output[key] = formatDestination(val, props);
-                break;
-
-            default:
-                output[key] = val;
-        }
-    });
-
-    return output;
-};
-
-const SCHEMA = ({ props }) => {
-    return {
-        properties: {
-            electron: {
-                description: chalk.white('Electron Path:'),
-                default: 'cwd/build-electron/main.js',
-            },
-            ui: {
-                description: chalk.white('UI Path:'),
-                default: 'cwd',
-            },
-        },
-    };
-};
-
-const ACTION = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-    const schema = SCHEMA({ props });
-    const ovr = FLAGS_TO_PARAMS({ opt });
-
-    prompt.override = ovr;
-    prompt.start();
-
-    return new Promise((resolve, reject) => {
-        prompt.get(schema, (err, input = {}) => {
-            if (err) {
-                prompt.stop();
-                reject(`${NAME} ${err.message}`);
-                return;
-            }
-
-            input = { ...ovr, ...input };
-
-            const params = CONFORM({ input, props });
-
-            resolve(params);
-        });
-    })
-        .then(params => {
-            console.log('');
-            return generator({ params, props });
-        })
-        .then(results => {
-            console.log('');
-        })
-        .catch(err => {
-            prompt.stop();
-            message(op.get(err, 'message', CANCELED));
-        });
-};
-
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option('-u, --ui [ui]', 'UI Path.')
-        .option('-e, --electron [electron]', 'Electron Path.')
-        .on('--help', HELP);
-
-module.exports = {
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/reactium/component/actions.js b/.core/.cli/commands/reactium/component/actions.js
deleted file mode 100644
index 71fe4f59..00000000
--- a/.core/.cli/commands/reactium/component/actions.js
+++ /dev/null
@@ -1,183 +0,0 @@
-const chalk = require('chalk');
-const path = require('path');
-const fs = require('fs-extra');
-const op = require('object-path');
-const zip = require('folder-zipper');
-const handlebars = require('handlebars').compile;
-const homedir = require('os').homedir();
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const generate = ({ action, params, props, templateFile, fileName }) => {
-        const { cwd } = props;
-        const { destination, command, name, overwrite } = params;
-
-        const filepath = path.normalize(path.join(destination, fileName));
-
-        const actionType = overwrite === true ? 'overwritting' : 'creating';
-
-        message(`${actionType} command ${command} ${chalk.cyan(name)}...`);
-
-        fs.ensureDirSync(path.normalize(destination));
-
-        // Template content
-        const template = path.normalize(
-            `${__dirname}/template/${templateFile}.hbs`,
-        );
-        const content = handlebars(fs.readFileSync(template, 'utf-8'))(params);
-
-        return new Promise((resolve, reject) => {
-            fs.writeFile(filepath, content, error => {
-                if (error) {
-                    reject(error.Error);
-                } else {
-                    resolve({ action, status: 200 });
-                }
-            });
-        });
-    };
-
-    return {
-        backup: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { destination, name } = params;
-
-            message(`backing up ${name} component...`);
-
-            const now = Date.now();
-            const backupDir = path.join(
-                homedir,
-                '.arcli',
-                cwd,
-                '.BACKUP',
-                'component',
-            );
-            const backupZip = path.normalize(`${backupDir}/${now}.${name}.zip`);
-
-            // Create the backup directory
-            fs.ensureDirSync(backupDir);
-
-            // Backup the component directory then empty the existing
-            return zip(destination, backupZip).then(() => {
-                fs.emptyDirSync(destination);
-                return { action, status: 200 };
-            });
-        },
-
-        create: ({ action, params, props }) => {
-            const { destination, name } = params;
-
-            message(`creating ${chalk.cyan('name')}...`);
-
-            return new Promise((resolve, reject) => {
-                fs.ensureDir(destination, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        functional: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: `index-${params.type}`,
-                fileName: 'index.js',
-            }),
-
-        class: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'index-class',
-                fileName: 'index.js',
-            }),
-
-        redux: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'index-redux',
-                fileName: 'index.js',
-            }),
-
-        subclass: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'index-class',
-                fileName: `${params.name}.js`,
-            }),
-
-        actions: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'actions',
-                fileName: 'actions.js',
-            }),
-
-        actionTypes: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'actionTypes',
-                fileName: 'actionTypes.js',
-            }),
-
-        reducers: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'reducers',
-                fileName: 'reducers.js',
-            }),
-
-        route: ({ action, params, props }) => {
-            if (Array.isArray(params.route)) {
-                params.route = JSON.stringify(params.route);
-            }
-
-            return generate({
-                action,
-                params,
-                props,
-                templateFile: 'route',
-                fileName: 'route.js',
-            });
-        },
-
-        services: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'services',
-                fileName: 'services.js',
-            }),
-
-        state: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'state',
-                fileName: 'state.js',
-            }),
-    };
-};
diff --git a/.core/.cli/commands/reactium/component/generator.js b/.core/.cli/commands/reactium/component/generator.js
deleted file mode 100644
index f1613a64..00000000
--- a/.core/.cli/commands/reactium/component/generator.js
+++ /dev/null
@@ -1,128 +0,0 @@
-const ora = require('ora');
-const path = require('path');
-const op = require('object-path');
-const ActionSequence = require('action-sequence');
-const mod = path.dirname(require.main.filename);
-
-module.exports = ({ params, props }) => {
-    const spinner = ora({
-        spinner: 'dots',
-        color: 'cyan',
-    });
-
-    spinner.start();
-
-    const actions = require('./actions')(spinner);
-
-    if (!op.get(params, 'overwrite', false)) {
-        delete actions.backup;
-    }
-
-    if (!op.get(params, 'redux', false)) {
-        const noredux = [
-            'redux',
-            'subclass',
-            'actions',
-            'actionTypes',
-            'reducers',
-            'state',
-        ];
-        noredux.forEach(exclude => {
-            delete actions[exclude];
-        });
-    }
-
-    const excludes = [
-        'actions',
-        'actionTypes',
-        'reducers',
-        'route',
-        'services',
-    ];
-    excludes.forEach(exclude => {
-        if (!op.get(params, exclude, false)) {
-            delete actions[exclude];
-        }
-    });
-
-    if (op.get(params, 'stylesheet', false)) {
-        try {
-            const styleActions = require('../style/actions')(spinner);
-            delete styleActions.backup;
-
-            actions['stylesheet'] = ({ action, params, props }) =>
-                ActionSequence({
-                    actions: styleActions,
-                    options: { params: params.stylesheet, props },
-                });
-        } catch (err) {
-            return Promise.reject(err);
-        }
-    }
-
-    if (op.get(params, 'plugin', false)) {
-        try {
-            const pluginActions = require('../plugin/actions')(spinner);
-            const pluginParams = {
-                destination: params.destination,
-                id: `${String(params.name).toUpperCase()}-PLUGIN`,
-                component: params.name,
-                order: 1000,
-                zone: [],
-            };
-
-            actions['plugin'] = ({ params, props }) =>
-                ActionSequence({
-                    actions: pluginActions,
-                    options: { params: pluginParams, props },
-                });
-        } catch (err) {
-            return Promise.reject(err);
-        }
-    }
-
-    if (op.get(params, 'test', false)) {
-        try {
-            const testActions = require('../test/actions')(spinner);
-            const testParams = {
-                destination: params.destination,
-                component: params.name,
-                from: op.get(params, 'redux', false)
-                    ? `./${params.name}`
-                    : './index',
-            };
-            actions['test'] = ({ params, props }) =>
-                ActionSequence({
-                    actions: testActions,
-                    options: { params: testParams, props },
-                });
-        } catch (err) {
-            return Promise.reject(err);
-        }
-    }
-
-    switch (params.type) {
-        case 'functional':
-        case 'hook':
-            delete actions.class;
-            break;
-
-        case 'class':
-            delete actions.functional;
-            break;
-    }
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('all actions complete!');
-            return success;
-        })
-        .catch(error => {
-            console.log(error);
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/component/index.js b/.core/.cli/commands/reactium/component/index.js
deleted file mode 100644
index 143aa955..00000000
--- a/.core/.cli/commands/reactium/component/index.js
+++ /dev/null
@@ -1,680 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const prettier = require('prettier');
-const fs = require('fs-extra');
-const path = require('path');
-const camelCase = require('camelcase');
-const decamelize = require('decamelize');
-const slugify = require('slugify');
-const _ = require('underscore');
-const generator = require('./generator');
-const op = require('object-path');
-const mod = path.dirname(require.main.filename);
-const pad = require(`${mod}/lib/pad`);
-
-const { error, message } = require(`${mod}/lib/messenger`);
-
-const { formatImport, topLevelStyles } = require('../style');
-
-const formatDestination = (val, props) => {
-    const { cwd } = props;
-
-    val = path.normalize(val);
-    val = String(val).replace(/^~\/|^\/cwd\/|^cwd\/|^cwd$/i, `${cwd}/`);
-    val = String(val).replace(
-        /^\/core\/|^core\/|^core/i,
-        `${cwd}/.core/components/`,
-    );
-    val = String(val).replace(
-        /^\/components\/|^components\/|^components$/i,
-        `${cwd}/src/app/components/`,
-    );
-    val = String(val).replace(
-        /^\/common-ui\/|^common-ui\/|^common-ui$/i,
-        `${cwd}/src/app/components/common-ui/`,
-    );
-
-    return path.normalize(val);
-};
-
-const formatName = val => {
-    if (val) {
-        val = String(val).replace(/[^a-zA-Z\s]/gm, '');
-        val = camelCase(val, { pascalCase: true });
-    }
-
-    return val;
-};
-
-const formatRoute = val => {
-    const specialChars = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ';
-    const specialReplace = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh';
-    const special = new RegExp(specialChars.split('').join('|'), 'g');
-
-    val = val.toLowerCase();
-    val = val.replace(special, c =>
-        specialReplace.charAt(specialChars.indexOf(c)),
-    );
-    val = slugify(val, { remove: /[*+~()'"!@]/g });
-
-    return val;
-};
-
-const overwritable = prompt => {
-    let overwrite;
-
-    try {
-        overwrite =
-            prompt.override['overwrite'] || prompt.history('overwrite').value;
-    } catch (err) {
-        overwrite = true;
-    }
-
-    overwrite = overwrite === '' ? true : overwrite;
-
-    return overwrite;
-};
-
-const formatID = prompt => {
-    let ID = op.get(prompt, 'override.ID', null);
-    ID = !ID ? op.get(prompt, 'override.name', null) : ID;
-
-    if (!ID) {
-        ID = prompt.history('name').value;
-    }
-
-    return decamelize(ID).toUpperCase();
-};
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli component
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'component';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Reactium: Create or replace a component.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Component creation canceled!';
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params }) => {
-    const { prompt } = props;
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${chalk.white('Proceed?')} ${chalk.cyan(
-                            '(Y/N):',
-                        )}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input) => {
-                let confirmed;
-
-                try {
-                    confirmed = input.confirmed;
-                } catch (err) {
-                    confirmed = false;
-                }
-
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    resolve(confirmed);
-                }
-            },
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) => {
-    const { cwd } = props;
-
-    let output = {};
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (String(key).toLowerCase()) {
-            case 'destination':
-                output[key] = formatDestination(val, props);
-                break;
-
-            case 'name':
-                key = String(key).toLowerCase();
-                output[key] = formatName(val);
-                break;
-
-            case 'redux':
-                output[key] = typeof val === 'string' ? false : val;
-                break;
-
-            case 'route':
-                if (typeof val === 'string') {
-                    val = _.compact(val.split(' '));
-                }
-                val = Array.isArray(val) ? val : [val];
-                output[key] = val.length < 1 ? false : val;
-                break;
-
-            case 'actions':
-            case 'actiontypes':
-            case 'reducers':
-            case 'services':
-                output[key] =
-                    typeof val === 'string' && val.toUpperCase() === 'Y'
-                        ? true
-                        : val;
-                break;
-
-            case 'inject':
-                output[key] = formatImport(val, props);
-                break;
-
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    if (output.redux === false) {
-        Object.entries(input).forEach(([key, val]) => {
-            switch (String(key).toLowerCase()) {
-                case 'actions':
-                case 'actiontypes':
-                case 'reducers':
-                case 'services':
-                    output[key] = false;
-                    break;
-            }
-        });
-    }
-
-    output.ID = op.get(output, 'ID', output.name);
-    output.ID = decamelize(output.ID).toUpperCase();
-
-    const dir = path.basename(output.destination).toLowerCase();
-    if (dir !== output.name.toLowerCase()) {
-        output.destination = path.join(output.destination, output.name);
-    }
-
-    // Set the style import statement
-    if (output.stylesheet === true) {
-        const stylesheetFile = path.normalize(
-            path.join(output.destination, '_style.scss'),
-        );
-
-        const importString = output.inject.map(filepath =>
-            path
-                .relative(filepath, stylesheetFile)
-                .replace(/^\..\//, '')
-                .replace('_style.scss', 'style'),
-        );
-
-        output.stylesheet = {
-            filename: '_style.scss',
-            filepath: stylesheetFile,
-            destination: output.destination,
-            name: 'style',
-            ext: '.scss',
-            overwrite: '',
-            inject: Array.from(output.inject),
-            importString: importString,
-        };
-    }
-
-    delete output.inject;
-
-    return output;
-};
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () => {
-    console.log('');
-    console.log('Example:');
-    console.log('');
-    console.log('  arcli component --type class --redux --route');
-    console.log('  arcli component --type function');
-    console.log('');
-};
-
-/**
- * SCHEMA Function
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA = ({ props }) => {
-    const { config, cwd, prompt } = props;
-
-    const types = op.get(config, 'reactium.types', []);
-    const typeSelections = types
-        .map((type, index) => {
-            return `\n\t    ${chalk.cyan(`${index + 1}.`)} ${chalk.white(
-                type,
-            )}`;
-        })
-        .join('');
-
-    const defaultDirectory = path.normalize('components/');
-
-    const styleList = topLevelStyles({ props });
-    const styleLen = String(styleList.length).length;
-    const styles = styleList
-        .map((file, index) => {
-            index += 1;
-            let i = chalk.cyan(pad(index, styleLen) + '.');
-            return `\n\t    ${i} ${chalk.white(file)}`;
-        })
-        .join('');
-
-    return {
-        properties: {
-            name: {
-                required: true,
-                message: ' Component name is required',
-                description: chalk.white('Component Name:'),
-            },
-            destination: {
-                description: chalk.white('Destination:'),
-                default: defaultDirectory,
-                required: true,
-                message: ' Input component destination',
-            },
-            overwrite: {
-                required: true,
-                pattern: /^y|n|Y|N/,
-                message: '',
-                description: `${chalk.white(
-                    'Overwrite existing component?',
-                )} ${chalk.cyan('(Y/N):')}`,
-                ask: () => {
-                    try {
-                        let dir =
-                            prompt.override['name'] ||
-                            prompt.history('name').value;
-                        let dest =
-                            prompt.override['destination'] ||
-                            prompt.history('destination').value;
-                        dest = path.join(dest, dir);
-                        dest = formatDestination(dest, props);
-
-                        return fs.existsSync(dest);
-                    } catch (err) {
-                        return false;
-                    }
-                },
-                before: val => {
-                    return String(val).toUpperCase() === 'Y';
-                },
-            },
-            type: {
-                required: true,
-                message: ` Select the component type: ${types.join(' | ')}`,
-                description: `${chalk.white(
-                    'Type:',
-                )} ${typeSelections}\n    ${chalk.white('Select:')}`,
-                before: val => {
-                    if (!isNaN(val)) {
-                        val = Number(String(val)) - 1;
-                        if (val >= types.length || val < 0) {
-                            return 'class';
-                        } else {
-                            return types[val];
-                        }
-                    }
-                },
-                ask: () => overwritable(prompt),
-            },
-            route: {
-                description: chalk.white('Route:'),
-                ask: () => {
-                    let type;
-
-                    try {
-                        type =
-                            prompt.override['type'] ||
-                            prompt.history('type').value;
-                    } catch (err) {
-                        type = 'class';
-                    }
-
-                    return type === 'class' && overwritable(prompt);
-                },
-                before: val => {
-                    const routes = val.split(' ') || [];
-                    return _.compact(routes.map(route => formatRoute(route)));
-                },
-            },
-            redux: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                description: `${chalk.white('Redux?')} ${chalk.cyan('(Y/N):')}`,
-                required: true,
-                ask: () => {
-                    let type;
-
-                    try {
-                        type =
-                            prompt.override['type'] ||
-                            prompt.history('type').value;
-                    } catch (err) {
-                        type = 'class';
-                    }
-
-                    return type === 'class' && overwritable(prompt);
-                },
-                before: val => {
-                    return String(val).toUpperCase() === 'Y';
-                },
-            },
-            actions: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                description: `${chalk.white('Actions?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => {
-                    try {
-                        return (
-                            prompt.override['redux'] ||
-                            (prompt.history('redux').value &&
-                                overwritable(prompt))
-                        );
-                    } catch (err) {
-                        return false;
-                    }
-                },
-                before: val => {
-                    return String(val).toUpperCase() === 'Y';
-                },
-            },
-            actionTypes: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                description: `${chalk.white('Actions Types?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => {
-                    try {
-                        return (
-                            prompt.override['redux'] ||
-                            (prompt.history('redux').value &&
-                                overwritable(prompt))
-                        );
-                    } catch (err) {
-                        return false;
-                    }
-                },
-                before: val => {
-                    return String(val).toUpperCase() === 'Y';
-                },
-            },
-            reducers: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                description: `${chalk.white('Reducers?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => {
-                    try {
-                        return (
-                            prompt.override['redux'] ||
-                            (prompt.history('redux').value &&
-                                overwritable(prompt))
-                        );
-                    } catch (err) {
-                        return false;
-                    }
-                },
-                before: val => {
-                    return String(val).toUpperCase() === 'Y';
-                },
-            },
-            plugin: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                description: `${chalk.white('Plugin?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => overwritable(prompt),
-                before: val => {
-                    return String(val).toUpperCase() === 'Y';
-                },
-            },
-            services: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                description: `${chalk.white('Services?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => overwritable(prompt),
-                before: val => {
-                    return String(val).toUpperCase() === 'Y';
-                },
-            },
-            stylesheet: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                message: ' Add a style sheet?',
-                description: `${chalk.white('Stylesheet?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => overwritable(prompt),
-                before: val => {
-                    return String(val).toUpperCase() === 'Y';
-                },
-            },
-            inject: {
-                pattern: /[0-9\s]/,
-                description: `${chalk.white(
-                    'Import stylesheet to:',
-                )} ${styles}\n    ${chalk.white('Select:')}`,
-                required: true,
-                message: 'Select a number or list of numbers. Example: 1 2 3',
-                ask: () => {
-                    try {
-                        return (
-                            prompt.override['stylesheet'] ||
-                            (prompt.history('stylesheet').value &&
-                                overwritable(prompt))
-                        );
-                    } catch (err) {
-                        return false;
-                    }
-                },
-            },
-            test: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                description: `${chalk.white('Test?')} ${chalk.cyan('(Y/N):')}`,
-                ask: () => overwritable(prompt),
-                before: val => {
-                    return String(val).toUpperCase() === 'Y';
-                },
-            },
-        },
-    };
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    const ovr = {};
-    const schema = SCHEMA({ props });
-    Object.keys(schema.properties).forEach(key => {
-        let k = key;
-
-        const val = op.get(opt, k, undefined);
-
-        if (typeof val === 'function') {
-            val = undefined;
-        }
-
-        if (val) {
-            ovr[key] = val;
-        }
-    });
-
-    if (op.get(opt, 'reduxAll', false) === true) {
-        const reduxParams = ['redux', 'actions', 'actionTypes', 'reducers'];
-        reduxParams.forEach(k => {
-            ovr[k] = true;
-        });
-    }
-
-    if (op.get(ovr, 'redux', false) === true) {
-        ovr['type'] = 'class';
-    }
-
-    prompt.override = ovr;
-    prompt.start();
-    prompt.get(schema, (err, input) => {
-        // Keep this conditional as the first line in this function.
-        // Why? because you will get a js error if you try to set or use anything related to the input object.
-        if (err) {
-            prompt.stop();
-            error(`${NAME} ${err.message}`);
-            return;
-        }
-
-        input['ID'] = op.get(opt, 'ID', undefined);
-
-        const params = CONFORM({ input, props });
-        const { overwrite } = params;
-
-        // Exit if overwrite or confirm !== true
-        if (typeof overwrite === 'boolean' && !overwrite) {
-            prompt.stop();
-            message(CANCELED);
-            return;
-        }
-
-        message(`A component will be created with the following options:`);
-        const preflight = { ...params };
-
-        console.log(
-            prettier.format(JSON.stringify(preflight), {
-                parser: 'json-stringify',
-            }),
-        );
-
-        CONFIRM({ props, params })
-            .then(() => {
-                console.log('');
-
-                generator({ params, props }).then(success => {
-                    console.log('');
-                });
-            })
-            .catch(err => {
-                prompt.stop();
-                message(CANCELED);
-            });
-    });
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) => {
-    const { config } = props;
-    const types = op.get(config, 'reactium.types', []);
-
-    return program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option('-r, --redux-all [reduxAll]', 'Include all Redux files.')
-        .option('-n, --name [name]', 'Component name.')
-        .option(
-            '-d, --destination [destination]',
-            'Component parent directory.',
-        )
-        .option('-o, --overwrite [overwrite]', 'Overwrite existing component.')
-        .option('-t, --type [type]', `Component type: ${types.join(' | ')}.`)
-        .option('--redux [redux]', 'Create Redux Class component.')
-        .option('--route [route]', 'Include route.js file.')
-        .option('--actions [actions]', 'Include Redux actions.js file.')
-        .option(
-            '--actionTypes [actionTypes]',
-            'Include Redux actionTypes.js file.',
-        )
-        .option('--reducers [reducers]', 'Include Redux reducers.js file.')
-        .option('--plugin [plugin]', 'Include plugin.js file.')
-        .option('--services [services]', 'Include services.js file.')
-        .option('--stylesheet [stylesheet]', 'Include style.scss file.')
-        .on('--help', HELP);
-};
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    ACTION,
-    CONFIRM,
-    CONFORM,
-    COMMAND,
-    NAME,
-    formatDestination,
-    formatName,
-    formatRoute,
-};
diff --git a/.core/.cli/commands/reactium/component/template/actionTypes.hbs b/.core/.cli/commands/reactium/component/template/actionTypes.hbs
deleted file mode 100644
index 0ff42f04..00000000
--- a/.core/.cli/commands/reactium/component/template/actionTypes.hbs
+++ /dev/null
@@ -1,3 +0,0 @@
-export default {
-    {{ID}}_LOAD: Symbol('{{ID}}_LOAD'),
-};
diff --git a/.core/.cli/commands/reactium/component/template/actions.hbs b/.core/.cli/commands/reactium/component/template/actions.hbs
deleted file mode 100644
index d9d08b29..00000000
--- a/.core/.cli/commands/reactium/component/template/actions.hbs
+++ /dev/null
@@ -1,10 +0,0 @@
-import deps from 'dependencies';
-
-export default {
-    load: data => dispatch => {
-        return dispatch({
-            type: deps().actionTypes.{{ID}}_LOAD,
-            data,
-        });
-    },
-};
diff --git a/.core/.cli/commands/reactium/component/template/index-class.hbs b/.core/.cli/commands/reactium/component/template/index-class.hbs
deleted file mode 100644
index 1000a78a..00000000
--- a/.core/.cli/commands/reactium/component/template/index-class.hbs
+++ /dev/null
@@ -1,29 +0,0 @@
-import React, { Component } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: {{name}}
- * -----------------------------------------------------------------------------
- */
-export default class {{name}} extends Component {
-    static defaultProps = {};
-
-    constructor(props) {
-        super(props);
-        this.state = {};
-    }
-    {{#unless route}}
-    {{#if actions}}
-
-    componentDidMount() {}
-
-    {{/if}}
-    {{/unless}}
-    render() {
-        return (
-            <>
-                {{name}}
-            </>
-        );
-    }
-}
diff --git a/.core/.cli/commands/reactium/component/template/index-functional.hbs b/.core/.cli/commands/reactium/component/template/index-functional.hbs
deleted file mode 100644
index d4c81280..00000000
--- a/.core/.cli/commands/reactium/component/template/index-functional.hbs
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * Functional Component: {{name}}
- * -----------------------------------------------------------------------------
- */
-const {{name}} = props => {
-    return (
-        <>
-            {{name}}
-        </>
-    );
-};
-
-export default {{name}};
diff --git a/.core/.cli/commands/reactium/component/template/index-hook.hbs b/.core/.cli/commands/reactium/component/template/index-hook.hbs
deleted file mode 100644
index f3107499..00000000
--- a/.core/.cli/commands/reactium/component/template/index-hook.hbs
+++ /dev/null
@@ -1,91 +0,0 @@
-import _ from 'underscore';
-import cn from 'classnames';
-import op from 'object-path';
-import PropTypes from 'prop-types';
-import React, {
-    forwardRef,
-    useImperativeHandle,
-    useEffect,
-    useLayoutEffect as useWindowEffect,
-    useRef,
-    useState,
-} from 'react';
-
-// Server-Side Render safe useLayoutEffect (useEffect when node)
-const useLayoutEffect = typeof window !== 'undefined' ? useWindowEffect : useEffect;
-
-const ENUMS = {};
-
-/**
- * -----------------------------------------------------------------------------
- * Hook Component: {{name}}
- * -----------------------------------------------------------------------------
- */
-let {{name}} = ({ children, ...props }, ref) => {
-
-    // Refs
-    const containerRef = useRef();
-    const stateRef = useRef({
-        ...props,
-    });
-
-    // State
-    const [, setNewState] = useState(stateRef.current);
-
-    // Internal Interface
-    const setState = newState => {
-
-        // Update the stateRef
-        stateRef.current = {
-            ...stateRef.current,
-            ...newState,
-        };
-
-        // Trigger useEffect()
-        setNewState(stateRef.current);
-    };
-
-    const cx = () => {
-        const { className, namespace } = stateRef.current;
-        return cn({ [className]: !!className, [namespace]: !!namespace });
-    };
-
-    // Side Effects
-    useEffect(() => setState(props), Object.values(props));
-
-    // Renderer
-    const render = () => {
-
-        return (
-            <div ref={containerRef} className={cx()}>
-                {{name}}
-            </div>
-        );
-    };
-
-    // External Interface
-    useImperativeHandle(ref, () => ({
-        container: containerRef.current,
-        ref,
-        setState,
-        state: stateRef.current,
-    }));
-
-    // Render
-    return render();
-};
-
-{{name}} = forwardRef({{name}});
-
-{{name}}.ENUMS = ENUMS;
-
-{{name}}.propTypes = {
-    className: PropTypes.string,
-    namespace: PropTypes.string,
-};
-
-{{name}}.defaultProps = {
-    namespace: 'ui-component',
-};
-
-export { {{name}} as default };
diff --git a/.core/.cli/commands/reactium/component/template/index-redux.hbs b/.core/.cli/commands/reactium/component/template/index-redux.hbs
deleted file mode 100644
index 715b7524..00000000
--- a/.core/.cli/commands/reactium/component/template/index-redux.hbs
+++ /dev/null
@@ -1,20 +0,0 @@
-import { connect } from 'react-redux';
-import {{name}} from './{{name}}';
-import deps from 'dependencies';
-
-/**
- * -----------------------------------------------------------------------------
- * Inject Redux State and Actions into React Component: {{name}}
- * -----------------------------------------------------------------------------
- */
-const mapStateToProps = state => ({
-    ...state.{{name}},
-});
-
-const mapDispatchToProps = dispatch => ({
-    {{#if actions}}
-    load: (data) => dispatch(deps().actions.{{name}}.load(data)),
-    {{/if}}
-});
-
-export default connect(mapStateToProps, mapDispatchToProps)({{name}});
diff --git a/.core/.cli/commands/reactium/component/template/reducers.hbs b/.core/.cli/commands/reactium/component/template/reducers.hbs
deleted file mode 100644
index 4837d018..00000000
--- a/.core/.cli/commands/reactium/component/template/reducers.hbs
+++ /dev/null
@@ -1,16 +0,0 @@
-import deps from 'dependencies';
-
-export default (state = {}, action) => {
-
-    let newState;
-
-    switch (action.type) {
-
-        case deps().actionTypes.{{ID}}_LOAD:
-            newState = { ...state, ...action.data };
-            return newState;
-
-        default:
-            return state;
-    }
-};
diff --git a/.core/.cli/commands/reactium/component/template/route.hbs b/.core/.cli/commands/reactium/component/template/route.hbs
deleted file mode 100644
index 41a89220..00000000
--- a/.core/.cli/commands/reactium/component/template/route.hbs
+++ /dev/null
@@ -1,11 +0,0 @@
-import {{name}} from './index';
-import deps from 'dependencies';
-
-export default {
-    path: {{{route}}},
-    exact: true,
-    component: {{name}},
-    {{#if actions}}
-    load: (params, search) => deps().actions.{{name}}.load({ params, search }),
-    {{/if}}
-};
diff --git a/.core/.cli/commands/reactium/component/template/services.hbs b/.core/.cli/commands/reactium/component/template/services.hbs
deleted file mode 100644
index 9a43bea2..00000000
--- a/.core/.cli/commands/reactium/component/template/services.hbs
+++ /dev/null
@@ -1,9 +0,0 @@
-const fetch = () => {
-    return new Promise((resolve, reject) => {
-        setTimeout(() => { resolve({ some: 'data' }); }, 500);
-    });
-};
-
-export default {
-    fetch,
-};
diff --git a/.core/.cli/commands/reactium/component/template/state.hbs b/.core/.cli/commands/reactium/component/template/state.hbs
deleted file mode 100644
index 40dfd8d1..00000000
--- a/.core/.cli/commands/reactium/component/template/state.hbs
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * {{name}} Initial State
- */
-export default {
-    key: 'value',
-
-    // do not persist to local storage (default)
-    // see https://www.npmjs.com/package/redux-local-persist
-    persist: false,
-};
diff --git a/.core/.cli/commands/reactium/empty/actions.js b/.core/.cli/commands/reactium/empty/actions.js
deleted file mode 100644
index 8b3c305f..00000000
--- a/.core/.cli/commands/reactium/empty/actions.js
+++ /dev/null
@@ -1,131 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    return {
-        style: ({ action, params, props }) => {
-            const { style } = params;
-
-            if (style) {
-                const { cwd } = props;
-
-                const mainStyleSheet = path.normalize(
-                    `${cwd}/src/assets/style/style.scss`,
-                );
-                const toolkitStyleSheet = path.normalize(
-                    `${cwd}/src/assets/style/toolkit.scss`,
-                );
-
-                const scssDir = path.normalize(`${cwd}/src/assets/style/_scss`);
-
-                if (fs.existsSync(mainStyleSheet)) {
-                    fs.writeFileSync(mainStyleSheet, '\n// Styles\n\n');
-                }
-
-                if (fs.existsSync(toolkitStyleSheet)) {
-                    fs.writeFileSync(
-                        toolkitStyleSheet,
-                        '\n// Toolkit Specific Styles\n\n',
-                    );
-                }
-
-                fs.emptyDirSync(scssDir);
-            }
-
-            return Promise.resolve({ action, status: 200 });
-        },
-        manifest: ({ action, params, props }) => {
-            const { toolkit } = params;
-
-            if (toolkit) {
-                message(`Updating ${chalk.cyan('toolkit manifest')}...`);
-
-                const { cwd } = props;
-
-                const manifestFile = path.normalize(
-                    `${cwd}/src/app/toolkit/index.js`,
-                );
-
-                let cont = fs.readFileSync(manifestFile);
-                cont = String(cont).replace(
-                    /menu: {((.|\n|\r)*)},/,
-                    'menu: {},',
-                );
-
-                fs.writeFileSync(manifestFile, cont);
-            }
-
-            return Promise.resolve({ action, status: 200 });
-        },
-        empty: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { demo, font, images, toolkit } = params;
-
-            if (font) {
-                message(`Removing ${chalk.cyan('font assets')}...`);
-
-                const fontExcludes = [];
-                const fontPath = path.normalize(`${cwd}/src/assets/fonts`);
-
-                fs.readdirSync(fontPath)
-                    .filter(file => Boolean(!fontExcludes.includes(file)))
-                    .forEach(file =>
-                        fs.removeSync(path.normalize(`${fontPath}/${file}`)),
-                    );
-            }
-
-            if (images) {
-                message(`Removing ${chalk.cyan('image assets')}...`);
-
-                const imageExcludes = ['atomic-reactor-logo.svg'];
-                const imagePath = path.normalize(`${cwd}/src/assets/images`);
-
-                fs.readdirSync(imagePath)
-                    .filter(file => Boolean(!imageExcludes.includes(file)))
-                    .forEach(file =>
-                        fs.removeSync(path.normalize(`${imagePath}/${file}`)),
-                    );
-            }
-
-            if (demo) {
-                message(`Removing ${chalk.cyan('demo components')}...`);
-
-                const demoPaths = [
-                    path.normalize(`${cwd}/src/app/components/Demo`),
-                ].forEach(p => fs.removeSync(p));
-            }
-
-            if (toolkit) {
-                message(`Removing ${chalk.cyan('toolkit elements')}...`);
-
-                const toolkitPath = path.normalize(`${cwd}/src/app/toolkit`);
-                const toolkitExclude = ['index.js', 'overview'];
-
-                fs.readdirSync(toolkitPath)
-                    .filter(file => Boolean(!toolkitExclude.includes(file)))
-                    .concat([
-                        path.normalize(
-                            `${cwd}/src/app/components/common-ui/form`,
-                        ),
-                        path.normalize(
-                            `${cwd}/src/app/components/common-ui/Icon`,
-                        ),
-                    ])
-                    .forEach(file =>
-                        fs.removeSync(path.normalize(`${toolkitPath}/${file}`)),
-                    );
-            }
-
-            return Promise.resolve({ action, status: 200 });
-        },
-    };
-};
diff --git a/.core/.cli/commands/reactium/empty/generator.js b/.core/.cli/commands/reactium/empty/generator.js
deleted file mode 100644
index 54634231..00000000
--- a/.core/.cli/commands/reactium/empty/generator.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-const spinner = ora({
-    spinner: 'dots',
-    color: 'cyan',
-});
-
-const actions = require('./actions')(spinner);
-
-module.exports = ({ params, props }) => {
-    spinner.start();
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/empty/index.js b/.core/.cli/commands/reactium/empty/index.js
deleted file mode 100644
index fed6a47e..00000000
--- a/.core/.cli/commands/reactium/empty/index.js
+++ /dev/null
@@ -1,203 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const mod = path.dirname(require.main.filename);
-const { error, message } = require(`${mod}/lib/messenger`);
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli reactium empty
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'empty';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Reactium: Remove Reactium demo pages, components, and toolkit.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Reactium empty canceled!';
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params }) => {
-    const { prompt } = props;
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${chalk.white(
-                            'This is a destructive operation. Are you sure?',
-                        )} ${chalk.cyan('(Y/N):')}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input) => {
-                let confirmed;
-
-                try {
-                    confirmed = input.confirmed;
-                } catch (err) {
-                    confirmed = false;
-                }
-
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    resolve(confirmed);
-                }
-            },
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) => {
-    const { cwd } = props;
-
-    let output = {};
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    if (!Object.entries(output).length) {
-        output = {
-            demo: true,
-            font: true,
-            images: true,
-            style: true,
-            toolkit: true,
-        };
-    }
-
-    return output;
-};
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () => {
-    console.log('');
-    console.log('Usage:');
-    console.log('');
-    console.log(' Keep the default toolkit:');
-    console.log('  $ arcli reactium empty --no-toolkit');
-    console.log('');
-    console.log(' Keep the demo site:');
-    console.log('  $ arcli reactium empty --no-demo');
-    console.log('');
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    const ovr = ['demo', 'font', 'images', 'style', 'toolkit'].reduce(
-        (obj, key) => {
-            let val = opt[key];
-            val = typeof val === 'function' ? null : val;
-            if (val) {
-                obj[key] = val;
-            }
-            return obj;
-        },
-        {},
-    );
-
-    const params = CONFORM({ input: ovr, props });
-
-    CONFIRM({ props, params })
-        .then(() => {
-            console.log('');
-            generator({ params, props }).then(success => {
-                console.log('');
-            });
-        })
-        .catch(err => {
-            prompt.stop();
-            message(CANCELED);
-        });
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option('-D, --demo', 'Empty the demo.')
-        .option('-T, --toolkit', 'Empty toolkit elements.')
-        .option('-S, --style', 'Empty ~/src/assets/style/style.scss file.')
-        .option('-F, --font', 'Empty ~/src/assets/fonts directory.')
-        .option('-I, --images', 'Empty ~/src/assets/images directory.')
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    ACTION,
-    CONFIRM,
-    CONFORM,
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/reactium/icons/actions.js b/.core/.cli/commands/reactium/icons/actions.js
deleted file mode 100644
index 450266d0..00000000
--- a/.core/.cli/commands/reactium/icons/actions.js
+++ /dev/null
@@ -1,92 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const op = require('object-path');
-const prettier = require('prettier').format;
-const handlebars = require('handlebars').compile;
-const cc = require('camelcase');
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    let svgs = {};
-
-    return {
-        scan: ({ action, params, props }) => {
-            const { source } = params;
-
-            message(
-                `Scanning icon file ${chalk.cyan(path.basename(source))}...`,
-            );
-
-            const filePath = path.normalize(source);
-            const icons = require(filePath).icons;
-
-            svgs = icons.reduce((obj, item) => {
-                const id = cc(op.get(item, 'properties.name'), {
-                    pascalCase: true,
-                });
-                obj[id] = { paths: op.get(item, 'icon.paths'), id };
-
-                return obj;
-            }, {});
-
-            return Promise.resolve({ action, status: 200 });
-        },
-
-        create: ({ action, params, props }) => {
-            const { destination, name } = params;
-            const dir = path.normalize(path.join(destination, 'svg'));
-
-            message(`Creating ${chalk.cyan('icons')}...`);
-
-            // Template content
-            const template = path.normalize(`${__dirname}/template/svg.hbs`);
-
-            Object.values(svgs).forEach(({ id, paths }) => {
-                const content = handlebars(fs.readFileSync(template, 'utf8'))({
-                    name,
-                    paths,
-                    id,
-                });
-
-                const filepath = path.join(dir, `${id}.js`);
-
-                fs.ensureFileSync(filepath);
-                fs.writeFileSync(filepath, content);
-            });
-
-            return Promise.resolve({ action, status: 200 });
-        },
-
-        index: ({ action, params, props }) => {
-            const { destination, name } = params;
-            const dir = path.normalize(path.join(destination, name));
-
-            message(`Indexing ${chalk.cyan(name)}...`);
-
-            // Template content
-            const template = path.normalize(`${__dirname}/template/index.hbs`);
-
-            const icons = Object.keys(svgs).map(name => {
-                return { id: name, path: `./svgs/${name}` };
-            });
-
-            const content = handlebars(fs.readFileSync(template, 'utf8'))({
-                icons,
-            });
-
-            const filepath = path.normalize(path.join(dir, 'index.js'));
-
-            fs.ensureFileSync(filepath);
-            fs.writeFileSync(filepath, content);
-
-            return Promise.resolve({ action, status: 200 });
-        },
-    };
-};
diff --git a/.core/.cli/commands/reactium/icons/generator.js b/.core/.cli/commands/reactium/icons/generator.js
deleted file mode 100644
index 1abcc105..00000000
--- a/.core/.cli/commands/reactium/icons/generator.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-module.exports = ({ action, params, props }) => {
-    const spinner = ora({
-        spinner: 'dots',
-        color: 'cyan',
-    });
-
-    spinner.start();
-
-    const actions = require('./actions')(spinner);
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/icons/index.js b/.core/.cli/commands/reactium/icons/index.js
deleted file mode 100644
index 57404cbd..00000000
--- a/.core/.cli/commands/reactium/icons/index.js
+++ /dev/null
@@ -1,237 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const path = require('path');
-const chalk = require('chalk');
-const _ = require('underscore');
-const op = require('object-path');
-const prettier = require('prettier');
-const camelcase = require('camelcase');
-const generator = require('./generator');
-const mod = path.dirname(require.main.filename);
-const { error, message } = require(`${mod}/lib/messenger`);
-
-const formatDestination = (val, props) => {
-    const { cwd } = props;
-
-    val = path.normalize(val);
-
-    val = String(val).replace(/^\/cwd\/|^cwd\/|^cwd$/i, `${cwd}/`);
-    val = String(val).replace(
-        /^\/icon|^\/icon\/|^icon\/|^icon$/i,
-        `${cwd}/src/app/components/common-ui/Icon/`,
-    );
-    val = String(val).replace(
-        /^\/components\/|^components\/|^components$/i,
-        `${cwd}/src/app/components/`,
-    );
-    val = String(val).replace(
-        /^\/common-ui\/|^common-ui\/|^common-ui$/i,
-        `${cwd}/src/app/components/common-ui/`,
-    );
-
-    return path.normalize(val);
-};
-
-const NAME = 'icons';
-
-const DESC = 'Reactium: Import icons from an Icomoon selection file.';
-
-const CANCELED = 'Action canceled!';
-
-const CONFORM = ({ input, props }) =>
-    Object.keys(input).reduce((obj, key) => {
-        let val = input[key];
-        switch (key) {
-            case 'destination':
-                val = path.join(
-                    val,
-                    camelcase(input.name, { pascalCase: true }),
-                );
-                obj[key] = formatDestination(val, props);
-                break;
-
-            case 'source':
-                obj[key] = formatDestination(val, props);
-                break;
-
-            default:
-                obj[key] = val;
-                break;
-        }
-
-        return obj;
-    }, {});
-
-const CONFIRM = ({ props, params, msg }) => {
-    const { prompt } = props;
-
-    msg = msg || chalk.white('Proceed?');
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${msg} ${chalk.cyan('(Y/N):')}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input = {}) => {
-                const confirmed = op.get(input, 'confirmed', false);
-                if (error || confirmed === false) {
-                    console.log('');
-                    reject(error);
-                } else {
-                    params['confirmed'] = true;
-                    console.log('');
-                    resolve(params);
-                }
-            },
-        );
-    });
-};
-
-const HELP = props =>
-    console.log(`
-Example:
-  $ arcli icon-import -d common-ui/Icon/icons.js
-
-When specifying the [${chalk.cyan('-d')}, ${chalk.cyan(
-        '--destination',
-    )}] or [${chalk.cyan('-s')}, ${chalk.cyan(
-        '--source',
-    )}] value you can use the following short cuts:
-  ${chalk.cyan('components')} ${chalk.magenta('→')} ${chalk.cyan(
-        path.normalize(props.cwd + '/src/app/components'),
-    )} directory.
-  ${chalk.cyan('common-ui ')} ${chalk.magenta('→')} ${chalk.cyan(
-        path.normalize(props.cwd + '/src/app/components/common-ui'),
-    )} directory.
-  ${chalk.cyan('icon      ')} ${chalk.magenta('→')} ${chalk.cyan(
-        path.normalize(props.cwd + '/src/app/components/common-ui/Icon'),
-    )} directory.
-  ${chalk.cyan('cwd       ')} ${chalk.magenta('→')} ${chalk.cyan(
-        path.normalize(props.cwd),
-    )} directory.
-`);
-
-const FLAGS = ['destination', 'name', 'source'];
-
-const FLAGS_TO_PARAMS = ({ opt = {} }) =>
-    FLAGS.reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? undefined : val;
-
-        if (val) {
-            obj[key] = val;
-        }
-
-        return obj;
-    }, {});
-
-const PREFLIGHT = ({ params }) => {
-    const msg =
-        'A new icon package will be create witht the following options:';
-    const preflight = _.pick(params, ...Object.keys(params).sort());
-
-    message(msg);
-
-    console.log(
-        prettier.format(JSON.stringify(preflight), {
-            parser: 'json-stringify',
-        }),
-    );
-};
-
-const SCHEMA = () => {
-    //const { cwd, prompt } = props;
-
-    return {
-        properties: {
-            name: {
-                required: true,
-                message: ' Name is required',
-                description: chalk.white('Name:'),
-            },
-            destination: {
-                required: true,
-                message: ' Destination is required',
-                description: chalk.white('Destination:'),
-                default: '/icon',
-            },
-            source: {
-                required: true,
-                message: ' Source is required',
-                description: chalk.white('Source:'),
-            },
-        },
-    };
-};
-
-const ACTION = ({ opt, props }) => {
-    console.log('');
-
-    let params;
-    const { cwd, prompt } = props;
-    const schema = SCHEMA({ props });
-    const ovr = FLAGS_TO_PARAMS({ opt });
-
-    prompt.override = ovr;
-    prompt.start();
-
-    return new Promise((resolve, reject) => {
-        prompt.get(schema, (err, input = {}) => {
-            if (err) {
-                prompt.stop();
-                reject(`${NAME} ${err.message}`);
-                return;
-            }
-
-            input = { ...ovr, ...input };
-            params = CONFORM({ input, props });
-
-            PREFLIGHT({ params, props });
-
-            resolve(params);
-        });
-    })
-        .then(params => CONFIRM({ props, params }))
-        .then(() => generator({ params, props }))
-        .then(() => console.log(''))
-        .catch(err => {
-            prompt.stop();
-            message(op.get(err, 'message', CANCELED));
-        });
-};
-
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option(
-            '-d, --destination [destination]',
-            'Destination. Example: /common-ui/Icon',
-        )
-        .option(
-            '-s, --source [source]',
-            'Source File. Example: /cwd/icons.json',
-        )
-        .option('-n, --name [name]', 'Name of the icon package.')
-        .on('--help', () => HELP(props));
-
-module.exports = {
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/reactium/icons/template/index.hbs b/.core/.cli/commands/reactium/icons/template/index.hbs
deleted file mode 100644
index a42747c6..00000000
--- a/.core/.cli/commands/reactium/icons/template/index.hbs
+++ /dev/null
@@ -1,20 +0,0 @@
-
-// THIS FILE IS GENERATED BY THE `$ arcli icons` command
-// DO NOT DIRECTLY EDIT !!!!!!!!!!!!!!!!
-
-{{#each icons}}
-import {{id}} from '{{path}}';
-{{/each}}
-
-const icons = {
-{{#each icons}}
-    {{id}},
-{{/each}}
-};
-
-export {
-    icons as default,
-    {{#each icons}}
-    {{id}},
-    {{/each}}
-};
diff --git a/.core/.cli/commands/reactium/icons/template/svg.hbs b/.core/.cli/commands/reactium/icons/template/svg.hbs
deleted file mode 100644
index 1375172d..00000000
--- a/.core/.cli/commands/reactium/icons/template/svg.hbs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: {{name}}.{{id}}
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            {{#each paths}}
-            <path d="{{this}}" />
-            {{/each}}
-        </g>
-    </svg>
-);
diff --git a/.core/.cli/commands/reactium/library/actions.js b/.core/.cli/commands/reactium/library/actions.js
deleted file mode 100644
index 492b633b..00000000
--- a/.core/.cli/commands/reactium/library/actions.js
+++ /dev/null
@@ -1,84 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const run = require('gulp-run');
-const op = require('object-path');
-const prettier = require('prettier');
-const globby = require('globby');
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    return {
-        buildPackage: ({ action, params, props }) => {
-            const { destination, newPackage, source } = params;
-
-            const fpath = path.join(source, 'package.json');
-            const dpath = path.join(destination, 'package.json');
-
-            let pkg;
-
-            try {
-                message(`Updating ${chalk.cyan('package.json')}...`);
-                pkg = require(fpath);
-            } catch (err) {
-                message(`Creating ${chalk.cyan('package.json')}...`);
-                pkg = {};
-            }
-
-            pkg = { ...pkg, ...newPackage };
-
-            const content = prettier.format(JSON.stringify(pkg), {
-                parser: 'json-stringify',
-            });
-
-            fs.writeFileSync(fpath, content);
-            fs.ensureDirSync(destination);
-            fs.copySync(fpath, dpath);
-
-            return Promise.resolve({ action, status: 200 });
-        },
-        assets: ({ action, params, props }) => {
-            const { destination, source } = params;
-            const globs = [path.join(source, '**'), `!{*.js}`];
-
-            const files = globby
-                .sync(globs)
-                .filter(file =>
-                    Boolean(
-                        file.substr(-3) !== '.js' && file.substr(-3) !== 'jsx',
-                    ),
-                );
-
-            files.forEach(file => {
-                let src = path.join(source, '/');
-                const dpath = file.replace(src, destination);
-                fs.ensureFileSync(dpath);
-                fs.copySync(file, dpath);
-            });
-
-            return Promise.resolve({ action, status: 200 });
-        },
-        create: ({ action, params, props }) => {
-            const { source, destination } = params;
-
-            message(
-                `Creating library from ${chalk.cyan(path.basename(source))}...`,
-            );
-
-            let babel = new run.Command(
-                `cross-env NODE_ENV=library babel "${source}" --out-dir "${destination}"`,
-                { verbosity: 3 },
-            );
-
-            babel.exec();
-
-            return Promise.resolve({ action, status: 200 });
-        },
-    };
-};
diff --git a/.core/.cli/commands/reactium/library/generator.js b/.core/.cli/commands/reactium/library/generator.js
deleted file mode 100644
index 1abcc105..00000000
--- a/.core/.cli/commands/reactium/library/generator.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-module.exports = ({ action, params, props }) => {
-    const spinner = ora({
-        spinner: 'dots',
-        color: 'cyan',
-    });
-
-    spinner.start();
-
-    const actions = require('./actions')(spinner);
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/library/index.js b/.core/.cli/commands/reactium/library/index.js
deleted file mode 100644
index 5ce82860..00000000
--- a/.core/.cli/commands/reactium/library/index.js
+++ /dev/null
@@ -1,497 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const op = require('object-path');
-const mod = path.dirname(require.main.filename);
-const { error, message } = require(`${mod}/lib/messenger`);
-const _ = require('underscore');
-
-const formatsource = (val, props) => {
-    const { cwd } = props;
-
-    val = path.normalize(val);
-    val = String(val).replace(
-        /^\/components\/|^components\/|^components$/i,
-        `${cwd}/src/app/components/`,
-    );
-    val = String(val).replace(
-        /^\/common-ui\/|^common-ui\/|^common-ui$/i,
-        `${cwd}/src/app/components/common-ui/`,
-    );
-    val = String(val).replace(/^\/cwd\/|^cwd\/|^cwd/i, `${cwd}/`);
-    val = val.substr(-1) !== '/' ? val + '/' : val;
-
-    return path.normalize(val);
-};
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli library
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'library';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC =
-    'Reactium: Generate a component library from the specified source directory.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Action canceled!';
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params, msg }) => {
-    const { prompt } = props;
-
-    msg = msg || chalk.white('Proceed?');
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${msg} ${chalk.cyan('(Y/N):')}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toUpperCase() === 'Y';
-                        },
-                    },
-                },
-            },
-            (error, input = {}) => {
-                const confirmed = op.get(input, 'confirmed', false);
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    resolve(params);
-                }
-            },
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) => {
-    const packageJSON = require(`${props.cwd}/package.json`);
-
-    return Object.keys(input).reduce((output, key) => {
-        let val = input[key];
-        const pkg = op.get(output, 'newPackage', {});
-
-        switch (key) {
-            case 'destination':
-            case 'source':
-                output[key] = formatsource(val, props);
-                break;
-
-            case 'name':
-            case 'version':
-            case 'main':
-            case 'author':
-                if (val != '') {
-                    pkg[key] = val;
-                    output['newPackage'] = pkg;
-                }
-                break;
-
-            case 'dependencies':
-            case 'devDependencies':
-                if (typeof val === 'string') {
-                    val = val.replace(/\,/g, '');
-                    val = val.replace(/\s\s+/g, ' ').trim();
-                    val = _.compact(val.split(' '));
-                }
-
-                if (Array.isArray(val)) {
-                    if (val.length > 0) {
-                        const deplist = {
-                            ...packageJSON.dependencies,
-                            ...packageJSON.devDependencies,
-                        };
-                        pkg[key] = val.reduce((obj, dep) => {
-                            const v = op.get(deplist, dep);
-                            if (v) {
-                                obj[dep] = v;
-                            }
-                            return obj;
-                        }, {});
-
-                        output['newPackage'] = pkg;
-                    }
-                }
-
-                break;
-
-            case 'repo':
-                op.set(pkg, 'repository.url', val);
-                output['newPackage'] = pkg;
-                break;
-
-            case 'repoType':
-                op.set(pkg, 'repository.type', val);
-                output['newPackage'] = pkg;
-                break;
-
-            case 'keywords':
-                if (typeof val === 'string') {
-                    val = val.replace(/\,/g, '');
-                    val = val.replace(/\s\s+/g, ' ').trim();
-                    val = _.compact(val.split(' '));
-                }
-
-                if (Array.isArray(val)) {
-                    if (val.length > 0) {
-                        pkg[key] = val;
-                        output['newPackage'] = pkg;
-                    }
-                }
-
-                break;
-
-            default:
-                output[key] = val;
-                break;
-        }
-
-        return output;
-    }, {});
-};
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () =>
-    console.log(`
-Example:
-  $ arcli library -s components/MyComponentLibrary -d cwd/lib -n MyComponentLibrary
-
-When specifying the source [-d, --source] the following shortcuts are available:
-  ${chalk.cyan('components/')}  The /.src/app/components source.
-  ${chalk.cyan('common-ui/')}   The /.src/app/components/common-ui source.
-`);
-
-/**
- * FLAGS
- * @description Array of flags passed from the commander options.
- * @since 2.0.18
- */
-const FLAGS = [
-    'name',
-    'source',
-    'destination',
-    'version',
-    'main',
-    'author',
-    'dependencies',
-    'devDependencies',
-    'keywords',
-    'repo',
-    'repoType',
-];
-
-/**
- * FLAGS_TO_PARAMS Function
- * @description Create an object used by the prompt.override property.
- * @since 2.0.18
- */
-const FLAGS_TO_PARAMS = ({ opt = {} }) =>
-    FLAGS.reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? undefined : val;
-
-        if (val) {
-            obj[key] = val;
-        }
-
-        return obj;
-    }, {});
-
-/**
- * PREFLIGHT Function
- */
-const PREFLIGHT = ({ msg, params, props }) => {
-    msg =
-        msg ||
-        `A new ${chalk.cyan(
-            'library',
-        )} will be generated with the following options:`;
-
-    message(msg);
-
-    // Transform the preflight object instead of the params object
-    const preflight = { ...params };
-
-    console.log(
-        prettier.format(JSON.stringify(preflight), {
-            parser: 'json-stringify',
-        }),
-    );
-};
-
-const SCHEMA_SOURCE = ({ params, props }) => {
-    const name = op.get(params, 'package.name', '');
-
-    return {
-        properties: {
-            source: {
-                description: chalk.white('Source:'),
-                message: `Enter the ${chalk.cyan('Source directory')}`,
-                required: true,
-            },
-            destination: {
-                description: chalk.white('Destination:'),
-                default: path.join('cwd', 'lib', name),
-            },
-        },
-    };
-};
-
-const SCHEMA_NAME = ({ params, props }) => {
-    let pkg;
-    let p = path.join(params.source, 'package.json');
-
-    try {
-        pkg = require(p);
-    } catch (err) {
-        pkg = {};
-    }
-
-    const schema = {
-        properties: {
-            name: {
-                description: chalk.white('Name:'),
-                message: `Enter the ${chalk.cyan('Library name')}`,
-                default: op.get(pkg, 'name'),
-                required: true,
-            },
-        },
-    };
-
-    if (op.has(pkg, 'name')) {
-        op.set(schema, 'properties.name.default', pkg.name);
-    }
-
-    return schema;
-};
-
-/**
- * SCHEMA Function
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA = ({ params, props }) => {
-    let pkg;
-
-    try {
-        pkg = require(`${params.source}/package.json`);
-    } catch (err) {
-        pkg = {};
-    }
-
-    const { prompt } = props;
-
-    const schema = {
-        properties: {
-            version: {
-                description: chalk.white('Version:'),
-                default: op.get(pkg, 'version', '0.0.1'),
-            },
-            main: {
-                description: chalk.white('Main js file:'),
-                default: op.get(pkg, 'main', 'index.js'),
-            },
-            author: {
-                description: chalk.white('NPM Package Author:'),
-                default: op.get(pkg, 'author', undefined),
-            },
-            dependencies: {
-                description: chalk.white('NPM Dependencies:'),
-                default: op.has(pkg, 'dependencies')
-                    ? Object.keys(pkg.dependencies).join(', ')
-                    : undefined,
-            },
-            devDependencies: {
-                description: chalk.white('NPM Dev. Dependencies:'),
-                default: op.has(pkg, 'devDependencies')
-                    ? Object.keys(pkg.devDependencies).join(', ')
-                    : undefined,
-            },
-            repo: {
-                description: chalk.white('Repository:'),
-                default: op.get(pkg, 'repository.url', undefined),
-            },
-            repoType: {
-                description: chalk.white('Repository Type:'),
-                default: op.get(pkg, 'repository.type', 'git'),
-                ask: () => !!prompt.history('repo'),
-            },
-            keywords: {
-                description: chalk.white('NPM Keywords:'),
-                default: op.has(pkg, 'keywords')
-                    ? pkg.keywords.join(', ')
-                    : undefined,
-            },
-        },
-    };
-
-    return schema;
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-    const ovr = FLAGS_TO_PARAMS({ opt });
-
-    prompt.override = ovr;
-    prompt.start();
-
-    let params = CONFORM({ input: ovr, props });
-
-    return new Promise((resolve, reject) => {
-        prompt.get(SCHEMA_NAME({ params, props }), (err, input = {}) => {
-            if (err) {
-                prompt.stop();
-                reject(`${NAME} ${err.message} 386`);
-                return;
-            }
-
-            input = { ...ovr, ...input };
-            params = CONFORM({ input, props });
-
-            resolve(params);
-        });
-    })
-        .then(
-            () =>
-                new Promise((resolve, reject) => {
-                    prompt.get(
-                        SCHEMA_SOURCE({ params, props }),
-                        (err, input = {}) => {
-                            if (err) {
-                                prompt.stop();
-                                reject(`${NAME} ${err.message}`);
-                                return;
-                            }
-
-                            input = { ...ovr, ...params, ...input };
-                            params = CONFORM({ input, props });
-
-                            resolve(params);
-                        },
-                    );
-                }),
-        )
-        .then(
-            () =>
-                new Promise((resolve, reject) => {
-                    prompt.get(SCHEMA({ params, props }), (err, input = {}) => {
-                        if (err) {
-                            prompt.stop();
-                            reject(`${NAME} ${err.message}`);
-                            return;
-                        }
-
-                        input = { ...ovr, ...params, ...input };
-                        params = CONFORM({ input, props });
-
-                        PREFLIGHT({ params, props });
-
-                        resolve(params);
-                    });
-                }),
-        )
-        .then(() => {
-            return CONFIRM({ props, params });
-        })
-        .then(() => {
-            console.log('');
-            return generator({ params, props });
-        })
-        .then(results => {
-            console.log('');
-        })
-        .catch(err => {
-            prompt.stop();
-            message(op.get(err, 'message', CANCELED));
-        });
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option('-n, --name [name]', 'Library name.')
-        .option('-s, --source [source]', 'The library source.')
-        .option('-d, --destination [destination]', 'The library destination.')
-        .option('-V, --ver [version]', 'The version of the library.')
-        .option('-m, --main [main]', 'The library entry point or main js file.')
-        .option('-a, --author [author]', 'The library author.')
-        .option('--dependencies [dependencies]', 'The library dependencies.')
-        .option(
-            '--devDependencies [devDependencies]',
-            'The library devDependencies',
-        )
-        .option('--repo [repo]', 'The repo url.')
-        .option('--repoType [repoType]', 'The repo type.')
-        .option('--keywords [keywords]', 'The NPM keywords.')
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/reactium/plugin/actions.js b/.core/.cli/commands/reactium/plugin/actions.js
deleted file mode 100644
index 62165663..00000000
--- a/.core/.cli/commands/reactium/plugin/actions.js
+++ /dev/null
@@ -1,44 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const op = require('object-path');
-const prettier = require('prettier');
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    return {
-        plugin: ({ action, params, props }) => {
-            message(`Creating ${chalk.cyan('plugin')}...`);
-
-            const { destination } = params;
-            const pluginFile = path.normalize(`${destination}/plugin.js`);
-
-            // Template content
-            const template = path.normalize(`${__dirname}/template/plugin.hbs`);
-            const content = handlebars(fs.readFileSync(template, 'utf-8'))(
-                params,
-            );
-
-            fs.ensureFileSync(pluginFile);
-            fs.writeFileSync(
-                pluginFile,
-                prettier.format(content, {
-                    parser: 'babel',
-                    trailingComma: 'all',
-                    singleQuote: true,
-                    tabWidth: 4,
-                    useTabs: false,
-                }),
-            );
-
-            return Promise.resolve({ action, status: 200 });
-        },
-    };
-};
diff --git a/.core/.cli/commands/reactium/plugin/generator.js b/.core/.cli/commands/reactium/plugin/generator.js
deleted file mode 100644
index 1abcc105..00000000
--- a/.core/.cli/commands/reactium/plugin/generator.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-module.exports = ({ action, params, props }) => {
-    const spinner = ora({
-        spinner: 'dots',
-        color: 'cyan',
-    });
-
-    spinner.start();
-
-    const actions = require('./actions')(spinner);
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/plugin/index.js b/.core/.cli/commands/reactium/plugin/index.js
deleted file mode 100644
index aaca2205..00000000
--- a/.core/.cli/commands/reactium/plugin/index.js
+++ /dev/null
@@ -1,282 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const fs = require('fs-extra');
-const op = require('object-path');
-const _ = require('underscore');
-const mod = path.dirname(require.main.filename);
-const slugify = require('slugify');
-const { error, message } = require(`${mod}/lib/messenger`);
-const pad = require(`${mod}/lib/pad`);
-const M = require('../zones/manifest')();
-
-const formatDestination = ({ val, props }) => {
-    const { cwd } = props;
-
-    val = path.normalize(val);
-    val = String(val).replace(/^~\/|^\/cwd\/|^cwd\/|^cwd$/i, `${cwd}/`);
-    val = String(val).replace(
-        /^\/core\/|^core\/|^core/i,
-        `${cwd}/.core/components/`,
-    );
-    val = String(val).replace(
-        /^\/components\/|^components\/|^components$/i,
-        `${cwd}/src/app/components/`,
-    );
-    val = String(val).replace(
-        /^\/common-ui\/|^common-ui\/|^common-ui$/i,
-        `${cwd}/src/app/components/common-ui/`,
-    );
-
-    return path.normalize(val);
-};
-
-const NAME = 'plugin';
-
-const DESC = 'Reactium: plugin helper.';
-
-const CANCELED = 'Plugin canceled!';
-
-const CONFIRM = ({ props, params, msg }) => {
-    const { prompt } = props;
-
-    msg = msg || chalk.white('Proceed?');
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${msg} ${chalk.cyan('(Y/N):')}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input = {}) => {
-                const confirmed = op.get(input, 'confirmed', false);
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    params['confirmed'] = true;
-                    resolve(params);
-                }
-            },
-        );
-    });
-};
-
-const CONFORM = ({ input, props }) => {
-    const { cwd } = props;
-
-    const output = Object.keys(input).reduce((obj, key) => {
-        let val = input[key];
-
-        switch (key) {
-            case 'id':
-                obj[key] = slugify(val).toUpperCase();
-                break;
-
-            case 'destination':
-                obj[key] = formatDestination({ val, props });
-                break;
-
-            case 'zone':
-                obj[key] = val.split(' ').map(index => GET_ZONE(index));
-                break;
-
-            case 'order':
-                obj[key] = Number(val);
-                break;
-
-            default:
-                obj[key] = val;
-                break;
-        }
-
-        return obj;
-    }, {});
-
-    return output;
-};
-
-const HELP = () =>
-    console.log(`
-Example:
-  $ arcli plugin --destination cwd/components/MyComponent --id "my-plugin"
-`);
-
-const FLAGS = ['destination', 'zone', 'id', 'component', 'order'];
-
-const FLAGS_TO_PARAMS = ({ opt = {} }) =>
-    FLAGS.reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? undefined : val;
-
-        if (val) {
-            obj[key] = val;
-        }
-
-        return obj;
-    }, {});
-
-const PREFLIGHT = ({ params }) => {
-    const msg = 'A new plugin will be created with the following options:';
-    const preflight = _.pick(params, ...Object.keys(params).sort());
-
-    message(msg);
-
-    console.log(
-        prettier.format(JSON.stringify(preflight), {
-            parser: 'json-stringify',
-        }),
-    );
-};
-
-const ZONE_LIST = () =>
-    Object.keys(M).map((zone, index) => {
-        index += 1;
-        const len = String(Object.keys(M).length).length;
-        const i = chalk.cyan(pad(index, len) + '.');
-        return `  ${i} ${zone}`;
-    });
-
-const GET_ZONE = index => {
-    return !isNaN(Number(index)) ? Object.keys(M)[index - 1] : index;
-};
-
-const SCHEMA = ({ props }) => {
-    const { cwd, prompt } = props;
-
-    return {
-        properties: {
-            destination: {
-                description: chalk.white('Destination:'),
-                required: true,
-                message: ' Plugin destination is required',
-            },
-            id: {
-                required: true,
-                message: ' Plugin ID is required',
-                description: chalk.white('Plugin ID:'),
-            },
-            component: {
-                required: true,
-                message: ' Component is required',
-                description: chalk.white('Component:'),
-            },
-            zone: {
-                message: ' Zone is required',
-                description: chalk.white('Zones:'),
-            },
-            zone: {
-                description: `${chalk.white('Zone:')}\n\t ${ZONE_LIST().join(
-                    '\n\t ',
-                )}\n   ${chalk.white('Select:')}`,
-                type: 'string',
-                required: true,
-                message: ' Select zones',
-                before: val =>
-                    String(val)
-                        .replace(/, /, ' ')
-                        .replace(/\s+/g, ' ')
-                        .trim(),
-            },
-            order: {
-                pattern: /[0-9\-]/,
-                required: true,
-                message: ' Order must be valid integer',
-                description: chalk.white('Order:'),
-            },
-        },
-    };
-};
-
-const ACTION = ({ opt, props }) => {
-    if (Object.keys(M).length < 1) {
-        return error(
-            `no plugin zones found.\n\nRun:\n${chalk.cyan(
-                '  $ arcli zones scan',
-            )}\n or:\n${chalk.cyan('  $ arcli zones add')}`,
-        );
-    }
-
-    console.log('');
-
-    let params;
-    const { cwd, prompt } = props;
-    const schema = SCHEMA({ props });
-    const ovr = FLAGS_TO_PARAMS({ opt });
-
-    prompt.override = ovr;
-    prompt.start();
-
-    return new Promise((resolve, reject) => {
-        prompt.get(schema, (err, input = {}) => {
-            if (err) {
-                prompt.stop();
-                reject(`${NAME} ${err.message}`);
-                return;
-            }
-
-            input = { ...ovr, ...input };
-            params = CONFORM({ input, props });
-
-            PREFLIGHT({ params, props });
-
-            resolve(params);
-        });
-    })
-        .then(() => {
-            return CONFIRM({ props, params });
-        })
-        .then(() => {
-            console.log('');
-            return generator({ action: 'create', params, props });
-        })
-        .then(results => {
-            console.log('');
-        })
-        .catch(err => {
-            prompt.stop();
-            message(op.get(err, 'message', CANCELED));
-        });
-};
-
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option('-d, --destination [destination]', 'Plugin parent directory.')
-        .option(
-            '-i, --id [id]',
-            'Unique identifier for the plugin. Used when rendering the plugin to the dom.',
-        )
-        .option('-c, --component [component]', 'The plugin component.')
-        .option(
-            '-z, --zone [zone]',
-            'Plugin zones. For multiple zones supply a comma separated list.',
-        )
-        .option(
-            '-o, --order [order]',
-            'Order in which to load the plugin. Lower number plugins get loaded first.',
-        )
-        .on('--help', HELP);
-
-module.exports = {
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/reactium/plugin/template/plugin.hbs b/.core/.cli/commands/reactium/plugin/template/plugin.hbs
deleted file mode 100644
index 18873759..00000000
--- a/.core/.cli/commands/reactium/plugin/template/plugin.hbs
+++ /dev/null
@@ -1,58 +0,0 @@
-import {{component}} from './index';
-
-export default {
-    /**
-     * Required - used as rendering key. Make this unique.
-     * @type {String}
-     */
-    id: '{{id}}',
-
-    /**
-     * Component to render. May also be a string, and
-     * the component will be looked up in components directory.
-     * @type {Component|String}
-     */
-    component: {{component}},
-
-    /**
-     * One or more zones this component should render.
-     * @type {String|Array}
-     */
-    zone: [
-        {{#if zone}}
-        {{#each zone}}
-        '{{this}}',
-        {{/each}}
-        {{/if}}
-    ],
-
-    /**
-      * By default plugins in zone are rendering in ascending order.
-      * @type {Number}
-      */
-    order: {{order}},
-
-    /**
-     * (Optional) additional search subpaths to use to find the component,
-     * if String provided for component property.
-     * @type {[type]}
-     *
-     * e.g. If component is a string 'TextInput', uncommenting the line below would
-     * look in components/common-ui/form/inputs and components/general to find
-     * the component 'TextInput'
-     */
-    // paths: ['common-ui/form/inputs', 'general']
-
-    /**
-     * Additional params: (optional)
-     *
-     * Any free-form additional properties you provide below, will be provided as params
-     * to the component when rendered.
-     *
-     * e.g. Below will be provided to the MyComponent, <MyComponent pageType={'home'} />
-     * These can also be used to help sort or filter plugins, or however you have your
-     * component use params.
-     * @type {Mixed}
-     */
-    // pageType: 'home',
-};
diff --git a/.core/.cli/commands/reactium/rename/actions.js b/.core/.cli/commands/reactium/rename/actions.js
deleted file mode 100644
index 0a597388..00000000
--- a/.core/.cli/commands/reactium/rename/actions.js
+++ /dev/null
@@ -1,144 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const zip = require('folder-zipper');
-const homedir = require('os').homedir();
-const decamelize = require('decamelize');
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const now = Date.now();
-
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const backupfile = ({ params, props, file }) => {
-        const { cwd } = props;
-        const { from } = params;
-
-        const regex = new RegExp(from, 'i');
-        if (regex.test(file)) {
-            return;
-        }
-
-        const filename = path.basename(file);
-        const backupFilePath = path.join(
-            homedir,
-            '.arcli',
-            cwd,
-            '.BACKUP',
-            `${now}.${filename}`,
-        );
-
-        fs.copySync(file, backupFilePath);
-    };
-
-    return {
-        backup: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { directory, from } = params;
-
-            message(`backing up ${from} component...`);
-
-            const now = Date.now();
-            const backupDir = path.join(
-                homedir,
-                '.arcli',
-                cwd,
-                '.BACKUP',
-                'component',
-            );
-            const backupZip = path.normalize(`${backupDir}/${now}.${from}.zip`);
-
-            // Create the backup directory
-            fs.ensureDirSync(backupDir);
-
-            // Backup the component directory
-            return zip(directory, backupZip).then(() => {
-                return { action, status: 200 };
-            });
-        },
-
-        content: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { files, to, from } = params;
-
-            const ID = decamelize(from).toUpperCase();
-            const NEWID = decamelize(to).toUpperCase();
-
-            const regex = new RegExp(from, 'gm');
-            const regexLower = new RegExp(String(from).toLowerCase(), 'gm');
-            const regexUpper = new RegExp(ID, 'gm');
-
-            return new Promise((resolve, reject) => {
-                files.forEach((file, i) => {
-                    backupfile({ params, props, file });
-
-                    let content = String(fs.readFileSync(file))
-                        .replace(regex, to)
-                        .replace(regexLower, String(to).toLowerCase())
-                        .replace(regexUpper, NEWID);
-
-                    fs.writeFileSync(file, content, 'utf-8');
-                });
-
-                resolve({ action, status: 200 });
-            });
-        },
-
-        filename: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { files, to, from } = params;
-
-            const regex = new RegExp(from, 'gm');
-
-            const promises = files
-                .filter(file => regex.test(path.basename(file)))
-                .map(file => {
-                    const dirname = path.dirname(file);
-                    const filename = String(path.basename(file)).replace(
-                        from,
-                        to,
-                    );
-                    const newfile = path.normalize(`${dirname}/${filename}`);
-
-                    return new Promise((resolve, reject) => {
-                        fs.copy(file, newfile, error => {
-                            if (error) {
-                                reject(error);
-                            } else {
-                                fs.removeSync(file);
-                                resolve();
-                            }
-                        });
-                    });
-                });
-
-            return Promise.all(promises)
-                .then(() => {
-                    return { action, status: 200 };
-                })
-                .catch(err => err);
-        },
-
-        move: ({ action, params, props }) => {
-            const { directory, destination } = params;
-            fs.ensureDirSync(destination);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(directory, destination, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        fs.removeSync(directory);
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/reactium/rename/generator.js b/.core/.cli/commands/reactium/rename/generator.js
deleted file mode 100644
index d0f68867..00000000
--- a/.core/.cli/commands/reactium/rename/generator.js
+++ /dev/null
@@ -1,33 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-const spinner = ora({
-    spinner: 'dots',
-    color: 'cyan',
-});
-
-const actions = require('./actions')(spinner);
-
-module.exports = ({ params, props }) => {
-    spinner.start();
-
-    const { replace } = params;
-
-    if (replace !== true) {
-        delete actions.content;
-    }
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('rename complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('rename error');
-            console.log(error);
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/rename/index.js b/.core/.cli/commands/reactium/rename/index.js
deleted file mode 100644
index 54d71ed1..00000000
--- a/.core/.cli/commands/reactium/rename/index.js
+++ /dev/null
@@ -1,400 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const globby = require('globby').sync;
-const mod = path.dirname(require.main.filename);
-const { error, message } = require(`${mod}/lib/messenger`);
-const pad = require(`${mod}/lib/pad`);
-const formatName = require('../component').formatName;
-const formatDestination = require('../component').formatDestination;
-const testflight = require('./testflight');
-
-const componentSearch = ({ name, props }) => {
-    const { cwd, root } = props;
-
-    name = formatName(name);
-    const glob = String(`${cwd}/src/**/${name}/index.js`);
-    return globby([glob]).map(file => path.dirname(file));
-};
-
-const formatDirectory = ({ val, props, name }) => {
-    const { cwd } = props;
-
-    name = formatName(name);
-
-    val = formatDestination(val, props);
-    val = path.join(val, name);
-
-    return path.normalize(val);
-};
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli rename -f FooBar -t FuBar -d components
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'rename';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Reactium: Rename a component.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Rename canceled!';
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params }) => {
-    const { prompt } = props;
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${chalk.white('Proceed?')} ${chalk.cyan(
-                            '(Y/N):'
-                        )}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input) => {
-                try {
-                    params['confirmed'] = input.confirmed;
-                } catch (err) {
-                    params['confirmed'] = false;
-                }
-
-                if (error || params.confirmed === false) {
-                    reject(error);
-                } else {
-                    resolve(params);
-                }
-            }
-        );
-    });
-};
-
-/**
- * search({ props:Object, params:Object }) Function
- * @description Search the ~/src directory for a directory with the name of the component.
- * @return Array List of directories.
- * @since 2.0.0
- */
-const SEARCH = ({ props, params }) => {
-    const { prompt } = props;
-    const { from } = params;
-
-    let directory;
-
-    try {
-        directory = params.directory;
-    } catch (err) {}
-
-    return directory
-        ? new Promise(resolve => resolve(directory))
-        : new Promise((resolve, reject) => {
-              const search = componentSearch({ name: from, props });
-
-              if (search.length === 1) {
-                  resolve(path.dirname(search[0]));
-                  return;
-              }
-
-              if (search.length < 1) {
-                  prompt.stop();
-                  error('Cannot find component directory');
-                  reject({ message: 'no component', code: 500 });
-              }
-
-              const selections = search
-                  .map((type, index) => {
-                      return `\n\t    ${chalk.cyan(
-                          `${index + 1}.`
-                      )} ${chalk.white(type)}`;
-                  })
-                  .join('');
-
-              prompt.get(
-                  {
-                      properties: {
-                          directory: {
-                              description: `${chalk.white(
-                                  'Component Directory:'
-                              )} ${selections}\n    ${chalk.white('Select:')}`,
-                              type: 'string',
-                              required: true,
-                              message: ` please make a selection`,
-                              before: val => {
-                                  val = val
-                                      .replace(/[^0-9\s]/g, '')
-                                      .replace(/\s\s+/g, ' ')
-                                      .trim();
-                                  const index =
-                                      Number(String(val).replace(/[^0-9]/gi)) -
-                                      1;
-
-                                  return search[index];
-                              },
-                          },
-                      },
-                  },
-                  (error, input) => {
-                      let directory;
-
-                      try {
-                          directory = input.directory;
-                      } catch (err) {
-                          directory = false;
-                      }
-
-                      if (error || directory === false) {
-                          reject(error);
-                      } else {
-                          resolve(directory);
-                      }
-                  }
-              );
-          });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) => {
-    const { cwd } = props;
-    const { from, to } = input;
-
-    let output = {};
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            case 'directory':
-                if (val) {
-                    output[key] = formatDirectory({ val, props, name: from });
-                    output['destination'] = formatDirectory({
-                        val,
-                        props,
-                        name: to,
-                    });
-                }
-                break;
-
-            case 'name':
-                output[key] = formatName(val);
-                break;
-
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    return output;
-};
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () => {
-    console.log('');
-    console.log('Example:');
-    console.log('');
-    console.log('  arcli rename --old-name Fubar --new-name FooBar');
-    console.log('');
-};
-
-/**
- * SCHEMA Function
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA = () => {
-    return {
-        properties: {
-            from: {
-                required: true,
-                pattern: /[a-zA-Z]/,
-                message: ' Component name is required',
-                description: chalk.white('Component Name:'),
-            },
-            to: {
-                required: true,
-                pattern: /[a-zA-Z]/,
-                message: ' New name is required',
-                description: chalk.white('New Name:'),
-            },
-            replace: {
-                description: `${chalk.white(
-                    'Replace in other files?'
-                )} ${chalk.cyan('(Y/N):')}`,
-                required: true,
-                pattern: /^y|n|Y|N/,
-                message: ` `,
-                default: 'n',
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-        },
-    };
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    const ovr = {};
-    const schema = SCHEMA();
-
-    Object.keys(schema.properties).forEach(key => {
-        let val = opt[key];
-        val = typeof val === 'function' ? undefined : val;
-
-        if (val) {
-            ovr[key] = val;
-        }
-    });
-
-    prompt.override = ovr;
-    prompt.start();
-    prompt.get(schema, (err, input) => {
-        // Keep this conditional as the first line in this function.
-        // Why? because you will get a js error if you try to set or use anything related to the input object.
-        if (err) {
-            prompt.stop();
-            error(`${NAME} ${err.message}`);
-            return;
-        }
-
-        SEARCH({ props, params: input })
-            .then(directory => {
-                input['directory'] = directory;
-
-                const params = CONFORM({ input, props });
-                const { replace } = params;
-
-                message(`Rename component with the following options:`);
-
-                const preflight = { ...params };
-                const files = testflight({ params, props });
-
-                console.log(
-                    prettier.format(JSON.stringify(preflight), {
-                        parser: 'json-stringify',
-                    })
-                );
-
-                params['files'] = files;
-
-                if (files.length > 0 && replace) {
-                    const len = String(files.length).length;
-                    const found = files
-                        .map((file, index) => {
-                            index += 1;
-                            let i = chalk.cyan(pad(index, len) + '.');
-                            return `  ${i} ${file}`;
-                        })
-                        .join('\n');
-
-                    message('The following files will be updated:');
-                    console.log(found, '\n');
-                } else {
-                    params['replace'] = false;
-                }
-
-                return CONFIRM({ props, params });
-            })
-            .then(params => {
-                console.log('');
-
-                generator({ params, props }).then(success => {
-                    console.log('');
-                });
-            })
-            .catch(err => {
-                prompt.stop();
-                if (err) {
-                    console.log(err);
-                }
-                message(CANCELED);
-            });
-    });
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option('-f, --from [from]', "Component's current name.")
-        .option('-t, --to [to]', "Component's new name.")
-        .option('-d, --directory [directory]', "Component's parent directory.")
-        .option(
-            '-r, --replace [replace]',
-            'Replace the component name in other files.'
-        )
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    ACTION,
-    CONFIRM,
-    CONFORM,
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/reactium/rename/testflight.js b/.core/.cli/commands/reactium/rename/testflight.js
deleted file mode 100644
index 9976fdfc..00000000
--- a/.core/.cli/commands/reactium/rename/testflight.js
+++ /dev/null
@@ -1,34 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const globby = require('globby').sync;
-const reader = require('fs-readdir-recursive');
-
-const scan = ({ file, params, props }) => {
-    const { cwd } = props;
-    const { from } = params;
-
-    const filepath = path.join(cwd, 'src', file);
-
-    const regex = new RegExp(from, 'im');
-
-    // Test the file
-    if (regex.test(file)) {
-        return true;
-    }
-
-    const stats = fs.statSync(filepath);
-    if (stats.isDirectory()) {
-        return false;
-    } else {
-        const fileContent = fs.readFileSync(filepath);
-        return regex.test(fileContent);
-    }
-
-    return false;
-};
-
-module.exports = ({ params, props }) =>
-    reader(path.join(props.cwd, 'src'))
-        .filter(file => scan({ file, params, props }))
-        .map(file => path.join(props.cwd, 'src', file));
diff --git a/.core/.cli/commands/reactium/server/actions.js b/.core/.cli/commands/reactium/server/actions.js
deleted file mode 100644
index 23c6461f..00000000
--- a/.core/.cli/commands/reactium/server/actions.js
+++ /dev/null
@@ -1,60 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const op = require('object-path');
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    return {
-        create: ({ action, params, props }) => {
-            message(`Creating ${chalk.cyan('templates')}...`);
-
-            const { cwd } = props;
-            const { feo, ssr } = params;
-
-            const reactium = require(path.normalize(
-                `${cwd}/.core/reactium-config`,
-            ));
-            const template = {};
-            const tmpath = path.normalize(`${cwd}/`);
-            const ver = op.get(reactium, 'version', '2.3.15');
-
-            if (feo) {
-                template['feo'] = fs.readFileSync(
-                    path.normalize(`${cwd}/.core/server/template/feo.js`),
-                );
-                template['feo'] = String(template.feo).replace(
-                    /\%TEMPLATE_VERSION\%/gi,
-                    ver,
-                );
-            }
-
-            if (ssr) {
-                template['ssr'] = fs.readFileSync(
-                    path.normalize(`${cwd}/.core/server/template/ssr.js`),
-                );
-                template['ssr'] = String(template.ssr).replace(
-                    /\%TEMPLATE_VERSION\%/gi,
-                    ver,
-                );
-            }
-
-            Object.entries(template).forEach(([type, content]) => {
-                const p = path.normalize(
-                    `${cwd}/src/app/server/template/${type}.js`,
-                );
-
-                fs.ensureFileSync(p);
-                fs.writeFileSync(p, content);
-            });
-
-            return Promise.resolve({ action, status: 200 });
-        },
-    };
-};
diff --git a/.core/.cli/commands/reactium/server/generator.js b/.core/.cli/commands/reactium/server/generator.js
deleted file mode 100644
index 1abcc105..00000000
--- a/.core/.cli/commands/reactium/server/generator.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-module.exports = ({ action, params, props }) => {
-    const spinner = ora({
-        spinner: 'dots',
-        color: 'cyan',
-    });
-
-    spinner.start();
-
-    const actions = require('./actions')(spinner);
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/server/index.js b/.core/.cli/commands/reactium/server/index.js
deleted file mode 100644
index 6cdbc11d..00000000
--- a/.core/.cli/commands/reactium/server/index.js
+++ /dev/null
@@ -1,276 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const fs = require('fs-extra');
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const op = require('object-path');
-const mod = path.dirname(require.main.filename);
-const { error, message } = require(`${mod}/lib/messenger`);
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli server template <type>
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'server <action>';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Reactium: Create a custom server template.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Action canceled!';
-
-/**
- * TYPES
- * @description types of server templates that can be created
- */
-const TYPES = ['feo', 'ssr'];
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params, msg }) => {
-    const { prompt } = props;
-
-    msg = msg || chalk.white('Proceed?');
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${msg} ${chalk.cyan('(Y/N):')}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toUpperCase() === 'Y';
-                        },
-                    },
-                },
-            },
-            (error, input = {}) => {
-                const confirmed = op.get(input, 'confirmed', false);
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    params['confirmed'] = true;
-                    resolve(params);
-                }
-            },
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) => {
-    const output = Object.keys(input).reduce((obj, key) => {
-        let val = input[key];
-        switch (key) {
-            case 'type':
-                val = String(val).toLowerCase();
-                val = TYPES.includes(val) ? val : 'all';
-                obj[key] = val;
-                break;
-
-            default:
-                obj[key] = val;
-                break;
-        }
-
-        return obj;
-    }, {});
-
-    return output;
-};
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () =>
-    console.log(`
-Example:
-  $ arcli server template
-
-Exclude the front-end template:
-  $ arcli server template --no-feo
-
-Exclude the server side render template:
-  $ arcli server template --no-ssr
-
-Overwrite existing server templates
-  $ arcli server template --overwrite
-`);
-
-/**
- * FLAGS
- * @description Array of flags passed from the commander options.
- * @since 2.0.18
- */
-const FLAGS = ['feo', 'ssr', 'overwrite'];
-
-/**
- * FLAGS_TO_PARAMS Function
- * @description Create an object used by the prompt.override property.
- * @since 2.0.18
- */
-const FLAGS_TO_PARAMS = ({ opt = {} }) =>
-    FLAGS.reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? undefined : val;
-
-        if (val) {
-            obj[key] = val;
-        }
-
-        return obj;
-    }, {});
-
-const isTemplate = cwd => {
-    const destFEO = fs.existsSync(
-        path.normalize(`${cwd}/src/app/server/template/feo.js`),
-    );
-    const destSSR = fs.existsSync(
-        path.normalize(`${cwd}/src/app/server/template/ssr.js`),
-    );
-
-    return destFEO || destSSR;
-};
-
-/**
- * SCHEMA Function
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA = ({ props }) => {
-    const { cwd } = props;
-
-    return {
-        properties: {
-            overwrite: {
-                required: true,
-                pattern: /^y|n|Y|N/,
-                message: '',
-                description: `${chalk.white(
-                    'Overwrite existing template?',
-                )} ${chalk.cyan('(Y/N):')}`,
-                ask: () => isTemplate(cwd),
-                before: val => Boolean(String(val).toUpperCase() === 'Y'),
-            },
-        },
-    };
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ action, opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-    const schema = SCHEMA({ props });
-    const ovr = FLAGS_TO_PARAMS({ opt });
-
-    prompt.override = ovr;
-    prompt.start();
-
-    return new Promise((resolve, reject) => {
-        prompt.get(schema, (err, input = {}) => {
-            if (err) {
-                prompt.stop();
-                reject(`${NAME} ${err.message}`);
-                return;
-            }
-
-            input = { ...ovr, ...input };
-            params = CONFORM({ input, props });
-
-            const { feo, ssr } = params;
-
-            if (!op.has(params, 'overwrite') || (!feo && !ssr)) {
-                reject(CANCELED);
-                return;
-            }
-
-            resolve(params);
-        });
-    })
-        .then(() => {
-            return CONFIRM({ props, params });
-        })
-        .then(() => {
-            console.log('');
-            return generator({ action, params, props });
-        })
-        .then(results => {
-            console.log('');
-        })
-        .catch(err => {
-            prompt.stop();
-            message(op.get(err, 'message', CANCELED));
-        });
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action((action, opt) => ACTION({ action, opt, props }))
-        .option('-F, --no-feo [feo]', 'Front-end template.')
-        .option('-S, --no-ssr [ssr]', 'Server-side rendering template.')
-        .option(
-            '-o, --overwrite [overwrite]',
-            'Overwrite existing template files.',
-        )
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/reactium/style/actions.js b/.core/.cli/commands/reactium/style/actions.js
deleted file mode 100644
index face73d5..00000000
--- a/.core/.cli/commands/reactium/style/actions.js
+++ /dev/null
@@ -1,123 +0,0 @@
-const fs = require('fs-extra');
-const path = require('path');
-const op = require('object-path');
-const prettier = require('prettier');
-const chalk = require('chalk');
-const homedir = require('os').homedir();
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    return {
-        backup: ({ action, params, props }) => {
-            const { filename, filepath, overwrite } = params;
-            const { cwd, root } = props;
-
-            return new Promise((resolve, reject) => {
-                if (overwrite !== true) {
-                    resolve({ action, status: 200 });
-                    return;
-                }
-
-                message(`backing up ${chalk.cyan(filename)}...`);
-
-                const now = Date.now();
-                const dir = path.join(
-                    homedir,
-                    '.arcli',
-                    cwd,
-                    '.BACKUP',
-                    'style',
-                );
-                const backup = path.normalize(`${dir}/${now}.${filename}`);
-
-                // Create the backup directory
-                fs.ensureDirSync(dir);
-
-                // Copy
-                fs.copy(path.normalize(filepath), backup, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        create: ({ action, params }) => {
-            const { destination, filename, filepath, overwrite } = params;
-
-            const actionType = overwrite === true ? 'overwritting' : 'creating';
-
-            message(`${actionType} stylesheet ${chalk.cyan(filename)}...`);
-
-            fs.ensureDirSync(path.normalize(destination));
-
-            // Template content
-            const template = path.normalize(`${__dirname}/template/style.hbs`);
-            const content = handlebars(fs.readFileSync(template, 'utf-8'))(
-                params,
-            );
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(filepath, content, error => {
-                    if (error) {
-                        reject(error.Error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        inject: ({ action, params }) => {
-            const { importString = [], inject = [] } = params;
-
-            const promises =
-                inject.length > 0
-                    ? inject.map(
-                          (filepath, i) =>
-                              new Promise((resolve, reject) => {
-                                  const istring = `\n@import '${
-                                      importString[i]
-                                  }';`;
-                                  let content = fs.readFileSync(
-                                      filepath,
-                                      'utf-8',
-                                  );
-                                  if (content.indexOf(istring) < 0) {
-                                      content += istring;
-                                      fs.writeFile(filepath, content, error => {
-                                          if (error) {
-                                              reject(error);
-                                          } else {
-                                              resolve({
-                                                  action,
-                                                  filepath,
-                                                  status: 200,
-                                              });
-                                          }
-                                      });
-                                  } else {
-                                      resolve({
-                                          action,
-                                          filepath,
-                                          status: 200,
-                                      });
-                                  }
-                              }),
-                      )
-                    : [];
-
-            return promises.length > 0
-                ? Promise.all(promises)
-                : new Promise(resolve => resolve({ action, status: 200 }));
-        },
-    };
-};
diff --git a/.core/.cli/commands/reactium/style/generator.js b/.core/.cli/commands/reactium/style/generator.js
deleted file mode 100644
index d6607a12..00000000
--- a/.core/.cli/commands/reactium/style/generator.js
+++ /dev/null
@@ -1,39 +0,0 @@
-const ora = require('ora');
-const chalk = require('chalk');
-const ActionSequence = require('action-sequence');
-
-const spinner = ora({
-    spinner: 'dots',
-    color: 'cyan',
-});
-
-const actions = require('./actions')(spinner);
-
-module.exports = ({ params, props }) => {
-    spinner.start();
-
-    const { filename, overwrite } = params;
-
-    const successMsg =
-        overwrite === true
-            ? `Overwrote stylesheet ${chalk.cyan(filename)}`
-            : `Added style sheet ${chalk.cyan(filename)}`;
-
-    const errorMsg =
-        overwrite === true
-            ? `Unable to overwrite stylesheet ${chalk.cyan(filename)}`
-            : `Unable to add stylesheet ${chalk.cyan(filename)}`;
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed(successMsg);
-            return success;
-        })
-        .catch(error => {
-            spinner.fail(errorMsg);
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/style/index.js b/.core/.cli/commands/reactium/style/index.js
deleted file mode 100644
index e68af8c0..00000000
--- a/.core/.cli/commands/reactium/style/index.js
+++ /dev/null
@@ -1,418 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const _ = require('underscore');
-const fs = require('fs-extra');
-const path = require('path');
-const chalk = require('chalk');
-const op = require('object-path');
-const generator = require('./generator');
-const globby = require('globby').sync;
-const prettier = require('prettier');
-const slugify = require('slugify');
-const mod = path.dirname(require.main.filename);
-const pad = require(`${mod}/lib/pad`);
-const { error, message } = require(`${mod}/lib/messenger`);
-
-const formatDestination = (val, props) => {
-    const { cwd } = props;
-
-    val = path.normalize(val);
-    val = String(val).replace(/^~\/|^\/cwd\/|^cwd\/|^cwd$/i, `${cwd}/`);
-    val = String(val).replace(
-        /^\/core\/|^core\/|^core/i,
-        `${cwd}/.core/components/`,
-    );
-    val = String(val).replace(
-        /^\/components\/|^components\/|^components$/i,
-        `${cwd}/src/app/components/`,
-    );
-    val = String(val).replace(
-        /^\/common-ui\/|^common-ui\/|^common-ui$/i,
-        `${cwd}/src/app/components/common-ui/`,
-    );
-
-    return path.normalize(val);
-};
-
-const formatFilename = val => {
-    const ext = val.substr(-5);
-    const exts = ['.scss', '.less'];
-
-    val = slugify(val, '-');
-    val = val.substr(0, 1) !== '_' ? `_${val}` : val;
-    val += exts.indexOf(ext) < 0 ? '.scss' : '';
-
-    return val;
-};
-
-const formatImport = (val, props) => {
-    const styles = topLevelStyles({ props });
-
-    val = val
-        .replace(/[^0-9\s]/g, '')
-        .replace(/\s\s+/g, ' ')
-        .trim();
-    val = _.compact(
-        val.split(' ').map(v => {
-            v = Number(String(v).replace(/[^0-9]/gi)) - 1;
-            return styles[v];
-        }),
-    );
-
-    return val;
-};
-
-const topLevelStyles = ({ props }) => {
-    const { cwd } = props;
-
-    return globby([`${cwd}/src/**/*.scss`]).filter(
-        file => String(path.basename(file)).substr(0, 1) !== '_',
-    );
-};
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli re:style --path '~/src/assets/style' --name 'style.scss'
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'style';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Reactium: Create a style sheet.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Style sheet creation canceled!';
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params }) => {
-    const { prompt } = props;
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${chalk.white('Proceed?')} ${chalk.cyan(
-                            '(Y/N):',
-                        )}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input) => {
-                const confirmed = op.get(input, 'confirmed');
-
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    resolve(confirmed);
-                }
-            },
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) => {
-    const { cwd } = props;
-
-    let output = {};
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            case 'destination':
-                output[key] = formatDestination(val, props);
-                break;
-
-            case 'filename':
-                output[key] = formatFilename(val);
-                break;
-
-            case 'inject':
-                output[key] = formatImport(val, props);
-                break;
-
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    // Set the file path
-    output['filepath'] = path.normalize(
-        path.join(output.destination, output.filename),
-    );
-
-    // Set the style import statement
-    const ext = path.extname(output.filename);
-    const fnameReplace = output.filename.replace(/^_/, '').replace(ext, '');
-    output['name'] = fnameReplace;
-    output['ext'] = ext;
-    output['importString'] = output.inject.map(filepath =>
-        path
-            .relative(filepath, output.filepath)
-            .replace(/^\..\//, '')
-            .replace(output.filename, fnameReplace),
-    );
-
-    return output;
-};
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () => {
-    console.log('');
-    console.log('Example:');
-    console.log('');
-    console.log(
-        `  arcli style --filename '_fubar.scss' --destination '~/src/assets/style' --overwrite`,
-    );
-    console.log('');
-};
-
-/**
- * SCHEMA Object
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA = ({ props }) => {
-    const { cwd, prompt } = props;
-    const defaultDirectory = path.normalize('/src/assets/style');
-
-    const styleList = topLevelStyles({ props });
-    const styleLen = String(styleList.length).length;
-    const styles = styleList
-        .map((file, index) => {
-            index += 1;
-            let i = chalk.cyan(pad(index, styleLen) + '.');
-            return `\n\t    ${i} ${chalk.white(file)}`;
-        })
-        .join('');
-
-    return {
-        properties: {
-            destination: {
-                description: chalk.white('Destination:'),
-                default: `~${defaultDirectory}`,
-                required: true,
-            },
-            filename: {
-                type: 'string',
-                description: chalk.white(`File Name:`),
-                message: 'File name is a required parameter',
-                required: true,
-                before: val => {
-                    const ext = val.substr(-5);
-                    const exts = ['.scss', '.less'];
-
-                    val = val.substr(0, 1) !== '_' ? `_${val}` : val;
-                    val += exts.indexOf(ext) < 0 ? '.scss' : '';
-
-                    return val;
-                },
-            },
-            overwrite: {
-                required: true,
-                pattern: /^y|n|Y|N/,
-                message: '',
-                description: `${chalk.white(
-                    'Overwrite existing stylesheet?',
-                )} ${chalk.cyan('(Y/N):')}`,
-                ask: () => {
-                    try {
-                        let dest =
-                            prompt.override['destination'] ||
-                            prompt.history('destination').value;
-                        dest = formatDestination(dest, props);
-
-                        let file =
-                            prompt.override['filename'] ||
-                            prompt.history('filename').value;
-                        file = formatFilename(file);
-
-                        const filepath = path.normalize(path.join(dest, file));
-
-                        return fs.existsSync(filepath);
-                    } catch (err) {
-                        return false;
-                    }
-                },
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-            inject: {
-                pattern: /[0-9\s]/,
-                description: `${chalk.white(
-                    'Import to:',
-                )} ${styles}\n    ${chalk.white('Select:')}`,
-                required: true,
-                message: 'Select a number or list of numbers. Example: 1 2 3',
-                ask: () => {
-                    let overwrite;
-                    try {
-                        overwrite =
-                            prompt.override['overwrite'] ||
-                            prompt.history('overwrite').value;
-                    } catch (err) {
-                        overwrite = true;
-                    }
-
-                    return overwrite !== false;
-                },
-            },
-        },
-    };
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    const ovr = {};
-    const schema = SCHEMA({ props });
-    Object.keys(schema.properties).forEach(key => {
-        if (opt[key]) {
-            ovr[key] = opt[key];
-        }
-    });
-
-    const { overwrite } = opt;
-
-    prompt.override = ovr;
-    prompt.start();
-    prompt.get(schema, (err, input) => {
-        // Keep this conditional as the first line in this function.
-        // Why? because you will get a js error if you try to set or use anything related to the input object.
-        if (err) {
-            prompt.stop();
-            error(`${NAME} ${err.message}`);
-            return;
-        }
-
-        const params = CONFORM({ input, props });
-        const { overwrite } = params;
-
-        // Exit if overwrite or confirm !== true
-        if (typeof overwrite === 'boolean' && !overwrite) {
-            prompt.stop();
-            message(CANCELED);
-            return;
-        }
-
-        message(`A style sheet will be created with the following parameters:`);
-        const preflight = { filepath: null, ...params };
-
-        delete preflight.destination;
-        delete preflight.filename;
-        delete preflight.importString;
-
-        if (overwrite !== true) {
-            delete preflight.overwrite;
-        }
-
-        params['filepath'] = preflight.filepath;
-
-        console.log(
-            prettier.format(JSON.stringify(preflight), {
-                parser: 'json-stringify',
-            }),
-        );
-
-        CONFIRM({ props, params })
-            .then(() => {
-                console.log('');
-
-                generator({ params, props }).then(success => {
-                    console.log('');
-                });
-            })
-            .catch(err => {
-                prompt.stop();
-                message(CANCELED);
-            });
-    });
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option(
-            '-d, --destination [destination]',
-            'Path where the stylesheet is saved.',
-        )
-        .option('-f, --filename [filename]', 'File name.')
-        .option(
-            '-o, --overwrite [overwrite]',
-            'Overwrite the existing stylesheet.',
-            false,
-        )
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    ACTION,
-    CONFIRM,
-    CONFORM,
-    COMMAND,
-    NAME,
-    topLevelStyles,
-    formatImport,
-};
diff --git a/.core/.cli/commands/reactium/style/template/style.hbs b/.core/.cli/commands/reactium/style/template/style.hbs
deleted file mode 100644
index 64e9ccf8..00000000
--- a/.core/.cli/commands/reactium/style/template/style.hbs
+++ /dev/null
@@ -1,3 +0,0 @@
-.{{name}} {
-
-}
diff --git a/.core/.cli/commands/reactium/test/actions.js b/.core/.cli/commands/reactium/test/actions.js
deleted file mode 100644
index 1402e934..00000000
--- a/.core/.cli/commands/reactium/test/actions.js
+++ /dev/null
@@ -1,47 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const op = require('object-path');
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    return {
-        create: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { destination, component } = params;
-
-            message(
-                `Creating ${chalk.white(component)} ${chalk.cyan(
-                    'test.js',
-                )}...`,
-            );
-
-            const filepath = path.normalize(path.join(destination, 'test.js'));
-
-            fs.ensureDirSync(path.normalize(destination));
-
-            const template = path.normalize(`${__dirname}/template/test.hbs`);
-
-            const content = handlebars(fs.readFileSync(template, 'utf-8'))(
-                params,
-            );
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(filepath, content, error => {
-                    if (error) {
-                        reject(error.Error);
-                    } else {
-                        setTimeout(resolve, 1000, { action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/reactium/test/generator.js b/.core/.cli/commands/reactium/test/generator.js
deleted file mode 100644
index 1abcc105..00000000
--- a/.core/.cli/commands/reactium/test/generator.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-module.exports = ({ action, params, props }) => {
-    const spinner = ora({
-        spinner: 'dots',
-        color: 'cyan',
-    });
-
-    spinner.start();
-
-    const actions = require('./actions')(spinner);
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/test/index.js b/.core/.cli/commands/reactium/test/index.js
deleted file mode 100644
index 84cc4055..00000000
--- a/.core/.cli/commands/reactium/test/index.js
+++ /dev/null
@@ -1,299 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const op = require('object-path');
-const mod = path.dirname(require.main.filename);
-const { error, message } = require(`${mod}/lib/messenger`);
-
-const formatDestination = (val, props) => {
-    const { cwd } = props;
-
-    val = path.normalize(val);
-    val = String(val).replace(
-        /^\/components\/|^components\/|^components$/i,
-        `${cwd}/src/app/components/`,
-    );
-    val = String(val).replace(
-        /^\/common-ui\/|^common-ui\/|^common-ui$/i,
-        `${cwd}/src/app/components/common-ui/`,
-    );
-
-    return path.normalize(val);
-};
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli test
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'test';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Reactium: Add a jest/enzyme test to your component.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Action canceled!';
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params, msg }) => {
-    const { prompt } = props;
-
-    msg = msg || chalk.white('Proceed?');
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${msg} ${chalk.cyan('(Y/N):')}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toUpperCase() === 'Y';
-                        },
-                    },
-                },
-            },
-            (error, input = {}) => {
-                const confirmed = op.get(input, 'confirmed', false);
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    params['confirmed'] = true;
-                    resolve(params);
-                }
-            },
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) =>
-    Object.keys(input).reduce((output, key) => {
-        let val = input[key];
-        switch (key) {
-            case 'destination':
-                output[key] = formatDestination(val, props);
-                break;
-
-            default:
-                output[key] = val;
-                break;
-        }
-
-        return output;
-    }, {});
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () =>
-    console.log(`
-Example:
-  $ arcli test -d components/MyComponent
-  $ arcli test -d common-ui/MyCommonUiComponent
-
-When specifying the destination [-d, --destination] the following shortcuts are available:
-  ${chalk.cyan('components/')}  The /.src/app/components directory.
-  ${chalk.cyan('common-ui/')}   The /.src/app/components/common-ui directory.
-`);
-
-/**
- * FLAGS
- * @description Array of flags passed from the commander options.
- * @since 2.0.18
- */
-const FLAGS = ['component', 'destination', 'from', 'overwrite'];
-
-/**
- * FLAGS_TO_PARAMS Function
- * @description Create an object used by the prompt.override property.
- * @since 2.0.18
- */
-const FLAGS_TO_PARAMS = ({ opt = {} }) =>
-    FLAGS.reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? undefined : val;
-
-        if (val) {
-            obj[key] = val;
-        }
-
-        return obj;
-    }, {});
-
-/**
- * PREFLIGHT Function
- */
-const PREFLIGHT = ({ msg, params, props }) => {
-    msg =
-        msg ||
-        `A new ${chalk.cyan(
-            'test.js',
-        )} file will be generated with the following options:`;
-
-    message(msg);
-
-    // Transform the preflight object instead of the params object
-    const preflight = { ...params };
-
-    console.log(
-        prettier.format(JSON.stringify(preflight), {
-            parser: 'json-stringify',
-        }),
-    );
-};
-
-/**
- * SCHEMA Function
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA = ({ props }) => {
-    return {
-        properties: {
-            destination: {
-                description: chalk.white('Destination:'),
-                message: `Enter the ${chalk.cyan('Destination')}`,
-                required: true,
-            },
-            component: {
-                description: chalk.white('Component:'),
-                message: `Enter the ${chalk.cyan('Component')} name`,
-                required: true,
-            },
-            from: {
-                description: chalk.white('Import from:'),
-                default: './index',
-                required: true,
-            },
-        },
-    };
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-    const schema = SCHEMA({ props });
-    const ovr = FLAGS_TO_PARAMS({ opt });
-
-    if (op.has(opt, 'destination') && !op.has(opt, 'component')) {
-        if (String(opt.destination).split('/').length > 1) {
-            const comp = String(opt.destination)
-                .split('/')
-                .pop();
-            if (comp) {
-                ovr['component'] = comp;
-            }
-        }
-    }
-
-    prompt.override = ovr;
-    prompt.start();
-
-    return new Promise((resolve, reject) => {
-        prompt.get(schema, (err, input = {}) => {
-            if (err) {
-                prompt.stop();
-                reject(`${NAME} ${err.message}`);
-                return;
-            }
-
-            input = { ...ovr, ...input };
-            params = CONFORM({ input, props });
-
-            PREFLIGHT({ params, props });
-
-            resolve(params);
-        });
-    })
-        .then(() => {
-            return CONFIRM({ props, params });
-        })
-        .then(() => {
-            console.log('');
-            return generator({ action: 'create', params, props });
-        })
-        .then(results => {
-            console.log('');
-        })
-        .catch(err => {
-            prompt.stop();
-            message(op.get(err, 'message', CANCELED));
-        });
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option('-d, --destination [destination]', 'The component directory.')
-        .option('-c, --component [component]', 'The component name.')
-        .option('-o, --overwrite [overwrite]', 'Overwrite existing test file.')
-        .option(
-            '-f, --from [from]',
-            `The component import path relative to the ${chalk.cyan(
-                'test.js',
-            )} file. Default: ${chalk.cyan('./index')}`,
-        )
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/reactium/test/template/test.hbs b/.core/.cli/commands/reactium/test/template/test.hbs
deleted file mode 100644
index 2b4f581d..00000000
--- a/.core/.cli/commands/reactium/test/template/test.hbs
+++ /dev/null
@@ -1,9 +0,0 @@
-import React from 'react';
-import {{component}} from '{{from}}';
-import { shallow } from 'reactium-core/enzyme';
-
-test('<{{component}} />', () => {
-    const component = shallow(<{{component}} />);
-
-    expect(component.html().length).toBeGreaterThan(0);
-});
diff --git a/.core/.cli/commands/reactium/zones/actions.js b/.core/.cli/commands/reactium/zones/actions.js
deleted file mode 100644
index 7b29c34c..00000000
--- a/.core/.cli/commands/reactium/zones/actions.js
+++ /dev/null
@@ -1,180 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const op = require('object-path');
-const prettier = require('prettier');
-const globby = require('globby');
-
-const mod = path.dirname(require.main.filename);
-const pad = require(`${mod}/lib/pad`);
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const M = require('./manifest')();
-
-    const results = { action: 'result', zones: { ...M }, status: 200 };
-
-    const zoneList = () =>
-        Object.keys(M)
-            .map((zone, index) => {
-                index += 1;
-                const len = String(Object.keys(M).length).length;
-                const i = chalk.cyan(pad(index, len) + '.');
-                return `   ${i} ${zone}`;
-            })
-            .join('\n');
-
-    const list = ({ action, params, props }) => {
-        const l = zoneList();
-
-        if (l.length > 0) {
-            console.log(chalk.cyan(' Zones:'));
-            console.log(zoneList());
-        } else {
-            console.log(
-                ` ${chalk.red('No zones found!')}\n\n   Run:\n${chalk.cyan(
-                    '   $ arcli zones scan',
-                )}\n\n   or:\n${chalk.cyan('   $ arcli zones add')}`,
-            );
-        }
-        return Promise.resolve({ action, status: 200 });
-    };
-
-    const object = ({ action, params, props }) => {
-        console.log(
-            '\n',
-            prettier
-                .format(JSON.stringify(results.zones), {
-                    parser: 'json-stringify',
-                })
-                .replace(/\"(.*?)\": \{/g, `"${chalk.cyan('$1')}": {`)
-                .replace(/\"(.*?)\": \"/g, `"${chalk.green('$1')}": "`)
-                .replace(/\n/g, `\n `),
-        );
-
-        return Promise.resolve({ action, status: 200 });
-    };
-
-    const scan = ({ action, params, props }) => {
-        message(
-            `Scanning for plugin ${chalk.cyan(
-                'zones',
-            )}. This may take awhile...`,
-        );
-
-        const { cwd = process.cwd() } = props;
-        const globs = [];
-
-        if (op.get(params, 'source') === true) {
-            globs.push(path.normalize(`${cwd}/src/**/*.js*`));
-        }
-
-        if (op.get(params, 'node') === true) {
-            globs.push(path.normalize(`${cwd}/node_modules/**/*.js*`));
-        }
-
-        if (globs.length < 1) {
-            return Promise.resolve({ action, status: 200 });
-        }
-
-        const quick_scan = /\<Plugins/;
-
-        return globby(globs).then(files => {
-            const zones = files.reduce((z, file) => {
-                const contents = fs.readFileSync(file);
-                if (!quick_scan.test(contents)) {
-                    return z;
-                }
-
-                const reg_find = /<Plugins[\s\S](.*?)[\s\S]\/>/gm;
-                const matches = String(fs.readFileSync(file))
-                    .replace(/["'\s+]/g, ' ')
-                    .match(reg_find);
-
-                if (matches) {
-                    matches.forEach(match => {
-                        const zone = String(match).match(/zone= (.*?) /i);
-                        if (Array.isArray(zone) && zone.length > 1) {
-                            const id = zone[1];
-                            if (op.has(M, id)) {
-                                return z;
-                            }
-
-                            z[id] = {
-                                file,
-                                description: `Plugin zone found in: ${file.replace(
-                                    path.normalize(cwd),
-                                    '',
-                                )}`,
-                            };
-                        }
-                    });
-                }
-
-                return z;
-            }, {});
-
-            if (action) {
-                results['zones'] = { ...zones, ...M };
-            }
-
-            return { action, status: 200 };
-        });
-    };
-
-    const create = ({ action, params, props }) => {
-        const { description, id } = params;
-
-        results.zones = { ...M };
-        results.zones[id] = { description };
-
-        return Promise.resolve({ action, status: 200 });
-    };
-
-    const remove = ({ action, params, props }) => {
-        const { id } = params;
-
-        delete results.zones[id];
-
-        return Promise.resolve({ action, status: 200 });
-    };
-
-    const purge = ({ action, params, props }) => {
-        results.zones = {};
-        return Promise.resolve({ action, status: 200 });
-    };
-
-    const cache = ({ action, params, props }) => {
-        message(`Caching plugin ${chalk.cyan('zones')}...`);
-
-        const { cwd = process.cwd() } = props;
-        const cont = prettier.format(JSON.stringify(results.zones), {
-            parser: 'json-stringify',
-        });
-
-        const filePath = path.normalize(`${cwd}/.cli-cache/plugin-zones.json`);
-        fs.ensureFileSync(filePath);
-        fs.writeFileSync(filePath, cont);
-
-        return Promise.resolve({ action, status: 200 });
-    };
-
-    const result = () => Promise.resolve(results);
-
-    return {
-        list,
-        object,
-        scan,
-        create,
-        purge,
-        cache,
-        remove,
-        result,
-    };
-};
diff --git a/.core/.cli/commands/reactium/zones/generator.js b/.core/.cli/commands/reactium/zones/generator.js
deleted file mode 100644
index 410c56ca..00000000
--- a/.core/.cli/commands/reactium/zones/generator.js
+++ /dev/null
@@ -1,90 +0,0 @@
-const ActionSequence = require('action-sequence');
-const prettier = require('prettier');
-const op = require('object-path');
-const _ = require('underscore');
-
-module.exports = ({ action, params, props }) => {
-    const { activity, cache } = params;
-
-    const spinner = activity
-        ? require('ora')({
-              spinner: 'dots',
-              color: 'cyan',
-          })
-        : null;
-
-    const allActions = require('./actions')(spinner);
-
-    if (spinner) {
-        console.log('');
-        spinner.start();
-    }
-
-    let acts = [];
-    switch (action) {
-        case 'list':
-            if (op.has(params, 'json')) {
-                acts.push('object');
-            } else {
-                acts.push('list');
-            }
-            break;
-
-        case 'add':
-        case 'update':
-            acts.push('create');
-            if (cache) {
-                acts.push('cache');
-            }
-            break;
-
-        case 'remove':
-            acts.push('remove');
-            if (cache) {
-                acts.push('cache');
-            }
-            break;
-
-        case 'purge':
-            acts.push('purge');
-            if (cache) {
-                acts.push('cache');
-            }
-            break;
-
-        case 'scan':
-            acts.push('scan');
-            if (cache) {
-                acts.push('cache');
-            }
-            break;
-    }
-
-    if (acts.length < 1) {
-        return Promise.resolve([]);
-    }
-
-    acts.push('result');
-    const actions = _.pick(allActions, ...acts);
-
-    if (actions.length < 1) {
-        return Promise.resolve([]);
-    }
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            if (spinner) {
-                spinner.succeed(`${action} complete!`);
-            }
-            return success;
-        })
-        .catch(error => {
-            if (spinner) {
-                spinner.fail('error!');
-            }
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/reactium/zones/index.js b/.core/.cli/commands/reactium/zones/index.js
deleted file mode 100644
index db77b44b..00000000
--- a/.core/.cli/commands/reactium/zones/index.js
+++ /dev/null
@@ -1,436 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-const path = require('path');
-const mod = path.dirname(require.main.filename);
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const _ = require('underscore');
-const op = require('object-path');
-const { error, message } = require(`${mod}/lib/messenger`);
-const pad = require(`${mod}/lib/pad`);
-const M = require('./manifest')();
-
-const NAME = 'zones <action>';
-
-const DESC = 'Reactium: Manage the current project Plugin Zones';
-
-const ZONE_LIST = () =>
-    Object.keys(M).map((zone, index) => {
-        index += 1;
-        const len = String(Object.keys(M).length).length;
-        const i = chalk.cyan(pad(index, len) + '.');
-        return `  ${i} ${zone}`;
-    });
-
-const GET_ZONE = index => {
-    return !isNaN(Number(index)) ? Object.keys(M)[index - 1] : index;
-};
-
-const FLAGS = [
-    'id',
-    'description',
-    'node',
-    'cache',
-    'activity',
-    'source',
-    'zone',
-    'json',
-];
-
-const FLAGS_TO_PARAMS = ({ opt = {} }) =>
-    FLAGS.reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? undefined : val;
-
-        if (val) {
-            obj[key] = val;
-        }
-
-        return obj;
-    }, {});
-
-const CANCELED = 'zones ACTION canceled';
-
-const CONFIRM = ({ props, params, msg = 'Proceed?' }) => {
-    const { prompt } = props;
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${chalk.white(msg)} ${chalk.cyan(
-                            '(Y/N):',
-                        )}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input = {}) => {
-                if (error || !op.get(input, 'confirmed')) {
-                    reject(error);
-                } else {
-                    resolve(params);
-                }
-            },
-        );
-    });
-};
-
-const CONFORM = ({ action, input, props }) => {
-    let output = {};
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    if (action === 'scan') {
-        delete output.id;
-        delete output.description;
-    }
-
-    if (action === 'list') {
-        delete output.activity;
-    }
-
-    return output;
-};
-
-const HELP = () =>
-    console.log(`
-
-Available <action> values:
-${chalk.cyan('list')} | ${chalk.cyan('scan')} | ${chalk.cyan(
-        'add',
-    )} | ${chalk.cyan('update')} | ${chalk.cyan('remove')} | ${chalk.cyan(
-        'purge',
-    )}
-
-<${chalk.cyan('list')}>
-  Output the plugin zones:
-    $ arcli zones ${chalk.cyan('list')}
-
-  Output the plugin zones as JSON
-    $ arcli zones ${chalk.cyan('list')} --json
-    $ arcli zones ${chalk.cyan('list')} -j
-
-    ${chalk.magenta(
-        '* Note:',
-    )} if a zone is found in more than one location, the first occurance is added to the manifest.
-
-<${chalk.cyan('scan')}>
-  Scan the '~/src' directory only, omiting the 'node_modules' directory:
-    $ arcli zones ${chalk.cyan('scan')} --no-node
-    $ arcli zones ${chalk.cyan('scan')} -N
-
-    ${chalk.magenta(
-        '* Note:',
-    )} if a zone already exists in the manifest, it is skipped.
-
-<${chalk.cyan('add')}> | <${chalk.cyan('update')}>
-  Add a plugin zone to the manifest:
-    $ arcli zones ${chalk.cyan(
-        'add',
-    )} --id "my-plugin-zone" --description "My awesome plugins go here!"
-    $ arcli zones ${chalk.cyan(
-        'add',
-    )} -i "my-plugin-zone" -d "My awesome plugins go here!"
-
-    ${chalk.magenta(
-        '* Note:',
-    )} if a zone already exists in the manifest, it will be updated.
-
-<${chalk.cyan('remove')}>
-  Remove a plugin zone from the manifest:
-    $ arcli zones ${chalk.cyan('remove')} --id "my-plugin-zone"
-
-<${chalk.cyan('purge')}>
-  Clear all entries from the plugin zone manifest:
-    $ arcli zones ${chalk.cyan('purge')}
-
-    ${chalk.magenta(
-        '* Note:',
-    )} Purging can not be undone. You can run ${chalk.cyan(
-        '$ arcli zones scan',
-    )} to regenerate the default manifest.
-
-`);
-
-const SCHEMA = ({ action, props, zone = {} }) => {
-    const { prompt } = props;
-
-    const output = {
-        properties: {
-            id: {
-                required: true,
-                description: chalk.white('Zone:'),
-                message: ' Plugin zone is required',
-                default: op.get(zone, 'id'),
-                ask: () => {
-                    if (action === 'update') {
-                        return true;
-                    }
-
-                    if (!op.has(prompt, 'override.id')) {
-                        return ['add', 'remove', 'update'].includes(action);
-                    } else {
-                        return false;
-                    }
-                },
-            },
-            description: {
-                required: true,
-                description: chalk.white('Description:'),
-                message: ' Plugin description is required',
-                default: op.get(zone, 'description'),
-                ask: () => {
-                    if (action === 'update') {
-                        return true;
-                    }
-
-                    if (!op.has(prompt, 'override.description')) {
-                        return ['add', 'update'].includes(action);
-                    } else {
-                        return false;
-                    }
-                },
-            },
-        },
-    };
-
-    return output;
-};
-
-const SCHEMA_SELECT = ({ action, opt, props }) => {
-    const { prompt } = props;
-    const zones = ZONE_LIST();
-    return {
-        properties: {
-            id: {
-                description: `${chalk.white('Zone:')}\n\t ${zones.join(
-                    '\n\t ',
-                )}\n   ${chalk.white('Select:')}`,
-                type: 'string',
-                required: true,
-                message: ' select a zone',
-                ask: () => {
-                    return !op.has(prompt, 'override.id');
-                },
-                before: val => {
-                    val = val.replace(/[^\w-_]/g, '');
-                    return !isNaN(val) && val > zones.length
-                        ? null
-                        : GET_ZONE(val) || val;
-                },
-            },
-        },
-    };
-};
-
-const PREFLIGHT = ({ action, params }) => {
-    let msg;
-    switch (action) {
-        case 'add':
-            console.log(
-                '\n',
-                'A plugin zone will be created with the following options:',
-            );
-            console.log('');
-            console.log(
-                prettier.format(
-                    JSON.stringify(_.pick(params, 'id', 'description')),
-                    {
-                        parser: 'json-stringify',
-                    },
-                ),
-            );
-            break;
-
-        case 'update':
-            console.log(
-                '\n',
-                `The plugin zone ${chalk.cyan(
-                    op.get(params, 'id'),
-                )} will be updated with the following options:`,
-            );
-            console.log('');
-            console.log(
-                prettier.format(
-                    JSON.stringify(_.pick(params, 'id', 'description')),
-                    {
-                        parser: 'json-stringify',
-                    },
-                ),
-            );
-            break;
-
-        case 'remove':
-            msg = `Are you sure you want to remove the ${chalk.cyan(
-                op.get(params, 'id'),
-            )} zone?`;
-            break;
-
-        case 'purge':
-            msg = `Purging can not be undone. Are you sure?`;
-            break;
-    }
-
-    return msg;
-};
-
-const ACTION = ({ action, opt, props, zone }) => {
-    const id = op.get(opt, 'id');
-
-    if (['update', 'remove'].includes(action) && !id) {
-        ACTION_SELECT({ action, opt, props });
-        return;
-    }
-
-    if (id && !op.has(M, id)) {
-        action = 'add';
-    }
-
-    const { prompt } = props;
-
-    const flags = FLAGS_TO_PARAMS({ opt });
-
-    if (action !== 'update') {
-        prompt.override = flags;
-    } else if (id && !zone) {
-        zone = { ...op.get(M, GET_ZONE(id), {}), id };
-    }
-
-    let schema;
-
-    switch (action) {
-        default:
-            schema = SCHEMA({ action, props, zone });
-    }
-
-    console.log('');
-    prompt.start();
-    prompt.get(schema, (err, input) => {
-        if (err) {
-            prompt.stop();
-            error(`${NAME} ${err.message}`);
-            return;
-        }
-
-        // Reduce the input
-        input = { ...flags, ...input };
-        const params = CONFORM({ action, input, props });
-
-        // Preflight
-        const msg = PREFLIGHT({ action, params });
-
-        const promise = ['scan', 'list'].includes(action)
-            ? Promise.resolve(params)
-            : CONFIRM({ props, params, msg });
-
-        promise
-            .then(params => generator({ action, params, props }))
-            .then(success => console.log(''))
-            .catch(err => {
-                prompt.stop();
-                if (err) {
-                    error(err);
-                } else {
-                    error(CANCELED.replace('ACTION', action));
-                }
-            });
-    });
-};
-
-const ACTION_SELECT = ({ action, opt, props }) => {
-    if (Object.keys(M).length < 1) {
-        return error(
-            `no zones found.\n\nRun:\n${chalk.cyan(
-                '  $ arcli zones scan',
-            )}\n or:\n${chalk.cyan('  $ arcli zones add')}`,
-        );
-    }
-
-    const { prompt } = props;
-    const flags = FLAGS_TO_PARAMS({ opt });
-
-    prompt.override = flags;
-    const schema = SCHEMA_SELECT({ action, opt, props });
-
-    prompt.start();
-    prompt.get(schema, (err, input) => {
-        if (err) {
-            prompt.stop();
-            error(`${NAME} ${err.message}`);
-            return;
-        }
-
-        const zone = {
-            id: input.id,
-            description: op.get(M, `${input.id}.description`),
-        };
-
-        opt = { ...opt, ...input };
-
-        ACTION({ action, opt, props, zone });
-    });
-};
-
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action((action, opt) => ACTION({ action, opt, props }))
-        .option(
-            '-i, --id <zone>',
-            'The plugin zone id. Used when the <action> is add, update, or remove.',
-        )
-        .option(
-            '-d, --description <description>',
-            'The description of the plugin zone. Used when the <action> is add or update.',
-        )
-        .option(
-            '-j, --json [json]',
-            'Output the plugin zones as a JSON object. Used when calling the <list> action.',
-        )
-        .option(
-            '-N, --no-node [node]',
-            'Excludes the `node_modules` directory when scanning the source code.',
-        )
-        .option('-C, --no-cache [cache]', 'Do not cache the --scan results.')
-        .option(
-            '-A, --no-activity [activity]',
-            'Do not show the activity spinner.',
-        )
-        .option(
-            '-S, --no-source [source]',
-            'Exclude the `src` directory when scanning the source code.',
-        )
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    ACTION,
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/reactium/zones/manifest.js b/.core/.cli/commands/reactium/zones/manifest.js
deleted file mode 100644
index 578f3d2b..00000000
--- a/.core/.cli/commands/reactium/zones/manifest.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Return the output of the 'plugin-manifest.json' file if it exists.
- */
-const fs = require('fs-extra');
-const path = require('path');
-
-module.exports = () => {
-    const cwd = process.cwd();
-    const dir = path.normalize(`${cwd}/.cli-cache`);
-    const manifestFile = path.normalize(`${dir}/plugin-zones.json`);
-
-    // Create the cli-cache directory
-    fs.ensureDirSync(dir);
-
-    return fs.existsSync(manifestFile)
-        ? require(manifestFile)
-        : {};
-
-};
diff --git a/.core/.cli/commands/toolkit/config/actions.js b/.core/.cli/commands/toolkit/config/actions.js
deleted file mode 100644
index b59138ca..00000000
--- a/.core/.cli/commands/toolkit/config/actions.js
+++ /dev/null
@@ -1,84 +0,0 @@
-const now = Date.now();
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const backupPath = cwd => {
-        return path.join(homedir, '.arcli', cwd, '.BACKUP', 'toolkit');
-    };
-
-    return {
-        backup: ({ action, params, props }) => {
-            message(`backing up toolkit manifest...`);
-
-            const { cwd } = props;
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = backupPath(cwd);
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        manifest: ({ action, params, props }) => {
-            message(`updating toolkit config...`);
-
-            const { cwd } = props;
-
-            const indexFile = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-            const manifest = require('../manifest')(props);
-
-            Object.entries(params).forEach(([key, val]) =>
-                op.set(manifest, key, val),
-            );
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            )
-                .replace(/\"require(.*?)\.default\"/gim, 'require$1.default')
-                .replace(/\\"/g, '"')
-                .replace(/\\'/g, "'");
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(indexFile, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/config/generator.js b/.core/.cli/commands/toolkit/config/generator.js
deleted file mode 100644
index 7305e1de..00000000
--- a/.core/.cli/commands/toolkit/config/generator.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-const spinner = ora({
-    spinner: 'dots',
-    color: 'cyan',
-});
-
-const actions = require('./actions')(spinner);
-
-module.exports = ({ params, props }) => {
-    console.log('');
-
-    spinner.start();
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/toolkit/config/index.js b/.core/.cli/commands/toolkit/config/index.js
deleted file mode 100644
index 08dc601c..00000000
--- a/.core/.cli/commands/toolkit/config/index.js
+++ /dev/null
@@ -1,257 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const op = require('object-path');
-const manifest = require('../manifest');
-const mod = path.dirname(require.main.filename);
-
-const { error, message } = require(`${mod}/lib/messenger`);
-
-const m = {};
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli toolkit
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'toolkit';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Toolkit:  Set toolkit configuration values.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Action canceled!';
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params }) => {
-    const { prompt } = props;
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${chalk.white('Proceed?')} ${chalk.cyan(
-                            '(Y/N):'
-                        )}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input) => {
-                let confirmed;
-
-                try {
-                    confirmed = input.confirmed;
-                } catch (err) {
-                    confirmed = false;
-                }
-
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    resolve(params);
-                }
-            }
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) => {
-    const { cwd } = props;
-
-    let output = {};
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            case 'ver':
-                output['header.version'] = val;
-                break;
-
-            case 'logo':
-            case 'title':
-            case 'version':
-                output[`header.${key}`] = val;
-                break;
-
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    return output;
-};
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () => {
-    console.log('');
-    console.log('Example:');
-    console.log('');
-    console.log(`  $ arcli toolkit --header 'Style Guide'`);
-    console.log('');
-    console.log(
-        `  $ arcli toolkit --logo '/assets/images/atomic-reactor-logo.svg'`
-    );
-    console.log('');
-    console.log(`  $ arcli toolkit --ver '2.1.1'`);
-    console.log('');
-};
-
-/**
- * SCHEMA Function
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA = ({ props }) => {
-    const { cwd, prompt } = props;
-
-    const { logo, title, version } = op.get(m, 'header');
-
-    return {
-        properties: {
-            logo: {
-                description: chalk.white('Logo:'),
-                default: logo,
-            },
-            title: {
-                description: chalk.white('Title:'),
-                default: title,
-            },
-            ver: {
-                description: chalk.white('Version:'),
-                default: version,
-            },
-        },
-    };
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ opt, props }) => {
-    console.log('');
-
-    Object.entries(manifest(props)).forEach(([key, value]) => {
-        m[key] = value;
-    });
-
-    const { cwd, prompt } = props;
-
-    const schema = SCHEMA({ props });
-
-    const ovr = Object.keys(schema.properties).reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? null : val;
-        if (val) {
-            obj[key] = val;
-        }
-        return obj;
-    }, {});
-
-    prompt.override = ovr;
-    prompt.start();
-    prompt.get(schema, (err, input) => {
-        // Keep this conditional as the first line in this function.
-        // Why? because you will get a js error if you try to set or use anything related to the input object.
-        if (err) {
-            prompt.stop();
-            error(`${NAME} ${err.message}`);
-            return;
-        }
-
-        const params = CONFORM({ input, props });
-
-        message(`Toolkit config will be updated with the following options:`);
-        const preflight = { ...params };
-
-        console.log(
-            prettier.format(JSON.stringify(preflight), {
-                parser: 'json-stringify',
-            })
-        );
-
-        CONFIRM({ props, params })
-            .then(params => generator({ params, props }))
-            .then(success => console.log(''))
-            .catch(err => {
-                prompt.stop();
-                message(CANCELED);
-            });
-    });
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action(opt => ACTION({ opt, props }))
-        .option('-l, --logo [logo]', 'The toolkit logo path.')
-        .option('-t, --title [title]', 'The toolkit title.')
-        .option('-V, --ver [version]', 'The toolkit version.')
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    ACTION,
-    CONFIRM,
-    CONFORM,
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/toolkit/element/actions/create.js b/.core/.cli/commands/toolkit/element/actions/create.js
deleted file mode 100644
index b5cad018..00000000
--- a/.core/.cli/commands/toolkit/element/actions/create.js
+++ /dev/null
@@ -1,172 +0,0 @@
-const now = Date.now();
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const zip = require('folder-zipper');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const backupPath = cwd =>
-        path.join(homedir, '.arcli', cwd, '.BACKUP', 'toolkit');
-
-    const generate = ({ action, params, props, templateFile, fileName }) => {
-        const { cwd } = props;
-        const { destination, name, overwrite } = params;
-
-        const filepath = path.normalize(path.join(destination, fileName));
-
-        const actionType = overwrite === true ? 'overwritting' : 'creating';
-
-        message(`${actionType} ${chalk.cyan(name)} ${fileName}...`);
-
-        fs.ensureDirSync(path.normalize(destination));
-
-        // Template content
-        const template = path.normalize(
-            `${__dirname}/template/${templateFile}.hbs`,
-        );
-        const content = handlebars(fs.readFileSync(template, 'utf-8'))(params);
-
-        return new Promise((resolve, reject) => {
-            fs.writeFile(filepath, content, error => {
-                if (error) {
-                    reject(error.Error);
-                } else {
-                    resolve({ action, status: 200 });
-                }
-            });
-        });
-    };
-
-    return {
-        backup: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { destination, group, name } = params;
-
-            message(`backing up ${name} element...`);
-
-            const backupDir = backupPath(cwd);
-            const backupZip = path.normalize(
-                `${backupDir}/${now}.${group}.${name}.zip`,
-            );
-
-            // Create the backup directory
-            fs.ensureDirSync(backupDir);
-
-            // Backup the component directory then empty the existing
-            return zip(destination, backupZip).then(() => {
-                fs.emptyDirSync(destination);
-                return { action, status: 200 };
-            });
-        },
-
-        backupManifest: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { destination, group, name } = params;
-
-            message(`backing up toolkit manifest...`);
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = backupPath(cwd);
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        element: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'component',
-                fileName: 'index.js',
-            }),
-
-        readme: ({ action, params, props }) =>
-            generate({
-                action,
-                params,
-                props,
-                templateFile: 'readme',
-                fileName: 'readme.js',
-            }),
-
-        manifest: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { element, group, ID, menuOrder } = params;
-
-            const manifest = require('../../manifest')(props);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            if (!isNaN(menuOrder)) {
-                const elements = {};
-
-                let keys = Object.keys(
-                    op.get(manifest, `menu.${group}.elements`, {}),
-                ).filter(key => {
-                    return key !== ID;
-                });
-
-                keys.splice(menuOrder, 0, ID);
-                keys.forEach(key => {
-                    elements[key] = op.get(
-                        manifest,
-                        `menu.${group}.elements.${key}`,
-                        {},
-                    );
-                });
-
-                op.set(manifest, `menu.${group}.elements`, elements);
-            }
-
-            op.set(manifest, `menu.${group}.elements.${ID}`, element);
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            )
-                .replace(/\"require(.*?)\.default\"/gim, 'require$1.default')
-                .replace(/\\"/g, '"')
-                .replace(/\\'/g, "'");
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(index, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/element/actions/remove.js b/.core/.cli/commands/toolkit/element/actions/remove.js
deleted file mode 100644
index 9524bb8b..00000000
--- a/.core/.cli/commands/toolkit/element/actions/remove.js
+++ /dev/null
@@ -1,120 +0,0 @@
-const now = Date.now();
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const zip = require('folder-zipper');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const backupPath = cwd =>
-        path.normalize(homedir, '.arcli', cwd, '.BACKUP', 'toolkit');
-
-    return {
-        backup: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { destination, group, name } = params;
-
-            message(`backing up ${name} element...`);
-
-            const backupDir = backupPath(cwd);
-            const backupZip = path.normalize(
-                `${backupDir}/${now}.${group}.${name}.zip`,
-            );
-
-            // Create the backup directory
-            fs.ensureDirSync(backupDir);
-
-            // Backup the component directory then empty the existing
-            return zip(destination, backupZip).then(() => {
-                fs.emptyDirSync(destination);
-                return { action, status: 200 };
-            });
-        },
-
-        backupManifest: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { destination, group, name } = params;
-
-            message(`backing up toolkit manifest...`);
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = backupPath(cwd);
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        manifest: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { key } = params;
-
-            const manifest = require('../../manifest')(props);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            message(`updating toolkit manifest...`);
-
-            op.del(manifest, key);
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            ).replace(/\"require(.*?)\.default\"/gim, 'require$1.default');
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(index, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        remove: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { destination, name } = params;
-
-            message(`removing ${name} element...`);
-
-            return new Promise((resolve, reject) => {
-                fs.remove(destination, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/element/actions/template/component.hbs b/.core/.cli/commands/toolkit/element/actions/template/component.hbs
deleted file mode 100644
index 49fea79b..00000000
--- a/.core/.cli/commands/toolkit/element/actions/template/component.hbs
+++ /dev/null
@@ -1,39 +0,0 @@
-
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-
-/**
- * -----------------------------------------------------------------------------
- * Toolkit Element: {{name}}
- * -----------------------------------------------------------------------------
- */
-
-class {{name}} extends Component {
-
-    static dependencies() {
-        return (typeof module !== 'undefined') ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = {};
-    }
-
-    render() {
-        return (
-            <Fragment>
-                COMPONENT
-            </Fragment>
-        );
-    }
-}
-
-// Default properties
-{{name}}.defaultProps = {};
-
-export default {{name}};
diff --git a/.core/.cli/commands/toolkit/element/actions/template/readme.hbs b/.core/.cli/commands/toolkit/element/actions/template/readme.hbs
deleted file mode 100644
index 88354475..00000000
--- a/.core/.cli/commands/toolkit/element/actions/template/readme.hbs
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * {{name}} Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-# Your Documentation Here
-
-Be sure to use [markdown ](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format the text.
-
-I suppose you could also use HTML but come on.. do you _REALLY_ need to?
-`;
-
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = (props) => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/.core/.cli/commands/toolkit/element/actions/update.js b/.core/.cli/commands/toolkit/element/actions/update.js
deleted file mode 100644
index 5eb7a4cf..00000000
--- a/.core/.cli/commands/toolkit/element/actions/update.js
+++ /dev/null
@@ -1,159 +0,0 @@
-const now = Date.now();
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const zip = require('folder-zipper');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const backupPath = cwd =>
-        path.join(homedir, '.arcli', cwd, '.BACKUP', 'toolkit');
-
-    return {
-        copy: ({ action, params, props }) => {
-            const { destination: from } = params.prev;
-            const { destination: to } = params.new;
-
-            fs.ensureDirSync(to);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(from, to, { overwrite: true }, err => {
-                    if (err) {
-                        reject(err);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        backup: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { destination, group, name } = params.prev;
-
-            message(`backing up ${name} element...`);
-
-            const backupDir = backupPath(cwd);
-            const backupZip = path.normalize(
-                `${backupDir}/${now}.${group}.${name}.zip`,
-            );
-
-            // Create the backup directory
-            fs.ensureDirSync(backupDir);
-
-            // Backup the component directory then empty the existing
-            return zip(destination, backupZip).then(() => {
-                fs.emptyDirSync(destination);
-                return { action, status: 200 };
-            });
-        },
-
-        backupManifest: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { destination, group, name } = params.prev;
-
-            message(`backing up toolkit manifest...`);
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = backupPath(cwd);
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        manifest: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { element, group, ID, menuOrder } = params.new;
-            const { ID: prevID } = params.prev;
-
-            const manifest = require('../../manifest')(props);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            if (prevID !== ID) {
-                op.del(manifest, `menu.${group}.elements.${prevID}`);
-            }
-
-            if (!isNaN(menuOrder)) {
-                const elements = {};
-
-                let keys = Object.keys(
-                    op.get(manifest, `menu.${group}.elements`, {}),
-                ).filter(key => {
-                    return key !== ID;
-                });
-
-                keys.splice(menuOrder, 0, ID);
-                keys.forEach(key => {
-                    elements[key] = op.get(
-                        manifest,
-                        `menu.${group}.elements.${key}`,
-                        {},
-                    );
-                });
-
-                op.set(manifest, `menu.${group}.elements`, elements);
-            }
-
-            op.set(manifest, `menu.${group}.elements.${ID}`, element);
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            )
-                .replace(/\"require(.*?)\.default\"/gim, 'require$1.default')
-                .replace(/\\"/g, '"')
-                .replace(/\\'/g, "'");
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(index, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        remove: ({ action, params, props }) => {
-            const { destination: from } = params.prev;
-            return new Promise((resolve, reject) => {
-                fs.remove(from, err => {
-                    if (err) {
-                        reject(err);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/element/generator.js b/.core/.cli/commands/toolkit/element/generator.js
deleted file mode 100644
index 15cfffa6..00000000
--- a/.core/.cli/commands/toolkit/element/generator.js
+++ /dev/null
@@ -1,134 +0,0 @@
-const ora = require('ora');
-const op = require('object-path');
-const ActionSequence = require('action-sequence');
-
-const spinner = ora({
-    spinner: 'dots',
-    color: 'cyan',
-});
-
-const reduceCreate = ({ actions, params, props }) => {
-    const newActions = { ...actions };
-
-    if (op.get(params, 'overwrite', false) !== true) {
-        delete newActions.backup;
-    }
-
-    if (op.get(params, 'hideDocs', false)) {
-        delete newActions.readme;
-    }
-
-    if (op.get(params, 'stylesheet', false)) {
-        try {
-            const styleActions = require('../../reactium/style/actions')(
-                spinner
-            );
-            delete styleActions.backup;
-
-            newActions['stylesheet'] = ({ action, params, props }) =>
-                ActionSequence({
-                    actions: styleActions,
-                    options: { params: params.stylesheet, props },
-                });
-        } catch (err) {
-            return new Promise((resolve, reject) => {
-                reject(err);
-            });
-        }
-    }
-
-    return { actions: newActions, params };
-};
-
-const reduceUpdate = ({ actions, params, props }) => {
-    const { destination: from, menuOrder: prevIndex } = params.prev;
-
-    const { destination: to, menuOrder: index } = params.new;
-
-    if (prevIndex === index) {
-        delete params.new.menuOrder;
-        delete params.prev.menuOrder;
-    }
-
-    if (from === to) {
-        delete actions.backup;
-        delete actions.copy;
-        delete actions.remove;
-    }
-
-    return { actions, params };
-};
-
-const reduce = ({ action, actions, params, props }) => {
-    let output = { actions, params };
-    switch (action) {
-        case 'create':
-            output = reduceCreate({ actions, params, props });
-            break;
-
-        case 'update':
-            output = reduceUpdate({ actions, params, props });
-            break;
-    }
-
-    return output;
-};
-
-const successMessage = ({ action, overwrite }) => {
-    let success;
-    switch (action) {
-        case 'create':
-            success =
-                overwrite === true ? 'Element updated!' : 'Element created!';
-
-            break;
-
-        case 'update':
-            success = 'Element updated!';
-            break;
-
-        case 'remove':
-            success = 'Element removed!';
-            break;
-
-        case 'move':
-            success = 'Element moved!';
-            break;
-    }
-
-    return success;
-};
-
-module.exports = ({ params, props }) => {
-    spinner.start();
-
-    const { overwrite } = params;
-
-    let action = op.has(params, 'remove') ? 'remove' : 'create';
-    action = op.has(params, 'update') ? 'update' : action;
-
-    let reduced = reduce({
-        action,
-        params,
-        props,
-        actions: require(`./actions/${action}`)(spinner),
-    });
-
-    let actions = reduced.actions;
-    params = reduced.params;
-
-    const msg = successMessage({ action, overwrite });
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed(msg);
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/toolkit/element/index.js b/.core/.cli/commands/toolkit/element/index.js
deleted file mode 100644
index 0593dd53..00000000
--- a/.core/.cli/commands/toolkit/element/index.js
+++ /dev/null
@@ -1,1123 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const op = require('object-path');
-const decamelize = require('decamelize');
-const mod = path.dirname(require.main.filename);
-const pad = require(`${mod}/lib/pad`);
-const listItem = require(`${mod}/lib/listItem`);
-const manifest = require('../manifest');
-
-const m = {};
-
-const { error, message } = require(`${mod}/lib/messenger`);
-
-const { formatImport, topLevelStyles } = require('../../reactium/style');
-
-const { formatName, formatRoute } = require('../../reactium/component');
-
-const formatID = val => {
-    val = formatName(val);
-    return String(decamelize(val, '-')).replace(/[^a-z0-9\-]/gi, '');
-};
-
-const formatMenuOrder = val => {
-    if (isNaN(val)) {
-        return null;
-    }
-    return Number(String(val).replace(/\D/gi, ''));
-};
-
-const getElements = ({ props, group }) => {
-    return Object.keys(op.get(m, `menu.${group}.elements`, {}));
-};
-
-const getGroups = ({ props }) => {
-    return Object.keys(m.menu);
-};
-
-const mapElement = ({ output, input, props }) => {
-    const element = {};
-    const keys = [
-        'type',
-        'label',
-        'route',
-        'dna',
-        'component',
-        'readme',
-        'hideCode',
-        'hideDna',
-        'hideDocs',
-    ];
-
-    keys.forEach(key => {
-        const val = output[key];
-
-        switch (key) {
-            case 'component':
-            case 'readme':
-                if (val) {
-                    element[key] = `require('${val}').default`;
-                }
-                break;
-
-            default:
-                if (val) {
-                    element[key] = val;
-                }
-                break;
-        }
-
-        delete output[key];
-    });
-
-    return element;
-};
-
-const mapOverrides = ({ schema, opt }) => {
-    return Object.keys(schema.properties).reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? null : val;
-        if (val) {
-            obj[key] = val;
-        }
-        return obj;
-    }, {});
-};
-
-const mapStyleSheet = ({ output, input, props }) => {
-    const { cwd } = props;
-
-    let stylesheet;
-
-    if (op.get(output, 'stylesheet', false) === true) {
-        const dest = path.normalize(
-            `${cwd}/src/app/toolkit/${output.group}/${output.name}`,
-        );
-        const stylesheetFile = path.normalize(path.join(dest, '_style.scss'));
-
-        const importString = output.inject.map(filepath =>
-            path
-                .relative(filepath, stylesheetFile)
-                .replace(/^\..\//, '')
-                .replace('_style.scss', 'style'),
-        );
-
-        stylesheet = {
-            filename: '_style.scss',
-            filepath: stylesheetFile,
-            destination: dest,
-            name: 'style',
-            ext: '.scss',
-            overwrite: '',
-            inject: Array.from(output.inject),
-            importString: importString,
-        };
-    }
-
-    return stylesheet;
-};
-
-const overwritable = prompt => {
-    let overwrite;
-
-    try {
-        overwrite =
-            prompt.override['overwrite'] || prompt.history('overwrite').value;
-    } catch (err) {
-        overwrite = true;
-    }
-
-    overwrite = overwrite === '' ? true : overwrite;
-
-    return overwrite;
-};
-
-const removable = prompt => op.get(prompt, 'override.remove', false);
-
-const groupBefore = ({ val, groups, defaultGroup = 'uncategorized' }) => {
-    try {
-        if (!isNaN(val)) {
-            val = Number(String(val)) - 1;
-            return groups[val];
-        }
-    } catch (err) {
-        return null;
-    }
-};
-
-const actionBefore = ({ val, actions, defaultAction = 'create' }) => {
-    if (!isNaN(val)) {
-        val = Number(String(val)) - 1;
-
-        if (val >= actions.length || val < 0) {
-            return defaultAction;
-        } else {
-            return actions[val];
-        }
-    } else {
-        return defaultAction;
-    }
-};
-
-const typeBefore = ({ val, types, defaultType = 'organism' }) => {
-    if (!isNaN(val)) {
-        val = Number(String(val)) - 1;
-
-        if (val >= types.length || val < 0) {
-            return defaultType;
-        } else {
-            return types[val];
-        }
-    } else {
-        return val;
-    }
-};
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli element
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'element [action]';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Toolkit:  Create/Update/Remove a toolkit element.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Element action canceled!';
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () => {
-    const output = `
-
-Actions:
-  <create> - Create a new toolkit element:
-    $ arcli element create
-
-  <update> - Update a toolkit manifest entry:
-    $ arcli element update
-
-  <remove> - Remove a toolkit element:
-    $ arcli element remove
-
-`;
-    console.log(output);
-};
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params, description }) => {
-    const { prompt } = props;
-
-    description =
-        description || `${chalk.white('Proceed?')} ${chalk.cyan('(Y/N):')}`;
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input) => {
-                let confirmed;
-
-                try {
-                    confirmed = input.confirmed;
-                } catch (err) {
-                    confirmed = false;
-                }
-
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    resolve(confirmed);
-                }
-            },
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) => {
-    const { cwd } = props;
-
-    let output = {};
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            case 'name':
-                output[key] = formatName(val);
-                break;
-
-            case 'inject':
-                output[key] = formatImport(val, props);
-                break;
-
-            case 'documentation':
-                output[key] = val;
-                output['hideDocs'] = !val;
-                break;
-
-            case 'dna':
-                output['hideDna'] = !val;
-                break;
-
-            case 'code':
-                output['hideCode'] = !val;
-                break;
-
-            case 'menuOrder':
-                output['menuOrder'] = formatMenuOrder(val);
-                break;
-
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    // set the ID if none
-    if (!op.get(output, 'ID')) {
-        output['ID'] = formatID(input.name);
-    }
-
-    // route
-    output['route'] = `/toolkit/${output.group}/${output.ID}`;
-
-    // dna
-    output['dna'] = `/toolkit/${output.group}/${output.name}`;
-
-    // component path
-    output['component'] = `appdir/toolkit/${output.group}/${output.name}`;
-
-    // readme
-    if (op.get(output, 'documentation')) {
-        output['readme'] = `${output.component}/readme`;
-    }
-
-    // set the manifest object
-    output['element'] = mapElement({ output, props, input });
-
-    // set the style import statement
-    output['stylesheet'] = mapStyleSheet({ output, props, input });
-
-    // destination
-    output['destination'] = path.normalize(
-        `${cwd}/src/app/toolkit/${output.group}/${output.name}`,
-    );
-
-    delete output.documentation;
-    delete output.inject;
-    delete output.code;
-
-    return output;
-};
-
-const CONFORM_UPDATE = ({ props, input }) => {
-    const { cwd } = props;
-
-    let output = {
-        prev: ['group', 'ID', 'element', 'key'].reduce((val, key) => {
-            val[key] = input[key];
-            return val;
-        }, {}),
-        new: {},
-    };
-
-    const groupElements = Object.keys(
-        op.get(m, `menu.${output.prev.group}.elements`, {}),
-    );
-    const prevMenuOrder = groupElements.indexOf(output.prev.ID);
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            case 'name':
-                output.new[key] = formatName(val);
-                output.prev[key] = formatName(
-                    path.basename(output.prev.element.dna),
-                );
-                break;
-
-            case 'documentation':
-                output.new[key] = val;
-                output.new['hideDocs'] = !val;
-                break;
-
-            case 'dna':
-                output.new['hideDna'] = !val;
-                break;
-
-            case 'code':
-                output.new['hideCode'] = !val;
-                break;
-
-            case 'menuOrder':
-                output.new['menuOrder'] = formatMenuOrder(val);
-                output.prev['menuOrder'] = prevMenuOrder;
-                break;
-
-            default:
-                output.new[key] = val;
-                break;
-        }
-    });
-
-    // set the ID if none
-    output.new['ID'] = formatID(input.name);
-
-    // route
-    output.new['route'] = `/toolkit/${output.new.group}/${output.new.ID}`;
-
-    // dna
-    output.new['dna'] = `/toolkit/${output.new.group}/${output.new.name}`;
-
-    // component path
-    output.new['component'] = `appdir/toolkit/${output.new.group}/${
-        output.new.name
-    }`;
-
-    // readme
-    if (op.get(output, 'new.documentation')) {
-        output.new['readme'] = `${output.new.component}/readme`;
-    }
-
-    // set the manifest object
-    output.new['element'] = mapElement({ output: output.new, props, input });
-
-    // destination
-    output.new['destination'] = path.normalize(
-        `${cwd}/src/app/toolkit/${output.new.group}/${output.new.name}`,
-    );
-    output.prev['destination'] = path.normalize(
-        `${cwd}/src/app/toolkit/${output.prev.group}/${output.prev.name}`,
-    );
-
-    // key
-    output.new['key'] = `menu.${output.new.group}.elements.${output.new.ID}`;
-
-    delete output.new.documentation;
-
-    return output;
-};
-
-/**
- * SCHEMA Function
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA_ACTION = ({ props }) => {
-    const actions = ['create', 'update', 'remove'];
-    const actionList = actions
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(actions.length).length,
-            }),
-        )
-        .join('');
-
-    return {
-        properties: {
-            action: {
-                required: true,
-                message: 'Select an action.',
-                description: `${chalk.white(
-                    'Action:',
-                )} ${actionList}\n    ${chalk.white('Select:')}`,
-                before: val => actionBefore({ val, actions }),
-            },
-        },
-    };
-};
-
-const SCHEMA_CREATE = ({ props }) => {
-    const { cwd, prompt, config } = props;
-
-    const types = op.get(config, 'toolkit.types', []);
-    const typeList = types
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(types.length).length,
-            }),
-        )
-        .join('');
-
-    const styles = topLevelStyles({ props });
-    const styleList = styles
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(styles.length).length,
-            }),
-        )
-        .join('');
-
-    const groups = getGroups({ props });
-    const groupList = groups
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(groups.length).length,
-            }),
-        )
-        .join('');
-
-    const canRemove = removable(prompt);
-    const canOverwrite = overwritable(prompt);
-
-    return {
-        properties: {
-            type: {
-                required: true,
-                message: ` Select the element type`,
-                description: `${chalk.white(
-                    'Type:',
-                )} ${typeList}\n    ${chalk.white('Select:')}`,
-                before: val => typeBefore({ val, types }),
-            },
-            group: {
-                required: true,
-                message:
-                    'Select the menu group or enter the name of a new group.',
-                description: `${chalk.white(
-                    'Menu Group:',
-                )} ${groupList}\n    ${chalk.white('Select:')}`,
-                before: val => groupBefore({ val, groups }),
-            },
-            name: {
-                required: true,
-                description: chalk.white('Element name:'),
-                message: 'Element name is required',
-            },
-            overwrite: {
-                required: true,
-                pattern: /^y|n|Y|N/,
-                message: '',
-                description: `${chalk.white(
-                    'Overwrite existing component?',
-                )} ${chalk.cyan('(Y/N):')}`,
-                ask: () => {
-                    try {
-                        const group =
-                            prompt.override['group'] ||
-                            prompt.history('group').value;
-
-                        let name =
-                            prompt.override['name'] ||
-                            prompt.history('name').value;
-                        name = formatID(name);
-
-                        return (
-                            op.get(
-                                m,
-                                `menu.${group}.elements.${name}`,
-                                false,
-                            ) !== false
-                        );
-                    } catch (err) {
-                        return false;
-                    }
-                },
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-            label: {
-                required: true,
-                description: chalk.white('Menu Link Text:'),
-                message: 'Menu link is required',
-                ask: () => canOverwrite,
-            },
-            menuOrder: {
-                description: chalk.white('Menu Order:'),
-                ask: () => canOverwrite,
-            },
-            documentation: {
-                pattern: /^y|n/i,
-                default: 'Y',
-                description: `${chalk.white('Documentation?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => canOverwrite,
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-            code: {
-                pattern: /^y|n/i,
-                default: 'Y',
-                description: `${chalk.white('Show Code?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => canOverwrite,
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-            dna: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                description: `${chalk.white('Show DNA?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => canOverwrite,
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-            stylesheet: {
-                pattern: /^y|n|Y|N/,
-                default: 'Y',
-                message: ' Add a style sheet?',
-                description: `${chalk.white('Stylesheet?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                ask: () => canOverwrite,
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-            inject: {
-                required: true,
-                pattern: /[0-9\s]/,
-                message: 'Select a number or list of numbers. Example: 1 2 3',
-                description: `${chalk.white(
-                    'Import stylesheet to:',
-                )} ${styleList}\n    ${chalk.white('Select:')}`,
-                ask: () => {
-                    try {
-                        return (
-                            prompt.override['stylesheet'] ||
-                            (prompt.history('stylesheet').value && canOverwrite)
-                        );
-                    } catch (err) {
-                        return false;
-                    }
-                },
-            },
-        },
-    };
-};
-
-const SCHEMA_GROUP = ({ props }) => {
-    const groups = getGroups({ props });
-    const groupList = groups
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(groups.length).length,
-            }),
-        )
-        .join('');
-
-    return {
-        properties: {
-            group: {
-                required: true,
-                message: 'Select the menu group.',
-                description: `${chalk.white(
-                    'Menu Group:',
-                )} ${groupList}\n    ${chalk.white('Select:')}`,
-                before: val => groupBefore({ val, groups }),
-            },
-        },
-    };
-};
-
-const SCHEMA_ELEMENT = ({ props, group }) => {
-    const elements = getElements({ props, group });
-    const elementList = elements
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(elements.length).length,
-            }),
-        )
-        .join('');
-
-    return {
-        properties: {
-            ID: {
-                required: true,
-                message: 'Select the element.',
-                description: `${chalk.white(
-                    'Element:',
-                )} ${elementList}\n    ${chalk.white('Select:')}`,
-                before: input => {
-                    if (!isNaN(input)) {
-                        let val = Number(String(input)) - 1;
-                        if (val < elements.length && val >= 0) {
-                            return elements[val];
-                        } else {
-                            return Number(input);
-                        }
-                    }
-
-                    return input;
-                },
-            },
-        },
-    };
-};
-
-const SCHEMA_UPDATE = ({ props, params }) => {
-    const schemaGroup = SCHEMA_GROUP({ props });
-
-    const { group, name, element, ID } = params;
-    const {
-        type,
-        label,
-        hideDna = false,
-        hideCode = false,
-        hideDocs = false,
-    } = element;
-    const { cwd, prompt, config } = props;
-
-    const types = op.get(config, 'toolkit.types', []);
-    const typeList = types
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(types.length).length,
-            }),
-        )
-        .join('');
-
-    const groupElements = Object.keys(op.get(m, `menu.${group}.elements`, {}));
-    const menuOrder = groupElements.indexOf(ID);
-
-    return {
-        properties: {
-            type: {
-                required: true,
-                default: type,
-                message: ` Select the element type`,
-                description: `${chalk.white(
-                    'Type:',
-                )} ${typeList}\n    ${chalk.white('Select:')}`,
-                before: val => typeBefore({ val, types }),
-            },
-            name: {
-                required: true,
-                default: name,
-                message: chalk.white('Update Element Name:'),
-            },
-            label: {
-                required: true,
-                default: label,
-                description: chalk.white('Menu Link Text:'),
-                message: 'Menu link is required',
-            },
-            menuOrder: {
-                default: menuOrder,
-                description: `${chalk.white('Menu Order:')} ${chalk.cyan(
-                    `[0-${groupElements.length - 1}]`,
-                )}`,
-            },
-            documentation: {
-                pattern: /^y|n/i,
-                default: hideDocs ? 'N' : 'Y',
-                description: `${chalk.white('Documentation?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-            code: {
-                pattern: /^y|n/i,
-                default: hideCode ? 'N' : 'Y',
-                description: `${chalk.white('Show Code?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-            dna: {
-                pattern: /^y|n|Y|N/,
-                default: hideDna ? 'N' : 'Y',
-                description: `${chalk.white('Show DNA?')} ${chalk.cyan(
-                    '(Y/N):',
-                )}`,
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-        },
-    };
-};
-
-const ACTION_CREATE = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    const { id, menuOrder, overwrite } = opt;
-
-    const schema = SCHEMA_CREATE({ props });
-
-    const ovr = mapOverrides({ schema, opt });
-
-    if (id) {
-        ovr['ID'] = formatID(id);
-    }
-
-    if (menuOrder) {
-        ovr['menuOrder'] = formatMenuOrder(menuOrder);
-    }
-
-    prompt.override = ovr;
-    prompt.start();
-    prompt.get(schema, (err, input) => {
-        // Keep this conditional as the first line in this function.
-        // Why? because you will get a js error if you try to set or use anything related to the input object.
-        if (err) {
-            prompt.stop();
-            error(`${NAME} ${err.message}`);
-            return;
-        }
-
-        const params = CONFORM({ input, props });
-        const { overwrite } = params;
-
-        // Exit if overwrite or confirm !== true
-        if (typeof overwrite === 'boolean' && !overwrite) {
-            prompt.stop();
-            message(CANCELED);
-            return;
-        }
-
-        message(`A new element will be created with the following options:`);
-        const preflight = { ...params };
-
-        console.log(
-            prettier.format(JSON.stringify(preflight), {
-                parser: 'json-stringify',
-            }),
-        );
-
-        CONFIRM({ props, params })
-            .then(() => {
-                console.log('');
-
-                generator({ params, props }).then(success => {
-                    console.log('');
-                });
-            })
-            .catch(err => {
-                prompt.stop();
-                message(CANCELED);
-            });
-    });
-};
-
-const ACTION_REMOVE = ({ opt, props }) => {
-    console.log('');
-
-    const { prompt } = props;
-
-    const { id } = opt;
-
-    const schema = SCHEMA_GROUP({ props });
-    const ovr = mapOverrides({ schema, opt });
-
-    let params = {};
-
-    prompt.override = ovr;
-    prompt.start();
-
-    const prom = new Promise((resolve, reject) => {
-        prompt.get(schema, (err, input) => {
-            if (err) {
-                reject(err);
-            } else {
-                resolve(input);
-            }
-        });
-    })
-        .then(input => {
-            params = { ...params, ...input };
-            const { group } = params;
-
-            return new Promise((resolve, reject) => {
-                const schemaID = SCHEMA_ELEMENT({ props, group });
-                prompt.override = params;
-                prompt.get(schemaID, (err, input) => {
-                    if (err) {
-                        reject(err);
-                    } else {
-                        resolve(input);
-                    }
-                });
-            });
-        })
-        .then(input => {
-            params = { ...ovr, ...params, ...input };
-
-            const { cwd } = props;
-            const { ID, group } = params;
-            const key = `menu.${group}.elements.${ID}`;
-            const element = op.get(m, key, {});
-            const description = `${chalk.white(
-                'Are you sure you want to delete',
-            )} ${chalk.cyan(`${group}.${ID}`)} ${chalk.white(
-                'element?',
-            )} ${chalk.cyan('(Y/N):')}`;
-
-            params['key'] = key;
-            params['remove'] = true;
-            params['element'] = element;
-            params['name'] = path.basename(element.dna);
-            params['destination'] = path.normalize(
-                `${cwd}/src/app/${element.dna}`,
-            );
-
-            return CONFIRM({ props, params, description });
-        })
-        .then(confirmed => {
-            params['confirmed'] = confirmed;
-
-            console.log('');
-
-            return generator({ params, props });
-        })
-        .then(success => {
-            console.log('');
-        })
-        .catch(err => {
-            prompt.stop();
-            message('Element remove canceled!');
-        });
-};
-
-const ACTION_UPDATE = ({ opt, props }) => {
-    console.log('');
-
-    const { prompt } = props;
-
-    const schemaGroup = SCHEMA_GROUP({ props });
-    const ovr = ['id', 'group'].reduce((val, k) => {
-        const skey = k === 'id' ? 'ID' : k;
-        val[skey] = opt[k];
-        return val;
-    }, {});
-
-    let params = {};
-
-    prompt.override = ovr;
-    prompt.start();
-
-    const prom = new Promise((resolve, reject) => {
-        prompt.get(schemaGroup, (err, input) => {
-            if (err) {
-                reject(err);
-            } else {
-                resolve(input);
-            }
-        });
-    })
-        .then(input => {
-            params = { ...params, ...input };
-            const { group } = params;
-            const schemaElement = SCHEMA_ELEMENT({ props, group });
-
-            return new Promise((resolve, reject) => {
-                prompt.get(schemaElement, (err, input) => {
-                    if (err) {
-                        reject(err);
-                    } else {
-                        resolve(input);
-                    }
-                });
-            });
-        })
-        .then(input => {
-            params = { ...params, ...input };
-            const { group, ID } = params;
-            const key = `menu.${group}.elements.${ID}`;
-            const element = op.get(m, key, null);
-
-            if (!element) {
-                throw `${chalk.cyan(`${group}.${ID}`)} element not found.`;
-            }
-
-            params['element'] = element;
-            params['key'] = key;
-            params['name'] = path.basename(element.dna);
-
-            schemaUpdate = SCHEMA_UPDATE({ props, params });
-
-            return new Promise((resolve, reject) => {
-                prompt.get(schemaUpdate, (err, input) => {
-                    if (err) {
-                        reject(err);
-                    } else {
-                        resolve(input);
-                    }
-                });
-            });
-        })
-        .then(input => {
-            params = { ...params, ...input };
-
-            params = CONFORM_UPDATE({ props, input: params });
-
-            console.log('');
-
-            console.log(
-                prettier.format(JSON.stringify(params.new), {
-                    parser: 'json-stringify',
-                }),
-            );
-
-            return CONFIRM({ props, params });
-        })
-        .then(confirmed => {
-            params['update'] = confirmed;
-
-            console.log('');
-
-            return generator({ params, props });
-        })
-        .then(success => {
-            console.log('');
-        })
-        .catch(err => {
-            prompt.stop();
-            console.log('');
-            error('Element update canceled');
-        });
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ action, opt, props }) => {
-    Object.entries(manifest(props)).forEach(([key, value]) => {
-        m[key] = value;
-    });
-
-    if (!action) {
-        const { prompt } = props;
-        prompt.start();
-        prompt.get(SCHEMA_ACTION({ props }), (err, input) => {
-            if (!err) {
-                const { action } = input;
-                ACTION({ action, opt, props });
-            } else {
-                prompt.stop();
-            }
-        });
-    } else {
-        switch (action) {
-            case 'update':
-                ACTION_UPDATE({ opt, props });
-                break;
-
-            case 'remove':
-                ACTION_REMOVE({ opt, props });
-                break;
-
-            case 'create':
-            default:
-                ACTION_CREATE({ opt, props });
-        }
-    }
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action((action, opt) => ACTION({ action, opt, props }))
-        .option('-o, --overwrite [overwrite]', 'Overwrite existing element.')
-        .option('-i, --id [id]', 'The element ID.')
-        .option('-n, --name [name]', 'The element name.')
-        .option('-g, --group [group]', 'The menu group to add the element to.')
-        .option('-l, --label [label]', 'The menu link text.')
-        .option('-m, --menu-order [menuOrder]', 'The menu link index.')
-        .option('-s, --stylesheet [stylesheet]', 'Add a stylesheet.')
-        .option('-d, --documentation [documentation]', 'Show readme.')
-        .option('-c, --code [code]', 'Show Code view.')
-        .option('-D, --dna [dna]', 'Show DNA info.')
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    ACTION,
-    CONFIRM,
-    CONFORM,
-    COMMAND,
-    NAME,
-    formatMenuOrder,
-    formatID,
-    mapOverrides,
-};
diff --git a/.core/.cli/commands/toolkit/group/actions/create.js b/.core/.cli/commands/toolkit/group/actions/create.js
deleted file mode 100644
index f33fc79c..00000000
--- a/.core/.cli/commands/toolkit/group/actions/create.js
+++ /dev/null
@@ -1,101 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const now = Date.now();
-
-    return {
-        backupManifest: ({ action, params, props }) => {
-            const { cwd } = props;
-
-            message(`backing up toolkit manifest...`);
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = path.join(
-                homedir,
-                '.arcli',
-                cwd,
-                '.BACKUP',
-                'toolkit',
-            );
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        manifest: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { group, id, menuOrder } = params;
-
-            const manifest = require('../../manifest')(props);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            if (!isNaN(menuOrder)) {
-                const keys = Object.keys(op.get(manifest, `menu`, {})).filter(
-                    key => {
-                        return key !== id;
-                    },
-                );
-                keys.splice(menuOrder, 0, id);
-
-                const groups = keys.reduce((obj, key) => {
-                    obj[key] = op.get(manifest, `menu.${key}`, {});
-                    return obj;
-                }, {});
-
-                op.set(manifest, `menu`, groups);
-            }
-
-            op.set(manifest, `menu.${id}`, group);
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            )
-                .replace(/\"require(.*?)\.default\"/gim, 'require$1.default')
-                .replace(/\\"/g, '"')
-                .replace(/\\'/g, "'");
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(index, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/group/actions/remove.js b/.core/.cli/commands/toolkit/group/actions/remove.js
deleted file mode 100644
index 093e53d1..00000000
--- a/.core/.cli/commands/toolkit/group/actions/remove.js
+++ /dev/null
@@ -1,85 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const now = Date.now();
-
-    return {
-        backupManifest: ({ action, params, props }) => {
-            const { cwd } = props;
-
-            message(`backing up toolkit manifest...`);
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = path.join(
-                homedir,
-                '.arcli',
-                cwd,
-                '.BACKUP',
-                'toolkit',
-            );
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        manifest: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { id } = params;
-
-            const manifest = require('../../manifest')(props);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            op.del(manifest, `menu.${id}`);
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            )
-                .replace(/\"require(.*?)\.default\"/gim, 'require$1.default')
-                .replace(/\\"/g, '"')
-                .replace(/\\'/g, "'");
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(index, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/group/actions/update.js b/.core/.cli/commands/toolkit/group/actions/update.js
deleted file mode 100644
index a57efeb6..00000000
--- a/.core/.cli/commands/toolkit/group/actions/update.js
+++ /dev/null
@@ -1,140 +0,0 @@
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-const handlebars = require('handlebars').compile;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const now = Date.now();
-
-    return {
-        backupManifest: ({ action, params, props }) => {
-            const { cwd } = props;
-
-            message(`backing up toolkit manifest...`);
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = path.join(
-                homedir,
-                '.arcli',
-                cwd,
-                '.BACKUP',
-                'toolkit',
-            );
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        manifest: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { group, id, menuOrder, newid } = params;
-
-            const manifest = require('../../manifest')(props);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            op.del(manifest, `menu.${id}`);
-
-            if (!isNaN(menuOrder)) {
-                const keys = Object.keys(op.get(manifest, `menu`, {})).filter(
-                    key => {
-                        return key !== id;
-                    },
-                );
-                keys.splice(menuOrder, 0, newid);
-
-                const groups = keys.reduce((obj, key) => {
-                    obj[key] = op.get(manifest, `menu.${key}`, {});
-                    return obj;
-                }, {});
-
-                op.set(manifest, `menu`, groups);
-            }
-
-            const keys = ['route', 'dna', 'component', 'readme'];
-            const regex = new RegExp(`\/${id}\/`, 'gi');
-
-            group.elements = Object.keys(group.elements).reduce(
-                (obj, element) => {
-                    obj[element] = { ...group.elements[element] };
-                    keys.forEach(key => {
-                        let val = op.get(obj[element], key);
-                        if (val) {
-                            val = String(val).replace(regex, `/${newid}/`);
-                            obj[element][key] = val;
-                        }
-                    });
-                    return obj;
-                },
-                {},
-            );
-
-            op.set(manifest, `menu.${newid}`, group);
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            )
-                .replace(/\"require(.*?)\.default\"/gim, 'require$1.default')
-                .replace(/\\"/g, '"')
-                .replace(/\\'/g, "'");
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(index, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        rename: ({ action, params, props }) => {
-            const { cwd } = props;
-            const { id, newid } = params;
-            const curr = path.normalize(`${cwd}/src/app/toolkit/${id}`);
-            const dest = path.normalize(`${cwd}/src/app/toolkit/${newid}`);
-
-            fs.ensureDirSync(dest);
-
-            return new Promise((resolve, reject) => {
-                fs.move(curr, dest, err => {
-                    if (err) {
-                        reject(err);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/group/generator.js b/.core/.cli/commands/toolkit/group/generator.js
deleted file mode 100644
index ee8912da..00000000
--- a/.core/.cli/commands/toolkit/group/generator.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-const spinner = ora({
-    spinner: 'dots',
-    color: 'cyan',
-});
-
-module.exports = ({ action, params, props }) => {
-    const actions = require(`./actions/${action}`)(spinner);
-    spinner.start();
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/toolkit/group/index.js b/.core/.cli/commands/toolkit/group/index.js
deleted file mode 100644
index 3beabbb1..00000000
--- a/.core/.cli/commands/toolkit/group/index.js
+++ /dev/null
@@ -1,647 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const prettier = require('prettier');
-const path = require('path');
-const op = require('object-path');
-const generator = require('./generator');
-const manifest = require('../manifest');
-const mod = path.dirname(require.main.filename);
-const pad = require(`${mod}/lib/pad`);
-const listItem = require(`${mod}/lib/listItem`);
-const { error, message } = require(`${mod}/lib/messenger`);
-
-const m = {};
-
-const { formatName, formatRoute } = require('../../reactium/component');
-
-const { formatID, formatMenuOrder, mapOverrides } = require('../element');
-
-const actionBefore = ({ val, actions, defaultAction = 'create' }) => {
-    if (!isNaN(val)) {
-        val = Number(String(val)) - 1;
-
-        if (val >= actions.length || val < 0) {
-            return defaultAction;
-        } else {
-            return actions[val];
-        }
-    } else {
-        return defaultAction;
-    }
-};
-
-const groupBefore = ({ val, groups, defaultGroup = 'uncategorized' }) => {
-    if (!isNaN(val)) {
-        val = Number(String(val)) - 1;
-        return groups[val];
-    } else {
-        return formatID(val);
-    }
-};
-
-const getGroups = ({ props }) => {
-    return Object.keys(m.menu);
-};
-
-const overwritable = prompt => {
-    let overwrite;
-
-    try {
-        overwrite =
-            prompt.override['overwrite'] || prompt.history('overwrite').value;
-    } catch (err) {
-        overwrite = true;
-    }
-
-    overwrite = overwrite === '' ? true : overwrite;
-
-    return overwrite;
-};
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli group
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'group [action]';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Toolkit:  Manage a new toolkit group.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Action canceled!';
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params, message = 'Proceed?' }) => {
-    const { prompt } = props;
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: `${chalk.white(message)} ${chalk.cyan(
-                            '(Y/N):',
-                        )}`,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input) => {
-                let confirmed;
-
-                try {
-                    confirmed = input.confirmed;
-                } catch (err) {
-                    confirmed = false;
-                }
-
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    resolve({ ...params, ...input });
-                }
-            },
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM_CREATE = ({ input, props }) => {
-    const { cwd } = props;
-
-    let output = {};
-    const groups = getGroups({ props });
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            case 'menuOrder':
-                output['menuOrder'] = formatMenuOrder(val);
-                break;
-
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    if (output.menuOrder >= groups.length - 1) {
-        delete output.menuOrder;
-    }
-
-    output.group = {
-        label: output.label,
-        route: `/toolkit/${output.id}`,
-        elements: {},
-    };
-
-    delete output.label;
-
-    return output;
-};
-
-const CONFORM_UPDATE = ({ input, props }) => {
-    const { cwd } = props;
-
-    let output = {};
-    const groups = getGroups({ props });
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            case 'menuOrder':
-                output['menuOrder'] = formatMenuOrder(val);
-                break;
-
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    if (output.menuOrder >= groups.length - 1) {
-        delete output.menuOrder;
-    }
-
-    output.group = m.menu[output.id];
-    output.group.label = output.label;
-    output.group.route = `/toolkit/${output.newid}`;
-
-    return output;
-};
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () => {
-    console.log('');
-    console.log('Example:');
-    console.log('');
-    console.log('  Some example of what this does');
-    console.log('');
-};
-
-/**
- * SCHEMA_* Functions
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA_ACTION = ({ props }) => {
-    const actions = ['create', 'update', 'remove'];
-    const actionList = actions
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(actions.length).length,
-            }),
-        )
-        .join('');
-
-    return {
-        properties: {
-            action: {
-                required: true,
-                message: 'Select an action.',
-                description: `${chalk.white(
-                    'Action:',
-                )} ${actionList}\n    ${chalk.white('Select:')}`,
-                before: val => actionBefore({ val, actions }),
-            },
-        },
-    };
-};
-
-const SCHEMA_CREATE = ({ props }) => {
-    const { cwd, prompt } = props;
-    const groups = getGroups({ props });
-    const groupsLength = groups.length - 1;
-    const canOverwrite = overwritable(prompt);
-
-    return {
-        properties: {
-            id: {
-                description: chalk.white('Group ID:'),
-                required: true,
-                message: 'Group ID is a required parameter',
-                before: val => {
-                    return formatID(val);
-                },
-            },
-            overwrite: {
-                required: true,
-                pattern: /^y|n|Y|N/,
-                message: '',
-                description: `${chalk.white(
-                    'Overwrite existing group?',
-                )} ${chalk.cyan('(Y/N):')}`,
-                ask: () => {
-                    try {
-                        const id =
-                            prompt.override['id'] || prompt.history('id').value;
-                        return op.get(m, `menu.${id}`, false) !== false;
-                    } catch (err) {
-                        return false;
-                    }
-                },
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-            label: {
-                required: true,
-                description: chalk.white('Menu Link Text:'),
-                message: 'Menu link is required',
-                ask: () => canOverwrite,
-            },
-            menuOrder: {
-                description: `${chalk.white('Menu Order')} ${chalk.cyan(
-                    `[0-${groupsLength}]:`,
-                )}`,
-                default: groupsLength,
-                ask: () => canOverwrite,
-                before: val => {
-                    if (!isNaN(val)) {
-                        val = Number(String(val));
-                        val = Math.max(val, 0);
-                        val = Math.min(val, groupsLength);
-                    } else {
-                        val = groupsLength;
-                    }
-
-                    return val;
-                },
-            },
-        },
-    };
-};
-
-const SCHEMA_ID = ({ props }) => {
-    const groups = getGroups({ props });
-    const groupList = groups
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(groups.length).length,
-            }),
-        )
-        .join('');
-
-    return {
-        properties: {
-            id: {
-                required: true,
-                message: 'Select the group.',
-                description: `${chalk.white(
-                    'Group:',
-                )} ${groupList}\n    ${chalk.white('Select:')}`,
-                before: val => groupBefore({ val, groups }),
-            },
-        },
-    };
-};
-
-const SCHEMA_UPDATE = ({ props, id }) => {
-    const { cwd, prompt } = props;
-    const canOverwrite = overwritable(prompt);
-    const groups = getGroups({ props });
-    const group = m.menu[id];
-    const groupsLength = groups.length - 1;
-    const menuOrder = groups.indexOf(id);
-
-    return {
-        properties: {
-            newid: {
-                description: chalk.white('Update ID:'),
-                required: true,
-                default: id,
-                message: 'Group ID is a required parameter',
-                before: val => {
-                    return formatID(val);
-                },
-            },
-            label: {
-                required: true,
-                description: chalk.white('Menu Link Text:'),
-                message: 'Menu link is required',
-                default: group.label,
-            },
-            menuOrder: {
-                description: `${chalk.white('Menu Order')} ${chalk.cyan(
-                    `[0-${groupsLength}]:`,
-                )}`,
-                default: menuOrder,
-                before: val => {
-                    if (!isNaN(val)) {
-                        val = Number(String(val));
-                        val = Math.max(val, 0);
-                        val = Math.min(val, groupsLength);
-                    } else {
-                        val = groupsLength;
-                    }
-
-                    return val;
-                },
-            },
-        },
-    };
-};
-
-/**
- * ACTION Functions
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ action, opt, props }) => {
-    Object.entries(manifest(props)).forEach(([key, value]) => {
-        m[key] = value;
-    });
-
-    if (!action) {
-        const { prompt } = props;
-        prompt.start();
-        prompt.get(SCHEMA_ACTION({ props }), (err, input) => {
-            if (!err) {
-                const { action } = input;
-                ACTION({ action, opt, props });
-            } else {
-                prompt.stop();
-            }
-        });
-    } else {
-        switch (action) {
-            case 'update':
-                ACTION_UPDATE({ opt, props });
-                break;
-
-            case 'remove':
-                ACTION_REMOVE({ opt, props });
-                break;
-
-            case 'create':
-                ACTION_CREATE({ opt, props });
-        }
-    }
-};
-
-const ACTION_CREATE = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    const schema = SCHEMA_CREATE({ props });
-
-    const ovr = mapOverrides({ schema, opt });
-
-    if (op.has(ovr, 'id')) {
-        ovr['id'] = formatID(ovr.id);
-    }
-
-    if (op.has(ovr, 'menuOrder')) {
-        ovr['menuOrder'] = formatMenuOrder(ovr.menuOrder);
-    }
-
-    prompt.override = ovr;
-    prompt.start();
-    prompt.get(schema, (err, input) => {
-        // Keep this conditional as the first line in this function.
-        // Why? because you will get a js error if you try to set or use anything related to the input object.
-        if (err) {
-            prompt.stop();
-            error(`${NAME} ${err.message}`);
-            return;
-        }
-
-        const params = CONFORM_CREATE({ input, props });
-        const { overwrite } = params;
-
-        // Exit if overwrite or confirm !== true
-        if (typeof overwrite === 'boolean' && !overwrite) {
-            prompt.stop();
-            message('Group create canceled!');
-            return;
-        }
-
-        message(`A new group will be created with the following options:`);
-        const preflight = { ...input };
-
-        console.log(
-            prettier.format(JSON.stringify(preflight), {
-                parser: 'json-stringify',
-            }),
-        );
-
-        CONFIRM({ props, params })
-            .then(() => {
-                console.log('');
-
-                generator({ action: 'create', params, props }).then(success => {
-                    console.log('');
-                });
-            })
-            .catch(err => {
-                prompt.stop();
-                message('Group create canceled!');
-            });
-    });
-};
-
-const ACTION_REMOVE = ({ opt, props }) => {
-    console.log('');
-
-    const { prompt } = props;
-
-    const schema = SCHEMA_ID({ props });
-
-    const ovr = mapOverrides({ schema, opt });
-
-    if (op.has(ovr, 'id')) {
-        ovr['id'] = formatID(ovr.id);
-    }
-
-    prompt.override = ovr;
-    prompt.start();
-    prompt.get(schema, (err, input) => {
-        // Keep this conditional as the first line in this function.
-        // Why? because you will get a js error if you try to set or use anything related to the input object.
-        if (err) {
-            prompt.stop();
-            error(`${NAME} ${err.message}`);
-            return;
-        }
-
-        const params = { ...input };
-
-        const warning = `Are you sure you want to remove the ${chalk.cyan(
-            params.id,
-        )} group?`;
-
-        CONFIRM({ props, params, message: warning })
-            .then(() => {
-                console.log('');
-
-                generator({ action: 'remove', params, props }).then(success => {
-                    console.log('');
-                });
-            })
-            .catch(err => {
-                prompt.stop();
-                message('Group remove canceled!');
-            });
-    });
-};
-
-const ACTION_UPDATE = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    let ovr = mapOverrides({ schema: SCHEMA_ID({ props }), opt });
-
-    if (op.has(ovr, 'id')) {
-        ovr['id'] = formatID(ovr.id);
-    }
-
-    if (op.has(ovr, 'menuOrder')) {
-        ovr['menuOrder'] = formatMenuOrder(ovr.menuOrder);
-    }
-
-    prompt.override = ovr;
-    prompt.start();
-
-    new Promise((resolve, reject) => {
-        prompt.get(SCHEMA_ID({ props }), (err, input) => {
-            if (err) {
-                reject(err);
-            } else {
-                resolve(input);
-            }
-        });
-    })
-        .then(input => {
-            prompt.override = input;
-
-            const { id } = input;
-            const schema = SCHEMA_UPDATE({ props, id });
-
-            return new Promise((resolve, reject) => {
-                prompt.get(schema, (err, input) => {
-                    input = { ...input, ...prompt.override };
-                    if (err) {
-                        reject(err);
-                    } else {
-                        resolve(input);
-                    }
-                });
-            });
-        })
-        .then(input => {
-            const params = CONFORM_UPDATE({ input, props });
-            const { overwrite } = params;
-
-            // Exit if overwrite or confirm !== true
-            if (typeof overwrite === 'boolean' && !overwrite) {
-                prompt.stop();
-                message('Group update canceled!');
-                return;
-            }
-
-            message(
-                `The ${chalk.cyan(
-                    params.id,
-                )} group will be updated with the following options:`,
-            );
-            const preflight = { ...input };
-
-            console.log(
-                prettier.format(JSON.stringify(preflight), {
-                    parser: 'json-stringify',
-                }),
-            );
-
-            return CONFIRM({ props, params });
-        })
-        .then(params => {
-            console.log('');
-
-            generator({ action: 'update', params, props }).then(success => {
-                console.log('');
-            });
-        })
-        .catch(err => {
-            prompt.stop();
-            message('Group update canceled');
-        });
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action((action, opt) => ACTION({ action, opt, props }))
-        .option(
-            '-o, --overwrite [overwrite]',
-            'Overwrite existing group. Beware this will remove all children of the group.',
-        )
-        .option('-i, --id [id]', 'The group ID.')
-        .option('-l, --label [label]', 'Menu Text.')
-        .option('-m, --menu-order [menuOrder]', 'Menu order.')
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    ACTION,
-    CONFIRM,
-    CONFORM_CREATE,
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/commands/toolkit/manifest.js b/.core/.cli/commands/toolkit/manifest.js
deleted file mode 100644
index 994ff44f..00000000
--- a/.core/.cli/commands/toolkit/manifest.js
+++ /dev/null
@@ -1,50 +0,0 @@
-
-const chalk  = require('chalk');
-const path   = require('path');
-const fs     = require('fs-extra');
-const globby = require('globby').sync;
-
-
-module.exports = (props) => {
-    const { cwd } = props;
-
-    let manifest;
-
-    const scan = globby([
-        `${cwd}/src/**/toolkit/index.js`,
-        `${cwd}/src/**/toolkit/manifest.js`
-    ]);
-
-    try {
-        const file = scan[0];
-        const filecontent = String(fs.readFileSync(file))
-        .replace(
-            /require(.*?)\.default/gim,
-            '`require$1.default`'
-        )
-        .replace(
-            /require(.*?)\n\s+\.default/gi,
-            '`require$1.default`'
-        )
-        .replace(
-            /\\"/g,
-            '"'
-        )
-        .replace(
-            /\\'/g,
-            "'"
-        );
-
-        const tmp = path.normalize(`${cwd}/src/app/toolkit/.tmp/toolkit.js`);
-
-        fs.ensureFileSync(tmp);
-        fs.writeFileSync(tmp, filecontent);
-
-        manifest = require(tmp);
-
-    } catch (err) {
-        manifest = {};
-    }
-
-    return manifest;
-};
diff --git a/.core/.cli/commands/toolkit/theme/actions/create.js b/.core/.cli/commands/toolkit/theme/actions/create.js
deleted file mode 100644
index 8030192d..00000000
--- a/.core/.cli/commands/toolkit/theme/actions/create.js
+++ /dev/null
@@ -1,98 +0,0 @@
-const now = Date.now();
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const backupPath = cwd =>
-        path.join(homedir, '.arcli', cwd, '.BACKUP', 'toolkit');
-
-    return {
-        backup: ({ action, params, props }) => {
-            message(`backing up toolkit manifest...`);
-
-            const { cwd } = props;
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = backupPath(cwd);
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        manifest: ({ action, params, props }) => {
-            message(`updating toolkit manifest...`);
-
-            const { cwd } = props;
-            const { menuOrder, selected = false } = params;
-
-            const theme = { ...params };
-            delete theme.menuOrder;
-
-            const indexFile = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-            const manifest = require('../../manifest')(props);
-            const themes = op.get(manifest, 'themes', []).map(item => {
-                if (selected === true) {
-                    delete item.selected;
-                }
-
-                return item;
-            });
-
-            if (!isNaN(menuOrder)) {
-                themes.splice(menuOrder, 0, theme);
-            } else {
-                themes.push(theme);
-            }
-
-            manifest.themes = themes;
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            )
-                .replace(/\"require(.*?)\.default\"/gim, 'require$1.default')
-                .replace(/\\"/g, '"')
-                .replace(/\\'/g, "'");
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(indexFile, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/theme/actions/remove.js b/.core/.cli/commands/toolkit/theme/actions/remove.js
deleted file mode 100644
index e6614084..00000000
--- a/.core/.cli/commands/toolkit/theme/actions/remove.js
+++ /dev/null
@@ -1,92 +0,0 @@
-const now = Date.now();
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const _ = require('underscore');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const backupPath = cwd =>
-        path.join(homedir, '.arcli', cwd, '.BACKUP', 'toolkit');
-
-    return {
-        backup: ({ action, params, props }) => {
-            message(`backing up toolkit manifest...`);
-
-            const { cwd } = props;
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = backupPath(cwd);
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        manifest: ({ action, params, props }) => {
-            message(`updating manifest...`);
-
-            const { cwd } = props;
-            const { name } = params;
-
-            const indexFile = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-            const manifest = require('../../manifest')(props);
-
-            const themes = op.get(manifest, 'themes', []);
-            const index = _.findIndex(themes, { name });
-
-            if (index > -1) {
-                themes.splice(index, 1);
-                manifest.themes = themes;
-            } else {
-                resolve({ action, status: 200 });
-                return;
-            }
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            )
-                .replace(/\"require(.*?)\.default\"/gim, 'require$1.default')
-                .replace(/\\"/g, '"')
-                .replace(/\\'/g, "'");
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(indexFile, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/theme/actions/update.js b/.core/.cli/commands/toolkit/theme/actions/update.js
deleted file mode 100644
index bc9f3ab1..00000000
--- a/.core/.cli/commands/toolkit/theme/actions/update.js
+++ /dev/null
@@ -1,116 +0,0 @@
-const now = Date.now();
-const path = require('path');
-const chalk = require('chalk');
-const fs = require('fs-extra');
-const op = require('object-path');
-const homedir = require('os').homedir();
-const prettier = require('prettier').format;
-
-module.exports = spinner => {
-    const message = text => {
-        if (spinner) {
-            spinner.text = text;
-        }
-    };
-
-    const backupPath = cwd =>
-        path.join(homedir, '.arcli', cwd, '.BACKUP', 'toolkit');
-
-    return {
-        backup: ({ action, params, props }) => {
-            message(`backing up toolkit manifest...`);
-
-            const { cwd } = props;
-
-            // Backup the ~/src/app/toolkit/index.js file
-            const backupDir = backupPath(cwd);
-            const backupIndex = path.normalize(`${backupDir}/${now}.index.js`);
-            const index = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-
-            fs.ensureDirSync(backupDir);
-
-            return new Promise((resolve, reject) => {
-                fs.copy(index, backupIndex, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-
-        manifest: ({ action, params, props }) => {
-            message(`updating manifest...`);
-
-            const { cwd } = props;
-            const {
-                menuOrder = null,
-                name,
-                newName,
-                selected = false,
-            } = params;
-
-            let theme = { ...params };
-            theme.name = newName;
-
-            delete theme.menuOrder;
-            delete theme.newName;
-
-            const indexFile = path.normalize(`${cwd}/src/app/toolkit/index.js`);
-            const manifest = require('../../manifest')(props);
-
-            let currentIndex = -1;
-            const themes = op.get(manifest, 'themes', []).map((item, i) => {
-                if (selected === true) {
-                    delete item.selected;
-                }
-
-                if (item.name === name) {
-                    currentIndex = i;
-                }
-
-                return item;
-            });
-
-            if (currentIndex !== -1) {
-                themes.splice(currentIndex, 1);
-            }
-
-            if (!isNaN(menuOrder)) {
-                themes.splice(menuOrder, 0, theme);
-            } else {
-                themes.push(theme);
-            }
-
-            manifest.themes = themes;
-
-            let content = String(
-                prettier(JSON.stringify(manifest), {
-                    parser: 'json-stringify',
-                }),
-            )
-                .replace(/\"require(.*?)\.default\"/gim, 'require$1.default')
-                .replace(/\\"/g, '"')
-                .replace(/\\'/g, "'");
-
-            content = prettier(`module.exports = ${content};`, {
-                parser: 'babel',
-                printWidth: 240,
-                singleQuote: true,
-                tabWidth: 4,
-                trailingComma: 'all',
-            });
-
-            return new Promise((resolve, reject) => {
-                fs.writeFile(indexFile, content, error => {
-                    if (error) {
-                        reject(error);
-                    } else {
-                        resolve({ action, status: 200 });
-                    }
-                });
-            });
-        },
-    };
-};
diff --git a/.core/.cli/commands/toolkit/theme/generator.js b/.core/.cli/commands/toolkit/theme/generator.js
deleted file mode 100644
index aa2212a4..00000000
--- a/.core/.cli/commands/toolkit/theme/generator.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const ora = require('ora');
-const ActionSequence = require('action-sequence');
-
-const spinner = ora({
-    spinner: 'dots',
-    color: 'cyan',
-});
-
-module.exports = ({ action, params, props }) => {
-    console.log('');
-
-    spinner.start();
-
-    const actions = require(`./actions/${action}`)(spinner);
-
-    return ActionSequence({
-        actions,
-        options: { params, props },
-    })
-        .then(success => {
-            spinner.succeed('complete!');
-            return success;
-        })
-        .catch(error => {
-            spinner.fail('error!');
-            return error;
-        });
-};
diff --git a/.core/.cli/commands/toolkit/theme/index.js b/.core/.cli/commands/toolkit/theme/index.js
deleted file mode 100644
index 699e9e4b..00000000
--- a/.core/.cli/commands/toolkit/theme/index.js
+++ /dev/null
@@ -1,774 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-const chalk = require('chalk');
-const generator = require('./generator');
-const prettier = require('prettier');
-const path = require('path');
-const mod = path.dirname(require.main.filename);
-const listItem = require(`${mod}/lib/listItem`);
-const manifest = require('../manifest');
-const _ = require('underscore');
-const op = require('object-path');
-
-const m = {};
-
-const { error, message } = require(`${mod}/lib/messenger`);
-
-const { formatID } = require('../element');
-
-const formatMenuOrder = val => {
-    if (isNaN(val)) {
-        return null;
-    }
-    return Number(String(val).replace(/\D/gi, ''));
-};
-
-const formatStyleSheet = ({ val, props }) => {
-    const { cwd } = props;
-
-    val = val.replace(/^style\//gi, path.normalize(`${cwd}/src/assets/style/`));
-    val = val.replace(/^cwd/gi, cwd);
-    return val;
-};
-
-const actionBefore = ({ val, actions, defaultAction = 'create' }) => {
-    if (!isNaN(val)) {
-        val = Number(String(val)) - 1;
-
-        if (val >= actions.length || val < 0) {
-            return defaultAction;
-        } else {
-            return actions[val];
-        }
-    } else {
-        return defaultAction;
-    }
-};
-
-const themeBefore = ({ val, themes }) => {
-    let theme = {};
-
-    if (isNaN(val) && val !== '0') {
-        val = _.findIndex(themes, { name: val });
-        if (val < 0) {
-            return;
-        }
-
-        theme = themes[val];
-    } else {
-        val = Number(val) - 1;
-        theme = themes[val];
-    }
-
-    return op.get(theme, 'name');
-};
-
-const mapOverrides = ({ keys, opt }) => {
-    return keys.reduce((obj, key) => {
-        let val = opt[key];
-        val = typeof val === 'function' ? null : val;
-        val = val === 0 ? '0' : val;
-        if (val) {
-            obj[key] = val;
-        }
-        return obj;
-    }, {});
-};
-
-const overwritable = prompt => {
-    let overwrite;
-
-    try {
-        overwrite =
-            prompt.override['overwrite'] || prompt.history('overwrite').value;
-    } catch (err) {
-        overwrite = true;
-    }
-
-    overwrite = overwrite === '' ? true : overwrite;
-
-    return overwrite;
-};
-
-/**
- * NAME String
- * @description Constant defined as the command name. Value passed to the commander.command() function.
- * @example $ arcli theme
- * @see https://www.npmjs.com/package/commander#command-specific-options
- * @since 2.0.0
- */
-const NAME = 'theme [action]';
-
-/**
- * DESC String
- * @description Constant defined as the command description. Value passed to
- * the commander.desc() function. This string is also used in the --help flag output.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const DESC = 'Toolkit:  Create/Update/Remove a toolkit theme.';
-
-/**
- * CANCELED String
- * @description Message sent when the command is canceled
- * @since 2.0.0
- */
-const CANCELED = 'Theme action canceled!';
-
-/**
- * confirm({ props:Object, params:Object }) Function
- * @description Prompts the user to confirm the operation
- * @since 2.0.0
- */
-const CONFIRM = ({ props, params, msg }) => {
-    const { prompt } = props;
-
-    if (!msg) {
-        msg = `${chalk.white('Proceed?')} ${chalk.cyan('(Y/N):')}`;
-    }
-
-    return new Promise((resolve, reject) => {
-        prompt.get(
-            {
-                properties: {
-                    confirmed: {
-                        description: msg,
-                        type: 'string',
-                        required: true,
-                        pattern: /^y|n|Y|N/,
-                        message: ` `,
-                        before: val => {
-                            return String(val).toLowerCase() === 'y';
-                        },
-                    },
-                },
-            },
-            (error, input) => {
-                let confirmed;
-
-                try {
-                    confirmed = input.confirmed;
-                } catch (err) {
-                    confirmed = false;
-                }
-
-                if (error || confirmed === false) {
-                    reject(error);
-                } else {
-                    resolve(params);
-                }
-            }
-        );
-    });
-};
-
-/**
- * conform(input:Object) Function
- * @description Reduces the input object.
- * @param input Object The key value pairs to reduce.
- * @since 2.0.0
- */
-const CONFORM = ({ input, props }) => {
-    const { cwd } = props;
-    const themes = op.get(m, 'themes', []);
-
-    let output = {};
-
-    Object.entries(input).forEach(([key, val]) => {
-        switch (key) {
-            case 'active':
-                val = val === 'n' ? false : val;
-                output[key] = val;
-                break;
-
-            case 'stylesheet':
-                val = formatStyleSheet({ val, props });
-                output[key] = val;
-                break;
-
-            case 'menuOrder':
-                val = formatMenuOrder(val);
-
-                if ((val && !isNaN(val)) || val === '0') {
-                    val = Number(val);
-                    val = Math.max(0, val);
-                    val = Math.min(themes.length, val);
-
-                    if (val < themes.length) {
-                        output[key] = val;
-                    }
-                }
-
-                break;
-            default:
-                output[key] = val;
-                break;
-        }
-    });
-
-    return output;
-};
-
-/**
- * HELP Function
- * @description Function called in the commander.on('--help', callback) callback.
- * @see https://www.npmjs.com/package/commander#automated---help
- * @since 2.0.0
- */
-const HELP = () => {
-    console.log('');
-    console.log('Usage:');
-    console.log('');
-    console.log('  <create>');
-    console.log(
-        '  Create a new theme named My Theme with a top level stylesheet which will be compiled to ~/public/assets/style/my-theme.css'
-    );
-    console.log(
-        `  $ arcli theme create --name 'My Theme' --stylesheet 'cwd/src/assets/styles/my-theme.scss' --active`
-    );
-    console.log('');
-    console.log('  <update>');
-    console.log(
-        '  Rename theme and stylesheet, then move it to 2nd menu index position and deactivate it.'
-    );
-    console.log(
-        `  $ arcli theme update --name 'My Theme' --newName 'Your Theme' --stylesheet 'cwd/src/assets/styles/your-theme.scss' --menu-order 2 --inactive`
-    );
-    console.log('');
-    console.log('  <remove>');
-    console.log(`  $ arcli theme remove --name 'My Theme'`);
-    console.log('');
-};
-
-/**
- * SCHEMA Function
- * @description used to describe the input for the prompt function.
- * @see https://www.npmjs.com/package/prompt
- * @since 2.0.0
- */
-const SCHEMA_ACTION = ({ props }) => {
-    const actions = ['create', 'update', 'remove'];
-    const actionList = actions
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(actions.length).length,
-            })
-        )
-        .join('');
-
-    return {
-        properties: {
-            action: {
-                required: true,
-                message: 'Select an action.',
-                description: `${chalk.white(
-                    'Action:'
-                )} ${actionList}\n    ${chalk.white('Select:')}`,
-                before: val => actionBefore({ val, actions }),
-            },
-        },
-    };
-};
-
-const SCHEMA_SELECT = ({ props }) => {
-    const themes = op.get(m, 'themes', []);
-
-    const themeList = _.pluck(themes, 'name')
-        .map((item, index) =>
-            listItem({
-                item,
-                index,
-                padding: String(themes.length).length,
-            })
-        )
-        .join('');
-
-    return {
-        properties: {
-            name: {
-                required: true,
-                message: 'Select the theme.',
-                description: `${chalk.white(
-                    'Theme:'
-                )} ${themeList}\n    ${chalk.white('Select:')}`,
-                before: val => themeBefore({ val, themes }),
-            },
-        },
-    };
-};
-
-const SCHEMA_NAME = ({ props }) => {
-    const { prompt } = props;
-    const themes = op.get(m, 'themes', []);
-    const names = _.pluck(themes, 'name')
-        .join(',')
-        .toLowerCase()
-        .split(',');
-
-    return {
-        properties: {
-            name: {
-                description: chalk.white('Theme Name:'),
-                message: chalk.white('Enter theme name'),
-                required: true,
-            },
-            overwrite: {
-                required: true,
-                pattern: /^y|n|Y|N/,
-                message: '',
-                description: `${chalk.white(
-                    'Overwrite existing theme?'
-                )} ${chalk.cyan('(Y/N):')}`,
-                ask: () => {
-                    try {
-                        let name =
-                            prompt.override['name'] ||
-                            prompt.history('name').value;
-                        name = name.toLowerCase();
-                        return names.includes(name);
-                    } catch (err) {
-                        return false;
-                    }
-                },
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-        },
-    };
-};
-
-const SCHEMA_CREATE = ({ props, params }) => {
-    const { cwd, prompt } = props;
-    const { name } = params;
-
-    const themes = op.get(m, 'themes', []);
-    const canOverwrite = overwritable(prompt);
-
-    const ID = name ? formatID(name) : 'default';
-
-    return {
-        properties: {
-            stylesheet: {
-                description: chalk.white('Stylesheet:'),
-                ask: () => canOverwrite,
-                default: `style/${ID}.scss`,
-            },
-            menuOrder: {
-                description: `${chalk.white('Menu Order')} ${chalk.cyan(
-                    `[0-${themes.length}]:`
-                )}`,
-                ask: () => {
-                    return canOverwrite && themes.length > 0;
-                },
-                before: val => formatMenuOrder(val),
-            },
-            active: {
-                description: `${chalk.white('Selected?')} ${chalk.cyan(
-                    '(Y/N):'
-                )}`,
-                pattern: /^y|n|Y|N/,
-                message: ` `,
-                ask: () => {
-                    return canOverwrite && prompt.override['inactive'] !== true;
-                },
-                default: 'n',
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-        },
-    };
-};
-
-const SCHEMA_UPDATE = ({ props, params }) => {
-    const { cwd, prompt } = props;
-    const { name } = params;
-
-    const themes = op.get(m, 'themes', []);
-    const menuOrder = _.findIndex(themes, { name });
-    const theme = themes[menuOrder] || {};
-
-    const { css = null, selected = null } = theme;
-
-    return {
-        properties: {
-            newName: {
-                description: chalk.white('Name:'),
-                default: name,
-            },
-            stylesheet: {
-                description: chalk.white('Stylesheet:'),
-                default: css,
-            },
-            menuOrder: {
-                description: `${chalk.white('Menu Order')} ${chalk.cyan(
-                    `[0-${themes.length}]:`
-                )}`,
-                default: String(menuOrder),
-                before: val => formatMenuOrder(val),
-            },
-            active: {
-                description: `${chalk.white('Selected?')} ${chalk.cyan(
-                    '(Y/N):'
-                )}`,
-                pattern: /^y|n|Y|N/,
-                message: ` `,
-                default: selected === true ? 'y' : 'n',
-                before: val => {
-                    return String(val).toLowerCase() === 'y';
-                },
-            },
-        },
-    };
-};
-
-/**
- * ACTION Function
- * @description Function used as the commander.action() callback.
- * @see https://www.npmjs.com/package/commander
- * @param opt Object The commander options passed into the function.
- * @param props Object The CLI props passed from the calling class `orcli.js`.
- * @since 2.0.0
- */
-const ACTION = ({ action, opt, props }) => {
-    Object.entries(manifest(props)).forEach(([key, value]) => {
-        m[key] = value;
-    });
-
-    if (!action) {
-        const { prompt } = props;
-        prompt.start();
-        prompt.get(SCHEMA_ACTION({ props }), (err, input) => {
-            if (!err) {
-                const { action } = input;
-                ACTION({ action, opt, props });
-            } else {
-                prompt.stop();
-            }
-        });
-    } else {
-        action = action.toLowerCase();
-        switch (action) {
-            case 'create':
-                ACTION_CREATE({ opt, props });
-                break;
-
-            case 'update':
-                ACTION_UPDATE({ opt, props });
-                break;
-
-            case 'remove':
-                ACTION_REMOVE({ opt, props });
-                break;
-        }
-    }
-};
-
-const ACTION_CREATE = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    const { inactive, menuOrder, name, overwrite } = opt;
-
-    let schema = SCHEMA_NAME({ props });
-    let schemaCreate = SCHEMA_CREATE({ props, params: opt });
-
-    const ovr = {
-        ...mapOverrides({ keys: Object.keys(schema.properties), opt }),
-        ...mapOverrides({ keys: Object.keys(schemaCreate.properties), opt }),
-    };
-
-    if (menuOrder) {
-        ovr['menuOrder'] = String(formatMenuOrder(menuOrder));
-    }
-
-    if (inactive === true) {
-        ovr['inactive'] = true;
-        ovr['active'] = false;
-    }
-
-    prompt.override = ovr;
-    prompt.start();
-
-    const act = new Promise((resolve, reject) => {
-        prompt.get(schema, (err, input) => {
-            // Keep this conditional as the first line in this function.
-            // Why? because you will get a js error if you try to set or use anything related to the input object.
-            if (err) {
-                prompt.stop();
-                reject(err);
-                return;
-            }
-
-            let params = CONFORM({ input, props });
-            const { overwrite } = params;
-
-            // Exit if overwrite or confirm !== true
-            if (typeof overwrite === 'boolean' && !overwrite) {
-                prompt.stop();
-                reject({ message: CANCELED });
-                return;
-            }
-
-            resolve(params);
-        });
-    })
-        .then(params => {
-            return new Promise((resolve, reject) => {
-                schemaCreate = SCHEMA_CREATE({ params, props });
-
-                prompt.get(schemaCreate, (err, input) => {
-                    if (err) {
-                        prompt.stop();
-                        reject(err);
-                        return;
-                    }
-                    resolve({ ...params, ...input });
-                });
-            });
-        })
-        .then(input => {
-            let params = CONFORM({ input, props });
-
-            message(`A new theme will be created with the following options:`);
-            const preflight = { ...params };
-            preflight['menuOrder'] = Number(input['menuOrder']);
-
-            console.log(
-                prettier.format(JSON.stringify(preflight), {
-                    parser: 'json-stringify',
-                })
-            );
-
-            return CONFIRM({ props, params });
-        })
-        .then(params => {
-            let { menuOrder, name, overwrite } = params;
-
-            const reducedParams = {
-                menuOrder,
-                name: params.name,
-                css: path.normalize(
-                    params.stylesheet
-                        .replace(`${cwd}/src`, '')
-                        .replace('.scss', '.css')
-                ),
-            };
-
-            if (params.active === true) {
-                reducedParams['selected'] = true;
-            }
-
-            const action = overwrite === true ? 'update' : 'create';
-
-            if (action === 'update') {
-                reducedParams['newName'] = name;
-                const themes = op.get(m, 'themes', []);
-
-                if (!menuOrder && menuOrder !== 0) {
-                    menuOrder = _.findIndex(themes, { name });
-                    reducedParams['menuOrder'] = menuOrder;
-                }
-            }
-
-            generator({ action, params: reducedParams, props }).then(
-                success => {
-                    console.log('');
-                }
-            );
-        })
-        .catch(err => {
-            if (err) {
-                error(`${NAME} ${err.message}`);
-            }
-        });
-};
-
-const ACTION_UPDATE = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    const { inactive, menuOrder, name, overwrite } = opt;
-
-    let schema = SCHEMA_SELECT({ props });
-    let schemaUpdate = SCHEMA_UPDATE({ props, params: opt });
-
-    const ovr = {
-        ...mapOverrides({ keys: Object.keys(schema.properties), opt }),
-        ...mapOverrides({ keys: Object.keys(schemaUpdate.properties), opt }),
-    };
-
-    if (menuOrder) {
-        ovr['menuOrder'] = String(formatMenuOrder(menuOrder));
-    }
-
-    if (inactive === true) {
-        ovr['inactive'] = true;
-        ovr['active'] = false;
-    }
-
-    prompt.override = ovr;
-    prompt.start();
-
-    const act = new Promise((resolve, reject) => {
-        prompt.get(schema, (err, input) => {
-            // Keep this conditional as the first line in this function.
-            // Why? because you will get a js error if you try to set or use anything related to the input object.
-            if (err) {
-                prompt.stop();
-                reject(err);
-                return;
-            }
-
-            let params = CONFORM({ input, props });
-            const { overwrite } = params;
-
-            // Exit if overwrite or confirm !== true
-            if (typeof overwrite === 'boolean' && !overwrite) {
-                prompt.stop();
-                reject({ message: CANCELED });
-                return;
-            }
-
-            resolve(params);
-        });
-    })
-        .then(params => {
-            return new Promise((resolve, reject) => {
-                schemaUpdate = SCHEMA_UPDATE({ params, props });
-
-                prompt.get(schemaUpdate, (err, input) => {
-                    if (err) {
-                        prompt.stop();
-                        reject(err);
-                        return;
-                    }
-                    resolve({ ...params, ...input });
-                });
-            });
-        })
-        .then(input => {
-            let params = CONFORM({ input, props });
-
-            message(
-                `The ${
-                    params.name
-                } theme will be updated with the following options:`
-            );
-            const preflight = { ...params };
-            preflight['menuOrder'] = Number(input['menuOrder']);
-
-            console.log(
-                prettier.format(JSON.stringify(preflight), {
-                    parser: 'json-stringify',
-                })
-            );
-
-            return CONFIRM({ props, params });
-        })
-        .then(params => {
-            let { menuOrder, name, overwrite } = params;
-
-            const reducedParams = {
-                menuOrder,
-                name: params.name,
-                newName: params.newName,
-                css: path.normalize(
-                    params.stylesheet
-                        .replace(`${cwd}/src`, '')
-                        .replace('.scss', '.css')
-                ),
-            };
-
-            if (params.active === true) {
-                reducedParams['selected'] = true;
-            }
-
-            generator({ action: 'update', params: reducedParams, props }).then(
-                success => {
-                    console.log('');
-                }
-            );
-        })
-        .catch(err => {
-            if (err) {
-                error(`${NAME} ${err.message}`);
-            }
-        });
-};
-
-const ACTION_REMOVE = ({ opt, props }) => {
-    console.log('');
-
-    const { cwd, prompt } = props;
-
-    let schema = SCHEMA_SELECT({ props });
-
-    prompt.override = mapOverrides({
-        keys: Object.keys(schema.properties),
-        opt,
-    });
-    prompt.start();
-
-    const act = new Promise((resolve, reject) => {
-        prompt.get(schema, (err, params) => {
-            // Keep this conditional as the first line in this function.
-            // Why? because you will get a js error if you try to set or use anything related to the input object.
-            if (err) {
-                prompt.stop();
-                reject(err.message);
-                return;
-            } else {
-                resolve(params);
-            }
-        });
-    })
-        .then(params =>
-            CONFIRM({
-                params,
-                props,
-                msg: `${chalk.white('Are you sure?')} ${chalk.cyan('(Y/N):')}`,
-            })
-        )
-        .then(params => generator({ action: 'remove', params, props }))
-        .then(() => console.log(''))
-        .catch(err => error(err.message));
-};
-
-/**
- * COMMAND Function
- * @description Function that executes program.command()
- */
-const COMMAND = ({ program, props }) =>
-    program
-        .command(NAME)
-        .description(DESC)
-        .action((action, opt) => ACTION({ action, opt, props }))
-        .option('-n, --name [name]', 'Theme Name.')
-        .option('-s, --stylesheet [stylesheet]', 'Theme stylesheet.')
-        .option('-a, --active [active]', 'Activate the theme.')
-        .option('-i, --inactive [inactive]', 'Deactivate the theme.')
-        .option('-m, --menu-order [menuOrder]', 'Theme menu order index.')
-        .option('-N, --new-name [newName]', 'Rename to.')
-        .on('--help', HELP);
-
-/**
- * Module Constructor
- * @description Internal constructor of the module that is being exported.
- * @param program Class Commander.program reference.
- * @param props Object The CLI props passed from the calling class `arcli.js`.
- * @since 2.0.0
- */
-module.exports = {
-    COMMAND,
-    NAME,
-};
diff --git a/.core/.cli/config.json b/.core/.cli/config.json
deleted file mode 100644
index b81b8d84..00000000
--- a/.core/.cli/config.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-    "reactium": {
-        "repo": "https://github.com/Atomic-Reactor/Reactium/archive/master.zip",
-        "types": ["class", "functional", "hook"]
-    }
-}
diff --git a/.core/app.js b/.core/app.js
deleted file mode 100644
index d72209f5..00000000
--- a/.core/app.js
+++ /dev/null
@@ -1 +0,0 @@
-export * from './app/index';
diff --git a/.core/app/index.js b/.core/app/index.js
deleted file mode 100644
index ea636085..00000000
--- a/.core/app/index.js
+++ /dev/null
@@ -1,84 +0,0 @@
-'use strict';
-
-/**
- * -----------------------------------------------------------------------------
- * Includes
- * -----------------------------------------------------------------------------
- */
-import './reactium-hooks';
-import Reactium from 'reactium-core/sdk';
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-/**
- * -----------------------------------------------------------------------------
- * @function App()
- * @description Scan DOM for <Component> elements and render React components
- * inside of them.
- * -----------------------------------------------------------------------------
- */
-export const App = async () => {
-    const context = {};
-
-    await Reactium.Hook.run('dependencies-load');
-    await Reactium.Routing.load();
-    const { store } = await Reactium.Hook.run('store-create', {
-        server: false,
-    });
-    await Reactium.Hook.run('plugin-dependencies');
-
-    if (typeof window !== 'undefined') {
-        const { bindPoints } = await Reactium.Hook.run('component-bindings');
-        const { appElement } = await Reactium.Hook.run('app-bindpoint');
-        const { Provider } = await Reactium.Hook.run('app-redux-provider');
-        const { plugableConfig } = await Reactium.Hook.run('plugable-config');
-        const { PlugableProvider } = await Reactium.Hook.run(
-            'app-plugable-provider',
-        );
-        const { Router } = await Reactium.Hook.run('app-router');
-
-        // Render the React Components
-        if (bindPoints.length > 0) {
-            bindPoints.forEach(item => {
-                ReactDOM.render(
-                    <Provider store={store}>
-                        <PlugableProvider {...plugableConfig}>
-                            <>{item.component}</>
-                        </PlugableProvider>
-                    </Provider>,
-                    item.element,
-                );
-            });
-        }
-
-        // ensure router DOM Element is on the page
-        if (appElement) {
-            const { ssr } = await Reactium.Hook.run('app-ssr-mode');
-            const { message = [] } = await Reactium.Hook.run(
-                'app-boot-message',
-                ssr,
-            );
-            console.log(...message);
-
-            ReactDOM[ssr ? 'hydrate' : 'render'](
-                <Provider store={store}>
-                    <PlugableProvider {...plugableConfig}>
-                        <>
-                            <Router />
-                        </>
-                    </PlugableProvider>
-                </Provider>,
-                appElement,
-            );
-        }
-    }
-};
-
-export const AppError = async error => {
-    const RedBox = require('redbox-react');
-    const { appElement } = await Reactium.Hook.run('app-bindpoint');
-
-    if (appElement) {
-        ReactDOM.render(<RedBox error={error} />, appElement);
-    }
-};
diff --git a/.core/app/reactium-hooks.js b/.core/app/reactium-hooks.js
deleted file mode 100644
index c7188f67..00000000
--- a/.core/app/reactium-hooks.js
+++ /dev/null
@@ -1,164 +0,0 @@
-import 'core-js/stable';
-import 'regenerator-runtime/runtime';
-import 'reactium-core/redux/storeCreator';
-import 'reactium-core/components/Router/reactium-hooks';
-import deps from 'dependencies';
-import Reactium from 'reactium-core/sdk';
-import { Provider } from 'react-redux';
-import { PlugableProvider } from 'reactium-core/components/Plugable';
-import Router from 'reactium-core/components/Router';
-import getComponents from 'dependencies/getComponents';
-
-Reactium.Hook.register(
-    'component-bindings',
-    async context => {
-        // Placeholder for the bindable elements
-        const bindPoints = [];
-
-        // <Component /> DOM Elements array
-        const elements =
-            typeof document !== 'undefined'
-                ? Array.prototype.slice.call(
-                      document.querySelectorAll('component'),
-                  )
-                : [];
-
-        if (elements.length > 0) {
-            let types = [];
-
-            let elms = elements.map(elm => {
-                let path = elm.getAttribute('path');
-                let type = elm.getAttribute('type');
-
-                types.push(type);
-
-                return { path, type };
-            });
-
-            let components = getComponents(elms);
-
-            elements.forEach(elm => {
-                // Get the component type
-                let type = elm.getAttribute('type');
-
-                if (!components.hasOwnProperty(type)) {
-                    return;
-                }
-
-                // Get parameters from container element
-                let params = {};
-                let exclude = ['type', 'path'];
-                Object.entries(elm.attributes).forEach(([key, attr]) => {
-                    key = String(key).toLowerCase();
-                    if (exclude.indexOf(key) < 0) {
-                        return;
-                    }
-                    params[attr.name] = attr.value;
-                });
-
-                // Get the children from the element and pass them to the component
-                let children = elm.innerHTML;
-                if (children) {
-                    params['children'] = children;
-                }
-
-                // Create the React element and apply parameters
-                let cmp = React.createElement(components[type], params);
-                bindPoints.push({ component: cmp, element: elm });
-                console.log('Binding components.');
-            });
-        }
-
-        context.bindPoints = bindPoints;
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
-
-Reactium.Hook.register(
-    'plugin-dependencies',
-    context => {
-        // Setup plugin registration
-        require('manifest').externals();
-        context.deps = deps();
-
-        console.log('Plugin dependencies.');
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
-
-Reactium.Hook.register(
-    'app-bindpoint',
-    context => {
-        context.appElement = document.getElementById('router');
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
-
-Reactium.Hook.register(
-    'plugable-config',
-    context => {
-        context.plugableConfig = deps().plugableConfig;
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
-
-Reactium.Hook.register(
-    'app-redux-provider',
-    context => {
-        context.Provider = Provider;
-        console.log('Defining Redux Provider.');
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
-
-Reactium.Hook.register(
-    'app-plugable-provider',
-    context => {
-        context.PlugableProvider = PlugableProvider;
-        console.log('Defining PlugableProvider.');
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
-
-Reactium.Hook.register(
-    'app-router',
-    context => {
-        context.Router = Router;
-        console.log('Defining Router.');
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
-
-Reactium.Hook.register(
-    'app-ssr-mode',
-    context => {
-        context.ssr = window && 'ssr' in window && window.ssr;
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
-
-Reactium.Hook.register(
-    'app-boot-message',
-    (ssr = false, context) => {
-        const mode = ssr ? 'SSR' : 'FE';
-        const binding = ssr ? 'Hydrating' : 'Binding';
-        context.message = [
-            `%c [Reactium] ${mode} Mode: %c⚡💡 %c${binding} Reactium. %c⚡💡 `,
-            'font-size: 16px; color: #fff; background-color: #4F82BA',
-            'font-size: 16px; color: #F4F19C; background-color: #4F82BA',
-            'font-size: 16px; color: #fff; background-color: #4F82BA',
-            'font-size: 16px; color: #F4F19C; background-color: #4F82BA',
-        ];
-
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
diff --git a/.core/assets/images/a11y/a11y.svg b/.core/assets/images/a11y/a11y.svg
deleted file mode 100644
index bbc0754b..00000000
--- a/.core/assets/images/a11y/a11y.svg
+++ /dev/null
@@ -1,77 +0,0 @@
-<svg style="width: 0; height: 0; position: absolute;" xmlns="http://www.w3.org/2000/svg"
-      version="1.1">
-      <defs>
-        <filter id="protanopia">
-          <feColorMatrix
-            in="SourceGraphic"
-            type="matrix"
-            values="0.567, 0.433, 0,     0, 0
-                    0.558, 0.442, 0,     0, 0
-                    0,     0.242, 0.758, 0, 0
-                    0,     0,     0,     1, 0"/>
-        </filter>
-        <filter id="protanomaly">
-          <feColorMatrix
-            in="SourceGraphic"
-            type="matrix"
-            values="0.817, 0.183, 0,     0, 0
-                    0.333, 0.667, 0,     0, 0
-                    0,     0.125, 0.875, 0, 0
-                    0,     0,     0,     1, 0"/>
-        </filter>
-        <filter id="deuteranopia">
-          <feColorMatrix
-            in="SourceGraphic"
-            type="matrix"
-            values="0.625, 0.375, 0,   0, 0
-                    0.7,   0.3,   0,   0, 0
-                    0,     0.3,   0.7, 0, 0
-                    0,     0,     0,   1, 0"/>
-        </filter>
-        <filter id="deuteranomaly">
-          <feColorMatrix
-            in="SourceGraphic"
-            type="matrix"
-            values="0.8,   0.2,   0,     0, 0
-                    0.258, 0.742, 0,     0, 0
-                    0,     0.142, 0.858, 0, 0
-                    0,     0,     0,     1, 0"/>
-        </filter>
-        <filter id="tritanopia">
-          <feColorMatrix
-            in="SourceGraphic"
-            type="matrix"
-            values="0.95, 0.05,  0,     0, 0
-                    0,    0.433, 0.567, 0, 0
-                    0,    0.475, 0.525, 0, 0
-                    0,    0,     0,     1, 0"/>
-        </filter>
-        <filter id="tritanomaly">
-          <feColorMatrix
-            in="SourceGraphic"
-            type="matrix"
-            values="0.967, 0.033, 0,     0, 0
-                    0,     0.733, 0.267, 0, 0
-                    0,     0.183, 0.817, 0, 0
-                    0,     0,     0,     1, 0"/>
-        </filter>
-        <filter id="achromatopsia">
-          <feColorMatrix
-            in="SourceGraphic"
-            type="matrix"
-            values="0.299, 0.587, 0.114, 0, 0
-                    0.299, 0.587, 0.114, 0, 0
-                    0.299, 0.587, 0.114, 0, 0
-                    0,     0,     0,     1, 0"/>
-        </filter>
-        <filter id="achromatomaly">
-          <feColorMatrix
-            in="SourceGraphic"
-            type="matrix"
-            values="0.618, 0.320, 0.062, 0, 0
-                    0.163, 0.775, 0.062, 0, 0
-                    0.163, 0.320, 0.516, 0, 0
-                    0,     0,     0,     1, 0"/>
-        </filter>
-  </defs>
-</svg>
diff --git a/.core/babel.config.js b/.core/babel.config.js
deleted file mode 100644
index ca7b8fb7..00000000
--- a/.core/babel.config.js
+++ /dev/null
@@ -1,108 +0,0 @@
-const path = require('path');
-const rootPath = path.resolve(__dirname, '..');
-const semver = require('semver');
-const op = require('object-path');
-const babelCoreVersion = op.get(
-    require(path.resolve(
-        path.dirname(require.resolve('@babel/core')),
-        '../package.json',
-    )),
-    'version',
-);
-const coreJsVersion = op.get(
-    require(path.resolve(
-        path.dirname(require.resolve('core-js')),
-        'package.json',
-    )),
-    'version',
-);
-
-let corejs;
-// annoying warning starts with @babel/core 7.4.0
-if (semver.satisfies(semver.coerce(babelCoreVersion), '^7.4.0')) {
-    if (semver.satisfies(semver.coerce(coreJsVersion), '>=2.0.0')) {
-        corejs = '2';
-    }
-    if (semver.satisfies(semver.coerce(coreJsVersion), '>=3.0.0')) {
-        corejs = '3';
-    }
-}
-
-const alias = {
-    manifest: './src/manifest',
-    appdir: './src/app',
-    components: './src/app/components',
-    'reactium-core': './.core',
-    dependencies: './.core/dependencies',
-    toolkit: './src/app/toolkit',
-};
-
-const env = {
-    ...(corejs ? { corejs } : {}),
-    useBuiltIns: 'usage',
-    debug: false,
-    targets: {
-        browsers: ['> 1%', 'IE 11'],
-    },
-};
-
-module.exports = {
-    presets: ['@babel/react', ['@babel/env', env]],
-    plugins: [
-        ['@babel/plugin-syntax-dynamic-import'],
-        [
-            'module-resolver',
-            {
-                cwd: rootPath,
-                alias,
-            },
-        ],
-        [
-            '@babel/plugin-proposal-class-properties',
-            {
-                loose: true,
-            },
-        ],
-        ['@babel/plugin-proposal-export-default-from'],
-    ],
-    env: {
-        test: {
-            presets: ['@babel/react', '@babel/env'],
-            plugins: [
-                [
-                    'module-resolver',
-                    {
-                        cwd: rootPath,
-                        alias,
-                    },
-                ],
-                [
-                    '@babel/plugin-proposal-class-properties',
-                    {
-                        loose: true,
-                    },
-                ],
-                ['@babel/plugin-syntax-dynamic-import'],
-            ],
-        },
-        library: {
-            presets: ['@babel/react', '@babel/env'],
-            plugins: [
-                [
-                    'module-resolver',
-                    {
-                        cwd: rootPath,
-                        alias,
-                    },
-                ],
-                [
-                    '@babel/plugin-proposal-class-properties',
-                    {
-                        loose: true,
-                    },
-                ],
-                ['@babel/plugin-syntax-dynamic-import'],
-            ],
-        },
-    },
-};
diff --git a/.core/components/DevTools/index.js b/.core/components/DevTools/index.js
deleted file mode 100644
index 8e3dd96c..00000000
--- a/.core/components/DevTools/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React from 'react';
-import { createDevTools } from 'redux-devtools';
-import DockMonitor from 'redux-devtools-dock-monitor';
-import LogMonitor from 'redux-devtools-log-monitor';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: DevTools
- * -----------------------------------------------------------------------------
- */
-let DevTools = () => { return null; };
-
-if (process.env.NODE_ENV === 'development') {
-    DevTools = createDevTools(
-        <DockMonitor
-            defaultIsVisible={false}
-            toggleVisibilityKey="ctrl-h"
-            changePositionKey="ctrl-q"
-            changeMonitorKey="ctrl-m">
-            <LogMonitor />
-        </DockMonitor>
-    );
-}
-
-export default DevTools;
diff --git a/.core/components/NotFound/index.js b/.core/components/NotFound/index.js
deleted file mode 100644
index 8518555d..00000000
--- a/.core/components/NotFound/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React from 'react';
-
-
-/**
- * -----------------------------------------------------------------------------
- * Functional Component: NotFound
- * -----------------------------------------------------------------------------
- */
-const NotFound = (props) => {
-    return (
-        <div>
-            PAGE NOT FOUND
-        </div>
-    );
-};
-
-export default NotFound;
diff --git a/.core/components/Plugable/Context.js b/.core/components/Plugable/Context.js
deleted file mode 100644
index 860f1068..00000000
--- a/.core/components/Plugable/Context.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import { createContext } from 'react';
-
-export default createContext();
diff --git a/.core/components/Plugable/Plugins.js b/.core/components/Plugable/Plugins.js
deleted file mode 100644
index 6e579d86..00000000
--- a/.core/components/Plugable/Plugins.js
+++ /dev/null
@@ -1,286 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, useContext } from 'react';
-import Context from './Context';
-import op from 'object-path';
-import getComponents from 'dependencies/getComponents';
-import { useSelect } from 'reactium-core/easy-connect';
-import _ from 'underscore';
-
-const findComponent = (type, path, paths) => {
-    let search = [
-        {
-            type,
-            path: `${path}${type}`,
-        },
-    ];
-
-    if (Array.isArray(paths)) {
-        search = search.concat(
-            paths.map(path => ({
-                type,
-                path: `${path}${type}`,
-            })),
-        );
-    }
-
-    const found = getComponents(search);
-    let Component = null;
-    if (found) {
-        Component = found[type];
-    }
-
-    return Component;
-};
-
-const usePluginControls = ({ zone, ...defaults }) => {
-    const defaultControls = Object.entries({
-        mapper: [
-            _ => _,
-            op.get(defaults, 'globalMapper'),
-            op.get(defaults, 'localMapperOverride'),
-        ],
-        filter: [
-            () => true,
-            op.get(defaults, 'globalFilter'),
-            op.get(defaults, 'localFilterOverride'),
-        ],
-        sort: [
-            { sortBy: 'order', reverse: false },
-            op.get(defaults, 'globalSort'),
-            op.get(defaults, 'localSortOverride'),
-        ],
-    }).reduce((defaultControls, [type, options]) => {
-        let defaultControl = _.last(_.compact(options));
-        op.set(defaultControls, `${type}s.default`, {
-            order: 0,
-            [type]: defaultControl,
-        });
-        return defaultControls;
-    }, {});
-
-    const allPluginControls = useSelect({
-        select: state => op.get(state, 'Plugable.controls', {}),
-    });
-
-    // add addons controls for this zone
-    let controls = Object.entries(allPluginControls).reduce(
-        (controls, [name, addonControls], index) => {
-            Object.entries({
-                mapper: op.get(addonControls, 'pluginMappers', []),
-                filter: op.get(addonControls, 'pluginFilters', []),
-                sort: op.get(addonControls, 'pluginSorts', []),
-            }).forEach(([type, items]) => {
-                const control = items.find(
-                    ({ zone: pluginZone }) => zone === pluginZone,
-                );
-                op.set(
-                    controls,
-                    `${type}s.default`,
-                    op.get(defaultControls, `${type}s.default`),
-                );
-                if (control) {
-                    op.set(controls, [`${type}s`, name], control);
-                }
-            });
-
-            return controls;
-        },
-        {},
-    );
-
-    const controlSorter = (controls = {}) => {
-        let controlsEntries = Object.entries(controls);
-        // remove default if controls added by plugin
-        controlsEntries = controlsEntries.filter(
-            ([name, control]) =>
-                controlsEntries.length === 1 || name !== 'default',
-        );
-
-        return _.sortBy(controlsEntries, ([, control]) => control.order).reduce(
-            (controls, [name, control]) => {
-                controls[name] = control;
-                return controls;
-            },
-            {},
-        );
-    };
-
-    controls.mappers = controlSorter(controls.mappers);
-    controls.filters = controlSorter(controls.filters);
-    controls.sorts = controlSorter(controls.sorts);
-
-    return controls;
-};
-
-const resolveZone = ({ zone, plugins, controls, props }) => {
-    let PluginComponents = useCombinedZonePlugins(plugins, zone);
-    Object.values(controls.mappers).forEach(
-        ({ mapper }) => (PluginComponents = PluginComponents.map(mapper)),
-    );
-    Object.values(controls.filters).forEach(
-        ({ filter }) => (PluginComponents = PluginComponents.filter(filter)),
-    );
-    Object.values(controls.sorts).forEach(({ sort }) => {
-        PluginComponents = _.sortBy(PluginComponents, sort.sortBy);
-        if (sort.reverse) PluginComponents = PluginComponents.reverse();
-        return PluginComponents;
-    });
-
-    PluginComponents = PluginComponents.reduce(
-        (PluginComponents, { id, component, path, paths, ...pluginProps }) => {
-            let Component = component;
-            let name = id;
-            if (typeof component === 'string') {
-                name = component;
-                Component = findComponent(component, path, paths);
-            }
-            PluginComponents[name] = {
-                Component,
-                id,
-                key: id,
-                ...pluginProps,
-                ...props,
-            };
-
-            return PluginComponents;
-        },
-        {},
-    );
-
-    return PluginComponents;
-};
-
-export const usePlugins = props => {
-    const {
-        plugins,
-        filter: globalFilter,
-        mapper: globalMapper,
-        sort: globalSort,
-    } = useContext(Context) || {};
-
-    const {
-        children,
-        zone,
-        filter: localFilterOverride,
-        mapper: localMapperOverride,
-        sort: localSortOverride,
-        ...otherProps
-    } = props;
-
-    const controls = usePluginControls({
-        zone,
-        globalFilter,
-        localFilterOverride,
-        globalMapper,
-        localMapperOverride,
-        globalSort,
-        localSortOverride,
-    });
-
-    return resolveZone({
-        zone,
-        plugins,
-        controls,
-        props: otherProps,
-    });
-};
-
-const pluginZones = ({ zone }) => {
-    let zones = [];
-    if (Array.isArray(zone)) {
-        zones = zones.concat(zone);
-    } else {
-        zones.push(zone);
-    }
-    return _.compact(zones);
-};
-
-const useCombinedZonePlugins = (plugins = [], zone) => {
-    const zoneFilter = plugin => pluginZones(plugin).find(pz => pz === zone);
-    const mapId = plugin => plugin.id;
-    const reduxPlugins = useSelect({
-        select(state) {
-            return Object.values(op.get(state, 'Plugable.byId', {})).filter(
-                zoneFilter,
-            );
-        },
-
-        shouldUpdate({ prevState = [], newState = [] }) {
-            const prevIds = prevState.map(mapId);
-            const newIds = newState.map(mapId);
-            const same = _.intersection(prevIds, newIds);
-            return (
-                same.length !== newIds.length || same.length != prevIds.length
-            );
-        },
-    });
-
-    return plugins
-        .concat(reduxPlugins)
-        .reduce((allPlugins, plugin) => {
-            // support multi-use plugin
-            if (Array.isArray(plugin)) {
-                return allPlugins.concat(plugin);
-            }
-
-            // support multi-zone plugin
-            if (Array.isArray(plugin.zone)) {
-                return allPlugins.concat(
-                    plugin.zone.map(zone => ({
-                        ...plugin,
-                        zone,
-                    })),
-                );
-            }
-
-            allPlugins.push(plugin);
-            return allPlugins;
-        }, [])
-        .filter(zoneFilter);
-};
-
-export const SimplePlugins = props => {
-    const plugins = usePlugins(props);
-
-    return Object.values(plugins).map(plugin => {
-        const { Component, ...props } = plugin;
-        return Component && <Component {...props} />;
-    });
-};
-
-const PassThroughPlugins = ({ children, components }) => {
-    return React.Children.map(children, Child => {
-        return React.cloneElement(Child, {
-            components,
-        });
-    });
-};
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Plugins
- * -----------------------------------------------------------------------------
- */
-const Plugins = props => {
-    const { children, passThrough = false } = props;
-    const components = <SimplePlugins {...props} />;
-    return (
-        <>
-            {!passThrough && components}
-            {passThrough ? (
-                <PassThroughPlugins
-                    children={children}
-                    components={components}
-                />
-            ) : (
-                children
-            )}
-        </>
-    );
-};
-
-export default Plugins;
diff --git a/.core/components/Plugable/Provider.js b/.core/components/Plugable/Provider.js
deleted file mode 100644
index 20abc100..00000000
--- a/.core/components/Plugable/Provider.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import React, { Component, Fragment } from 'react';
-import PlugableContext from './Context';
-import deps from 'dependencies';
-import op from 'object-path';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: PlugableProvider
- * -----------------------------------------------------------------------------
- */
-export default class PlugableProvider extends Component {
-    static defaultProps = {
-        filter: _ => true,
-        mapper: _ => _,
-        sort: {
-            sortBy: 'order',
-            reverse: false,
-        },
-    };
-
-    render() {
-        const { filter, sort, mapper } = this.props;
-        const context = {
-            plugins: Object.values(deps().plugins),
-            filter: filter,
-            sort: sort,
-            mapper: mapper,
-        };
-
-        return (
-            <PlugableContext.Provider value={context}>
-                {this.props.children}
-            </PlugableContext.Provider>
-        );
-    }
-}
diff --git a/.core/components/Plugable/actionTypes.js b/.core/components/Plugable/actionTypes.js
deleted file mode 100644
index c159c8e5..00000000
--- a/.core/components/Plugable/actionTypes.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-    ADD_PLUGIN: 'ADD_PLUGIN',
-    UPDATE_PLUGIN: 'UPDATE_PLUGIN',
-    REMOVE_PLUGIN: 'REMOVE_PLUGIN',
-    ADD_PLUGIN_CONTROLS: 'ADD_PLUGIN_CONTROLS',
-    REMOVE_PLUGIN_CONTROLS: 'REMOVE_PLUGIN_CONTROLS',
-};
diff --git a/.core/components/Plugable/actions.js b/.core/components/Plugable/actions.js
deleted file mode 100644
index 0fbe3b64..00000000
--- a/.core/components/Plugable/actions.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import deps from 'dependencies';
-import moment from 'moment';
-
-export default {
-    addPlugin: ({ id, component, zone, order = 0, ...pluginProps }) => ({
-        type: deps().actionTypes.ADD_PLUGIN,
-        id,
-        component,
-        zone,
-        order,
-        ...pluginProps,
-    }),
-
-    updatePlugin: ({ id, ...pluginProps }) => ({
-        type: deps().actionTypes.UPDATE_PLUGIN,
-        id,
-        ...pluginProps,
-    }),
-
-    removePlugin: id => ({
-        type: deps().actionTypes.REMOVE_PLUGIN,
-        id,
-    }),
-
-    addControls: ({ name, controls }) => ({
-        type: deps().actionTypes.ADD_PLUGIN_CONTROLS,
-        name,
-        controls: {
-            ...controls,
-            updated: moment().format('HH:mm:ss'),
-        },
-    }),
-
-    removeControls: name => ({
-        type: deps().actionTypes.REMOVE_PLUGIN_CONTROLS,
-        name,
-    }),
-};
diff --git a/.core/components/Plugable/index.js b/.core/components/Plugable/index.js
deleted file mode 100644
index 39490011..00000000
--- a/.core/components/Plugable/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import PlugableContext from './Context';
-import PlugableProvider from './Provider';
-import Plugins, { usePlugins, SimplePlugins } from './Plugins';
-
-export {
-    usePlugins,
-    Plugins,
-    SimplePlugins,
-    PlugableContext,
-    PlugableProvider,
-};
diff --git a/.core/components/Plugable/reducers.js b/.core/components/Plugable/reducers.js
deleted file mode 100644
index a6f75bb6..00000000
--- a/.core/components/Plugable/reducers.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import deps from 'dependencies';
-import { combineReducers } from 'redux';
-
-const byId = (state = {}, action) => {
-    switch (action.type) {
-        case deps().actionTypes.ADD_PLUGIN: {
-            const { type, ...plugin } = action;
-            return {
-                ...state,
-                [action.id]: plugin,
-            };
-        }
-        case deps().actionTypes.UPDATE_PLUGIN: {
-            const { type, ...plugin } = action;
-            return {
-                ...state,
-                [action.id]: {
-                    ...state[action.id],
-                    ...plugin,
-                },
-            };
-        }
-
-        case deps().actionTypes.REMOVE_PLUGIN: {
-            const newState = {
-                ...state,
-            };
-            delete newState[action.id];
-            return newState;
-        }
-
-        default: {
-            return state;
-        }
-    }
-};
-
-const allIds = (state = [], action) => {
-    switch (action.type) {
-        case deps().actionTypes.ADD_PLUGIN: {
-            if (state.find(id => id === action.id)) return state;
-            return [...state, action.id];
-        }
-        case deps().actionTypes.REMOVE_PLUGIN: {
-            return state.filter(pluginId => pluginId !== action.id);
-        }
-        default: {
-            return state;
-        }
-    }
-};
-
-const controls = (state = {}, action) => {
-    switch (action.type) {
-        case deps().actionTypes.ADD_PLUGIN_CONTROLS: {
-            return {
-                ...state,
-                [action.name]: action.controls,
-            };
-        }
-        case deps().actionTypes.REMOVE_PLUGIN_CONTROLS: {
-            const newState = { ...state };
-            delete newState[action.name];
-            return newState;
-        }
-        default: {
-            return state;
-        }
-    }
-};
-
-export default (...reducerArgs) =>
-    combineReducers({ byId, allIds, controls })(...reducerArgs);
diff --git a/.core/components/Plugable/state.js b/.core/components/Plugable/state.js
deleted file mode 100644
index d3070aa4..00000000
--- a/.core/components/Plugable/state.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
-    allIds: [],
-    byId: {},
-    controls: {},
-};
diff --git a/.core/components/Router/actionTypes.js b/.core/components/Router/actionTypes.js
deleted file mode 100644
index 80145e26..00000000
--- a/.core/components/Router/actionTypes.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export default {
-    UPDATE_ROUTE: 'UPDATE_ROUTE',
-};
diff --git a/.core/components/Router/actions.js b/.core/components/Router/actions.js
deleted file mode 100644
index d5f87627..00000000
--- a/.core/components/Router/actions.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import deps from 'dependencies';
-import op from 'object-path';
-
-export default {
-    updateRoute: ({ history, location, match, route = {}, params, search }) => (
-        dispatch,
-        getState,
-    ) => {
-        const state = getState();
-        const Router = op.get(state, 'Router', {});
-        const prevLocation = op.get(Router, 'location', {});
-
-        const defaultOnRouteChange = () => {
-            if (
-                typeof window !== 'undefined' &&
-                Router.pathname !== location.pathname
-            ) {
-                window.scrollTo(0, 0);
-            }
-        };
-
-        // call defaultOnRouteChange, or route's onRouteChage (with defaultOnRouteChange as arg)
-        const { onRouteChange = defaultOnRouteChange } = route;
-        if (
-            typeof onRouteChange === 'function' &&
-            typeof window !== 'undefined' &&
-            Router.pathname !== location.pathname
-        ) {
-            onRouteChange(defaultOnRouteChange);
-        }
-
-        dispatch({
-            type: deps().actionTypes.UPDATE_ROUTE,
-            history,
-            location,
-            prevLocation,
-            match,
-            params,
-            search,
-        });
-    },
-};
diff --git a/.core/components/Router/enhancer.js b/.core/components/Router/enhancer.js
deleted file mode 100644
index e0618c83..00000000
--- a/.core/components/Router/enhancer.js
+++ /dev/null
@@ -1,86 +0,0 @@
-import Reactium from 'reactium-core/sdk';
-import queryString from 'querystring-browser';
-import { getHistory } from './index';
-import { matchPath } from 'react-router';
-import op from 'object-path';
-import deps from 'dependencies';
-
-const routeListener = (store, history) => async location => {
-    const state = store.getState();
-    const Router = op.get(state, 'Router', {});
-    let routes = Reactium.Routing.get();
-
-    const pathChanged =
-        !Router.pathname || location.pathname !== Router.pathname;
-    const searchChanged = location.search !== Router.search;
-
-    if (pathChanged || searchChanged) {
-        let { route, match } =
-            routes
-                .filter(route => route.path)
-                .map(route => {
-                    let match = matchPath(location.pathname, route);
-                    return { route, match };
-                })
-                .filter(route => route.match)
-                .find(({ route, match }) => {
-                    return match.isExact;
-                }) || {};
-
-        if (match) {
-            // optionally load route data
-            const search = queryString.parse(
-                location.search.replace(/^\?/, ''),
-            );
-            if ('load' in route && typeof route.load === 'function') {
-                await Promise.resolve(route.load(match.params, search))
-                    .then(thunk => thunk(store.dispatch, store.getState, store))
-                    .then(data =>
-                        Reactium.Hook.run(
-                            'data-loaded',
-                            data,
-                            route,
-                            match.params,
-                            search,
-                        ),
-                    );
-            }
-
-            store.dispatch(
-                deps().actions.Router.updateRoute({
-                    history,
-                    location: {
-                        pathname: location.pathname,
-                        search: location.search,
-                        hash: location.hash,
-                        state: location.state,
-                        key: location.key,
-                    },
-                    match,
-                    route,
-                    params: match.params,
-                    search,
-                }),
-            );
-        }
-    }
-};
-
-export default (enhancers = [], isServer = false) => {
-    return [
-        {
-            name: 'route-observer',
-            order: 999,
-            enhancer: isServer
-                ? _ => _
-                : storeCreator => (...args) => {
-                      const store = storeCreator(...args);
-                      const history = getHistory();
-                      routeListener(store, history)(window.location);
-                      history.listen(routeListener(store, history));
-                      return store;
-                  },
-        },
-        ...enhancers,
-    ];
-};
diff --git a/.core/components/Router/index.js b/.core/components/Router/index.js
deleted file mode 100644
index 5d532b85..00000000
--- a/.core/components/Router/index.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import Reactium from 'reactium-core/sdk';
-import React, { useRef, useState, useEffect } from 'react';
-import { Router, Switch, Route } from 'react-router-dom';
-import { createBrowserHistory, createMemoryHistory } from 'history';
-import op from 'object-path';
-
-export const useRouting = () => {
-    const routesRef = useRef(Reactium.Routing.get());
-    const [value, setValue] = useState(routesRef.current);
-
-    const setState = () => {
-        routesRef.current = Reactium.Routing.get();
-        setValue(routesRef.current);
-    };
-
-    useEffect(() => {
-        setState();
-        return Reactium.Routing.subscribe(setState);
-    }, [Reactium.Routing.updated]);
-
-    return routesRef.current;
-};
-
-let history;
-export const getHistory = () => {
-    const createHistory =
-        typeof window !== 'undefined' && window.process && window.process.type
-            ? createMemoryHistory
-            : createBrowserHistory;
-
-    if (!history) {
-        history = createHistory();
-    }
-
-    return history;
-};
-
-export default () => {
-    const routes = useRouting();
-
-    return (
-        <Router history={getHistory()}>
-            <Switch>
-                {routes.map(({ id, ...route }) => (
-                    <Route {...route} key={id} />
-                ))}
-            </Switch>
-        </Router>
-    );
-};
diff --git a/.core/components/Router/reactium-hooks.js b/.core/components/Router/reactium-hooks.js
deleted file mode 100644
index 035787bb..00000000
--- a/.core/components/Router/reactium-hooks.js
+++ /dev/null
@@ -1,86 +0,0 @@
-import Reactium from 'reactium-core/sdk';
-import op from 'object-path';
-import getComponents from 'dependencies/getComponents';
-
-Reactium.Hook.register(
-    'routes-init',
-    async context => {
-        const allRoutes = op.get(require('manifest').get(), 'allRoutes', {});
-
-        if (!Object.values(allRoutes || {}).length) {
-            return [];
-        }
-
-        let dynamicRoutes = [];
-        if (typeof window !== 'undefined') {
-            if ('routes' in window && Array.isArray(window.routes)) {
-                dynamicRoutes = window.routes;
-            }
-        } else {
-            if ('routes' in global && Array.isArray(global.routes)) {
-                dynamicRoutes = global.routes;
-            }
-        }
-
-        context.routes = Object.values(allRoutes || {})
-            .concat(
-                dynamicRoutes.map(route => {
-                    let Found = getComponents([{ type: route.component }]);
-
-                    return {
-                        ...route,
-                        component: op.get(Found, route.component, () => null),
-                    };
-                }),
-            )
-            .filter(route => route)
-            .reduce((rts, route) => {
-                // Support multiple routable components per route file
-                if (Array.isArray(route)) {
-                    return [
-                        ...rts,
-                        ...route.map((subRoute, subKey) => ({
-                            order: 0,
-                            ...subRoute,
-                        })),
-                    ];
-                }
-
-                // Support one routable component
-                return [
-                    ...rts,
-                    {
-                        order: 0,
-                        ...route,
-                    },
-                ];
-            }, [])
-            .reduce((rts, route) => {
-                // Support multiple paths for one route
-                if (Array.isArray(route.path)) {
-                    return [
-                        ...rts,
-                        ...route.path.map(path => ({
-                            ...route,
-                            path,
-                        })),
-                    ];
-                }
-                return [...rts, route];
-            }, []);
-
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
-
-Reactium.Hook.register(
-    '404-component',
-    async context => {
-        let { NotFound = null } = getComponents([{ type: 'NotFound' }]);
-        context.NotFound = NotFound;
-
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
diff --git a/.core/components/Router/reducers.js b/.core/components/Router/reducers.js
deleted file mode 100644
index 7ee3616f..00000000
--- a/.core/components/Router/reducers.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import deps from 'dependencies';
-import { combineReducers } from 'redux';
-
-const Router = (state = {}, action) => {
-    switch (action.type) {
-        case deps().actionTypes.UPDATE_ROUTE: {
-            const { location, history, match, params, search } = action;
-
-            return {
-                ...location,
-                history,
-                match,
-                params,
-                urlParams: search,
-            };
-        }
-        default: {
-            return state;
-        }
-    }
-};
-
-export default Router;
diff --git a/.core/components/Router/server.js b/.core/components/Router/server.js
deleted file mode 100644
index 9b0bdc70..00000000
--- a/.core/components/Router/server.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React, { Component, Fragment } from 'react';
-import { StaticRouter, Switch } from 'react-router-dom';
-import { renderRoutes } from 'react-router-config';
-
-export default class AppRouter extends Component {
-    shouldComponentUpdate({ updated }) {
-        return !!(this.props.updated && updated !== this.props.updated);
-    }
-
-    render() {
-        const { routes = [], ...props } = this.props;
-        return (
-            <StaticRouter {...props} context={this.props.context}>
-                <Fragment>
-                    <Switch>{renderRoutes(routes)}</Switch>
-                </Fragment>
-            </StaticRouter>
-        );
-    }
-}
diff --git a/.core/components/Router/state.js b/.core/components/Router/state.js
deleted file mode 100644
index 8f17fd3b..00000000
--- a/.core/components/Router/state.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export default {
-    pathname: "",
-};
diff --git a/.core/components/Toolkit/Content/Card/_style.scss b/.core/components/Toolkit/Content/Card/_style.scss
deleted file mode 100644
index e300ece0..00000000
--- a/.core/components/Toolkit/Content/Card/_style.scss
+++ /dev/null
@@ -1,246 +0,0 @@
-.re-toolkit-btn {
-    display         : flex;
-    justify-content : center;
-    align-items     : center;
-    padding         : 7px 16px 6px 16px;
-    line-height     : 1;
-    border-radius   : 1px;
-    font-size       : 9px;
-    text-transform  : uppercase;
-    border-width    : 1px;
-    border-style    : solid;
-
-    &:hover {
-        opacity: 0.8;
-    }
-
-    &-default {
-        border-color: $grey;
-        background-color: $grey-light;
-        color: $gray;
-    }
-
-    &-primary {
-        border-color: $blue;
-        background-color: lighten($blue, 10%);
-        color: $white;
-    }
-}
-
-.re-toolkit-card {
-    width: 100%;
-    box-shadow: $drop-shadow;
-    overflow-x: hidden;
-    min-width: 320px;
-    display: block;
-    z-index: 1;
-    height: auto;
-    display: flex;
-    flex-direction: column;
-
-    &:not(:last-child) {
-        margin-bottom: 60px;
-    }
-
-    .re-toolkit-card-btn-icon {
-        width: 40px;
-        height: 40px;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-        margin-left: 5px;
-
-        &:hover {
-            opacity: 0.5;
-        }
-    }
-
-    h1, h2, h3, h4, h5, h6 {
-        padding: 0;
-        margin: 0;
-    }
-
-    &-heading {
-        display: flex;
-        background-color: $white;
-        padding: 12px 8px 12px 24px;
-        color: $black;
-        border-radius: 4px 4px 0 0;
-        align-items: center;
-        border-bottom: 1px solid $border-color;
-        min-height: 65px;
-
-        *:first-child {
-            flex-grow: 1;
-        }
-
-        &.thin {
-            padding: 6px 8px 6px 24px;
-            border-top: 1px solid $border-color;
-            border-radius: 0;
-            min-height: 38px;
-
-            h1,h2,h3,h4 {
-                font-size: 14px;
-            }
-
-            button {
-                width: 40px;
-                height: 24px;
-                svg {
-                    width: 18px;
-                    height: 18px;
-                }
-            }
-        }
-    }
-
-    &-body {
-        background-color: $white;
-        flex-grow: 1;
-
-        &-wrap {
-            display: block;
-            iframe {
-                display: block;
-                width: 100%;
-                min-height: 70px;
-            }
-        }
-
-        &-pad {
-            padding: 25px;
-        }
-    }
-
-    &-list {
-
-        &-item {
-            display          : flex;
-            padding          : 15px 22px 15px 24px;
-            color            : $gray;
-            align-items      : center;
-            background-color : darken($white, 1%);
-            line-height      : 1.5;
-            min-height       : 70px;
-
-            small {
-                width: 100%;
-                display: block;
-                font-size: 11px;
-                margin-top: -2px;
-            }
-
-            > *:first-child {
-                flex-grow: 1;
-                padding-right: 18px;
-            }
-
-            &:not(:last-child) {
-                border-bottom: 1px solid $grey-light;
-            }
-        }
-    }
-
-    button.re-toolkit-switch {
-
-        display: flex;
-        justify-content: center;
-        align-items: center;
-        transition       : background-color .25s ease-in-out;
-        border           : 1px solid darken($grey-light, 10%);
-        border-radius    : 20px;
-        position         : relative;
-        background-color : $grey-light;
-        height           : 19px;
-        width            : 40px;
-        flex-wrap        : nowrap;
-        align-items      : center;
-        justify-content: space-between;
-
-        * {
-            pointer-events : none;
-            flex           : 1;
-            text-align     : center;
-            font-size      : 9px;
-            color          : $gray;
-            text-transform : uppercase;
-            line-height: 1.5;
-            margin-top: 1px;
-        }
-
-        &:hover {
-            opacity: 1;
-        }
-
-        &:after {
-            content          : '';
-            border-radius    : 100%;
-            background-color : $white;
-            box-shadow       : 0 0 1px 1px rgba(0,0,0,.2);
-            width            : 22px;
-            height           : 22px;
-            left             : -1px;
-            top              : 50%;
-            margin           : 0 -1px;
-            position         : absolute;
-            transform        : translateY(-50%);
-            transition       : left .75s ease-in-out;
-        }
-
-        &.active {
-            background-color: lighten($blue, 15%);
-            border: 1px solid $blue;
-
-            > * {
-                color: $white;
-                text-shadow: 1px 1px 3px $gray;
-            }
-
-            &:after {
-                content          : '';
-                border-radius    : 100%;
-                background-color : $white;
-                box-shadow       : 0 0 1px 1px rgba(0,0,0,.1);
-                width            : 22px;
-                height           : 22px;
-                right            : -1px;
-                left: auto;
-                top              : 50%;
-                margin           : 0 -1px;
-                position         : absolute;
-                transform        : translateY(-50%);
-                transition       : left .75s ease-in-out;
-            }
-        }
-    }
-
-    &-footer {
-        padding: 2px 8px 2px 24px;
-        background-color: $white;
-        border-top: 1px solid $border-color;
-        border-radius: 0 0 2px 2px;
-        display: flex;
-        flex-wrap: wrap;
-        align-items: center;
-        justify-content: flex-end;
-        min-height: 45px;
-
-        button svg {
-            width: 18px;
-            height: 18px;
-        }
-    }
-
-    &.fixed {
-        position: absolute;
-        overflow-y: auto;
-        z-index: 100000;
-        min-height: calc(100vh - 80px);
-
-        .re-toolkit-card-heading {
-            border-radius: 0;
-        }
-    }
-
-}
diff --git a/.core/components/Toolkit/Content/Card/index.js b/.core/components/Toolkit/Content/Card/index.js
deleted file mode 100644
index 903ac4c4..00000000
--- a/.core/components/Toolkit/Content/Card/index.js
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import { TweenMax, Power2 } from 'gsap/umd/TweenMax';
-import Icon from 'reactium-core/components/Toolkit/Icon';
-import _ from 'underscore';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Card
- * -----------------------------------------------------------------------------
- */
-
-export default class Card extends Component {
-    constructor(props) {
-        super(props);
-
-        this.y = 60;
-        this.cont = null;
-        this.anchor = null;
-        this.state = {
-            fullscreen: this.props.fullscreen,
-            buttons: this.props.buttons,
-            id: this.props.id,
-        };
-        this.toggleFullScreen = this.toggleFullScreen.bind(this);
-    }
-
-    componentDidMount() {
-        this.forceUpdate();
-    }
-
-    getCoords(elm, cont) {
-        let box = elm.getBoundingClientRect();
-
-        // Get top & left
-        let body = document.body;
-        let docEl = document.documentElement;
-
-        let scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
-        let scrollLeft =
-            window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
-
-        let clientTop = docEl.clientTop || body.clientTop || 0;
-        let clientLeft = docEl.clientLeft || body.clientLeft || 0;
-
-        let top = box.top + scrollTop - clientTop;
-        let left = box.left + scrollLeft - clientLeft;
-
-        // Get current height
-        let currentH = cont.offsetHeight;
-
-        // Get actual height
-        TweenMax.set(cont, { height: 'auto' });
-        let actualH = cont.offsetHeight;
-
-        // Reset cont back to it's original height
-        TweenMax.set(cont, { height: currentH });
-
-        return {
-            x: Math.round(left),
-            y: Math.round(top),
-            width: elm.offsetWidth,
-            height: actualH,
-        };
-    }
-
-    toggleFullScreen(e) {
-        let { anchor, cont } = this;
-        let { fullscreen, buttons } = this.state;
-        let { speed = 0.125 } = this.props;
-
-        // Get position
-        let coords = this.getCoords(anchor, cont);
-
-        let x = fullscreen === true ? coords.x : 0;
-        let y = fullscreen === true ? coords.y : this.y;
-        let width = fullscreen === true ? coords.width : '100%';
-        let height =
-            fullscreen === true ? coords.height : window.innerHeight - this.y;
-
-        let tk = document.querySelector('.re-toolkit-content');
-
-        if (fullscreen !== true) {
-            // pop out
-            TweenMax.set(cont, {
-                zIndex: 100000,
-                position: 'fixed',
-                left: coords.x,
-                top: coords.y,
-                width: coords.width,
-                height: coords.height,
-            });
-
-            // Set anchor height to actual H
-            TweenMax.set(anchor, { height: coords.height + 60 });
-        } else {
-            TweenMax.set(cont, { height: window.innerHeight - this.y });
-        }
-
-        TweenMax.to(cont, speed, {
-            left: x,
-            top: y,
-            width: width,
-            height: height,
-            ease: Power2.easeInOut,
-            onComplete: () => {
-                if (fullscreen === true) {
-                    // pop in
-                    TweenMax.set(anchor, { height: 'auto' });
-                    TweenMax.set(cont, {
-                        zIndex: 1,
-                        left: 0,
-                        top: 0,
-                        width: '100%',
-                        height: 'auto',
-                        position: 'relative',
-                    });
-                    tk.style.overflowY = 'auto';
-                    tk.classList.remove('fullscreen');
-                    cont.scrollIntoView();
-                } else {
-                    // pop out
-                    TweenMax.set(cont, {
-                        width: '100%',
-                    });
-                    tk.style.overflowY = 'hidden';
-                    tk.classList.add('fullscreen');
-                }
-
-                // Update header buttons
-                let btns = JSON.parse(JSON.stringify(buttons)); // clone buttons array
-                let idx = _.indexOf(
-                    _.pluck(btns.header, 'name'),
-                    'toggle-fullscreen',
-                );
-                let icon = fullscreen === true ? 'Fullscreen' : 'Collapse';
-
-                btns.header[idx]['icon'] = icon;
-
-                // Update the state
-                this.setState({ fullscreen: !fullscreen, buttons: btns });
-            },
-        });
-    }
-
-    renderButtons(buttons) {
-        let { onButtonClick: onClick } = this.props;
-
-        return buttons.map((item, i) => {
-            let { title, name, icon } = item;
-            return (
-                <button
-                    className={'re-toolkit-card-btn-icon'}
-                    onClick={e => {
-                        onClick(e, this);
-                    }}
-                    type={'button'}
-                    title={title}
-                    key={`button-${i}`}
-                    id={name}>
-                    {Icon[icon]()}
-                </button>
-            );
-        });
-    }
-
-    render() {
-        let { fullscreen, buttons = {} } = this.state;
-
-        let { children = null, title = null } = this.props;
-
-        let { header: hbuttons = [], footer: fbuttons = [] } = buttons;
-
-        let position = fullscreen === true ? ' fixed' : '';
-        let zIndex = fullscreen === true ? 100000 : 1;
-
-        return (
-            <Fragment>
-                <div
-                    className={'re-toolkit-card-anchor'}
-                    ref={elm => {
-                        this.anchor = elm;
-                    }}
-                    style={{ zIndex }}
-                />
-                <div
-                    className={`re-toolkit-card${position}`}
-                    ref={elm => {
-                        this.cont = elm;
-                    }}>
-                    {!title && hbuttons.length < 1 ? null : (
-                        <div className={'re-toolkit-card-heading'}>
-                            {!title ? <div /> : <h3>{title}</h3>}
-                            {this.renderButtons(hbuttons)}
-                        </div>
-                    )}
-                    <div className={'re-toolkit-card-body'}>
-                        <div className={'re-toolkit-card-body-wrap'}>
-                            {children}
-                        </div>
-                    </div>
-                    {fbuttons.length < 1 ? null : (
-                        <div className={'re-toolkit-card-footer'}>
-                            {this.renderButtons(fbuttons)}
-                        </div>
-                    )}
-                </div>
-            </Fragment>
-        );
-    }
-}
-
-Card.defaultProps = {
-    speed: 0.125,
-    fullscreen: false,
-    title: null,
-    onButtonClick: null,
-    buttons: {
-        header: [],
-        footer: [],
-    },
-};
diff --git a/.core/components/Toolkit/Content/Code/Code.js b/.core/components/Toolkit/Content/Code/Code.js
deleted file mode 100644
index 84b6ed7f..00000000
--- a/.core/components/Toolkit/Content/Code/Code.js
+++ /dev/null
@@ -1,309 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import { TweenMax, Power2 } from 'gsap/umd/TweenMax';
-import { renderToStaticMarkup } from 'react-dom/server';
-import { Provider } from 'react-redux';
-import React, { Component, Fragment } from 'react';
-import SyntaxHighlighter from 'react-syntax-highlighter';
-import { vs, vs2015 } from 'react-syntax-highlighter/dist/cjs/styles/hljs';
-import copy from 'copy-to-clipboard';
-import op from 'object-path';
-import PropTypes from 'prop-types';
-import prettier from 'prettier/standalone';
-import parserbabel from 'prettier/parser-babylon';
-import parserHtml from 'prettier/parser-html';
-import deps from 'dependencies';
-import Icon from 'reactium-core/components/Toolkit/Icon';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Code
- * -----------------------------------------------------------------------------
- */
-
-export default class Code extends Component {
-    static defaultProps = {
-        prefs: {},
-        onButtonClick: null,
-        height: 'auto',
-        speed: 0.2,
-        visible: false,
-        component: null,
-        group: null,
-        id: null,
-        theme: 'light',
-        wrap: false,
-    };
-
-    constructor(props) {
-        super(props);
-
-        this.cont = React.createRef();
-        this.state = {
-            height: this.props.height,
-            prefs: this.props.prefs,
-            theme: this.props.theme,
-            visible: this.props.visible,
-            update: this.props.update,
-        };
-        this.open = this.open.bind(this);
-        this.close = this.close.bind(this);
-        this.toggle = this.toggle.bind(this);
-        this.getPref = this.getPref.bind(this);
-        this.onCopyClick = this.onCopyClick.bind(this);
-        this.onThemeClick = this.onThemeClick.bind(this);
-        this.prettierOptions = {
-            parser: 'html',
-            singleQuote: true,
-            tabWidth: 4,
-            printWidth: 200000000,
-            jsxSingleQuote: true,
-            jsxBracketSameLine: true,
-            trailingComma: 'es5',
-            plugins: [parserbabel, parserHtml],
-        };
-    }
-
-    componentDidMount() {
-        this.applyPrefs();
-    }
-
-    componentDidUpdate(prevProps, prevState) {
-        const { update: lastUpdate } = prevProps;
-        const { update, prefs } = this.props;
-
-        if (update !== lastUpdate) {
-            this.applyPrefs();
-        }
-    }
-
-    getPref(newState = {}, key, vals) {
-        const { prefs = {} } = this.state;
-
-        vals = !Array.isArray(vals) ? [vals] : vals;
-
-        vals.forEach((v, i) => {
-            if (op.has(newState, key)) {
-                return;
-            }
-            if (typeof v !== 'undefined') {
-                newState[key] = v;
-            }
-        });
-
-        return newState;
-    }
-
-    applyPrefs() {
-        let newState = {};
-        newState = this.applyVisiblePref(newState);
-        newState = this.applyThemePref(newState);
-        newState = this.applyWrapPref(newState);
-
-        if (Object.keys(newState).length > 0) {
-            this.setState(newState);
-        }
-
-        const { wrap } = newState;
-        const w = wrap === true ? 80 : 200000000;
-        op.set(this.prettierOptions, 'printWidth', w);
-    }
-
-    applyThemePref(newState = {}) {
-        const { id } = this.props;
-        const { prefs = {}, theme } = this.state;
-        const vals = [
-            op.get(prefs, `codeColor.${id}`),
-            op.get(prefs, `codeColor.all`, theme),
-        ];
-
-        return this.getPref(newState, 'theme', vals);
-    }
-
-    applyWrapPref(newState = {}) {
-        const { prefs = {} } = this.state;
-        return this.getPref(
-            newState,
-            'wrap',
-            op.get(prefs, `syntax.wrap`, false),
-        );
-    }
-
-    applyVisiblePref(newState = {}) {
-        const { id } = this.props;
-        const { prefs = {}, visible = false } = this.state;
-
-        let vals = [
-            op.get(prefs, `code.${id}`),
-            op.get(prefs, 'code.all', visible),
-        ];
-
-        return this.getPref(newState, 'visible', vals);
-    }
-
-    onCopyClick(e) {
-        const { getState, dispatch } = this.props;
-        const store = { getState, dispatch, subscribe: () => {} };
-        const { component: Component, onButtonClick } = this.props;
-        const markup = prettier.format(
-            renderToStaticMarkup(
-                <Provider store={store}>
-                    <Component />
-                </Provider>,
-            ),
-            this.prettierOptions,
-        );
-
-        copy(markup);
-
-        if (typeof onButtonClick === 'function') {
-            e['type'] = 'copy';
-            onButtonClick(e, this);
-        }
-    }
-
-    onThemeClick(e) {
-        const { dispatch } = this.props;
-        let { theme } = this.state;
-        theme = theme === 'dark' ? 'light' : 'dark';
-        dispatch(
-            deps().actions.Toolkit.set({
-                key: 'prefs.codeColor.all',
-                value: theme,
-            }),
-        );
-    }
-
-    open() {
-        const { speed } = this.props;
-        const _self = this;
-
-        TweenMax.set(this.cont.current, { height: 'auto', display: 'block' });
-        TweenMax.from(this.cont.current, speed, {
-            height: 0,
-            overwrite: 'all',
-            ease: Power2.easeInOut,
-            onComplete: () => {
-                _self.setState({ visible: true, height: 'auto' });
-            },
-        });
-    }
-
-    close() {
-        const { speed } = this.props;
-        const _self = this;
-
-        TweenMax.to(this.cont.current, speed, {
-            height: 0,
-            overwrite: 'all',
-            ease: Power2.easeInOut,
-            onComplete: () => {
-                _self.setState({ visible: false, height: 0 });
-            },
-        });
-    }
-
-    toggle() {
-        const { visible } = this.state;
-
-        if (visible !== true) {
-            this.open();
-        } else {
-            this.close();
-        }
-    }
-
-    themes(theme = 'dark') {
-        const thms = {
-            dark: vs2015,
-            light: vs,
-        };
-
-        return op.has(thms, theme) ? thms[theme] : thms.dark;
-    }
-
-    markup(Component) {
-        const { getState, dispatch } = this.props;
-        const store = { getState, dispatch, subscribe: () => {} };
-        const html = renderToStaticMarkup(
-            <Provider store={store}>
-                <Component />
-            </Provider>,
-        );
-
-        return prettier.format(html, this.prettierOptions);
-    }
-
-    render() {
-        const { component: Component } = this.props;
-
-        if (!Component) {
-            return null;
-        }
-
-        const { visible, height, theme = 'dark' } = this.state;
-
-        const type = typeof Component;
-        const style = this.themes(theme);
-        const display = visible === true ? 'block' : 'none';
-
-        switch (type) {
-            case 'function': {
-                return (
-                    <div
-                        ref={this.cont}
-                        className={'re-toolkit-code-view'}
-                        style={{ height, display }}>
-                        <div className={'re-toolkit-card-heading thin'}>
-                            <h3>Code</h3>
-                            <button
-                                className={`theme-btn ${theme}`}
-                                title={`theme: ${theme}`}
-                                onClick={this.onThemeClick}
-                                type={'button'}>
-                                <span />
-                                <span />
-                            </button>
-                            <button
-                                title={'copy to clipboard'}
-                                onClick={this.onCopyClick}
-                                type={'button'}>
-                                <Icon.Clipboard />
-                            </button>
-                        </div>
-                        <div className={'re-toolkit-code'}>
-                            <SyntaxHighlighter
-                                showLineNumbers={true}
-                                style={style}
-                                customStyle={{ padding: '20px 30px' }}
-                                language={'HTML'}>
-                                {this.markup(Component)}
-                            </SyntaxHighlighter>
-                        </div>
-                    </div>
-                );
-            }
-
-            default: {
-                return (
-                    <div
-                        ref={this.cont}
-                        style={{ height, display }}
-                        className={'re-toolkit-code-view'}>
-                        <div className={'re-toolkit-card-heading thin'}>
-                            <small>
-                                <em>
-                                    * Code view not available for this type of
-                                    element.
-                                </em>
-                            </small>
-                        </div>
-                    </div>
-                );
-            }
-        }
-    }
-}
diff --git a/.core/components/Toolkit/Content/Code/_style.scss b/.core/components/Toolkit/Content/Code/_style.scss
deleted file mode 100644
index 4e039b58..00000000
--- a/.core/components/Toolkit/Content/Code/_style.scss
+++ /dev/null
@@ -1,76 +0,0 @@
-
-.re-toolkit-code {
-    overflow-x : auto;
-    font-size  : 13px;
-    border-radius: 0;
-
-    pre {
-        border-radius: 0px !important;
-        font-family : monospace;
-    }
-
-    * {
-        font-family : monospace;
-        font-size   : 16px;
-        line-height : 2;
-    }
-
-    .react-syntax-highlighter-line-number {
-        margin-left  : -5px;
-        margin-right : 10px;
-    }
-
-    &.inline {
-        margin: 0 -26px;
-        font-family : monospace;
-    }
-}
-
-.re-toolkit-code-view {
-    overflow: hidden;
-}
-
-.theme-btn {
-    position: relative;
-
-    span {
-        position      : absolute;
-        display       : block;
-        width         : 13px;
-        height        : 13px;
-        content       : '';
-        top           : 50%;
-        left          : 50%;
-        border-radius : 1px;
-    }
-
-    &.dark {
-        span {
-            &:first-child {
-                background-color : $white;
-                border           : 1px solid $grey;
-                transform        : translate(-60%, -60%);
-            }
-            &:last-child {
-                background-color : $black;
-                border           : 1px solid $grey;
-                transform        : translate(-25%, -25%);
-            }
-        }
-    }
-
-    &.light {
-        span {
-            &:first-child {
-                background-color : $black;
-                border           : 1px solid $grey;
-                transform        : translate(-60%, -60%);
-            }
-            &:last-child {
-                background-color : $white;
-                border           : 1px solid $grey;
-                transform        : translate(-25%, -25%);
-            }
-        }
-    }
-}
diff --git a/.core/components/Toolkit/Content/Code/index.js b/.core/components/Toolkit/Content/Code/index.js
deleted file mode 100644
index 95552a89..00000000
--- a/.core/components/Toolkit/Content/Code/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import { ec } from 'reactium-core/easy-connect';
-import Code from './Code';
-
-export default ec(Code);
diff --git a/.core/components/Toolkit/Content/Dna/_style.scss b/.core/components/Toolkit/Content/Dna/_style.scss
deleted file mode 100644
index 765f7dde..00000000
--- a/.core/components/Toolkit/Content/Dna/_style.scss
+++ /dev/null
@@ -1,44 +0,0 @@
-.re-toolkit-dna-view {
-
-    ul {
-        li {
-            > * {
-                display: flex;
-                justify-content: flex-start;
-                align-items: center;
-            }
-
-            a,
-            > span {
-                padding: 15px 30px;
-                font-family: monospace;
-                font-size: 14px;
-                text-decoration: none;
-                color: $blue;
-
-                &:hover {
-                    text-decoration: underline;
-                    color: $black;
-                }
-            }
-
-            > span {
-                color: $black;
-                &:hover {
-                    text-decoration: none;
-                    color: $black;
-                }
-            }
-
-            svg {
-                margin-top: 1px;
-                margin-right: 10px;
-                width: 12px;
-                height: 12px;
-            }
-        }
-        li:nth-child(odd) {
-            background-color: darken($white, 2%);
-        }
-    }
-}
diff --git a/.core/components/Toolkit/Content/Dna/index.js b/.core/components/Toolkit/Content/Dna/index.js
deleted file mode 100644
index 4d9c4cb4..00000000
--- a/.core/components/Toolkit/Content/Dna/index.js
+++ /dev/null
@@ -1,393 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import { TweenMax, Power2 } from 'gsap/umd/TweenMax';
-import React, { Component, Fragment } from 'react';
-import op from 'object-path';
-import { Link } from 'react-router-dom';
-import _ from 'underscore';
-import Icon from 'reactium-core/components/Toolkit/Icon';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Dna
- * -----------------------------------------------------------------------------
- */
-
-export default class Dna extends Component {
-    static defaultProps = {
-        component: null,
-        height: 'auto',
-        menu: {},
-        prefs: {},
-        speed: 0.2,
-        id: null,
-        visible: false,
-    };
-
-    constructor(props) {
-        super(props);
-
-        this.state = {
-            prefs: this.props.prefs,
-            visible: this.props.visible,
-        };
-
-        this.cont = React.createRef();
-        this.getDependents = this.getDependents.bind(this);
-        this.getDependency = this.getDependency.bind(this);
-        this.getElements = this.getElements.bind(this);
-        this.getNPM = this.getNPM.bind(this);
-        this.open = this.open.bind(this);
-        this.close = this.close.bind(this);
-        this.toggle = this.toggle.bind(this);
-    }
-
-    componentDidMount() {
-        this.applyPrefs();
-    }
-
-    componentDidUpdate(prevProps) {
-        const { update: lastUpdate } = prevProps;
-        const { update } = this.props;
-
-        if (update !== lastUpdate) {
-            this.applyPrefs();
-        }
-    }
-
-    getPref(newState = {}, key, vals) {
-        const { prefs = {} } = this.state;
-
-        vals.forEach((v, i) => {
-            if (op.has(newState, key)) {
-                return;
-            }
-            if (typeof v !== 'undefined') {
-                newState[key] = v;
-            }
-        });
-
-        return newState;
-    }
-
-    applyPrefs() {
-        let newState = {};
-        newState = this.applyVisiblePref(newState);
-
-        if (Object.keys(newState).length > 0) {
-            this.setState(newState);
-        }
-    }
-
-    applyVisiblePref(newState = {}) {
-        const { id } = this.props;
-        const { prefs = {}, visible = false } = this.state;
-
-        const vals = [
-            op.get(prefs, `link.${id}`),
-            op.get(prefs, 'link.all', visible),
-        ];
-
-        return this.getPref(newState, 'visible', vals);
-    }
-
-    open() {
-        const { speed } = this.props;
-        const _self = this;
-
-        TweenMax.set(this.cont.current, { height: 'auto', display: 'block' });
-        TweenMax.from(this.cont.current, speed, {
-            height: 0,
-            overwrite: 'all',
-            ease: Power2.easeInOut,
-            onComplete: () => {
-                _self.setState({ visible: true, height: 'auto' });
-            },
-        });
-    }
-
-    close() {
-        const { speed } = this.props;
-        const _self = this;
-
-        TweenMax.to(this.cont.current, speed, {
-            height: 0,
-            overwrite: 'all',
-            ease: Power2.easeInOut,
-            onComplete: () => {
-                _self.setState({ visible: false, height: 0 });
-            },
-        });
-    }
-
-    toggle() {
-        const { visible } = this.state;
-
-        if (visible !== true) {
-            this.open();
-        } else {
-            this.close();
-        }
-    }
-
-    getElements() {
-        const { menu } = this.props;
-        let elements = [];
-        _.compact(_.pluck(Object.values(menu), 'elements')).forEach(item => {
-            elements = elements.concat(Object.values(item));
-        });
-
-        return elements;
-    }
-
-    getDependents(component) {
-        const { dna } = this.props;
-        const output = [];
-
-        if (!op.has(component, 'dependencies')) {
-            return output;
-        }
-
-        const elements = this.getElements();
-
-        elements.forEach(item => {
-            if (!op.has(item, 'dna')) {
-                return;
-            }
-            if (!op.has(item, 'component')) {
-                return;
-            }
-            if (typeof op.get(item, 'component') === 'string') {
-                return;
-            }
-            if (!op.has(item, 'component.dependencies')) {
-                return;
-            }
-
-            if (item.component.name === component.name) {
-                return;
-            }
-
-            const results = [];
-            const deps = item.component.dependencies();
-
-            deps.forEach(str => {
-                if (typeof str !== 'string') {
-                    if (op.has(str, 'id')) {
-                        str = str.id;
-                    }
-                }
-
-                const exp = new RegExp('^./node_modules/', 'i');
-                if (exp.test(str)) {
-                    return;
-                }
-
-                const p = str
-                    .split('./src/app/')
-                    .join('/')
-                    .split('/index.js')
-                    .join('');
-
-                if (p === dna) {
-                    results.push(item);
-                }
-            });
-
-            if (results.length < 1) {
-                return;
-            }
-
-            results.forEach(res => {
-                output.push(res);
-            });
-        });
-
-        return output;
-    }
-
-    getDependency(str) {
-        str = typeof str === 'string' ? str : null;
-        str = str === null && op.has(str, 'id') ? str.id : str;
-        if (str === null) {
-            return;
-        }
-
-        const { menu } = this.props;
-        const elements = this.getElements();
-
-        const p = str
-            .split('./src/app/')
-            .join('/')
-            .split('/index.js')
-            .join('');
-
-        const item = _.findWhere(elements, { dna: p });
-
-        if (item) {
-            const { route, label } = item;
-            return route && label
-                ? () => (
-                      <Link to={route} title={str}>
-                          <Icon.Close />
-                          {label}
-                      </Link>
-                  )
-                : null;
-        } else {
-            const exp = new RegExp('^./node_modules/', 'i');
-            if (exp.test(str)) {
-                return;
-            }
-
-            const cmp = str
-                .split('/')
-                .pop()
-                .split('.js')
-                .join('');
-            return () => (
-                <span>
-                    <Icon.Docs />
-                    {cmp} &ndash; {str.split('./src/app').join('')}
-                </span>
-            );
-        }
-    }
-
-    getNPM(str, deps) {
-        const exp = new RegExp('^./node_modules/', 'i');
-        if (!exp.test(str)) {
-            return;
-        }
-
-        const elements = [];
-
-        const pkg = str
-            .split('./node_modules/')
-            .join('')
-            .split('/')
-            .shift();
-
-        const exclude = ['webpack', 'react', 'core-js'];
-        if (exclude.indexOf(pkg) > -1) {
-            return;
-        }
-
-        const url = `https://www.npmjs.com/package/${pkg}`;
-
-        return () => (
-            <a href={url} target={'_blank'}>
-                {pkg}
-            </a>
-        );
-    }
-
-    render() {
-        if (process.env.NODE_ENV !== 'development') {
-            return null;
-        }
-
-        const { visible } = this.state;
-        const { component, height } = this.props;
-
-        if (typeof component === 'undefined' || typeof component === 'string') {
-            return null;
-        }
-
-        const deps = op.has(component, 'dependencies')
-            ? component.dependencies()
-            : [];
-
-        const display = visible === true ? 'block' : 'none';
-
-        const npm = _.compact(deps.map(item => this.getNPM(item, deps)));
-        const dependencies = _.compact(
-            deps.map(item => this.getDependency(item)),
-        );
-
-        const dependents = this.getDependents(component);
-
-        const count = npm.length + dependencies.length + dependents.length;
-
-        if (count < 1) {
-            return (
-                <div
-                    ref={this.cont}
-                    className={'re-toolkit-dna-view'}
-                    style={{ height, display }}>
-                    <div className={'re-toolkit-card-heading thin'}>DNA</div>
-                    <div className={'re-toolkit-card-body'}>
-                        <div className={'re-toolkit-card-body-pad'}>
-                            <h3 style={{ marginTop: 10, marginBottom: 10 }}>
-                                No DNA Found
-                            </h3>
-                        </div>
-                    </div>
-                </div>
-            );
-        }
-
-        return (
-            <div
-                ref={this.cont}
-                className={'re-toolkit-dna-view'}
-                style={{ height, display }}>
-                {dependents.length > 0 ? (
-                    <Fragment>
-                        <div className={'re-toolkit-card-heading thin'}>
-                            Dependents
-                        </div>
-                        <ul>
-                            {dependents.map((item, i) => {
-                                let { route, label } = item;
-                                return !route ? null : (
-                                    <li key={`dep-${i}`}>
-                                        <a href={route}>{label}</a>
-                                    </li>
-                                );
-                            })}
-                        </ul>
-                    </Fragment>
-                ) : null}
-
-                {dependencies.length > 0 ? (
-                    <Fragment>
-                        <div className={'re-toolkit-card-heading thin'}>
-                            Dependencies
-                        </div>
-                        <ul>
-                            {dependencies.map((item, i) => {
-                                const Alink = item;
-                                return Alink ? (
-                                    <li key={`dep-${i}`}>
-                                        <Alink />
-                                    </li>
-                                ) : null;
-                            })}
-                        </ul>
-                    </Fragment>
-                ) : null}
-                {npm.length > 0 ? (
-                    <Fragment>
-                        <div className={'re-toolkit-card-heading thin'}>
-                            NPM Modules
-                        </div>
-                        <ul>
-                            {npm.map((item, i) => {
-                                const Alink = item;
-                                return Alink ? (
-                                    <li key={`dep-${i}`}>
-                                        <Alink />
-                                    </li>
-                                ) : null;
-                            })}
-                        </ul>
-                    </Fragment>
-                ) : null}
-            </div>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/Content/Docs/Docs.js b/.core/components/Toolkit/Content/Docs/Docs.js
deleted file mode 100644
index 3d15acac..00000000
--- a/.core/components/Toolkit/Content/Docs/Docs.js
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-import op from 'object-path';
-import { TweenMax, Power2 } from 'gsap/umd/TweenMax';
-import React, { Component, Fragment } from 'react';
-import deps from 'dependencies';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Docs
- * -----------------------------------------------------------------------------
- */
-
-const noop = () => {};
-export default class Docs extends Component {
-    static defaultProps = {
-        title: null,
-        prefs: {},
-        height: 'auto',
-        speed: 0.2,
-        id: null,
-        update: null,
-        onInit: noop,
-    };
-
-    constructor(props) {
-        super(props);
-
-        this.state = {
-            height: this.props.height,
-            init: false,
-        };
-
-        this.prefs = {};
-        this.cont = React.createRef();
-        this.open = this.open.bind(this);
-        this.close = this.close.bind(this);
-        this.toggle = this.toggle.bind(this);
-    }
-
-    componentDidMount() {
-        this.applyPrefs();
-        const { init } = this.state;
-
-        if (init === false) {
-            const { onInit } = this.props;
-
-            onInit(this);
-
-            this.setState({ init: true });
-        }
-    }
-
-    componentDidUpdate(prevProps) {
-        const { update: lastUpdate } = prevProps;
-        const { update } = this.props;
-
-        if (update !== lastUpdate) {
-            this.applyPrefs();
-        }
-    }
-
-    applyPrefs() {
-        this.prefs = this.props.getState().Toolkit.prefs;
-    }
-
-    open() {
-        const { id, speed, dispatch } = this.props;
-        const _self = this;
-
-        TweenMax.set(this.cont.current, { height: 'auto', display: 'block' });
-        TweenMax.from(this.cont.current, speed, {
-            height: 0,
-            overwrite: 'all',
-            ease: Power2.easeInOut,
-            onComplete: () => {
-                _self.setState({ height: 'auto' });
-                dispatch(
-                    deps().actions.Toolkit.set({
-                        key: `prefs.docs.${id}`,
-                        value: true,
-                    }),
-                );
-            },
-        });
-    }
-
-    close() {
-        const { id, speed, dispatch } = this.props;
-        const _self = this;
-
-        TweenMax.to(this.cont.current, speed, {
-            height: 0,
-            overwrite: 'all',
-            ease: Power2.easeInOut,
-            onComplete: () => {
-                _self.setState({ height: 0 });
-                dispatch(
-                    deps().actions.Toolkit.set({
-                        key: `prefs.docs.${id}`,
-                        value: false,
-                    }),
-                );
-            },
-        });
-    }
-
-    toggle() {
-        if (this.visible() !== true) {
-            this.open();
-        } else {
-            this.close();
-        }
-    }
-
-    getPref(key, prefs) {
-        const { id, getState } = this.props;
-        prefs = prefs || getState().Toolkit.prefs;
-
-        let def, pref;
-
-        switch (key) {
-            case 'visible':
-                pref = `docs.${id}`;
-                def = 'docs.all';
-                break;
-
-            case 'theme':
-                pref = `codeColor.${id}`;
-                def = 'codeColor.all';
-                break;
-        }
-
-        return op.get(prefs, pref, op.get(prefs, def, false));
-    }
-
-    visible() {
-        const { visible } = this.props;
-        return visible === true ? true : this.getPref('visible');
-    }
-
-    theme() {
-        return this.getPref('theme');
-    }
-
-    render() {
-        const { height } = this.state;
-        const { component: Component, title, update } = this.props;
-        const display = this.visible() ? 'block' : 'none';
-        const theme = this.theme();
-
-        return !Component ? null : (
-            <div
-                ref={this.cont}
-                className={'re-toolkit-docs-view'}
-                style={{ height, display }}>
-                {title ? (
-                    <div className={'re-toolkit-card-heading thin'}>
-                        <h3>{title}</h3>
-                    </div>
-                ) : null}
-
-                <div className={'re-toolkit-card-docs'}>
-                    <Component theme={theme} />
-                </div>
-            </div>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/Content/Docs/_style.scss b/.core/components/Toolkit/Content/Docs/_style.scss
deleted file mode 100644
index c6cecf7e..00000000
--- a/.core/components/Toolkit/Content/Docs/_style.scss
+++ /dev/null
@@ -1,403 +0,0 @@
-.re-toolkit-docs-view {
-    overflow: hidden;
-}
-
-.re-toolkit-card-docs {
-
-    display: block;
-    padding: 0 25px;
-    margin-top: 15px;
-
-    font-family: Helvetica, arial, sans-serif;
-    font-size: 14px;
-    line-height: 1.6;
-    background-color: white;
-    color: #333;
-
-    .re-toolkit-code {
-        &:last-child {
-            pre {
-                margin-bottom: -1px !important;
-            }
-        }
-    }
-
-
-    & > *:first-child {
-      margin-top: 0 !important;
-    }
-
-    & > *:last-child {
-      margin-bottom: 0 !important;
-    }
-
-    a {
-      color: #4183C4;
-      text-decoration: none;
-    }
-
-    a.absent {
-      color: #cc0000;
-    }
-
-    a.anchor {
-      display: block;
-      padding-left: 30px;
-      margin-left: -30px;
-      cursor: pointer;
-      position: absolute;
-      top: 0;
-      left: 0;
-      bottom: 0;
-    }
-
-    h1, h2, h3, h4, h5, h6 {
-      margin: 20px 0 10px;
-      padding: 0;
-      font-weight: bold;
-      -webkit-font-smoothing: antialiased;
-      cursor: text;
-      position: relative;
-    }
-
-    h2:first-child, h1:first-child, h1:first-child + h2, h3:first-child, h4:first-child, h5:first-child, h6:first-child {
-      margin-top: 0;
-      padding-top: 0;
-    }
-
-    h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
-      text-decoration: none;
-    }
-
-    h1 tt, h1 code {
-      font-size: inherit;
-    }
-
-    h2 tt, h2 code {
-      font-size: inherit;
-    }
-
-    h3 tt, h3 code {
-      font-size: inherit;
-    }
-
-    h4 tt, h4 code {
-      font-size: inherit;
-    }
-
-    h5 tt, h5 code {
-      font-size: inherit;
-    }
-
-    h6 tt, h6 code {
-      font-size: inherit;
-    }
-
-    h1 {
-      font-size: 28px;
-      color: black;
-    }
-
-    h2 {
-      font-size: 24px;
-      border-bottom: 1px solid #cccccc;
-      color: black;
-    }
-
-    h3 {
-      font-size: 18px;
-    }
-
-    h4 {
-      font-size: 16px;
-    }
-
-    h5 {
-      font-size: 14px;
-    }
-
-    h6 {
-      color: #777777;
-      font-size: 14px;
-    }
-
-    p, blockquote, ul, ol, dl, li, table, pre {
-      margin: 0 0 15px 0;
-    }
-
-    hr {
-      border: 0 none;
-      color: #cccccc;
-      height: 4px;
-      padding: 0;
-    }
-
-    & > h2:first-child {
-      margin-top: 0;
-      padding-top: 0;
-    }
-
-    & > h1:first-child {
-      margin-top: 0;
-      padding-top: 0;
-    }
-
-    & > h1:first-child + h2 {
-      margin-top: 0;
-      padding-top: 0;
-    }
-
-    & > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
-      margin-top: 0;
-      padding-top: 0;
-    }
-
-    a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
-      margin-top: 0;
-      padding-top: 0;
-    }
-
-    h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
-      margin-top: 0;
-    }
-
-    li p.first {
-      display: inline-block;
-    }
-
-    ul, ol {
-      padding-left: 30px;
-    }
-
-    ul :first-child, ol :first-child {
-      margin-top: 0;
-    }
-
-    ul :last-child, ol :last-child {
-      margin-bottom: 0;
-    }
-
-    dl {
-      padding: 0;
-    }
-
-    dl dt {
-      font-size: 14px;
-      font-weight: bold;
-      font-style: italic;
-      padding: 0;
-      margin: 15px 0 5px;
-    }
-
-    dl dt:first-child {
-      padding: 0;
-    }
-
-    dl dt > :first-child {
-      margin-top: 0;
-    }
-
-    dl dt > :last-child {
-      margin-bottom: 0;
-    }
-
-    dl dd {
-      margin: 0 0 15px;
-      padding: 0 15px;
-    }
-
-    dl dd > :first-child {
-      margin-top: 0;
-    }
-
-    dl dd > :last-child {
-      margin-bottom: 0;
-    }
-
-    blockquote {
-      border-left: 4px solid #dddddd;
-      padding: 0 15px;
-      color: #777777;
-    }
-
-    blockquote > :first-child {
-      margin-top: 0;
-    }
-
-    blockquote > :last-child {
-      margin-bottom: 0;
-    }
-
-    table {
-      padding: 0;
-    }
-    table tr {
-      border-top: 1px solid #cccccc;
-      background-color: white;
-      margin: 0;
-      padding: 0;
-    }
-
-    table tr:nth-child(2n) {
-      background-color: #f8f8f8;
-    }
-
-    table tr th {
-      font-weight: bold;
-      border: 1px solid #cccccc;
-      text-align: left;
-      margin: 0;
-      padding: 6px 13px;
-    }
-
-    table tr td {
-      border: 1px solid #cccccc;
-      text-align: left;
-      margin: 0;
-      padding: 6px 13px;
-    }
-
-    table tr th :first-child, table tr td :first-child {
-      margin-top: 0;
-    }
-
-    table tr th :last-child, table tr td :last-child {
-      margin-bottom: 0;
-    }
-
-    img {
-      max-width: 100%;
-    }
-
-    span.frame {
-      display: block;
-      overflow: hidden;
-    }
-
-    span.frame > span {
-      border: 1px solid #dddddd;
-      display: block;
-      float: left;
-      overflow: hidden;
-      margin: 13px 0 0;
-      padding: 7px;
-      width: auto;
-    }
-
-    span.frame span img {
-      display: block;
-      float: left;
-    }
-
-    span.frame span span {
-      clear: both;
-      color: #333333;
-      display: block;
-      padding: 5px 0 0;
-    }
-
-    span.align-center {
-      display: block;
-      overflow: hidden;
-      clear: both;
-    }
-
-    span.align-center > span {
-      display: block;
-      overflow: hidden;
-      margin: 13px auto 0;
-      text-align: center;
-    }
-
-    span.align-center span img {
-      margin: 0 auto;
-      text-align: center;
-    }
-
-    span.align-right {
-      display: block;
-      overflow: hidden;
-      clear: both;
-    }
-
-    span.align-right > span {
-      display: block;
-      overflow: hidden;
-      margin: 13px 0 0;
-      text-align: right;
-    }
-
-    span.align-right span img {
-      margin: 0;
-      text-align: right;
-    }
-
-    span.float-left {
-      display: block;
-      margin-right: 13px;
-      overflow: hidden;
-      float: left;
-    }
-
-    span.float-left span {
-      margin: 13px 0 0;
-    }
-
-    span.float-right {
-      display: block;
-      margin-left: 13px;
-      overflow: hidden;
-      float: right;
-    }
-
-    span.float-right > span {
-      display: block;
-      overflow: hidden;
-      margin: 13px auto 0;
-      text-align: right;
-    }
-
-    code, tt {
-      margin: 0 2px;
-      padding: 0 5px;
-      white-space: nowrap;
-      border: 1px solid #eaeaea;
-      background-color: #f8f8f8;
-      border-radius: 3px;
-      &, * { font-family: monospace; }
-    }
-
-    pre code {
-      margin: 0;
-      padding: 0;
-      white-space: pre;
-      border: none;
-      background: transparent;
-    }
-
-    .highlight pre {
-      background-color: #f8f8f8;
-      border: 1px solid #cccccc;
-      font-size: 13px;
-      line-height: 19px;
-      overflow: auto;
-      padding: 6px 10px;
-      border-radius: 3px;
-    }
-
-    pre {
-      background-color: #f8f8f8;
-      border: 1px solid #cccccc;
-      font-size: 13px;
-      line-height: 19px;
-      overflow: auto;
-      padding: 6px 10px;
-      border-radius: 3px;
-    }
-
-    pre code, pre tt {
-      background-color: transparent;
-      border: none;
-    }
-
-}
diff --git a/.core/components/Toolkit/Content/Docs/index.js b/.core/components/Toolkit/Content/Docs/index.js
deleted file mode 100644
index e4949e00..00000000
--- a/.core/components/Toolkit/Content/Docs/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import { ec } from 'reactium-core/easy-connect';
-import Docs from './Docs';
-
-export default ec(Docs);
diff --git a/.core/components/Toolkit/Content/Preview/index.js b/.core/components/Toolkit/Content/Preview/index.js
deleted file mode 100644
index 8ab7a48d..00000000
--- a/.core/components/Toolkit/Content/Preview/index.js
+++ /dev/null
@@ -1,157 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import { getDisplayName } from 'reactium-core/components/Toolkit/_lib/tools';
-import Frame, { FrameContextConsumer } from 'react-frame-component';
-import React, { Component, Fragment } from 'react';
-import { themes, assets } from 'appdir/toolkit';
-import { Provider } from 'react-redux';
-import PropTypes from 'prop-types';
-import op from 'object-path';
-import _ from 'underscore';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Preview
- * -----------------------------------------------------------------------------
- */
-const Empty = props => {
-    return () => null;
-};
-
-const assetPath = op.get(assets, 'path', '/assets');
-
-export default class Preview extends Component {
-    static defaultProps = {
-        visible: true,
-        component: null,
-        group: null,
-        id: null,
-        style: `${assetPath}/style/style.css`,
-        toolkit: `${assetPath}/style/toolkit.css`,
-    };
-
-    static contextTypes = {
-        store: PropTypes.object,
-    };
-
-    constructor(props) {
-        super(props);
-
-        this.h = null;
-        this.iframe = React.createRef();
-        this.resize = this.resize.bind(this);
-        this.state = { visible: this.props.visible };
-    }
-
-    componentDidMount() {
-        if (typeof window === 'undefined') {
-            return;
-        }
-        window.addEventListener('resize', this.resize);
-    }
-
-    componentWillUnMount() {
-        if (typeof window === 'undefined') {
-            return;
-        }
-
-        window.removeEventListener('resize', this.resize);
-    }
-
-    componentDidUpdate(prevProps) {
-        const { style: prevStyle, update: lastUpdate } = prevProps;
-        const { style: currStyle, update } = this.props;
-
-        if (this.iframe.current && prevStyle !== currStyle) {
-            const stylesheet = this.iframe.current.node.contentWindow.document.head.querySelector(
-                'link[rel=stylesheet]',
-            );
-            stylesheet.setAttribute('href', currStyle);
-        }
-
-        if (update !== lastUpdate) {
-            this.resize();
-        }
-    }
-
-    resize() {
-        const { visible } = this.state;
-
-        if (!this.iframe.current || visible === false) {
-            return;
-        }
-
-        try {
-            const iframe = this.iframe.current.node;
-
-            if (['h', '%'].includes(String(iframe.style.height).substr(-1))) {
-                return;
-            }
-
-            const h = Math.max(
-                iframe.contentWindow.document.body.scrollHeight,
-                100,
-            );
-
-            if (this.h !== h) {
-                this.h = h;
-                iframe.style.height = `${h}px`;
-            }
-        } catch (err) {}
-    }
-
-    renderCmp({ style, toolkit }) {
-        let browserSync;
-        if (document) {
-            browserSync = document.getElementById('__bs_script__');
-            browserSync = browserSync ? browserSync.outerHTML : '';
-        }
-
-        const theme = _.findWhere(themes, { css: style }) || themes[0];
-        style = op.get(theme, 'css').replace(/^\/assets/, assetPath);
-
-        return `
-            <!DOCTYPE html>
-            <html>
-                <head>
-                    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-                    <link rel="stylesheet" href="${style}">
-                    <link rel="stylesheet" href="${toolkit}">
-                </head>
-                <body style="padding: 25px">
-                    <div id="router"></div>
-                    ${browserSync}
-                </body>
-            </html>
-        `;
-    }
-
-    render() {
-        const { group, id, visible, style, path, dna } = this.props;
-
-        const display = visible ? 'block' : 'none';
-        const markup = this.renderCmp(this.props);
-        let Component = this.props.component || Empty(this.props);
-
-        return (
-            <Frame
-                style={{ display }}
-                id={`iframe-${id}`}
-                onLoad={this.resize}
-                frameBorder={0}
-                scrolling={'no'}
-                ref={this.iframe}
-                initialContent={markup}
-                mountTarget='#router'>
-                <FrameContextConsumer>
-                    {({ window: iWindow, document: iDocument }) => (
-                        <Component iWindow={iWindow} iDocument={iDocument} />
-                    )}
-                </FrameContextConsumer>
-            </Frame>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/Content/_style.scss b/.core/components/Toolkit/Content/_style.scss
deleted file mode 100644
index 6ee10b8f..00000000
--- a/.core/components/Toolkit/Content/_style.scss
+++ /dev/null
@@ -1,56 +0,0 @@
-.re-toolkit-content {
-    flex-grow: 1;
-    overflow-x: hidden;
-    z-index: 1;
-    padding: 60px;
-    padding-top: 48px;
-    position: relative;
-
-    @include breakpoint(xs) {
-        padding: 20px;
-    }
-
-    &-fullscreen {
-        padding: 0;
-    }
-
-    &-crumbs {
-        @extend h3;
-
-        margin-bottom: 40px;
-        display: flex;
-        align-items: center;
-        justify-content: flex-start;
-        position: relative;
-        font-size: 24px;
-
-        @include breakpoint(xs) {
-            margin-bottom: 10px;
-        }
-
-        * {
-            font-family: inherit;
-            position: relative;
-            color: $gray;
-        }
-
-        *:not(:last-child) {
-            &:after {
-                content: '/';
-                color: $blue;
-                margin: 0 10px;
-                transform: translateX(100%);
-            }
-        }
-
-        a {
-            text-decoration: none;
-            color: $black;
-            line-height: 1;
-            &:hover {
-                text-decoration: underline;
-            }
-        }
-
-    }
-}
diff --git a/.core/components/Toolkit/Content/index.js b/.core/components/Toolkit/Content/index.js
deleted file mode 100644
index e3656a6c..00000000
--- a/.core/components/Toolkit/Content/index.js
+++ /dev/null
@@ -1,393 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-import React, { Component, Fragment } from 'react';
-import { Link } from 'react-router-dom';
-import Preview from './Preview';
-import op from 'object-path';
-import _ from 'underscore';
-import Card from './Card';
-import Code from './Code';
-import Docs from './Docs';
-import Dna from './Dna';
-import Icon from 'reactium-core/components/Toolkit/Icon';
-import { TweenMax, Power2 } from 'gsap/umd/TweenMax';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Content
- * -----------------------------------------------------------------------------
- */
-
-export default class Content extends Component {
-    constructor(props) {
-        super(props);
-
-        this.cards = {};
-        this.codes = {};
-        this.docs = {};
-        this.link = {};
-        this.previews = {};
-        this.watcher = null;
-        this.container = React.createRef();
-        this.onCardButtonClick = this.onCardButtonClick.bind(this);
-    }
-
-    // Handlers
-    componentDidMount() {
-        if (this.props.hasOwnProperty('mount')) {
-            this.props.mount(this);
-        }
-
-        const cont = this.container.current;
-        if (cont) {
-            TweenMax.from(cont, 0.5, {
-                opacity: 0,
-                delay: 0.25,
-                ease: Power2.easeOut,
-            });
-        }
-    }
-
-    onCardButtonClick(e, card) {
-        let { onButtonClick } = this.props;
-        let { id: action } = e.currentTarget;
-
-        let evtdata = card;
-
-        switch (action) {
-            case 'toggle-link':
-            case 'toggle-docs':
-            case 'toggle-code': {
-                if (op.has(card, 'state.id')) {
-                    let k = action === 'toggle-code' ? 'codes' : 'docs';
-                    k = action === 'toggle-link' ? 'link' : k;
-
-                    let cmp = this[k][card.state.id];
-                    if (cmp) {
-                        cmp.toggle();
-                    }
-                }
-
-                break;
-            }
-        }
-
-        if (typeof onButtonClick === 'function') {
-            e['type'] = action;
-            onButtonClick(e, evtdata);
-        }
-    }
-
-    // Registers
-    registerCard({ elm, id }) {
-        if (!elm) {
-            return;
-        }
-        this.cards[id] = elm;
-    }
-
-    registerCode({ elm, id }) {
-        if (!elm) {
-            return;
-        }
-        this.codes[id] = elm;
-    }
-
-    registerDocs({ elm, id }) {
-        if (!elm) {
-            return;
-        }
-        this.docs[id] = elm;
-    }
-
-    registerDnas({ elm, id }) {
-        if (!elm) {
-            return;
-        }
-        this.link[id] = elm;
-    }
-
-    // Renderers
-    renderCards({ data, card, group }) {
-        let {
-            onButtonClick,
-            onCopyClick,
-            prefs,
-            update,
-            style,
-            menu,
-        } = this.props;
-
-        this.cards = {};
-        this.codes = {};
-        this.docs = {};
-        this.link = {};
-
-        const defItem = {
-            label: '',
-            component: null,
-            readme: null,
-            dna: null,
-            hideCode: false,
-            hideDna: false,
-            hideDocs: false,
-        };
-
-        return Object.keys(data).map((key, k) => {
-            const id = [group, key].join('_');
-            const item = { ...defItem, ...data[key] };
-
-            let {
-                label,
-                component,
-                readme,
-                dna,
-                path,
-                hideCode,
-                hideDna,
-                hideDocs,
-            } = item;
-
-            let { buttons = {} } = card;
-
-            buttons = JSON.stringify(buttons);
-            buttons = JSON.parse(buttons);
-
-            let noCode = Boolean(typeof component === 'string');
-            noCode = hideCode === true ? hideCode : noCode;
-
-            if (noCode === true) {
-                let idx = _.indexOf(
-                    _.pluck(buttons.footer, 'name'),
-                    'toggle-code',
-                );
-                buttons.footer.splice(idx, 1);
-            }
-
-            if (
-                !dna ||
-                hideDna == true ||
-                typeof component === 'string' ||
-                process.env.NODE_ENV !== 'development'
-            ) {
-                let idx = _.indexOf(
-                    _.pluck(buttons.footer, 'name'),
-                    'toggle-link',
-                );
-                buttons.footer.splice(idx, 1);
-            }
-
-            if (!readme || hideDocs === true) {
-                let idx = _.indexOf(
-                    _.pluck(buttons.footer, 'name'),
-                    'toggle-docs',
-                );
-                buttons.footer.splice(idx, 1);
-            }
-
-            return (
-                <Card
-                    id={id}
-                    title={label}
-                    buttons={buttons}
-                    key={`card-${id}`}
-                    onButtonClick={this.onCardButtonClick}
-                    ref={elm => {
-                        //this.registerCard({ elm, id });
-                    }}>
-                    <Preview
-                        component={component}
-                        update={update}
-                        group={group}
-                        style={style}
-                        dna={dna}
-                        id={id}
-                    />
-                    {noCode !== true ? (
-                        <Code
-                            ref={elm => {
-                                this.registerCode({ elm, id });
-                            }}
-                            onButtonClick={onButtonClick}
-                            component={component}
-                            update={update}
-                            prefs={prefs}
-                            group={group}
-                            id={id}
-                        />
-                    ) : null}
-                    {readme && hideDocs !== true ? (
-                        <Docs
-                            ref={elm => {
-                                this.registerDocs({ elm, id });
-                            }}
-                            title={'Documentation'}
-                            component={readme}
-                            update={update}
-                            prefs={prefs}
-                            id={id}
-                        />
-                    ) : null}
-                    {hideDna !== true ? (
-                        <Dna
-                            ref={elm => {
-                                this.registerDnas({ elm, id });
-                            }}
-                            component={component}
-                            update={update}
-                            prefs={prefs}
-                            menu={menu}
-                            dna={dna}
-                            id={id}
-                        />
-                    ) : null}
-                </Card>
-            );
-        });
-    }
-
-    renderCrumbs({ title, group, element }) {
-        let { onCrumbClick } = this.props;
-        let elms = [];
-
-        if (!element) {
-            elms.push(<span key={`group-${group}`}>{title}</span>);
-        } else {
-            elms.push(
-                <span key={`group-${group}-element`}>
-                    <Link to={`/toolkit/${group}`} onClick={onCrumbClick}>
-                        {title}
-                    </Link>
-                </span>,
-            );
-        }
-
-        return (
-            <div className={'re-toolkit-content-crumbs'}>
-                {elms.map(elm => elm)}
-            </div>
-        );
-    }
-
-    render() {
-        let {
-            card,
-            title,
-            data,
-            element,
-            group,
-            defaultComponent,
-            update,
-            onMenuToggleClick,
-            prefs,
-        } = this.props;
-
-        let pos = op.get(prefs, 'sidebar.position', 'left');
-
-        if (!data) {
-            if (!defaultComponent) {
-                return null;
-            }
-
-            const Overview = defaultComponent;
-            return (
-                <>
-                    <section
-                        className={'re-toolkit-content'}
-                        ref={this.container}>
-                        <Overview />
-                    </section>
-                    <button
-                        type={'button'}
-                        className={`re-toolkit-menu-toggle-${pos}`}
-                        onClick={onMenuToggleClick}>
-                        <Icon.Menu />
-                    </button>
-                </>
-            );
-        }
-
-        if (data && typeof data !== 'function') {
-            element = data[element];
-
-            const label = op.get(element, 'label', null);
-
-            return (
-                <>
-                    <section
-                        className={'re-toolkit-content'}
-                        ref={this.container}>
-                        {this.renderCrumbs({ title, group, element: label })}
-                        {this.renderCards({ data, card, group })}
-                    </section>
-                    <button
-                        type={'button'}
-                        className={`re-toolkit-menu-toggle-${pos}`}
-                        onClick={onMenuToggleClick}>
-                        <Icon.Menu />
-                    </button>
-                </>
-            );
-        } else {
-            const Component = data;
-            return (
-                <>
-                    <section
-                        className={'re-toolkit-content'}
-                        ref={this.container}>
-                        {this.renderCrumbs({ title })}
-                        {<Component />}
-                    </section>
-                    <button
-                        type={'button'}
-                        className={`re-toolkit-menu-toggle-${pos}`}
-                        onClick={onMenuToggleClick}>
-                        <Icon.Menu />
-                    </button>
-                </>
-            );
-        }
-    }
-}
-
-Content.defaultProps = {
-    onButtonClick: null,
-    onCrumbClick: null,
-    onMenuToggleClick: null,
-    onCopyClick: null,
-    title: null,
-    update: null,
-    style: null,
-    watchTimer: 200,
-    data: {},
-    prefs: {},
-    menu: {},
-    card: {
-        buttons: {
-            header: [
-                {
-                    name: 'toggle-fullscreen',
-                    title: 'toggle fullscreen',
-                    icon: 'Fullscreen',
-                },
-            ],
-            footer: [
-                {
-                    name: 'toggle-code',
-                    title: 'code view',
-                    icon: 'Markup',
-                },
-                {
-                    name: 'toggle-link',
-                    title: 'dependencies',
-                    icon: 'Link',
-                },
-                { name: 'toggle-docs', title: 'docs', icon: 'Docs' },
-            ],
-        },
-    },
-};
diff --git a/.core/components/Toolkit/Header/_style.scss b/.core/components/Toolkit/Header/_style.scss
deleted file mode 100644
index b7e898f9..00000000
--- a/.core/components/Toolkit/Header/_style.scss
+++ /dev/null
@@ -1,52 +0,0 @@
-.re-toolkit-header {
-    height           : $header-height;
-    width            : 100vw;
-    z-index          : $z-middle;
-    position         : fixed;
-    background-color : $white;
-    border-bottom    : 1px solid $border-color;
-    display          : flex;
-    align-items      : center;
-    padding          : 30px 20px;
-
-    &-logo {
-        width: 32px;
-        height: auto;
-        margin-right: 20px;
-    }
-
-    h1 {
-        font-size: 16px;
-        padding: 0;
-        flex-grow: 1;
-    }
-
-    small {
-        color: $gray;
-    }
-
-    select {
-        margin-left: 10px;
-    }
-}
-
-.re-toolkit-select {
-    appearance: button;
-    user-select: none;
-    border-radius: 2px;
-    border: 1px solid $grey;
-    outline: none;
-    color: $gray;
-    font-size: 13px;
-    margin-top: -2px;
-    overflow: hidden;
-    padding: 5px 30px 5px 10px;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    display: flex;
-    align-items: center;
-    justify-content: flex-start;
-    background-position: 100% center;
-    background-repeat: no-repeat;
-    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAGCAYAAADUtS5UAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMDYtMTVUMDg6MjY6MDUtMDQ6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTA2LTE1VDA4OjUxOjMzLTA0OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTE1VDA4OjUxOjMzLTA0OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE3OTk2MDM5LTQxZjctNGI4OS04NmFkLTY3MWMwN2Q5MDlkMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3OTk5ZDU2ZS0zNTAzLTQ3MzUtYTAwNC0wOTM2ZWU2MTRlMDIiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3OTk5ZDU2ZS0zNTAzLTQ3MzUtYTAwNC0wOTM2ZWU2MTRlMDIiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjc5OTlkNTZlLTM1MDMtNDczNS1hMDA0LTA5MzZlZTYxNGUwMiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0xNVQwODoyNjowNS0wNDowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjI4MzEyYjlkLTZhZmEtNDNjYy05NmVlLTY0OWYzNjgzYTQ4NyIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0xNVQwODo1MDo1OC0wNDowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjE3OTk2MDM5LTQxZjctNGI4OS04NmFkLTY3MWMwN2Q5MDlkMyIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0xNVQwODo1MTozMy0wNDowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+d616oQAAAHlJREFUKJGdkDEKhUAMRF88lyCCJ/JMKQKp0n9RsPBYa6PNovysAyGQhHlMKKWQrLn815z160hKRA5VXd72qrqIyJH1y6a9z3szW+uYZrYCfZNfIxhgcPfthrr7BgzNQT6AAcaI2CNiB8YvH5QH00eJSD2arv6rwRmdTMRNwJz23Z0AAAAASUVORK5CYII=');
-}
diff --git a/.core/components/Toolkit/Header/index.js b/.core/components/Toolkit/Header/index.js
deleted file mode 100644
index 96fee2e0..00000000
--- a/.core/components/Toolkit/Header/index.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React from 'react';
-import _ from 'underscore';
-import op from 'object-path';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Header
- * -----------------------------------------------------------------------------
- */
-
-const selectedTheme = ({ themes = [], style, assetPath = '/assets' }) => {
-    style = style.replace(/^\/assets/, assetPath);
-    let theme =
-        _.findWhere(themes, { css: style }) ||
-        _.findWhere(themes, { selected: true });
-    theme =
-        typeof theme === 'undefined'
-            ? _.findWhere(themes, { css: '/assets/style/style.css' }) ||
-              _.findWhere(themes, { css: `${assetPath}/style/style.css` })
-            : theme;
-
-    return op.get(theme, 'css', style);
-};
-
-const Header = ({
-    logo,
-    minThemes,
-    onThemeChange,
-    themes,
-    title,
-    version,
-    style,
-    assetPath = '/assets',
-}) => (
-    <header className='re-toolkit-header'>
-        {logo && (
-            <a href='/toolkit'>
-                <img
-                    className='re-toolkit-header-logo'
-                    src={logo.replace(/^\/assets/, assetPath)}
-                />
-            </a>
-        )}
-        {title && <h1>{title}</h1>}
-        {version && <small>{version}</small>}
-        {themes.length > minThemes && (
-            <select
-                className='re-toolkit-select'
-                defaultValue={selectedTheme({ themes, style, assetPath })}
-                onChange={onThemeChange}>
-                <option value={false}>Theme</option>
-                {themes.map(({ css, name }, i) => (
-                    <option key={i} value={css}>
-                        {name}
-                    </option>
-                ))}
-            </select>
-        )}
-    </header>
-);
-
-Header.defaultProps = {
-    logo: null,
-    minThemes: 0,
-    onThemeChange: null,
-    themes: [],
-    title: null,
-    version: null,
-};
-
-export default Header;
diff --git a/.core/components/Toolkit/Icon/index.js b/.core/components/Toolkit/Icon/index.js
deleted file mode 100644
index d9e2bb0e..00000000
--- a/.core/components/Toolkit/Icon/index.js
+++ /dev/null
@@ -1,319 +0,0 @@
-import React from 'react';
-
-const defaults = {
-    height: 18,
-    width: 18,
-    viewBox: '0 0 1024 1024',
-};
-
-export const Close = props => (
-    <svg {...defaults} {...props}>
-        <path d='M571.733 512l226.133-226.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-226.133 226.133-226.133-226.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l226.133 226.133-226.133 226.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l226.133-226.133 226.133 226.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-226.133-226.133z' />
-    </svg>
-);
-
-export const Clipboard = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M435.2 153.6c-6.736 0-13.328-2.736-18.096-7.504s-7.504-11.36-7.504-18.096 2.736-13.328 7.504-18.096c4.752-4.768 11.36-7.504 18.096-7.504s13.344 2.736 18.096 7.504c4.768 4.752 7.504 11.36 7.504 18.096s-2.736 13.344-7.504 18.096c-4.768 4.768-11.36 7.504-18.096 7.504z' />
-            <path d='M793.6 358.4h-25.6v-128c0-42.347-34.453-76.8-76.8-76.8h-48.426c-10.68-14.824-24.949-26.909-42.526-35.698-14.091-7.045-27.994-10.891-39.134-12.99-10.898-59.6-63.213-104.912-125.914-104.912s-115.014 45.312-125.914 104.912c-11.141 2.099-25.043 5.944-39.134 12.99-17.579 8.789-31.848 20.874-42.528 35.698h-48.424c-42.347 0-76.8 34.453-76.8 76.8v563.2c0 42.347 34.453 76.8 76.8 76.8h128v76.8c0 42.347 34.453 76.8 76.8 76.8h409.6c42.347 0 76.8-34.453 76.8-76.8v-512c0-42.347-34.453-76.8-76.8-76.8zM291.749 164.362c19.898-10.402 40.982-10.76 41.051-10.762 14.138 0 25.6-11.462 25.6-25.6 0-42.347 34.453-76.8 76.8-76.8s76.8 34.453 76.8 76.8c0 14.138 11.32 25.6 25.458 25.6 0.211 0.002 21.298 0.362 41.194 10.763 16.942 8.858 27.754 22.195 32.666 40.438h-352.234c4.912-18.245 15.722-31.582 32.666-40.44zM179.2 819.2c-14.115 0-25.6-11.485-25.6-25.6v-563.2c0-14.115 11.485-25.6 25.6-25.6h27.672c-1.363 8.166-2.072 16.707-2.072 25.6 0 14.138 11.462 25.6 25.6 25.6h409.6c0.011 0.002 0.024 0 0.032 0 14.139 0 25.6-11.462 25.6-25.6 0-0.47-0.013-0.938-0.037-1.402-0.069-8.39-0.771-16.461-2.062-24.198h27.667c14.115 0 25.6 11.485 25.6 25.6v128h-256c-6.79 0-13.301 2.698-18.102 7.498l-128 128c-4.8 4.802-7.498 11.312-7.498 18.102v307.2h-128zM460.8 420.203v66.197c0 14.115-11.485 25.6-25.6 25.6h-66.195l91.795-91.797zM819.2 947.2c0 14.115-11.485 25.6-25.6 25.6h-409.6c-14.115 0-25.6-11.485-25.6-25.6v-384h76.8c42.347 0 76.8-34.451 76.8-76.8v-76.8h281.6c14.115 0 25.6 11.485 25.6 25.6v512z' />
-        </g>
-    </svg>
-);
-
-export const Link = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M546.917 665.512c-48.275 0-96.55-18.376-133.301-55.128-9.998-9.997-9.998-26.206 0-36.203s26.205-9.997 36.203 0c53.539 53.541 140.656 53.541 194.197 0l186.166-186.166c53.539-53.539 53.539-140.656 0-194.197-53.541-53.539-140.656-53.538-194.197 0l-157.082 157.083c-9.998 9.997-26.206 9.997-36.203 0-9.998-9.998-9.998-26.206 0-36.205l157.083-157.083c73.502-73.501 193.101-73.501 266.603 0s73.502 193.101 0 266.603l-186.168 186.168c-36.752 36.752-85.027 55.128-133.302 55.128z' />
-            <path d='M239.717 972.712c-48.275 0-96.55-18.376-133.302-55.128-73.501-73.502-73.501-193.101 0-266.603l186.166-186.166c73.501-73.501 193.101-73.501 266.603 0 9.998 9.998 9.998 26.206 0 36.203-9.997 9.998-26.206 9.998-36.203 0-53.541-53.541-140.656-53.541-194.197 0l-186.165 186.166c-53.539 53.541-53.539 140.656 0 194.197s140.656 53.541 194.195 0l157.083-157.083c9.997-9.997 26.206-9.997 36.203 0 9.998 9.997 9.998 26.206 0 36.203l-157.083 157.083c-36.75 36.752-85.026 55.128-133.301 55.128z' />
-        </g>
-    </svg>
-);
-
-export const Menu = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M896 307.2h-768c-14.138 0-25.6-11.462-25.6-25.6s11.462-25.6 25.6-25.6h768c14.139 0 25.6 11.462 25.6 25.6s-11.461 25.6-25.6 25.6z' />
-            <path d='M896 563.2h-768c-14.138 0-25.6-11.461-25.6-25.6s11.462-25.6 25.6-25.6h768c14.139 0 25.6 11.461 25.6 25.6s-11.461 25.6-25.6 25.6z' />
-            <path d='M896 819.2h-768c-14.138 0-25.6-11.461-25.6-25.6s11.462-25.6 25.6-25.6h768c14.139 0 25.6 11.461 25.6 25.6s-11.461 25.6-25.6 25.6z' />
-        </g>
-    </svg>
-);
-
-export const Docs = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M844.8 1024h-665.6c-42.347 0-76.8-34.451-76.8-76.8v-819.2c0-42.347 34.453-76.8 76.8-76.8h665.6c42.349 0 76.8 34.453 76.8 76.8v819.2c0 42.349-34.451 76.8-76.8 76.8zM179.2 102.4c-14.115 0-25.6 11.485-25.6 25.6v819.2c0 14.115 11.485 25.6 25.6 25.6h665.6c14.115 0 25.6-11.485 25.6-25.6v-819.2c0-14.115-11.485-25.6-25.6-25.6h-665.6z' />
-            <path d='M640 256h-358.4c-14.138 0-25.6-11.462-25.6-25.6s11.462-25.6 25.6-25.6h358.4c14.138 0 25.6 11.462 25.6 25.6s-11.462 25.6-25.6 25.6z' />
-            <path d='M742.4 358.4h-460.8c-14.138 0-25.6-11.462-25.6-25.6s11.462-25.6 25.6-25.6h460.8c14.138 0 25.6 11.462 25.6 25.6s-11.462 25.6-25.6 25.6z' />
-            <path d='M742.4 460.8h-460.8c-14.138 0-25.6-11.462-25.6-25.6s11.462-25.6 25.6-25.6h460.8c14.138 0 25.6 11.462 25.6 25.6s-11.462 25.6-25.6 25.6z' />
-            <path d='M537.6 563.2h-256c-14.138 0-25.6-11.461-25.6-25.6s11.462-25.6 25.6-25.6h256c14.139 0 25.6 11.461 25.6 25.6s-11.461 25.6-25.6 25.6z' />
-            <path d='M742.4 768h-460.8c-14.138 0-25.6-11.461-25.6-25.6s11.462-25.6 25.6-25.6h460.8c14.139 0 25.6 11.461 25.6 25.6s-11.461 25.6-25.6 25.6z' />
-            <path d='M640 870.4h-358.4c-14.138 0-25.6-11.461-25.6-25.6s11.462-25.6 25.6-25.6h358.4c14.139 0 25.6 11.461 25.6 25.6s-11.461 25.6-25.6 25.6z' />
-        </g>
-    </svg>
-);
-
-export const Markup = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M256 768c-6.552 0-13.102-2.499-18.101-7.499l-204.8-204.8c-9.998-9.997-9.998-26.206 0-36.203l204.8-204.8c9.997-9.997 26.206-9.997 36.203 0 9.998 9.997 9.998 26.206 0 36.203l-186.699 186.699 186.698 186.699c9.998 9.997 9.998 26.206 0 36.203-4.998 4.998-11.549 7.498-18.101 7.498z' />
-            <path d='M768 768c-6.552 0-13.102-2.499-18.101-7.499-9.998-9.997-9.998-26.206 0-36.203l186.698-186.698-186.698-186.699c-9.998-9.997-9.998-26.206 0-36.203 9.997-9.997 26.206-9.997 36.203 0l204.8 204.8c9.998 9.997 9.998 26.206 0 36.203l-204.8 204.8c-5 5-11.55 7.499-18.102 7.499z' />
-            <path d='M383.976 768.003c-4.634 0-9.325-1.258-13.544-3.894-11.989-7.494-15.634-23.288-8.141-35.278l256-409.6c7.493-11.984 23.283-15.634 35.278-8.141 11.989 7.494 15.634 23.288 8.141 35.278l-256 409.6c-4.858 7.77-13.202 12.035-21.734 12.035z' />
-        </g>
-    </svg>
-);
-
-export const Search = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M966.070 981.101l-304.302-331.965c68.573-71.754 106.232-165.549 106.232-265.136 0-102.57-39.942-199-112.47-271.53s-168.96-112.47-271.53-112.47-199 39.942-271.53 112.47-112.47 168.96-112.47 271.53 39.942 199.002 112.47 271.53 168.96 112.47 271.53 112.47c88.362 0 172.152-29.667 240.043-84.248l304.285 331.947c5.050 5.507 11.954 8.301 18.878 8.301 6.179 0 12.378-2.226 17.293-6.728 10.421-9.555 11.126-25.749 1.571-36.171zM51.2 384c0-183.506 149.294-332.8 332.8-332.8s332.8 149.294 332.8 332.8-149.294 332.8-332.8 332.8-332.8-149.294-332.8-332.8z' />
-        </g>
-    </svg>
-);
-
-export const Collapse = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M1016.499 7.498c-9.997-9.997-26.206-9.997-36.203 0l-314.696 314.699v-142.997c0-14.138-11.461-25.6-25.6-25.6s-25.6 11.462-25.6 25.6v204.8c0 14.138 11.461 25.6 25.6 25.6h204.8c14.139 0 25.6-11.462 25.6-25.6s-11.461-25.6-25.6-25.6h-142.997l314.696-314.698c10-9.998 10-26.206 0-36.205z' />
-            <path d='M384 614.4h-204.8c-14.138 0-25.6 11.461-25.6 25.6s11.462 25.6 25.6 25.6h142.997l-314.699 314.701c-9.997 9.995-9.997 26.206 0 36.203 5 4.997 11.55 7.496 18.102 7.496s13.102-2.499 18.102-7.501l314.698-314.696v142.997c0 14.139 11.462 25.6 25.6 25.6s25.6-11.461 25.6-25.6v-204.8c0-14.139-11.462-25.6-25.6-25.6z' />
-        </g>
-    </svg>
-);
-
-export const Fullscreen = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M998.4 0h-256c-14.139 0-25.6 11.462-25.6 25.6s11.461 25.6 25.6 25.6h194.197l-314.696 314.698c-10 9.998-10 26.206 0 36.205 4.997 4.998 11.547 7.498 18.099 7.498s13.102-2.499 18.099-7.498l314.701-314.699v194.197c0 14.138 11.461 25.6 25.6 25.6s25.6-11.462 25.6-25.6v-256c0-14.138-11.461-25.6-25.6-25.6z' />
-            <path d='M402.102 621.901c-9.998-9.997-26.206-9.997-36.205 0l-314.698 314.696v-194.197c0-14.139-11.462-25.6-25.6-25.6s-25.6 11.461-25.6 25.6v256c0 14.139 11.462 25.6 25.6 25.6h256c14.138 0 25.6-11.461 25.6-25.6s-11.462-25.6-25.6-25.6h-194.197l314.699-314.701c9.997-9.995 9.997-26.203-0-36.198z' />
-        </g>
-    </svg>
-);
-
-export const ChevronLeft = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M716.8 1024c6.552 0 13.102-2.499 18.101-7.499 9.998-9.997 9.998-26.206 0-36.203l-442.698-442.698 442.698-442.699c9.998-9.997 9.998-26.206 0-36.203s-26.206-9.998-36.203 0l-460.8 460.8c-9.998 9.997-9.998 26.206 0 36.203l460.8 460.8c5 5 11.55 7.499 18.102 7.499z' />
-        </g>
-    </svg>
-);
-
-export const Settings = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M128 1024c-14.138 0-25.6-11.461-25.6-25.6v-409.6c0-14.139 11.462-25.6 25.6-25.6s25.6 11.461 25.6 25.6v409.6c0 14.139-11.462 25.6-25.6 25.6z' />
-            <path d='M128 307.2c-14.138 0-25.6-11.462-25.6-25.6v-256c0-14.138 11.462-25.6 25.6-25.6s25.6 11.462 25.6 25.6v256c0 14.138-11.462 25.6-25.6 25.6z' />
-            <path d='M179.2 512h-102.4c-42.347 0-76.8-34.453-76.8-76.8s34.453-76.8 76.8-76.8h102.4c42.347 0 76.8 34.453 76.8 76.8s-34.453 76.8-76.8 76.8zM76.8 409.6c-14.115 0-25.6 11.485-25.6 25.6s11.485 25.6 25.6 25.6h102.4c14.115 0 25.6-11.485 25.6-25.6s-11.485-25.6-25.6-25.6h-102.4z' />
-            <path d='M486.4 1024c-14.138 0-25.6-11.461-25.6-25.6v-204.8c0-14.139 11.462-25.6 25.6-25.6s25.6 11.461 25.6 25.6v204.8c0 14.139-11.462 25.6-25.6 25.6z' />
-            <path d='M486.4 512c-14.138 0-25.6-11.462-25.6-25.6v-460.8c0-14.138 11.462-25.6 25.6-25.6s25.6 11.462 25.6 25.6v460.8c0 14.138-11.462 25.6-25.6 25.6z' />
-            <path d='M537.6 716.8h-102.4c-42.347 0-76.8-34.453-76.8-76.8s34.453-76.8 76.8-76.8h102.4c42.347 0 76.8 34.453 76.8 76.8s-34.453 76.8-76.8 76.8zM435.2 614.4c-14.115 0-25.6 11.485-25.6 25.6s11.485 25.6 25.6 25.6h102.4c14.115 0 25.6-11.485 25.6-25.6s-11.485-25.6-25.6-25.6h-102.4z' />
-            <path d='M844.8 1024c-14.139 0-25.6-11.461-25.6-25.6v-512c0-14.138 11.461-25.6 25.6-25.6s25.6 11.462 25.6 25.6v512c0 14.139-11.461 25.6-25.6 25.6z' />
-            <path d='M844.8 204.8c-14.139 0-25.6-11.462-25.6-25.6v-153.6c0-14.138 11.461-25.6 25.6-25.6s25.6 11.462 25.6 25.6v153.6c0 14.138-11.461 25.6-25.6 25.6z' />
-            <path d='M896 409.6h-102.4c-42.347 0-76.8-34.453-76.8-76.8s34.453-76.8 76.8-76.8h102.4c42.347 0 76.8 34.453 76.8 76.8s-34.453 76.8-76.8 76.8zM793.6 307.2c-14.115 0-25.6 11.485-25.6 25.6s11.485 25.6 25.6 25.6h102.4c14.115 0 25.6-11.485 25.6-25.6s-11.485-25.6-25.6-25.6h-102.4z' />
-        </g>
-    </svg>
-);
-
-export const Code = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M377.3 121.3l-40.5 40.4 94.4 94.3-94.4 94.3 40.5 40.4L512 256zM134.7 121.3L0 256l134.7 134.7 40.5-40.4L80.8 256l94.4-94.3zM281.8 103.8zM230.183 408.16l-29.233-7.97 80.85-296.484 29.234 7.972z' />
-        </g>
-    </svg>
-);
-
-export const Notes = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M443.8 0H68.2C30.6 0 0 30.5 0 68v264.2c0 16.6 8.9 29.5 25.9 37.5 15.3 7.2 33.1 8.4 40.1 8.5V512l201.6-134h176.1c37.6 0 68.2-30.3 68.2-67.8V68c.1-37.5-30.5-68-68.1-68zM114 438V330H68.2c-11.1 0-19.2-8.8-19.2-19.8V68c0-11 8.2-20 19.2-20h375.5c11.1 0 19.2 9 19.2 20v242.2c0 11-8.2 19.8-19.2 19.8H244.2L114 438z' />
-        </g>
-    </svg>
-);
-
-export const Labels = props => (
-    <svg {...defaults} {...props}>
-        <g>
-            <path d='M304 280c0 13.2-10.8 24-24 24h-48c-13.2 0-24-10.8-24-24v-48c0-13.2 10.8-24 24-24h48c13.2 0 24 10.8 24 24v48zM464 280c0 13.2-10.8 24-24 24h-48c-13.2 0-24-10.8-24-24v-48c0-13.2 10.8-24 24-24h48c13.2 0 24 10.8 24 24v48zM144 280c0 13.2-10.8 24-24 24H72c-13.2 0-24-10.8-24-24v-48c0-13.2 10.8-24 24-24h48c13.2 0 24 10.8 24 24v48z' />
-        </g>
-    </svg>
-);
-
-export const Catalyst = props => (
-    <svg viewBox='0 0 70 70'>
-        <g fill='#FFF' stroke='#000' strokeWidth='4'>
-            <circle cx='29' cy='41' r='23' />
-            <path d='M35 20L50 5l15 15-15 15' />
-            <path strokeLinecap='round' d='M67 22L48 3' />
-        </g>
-        <path
-            fill='currentColor'
-            d='M46 41c0-6-5-11-11-11-9 0-11 7-22 6l-1 5a17 17 0 0 0 34 1v-1z'
-        />
-        <g fill='#FFF'>
-            <circle cx='35' cy='41' r='5' />
-            <circle cx='22' cy='45' r='4' />
-            <circle cx='31' cy='52' r='3' />
-        </g>
-    </svg>
-);
-
-export const Dna = props => (
-    <svg viewBox='0 0 70 70'>
-        <rect
-            x='2'
-            y='2'
-            width='66'
-            height='66'
-            fill='currentColor'
-            stroke='#000'
-            strokeWidth='4'
-            rx='10'
-        />
-        <rect
-            x='7'
-            y='7'
-            width='56'
-            height='56'
-            fill='none'
-            stroke='#fff'
-            strokeWidth='6'
-            rx='5'
-        />
-        <text
-            transform='translate(14 50)'
-            fill='#FFF'
-            fontFamily='sans-serif'
-            fontWeight='bold'
-            fontSize='33'>
-            Re
-        </text>
-        <path fill='#FFF' d='M43 27l6-11 2 3 6-6-6 10-2-3-6 7z' />
-    </svg>
-);
-
-export const Atom = props => (
-    <svg viewBox='0 0 70 70'>
-        <circle
-            cx='35'
-            cy='35'
-            r='33'
-            fill='#fff'
-            stroke='#000'
-            strokeWidth='4'
-        />
-        <circle cx='58' cy='58' r='7' stroke='#fff' strokeWidth='4' />
-        <circle cx='35' cy='35' r='23' fill='currentColor' />
-    </svg>
-);
-
-export const Molecule = props => (
-    <svg viewBox='0 0 70 70'>
-        <circle cx='35' cy='32' r='30' />
-        <circle cx='15' cy='53' r='15' />
-        <circle cx='55' cy='53' r='15' />
-        <circle
-            cx='35'
-            cy='32'
-            r='22'
-            fill='currentColor'
-            stroke='#fff'
-            strokeWidth='8'
-        />
-        <g fill='currentColor' stroke='#fff' strokeWidth='4'>
-            <circle cx='15' cy='53' r='9' />
-            <circle cx='55' cy='53' r='9' />
-        </g>
-    </svg>
-);
-
-export const Organism = props => (
-    <svg viewBox='0 0 70 70'>
-        <path
-            fill='#fff'
-            stroke='#000'
-            strokeWidth='4'
-            d='M58 13.2c-4.7-3.4-10.3-4-15.3-2.4-2.8.9-5.8.2-7.9-1.9-2.1-2-4.8-3.5-8.1-3.9-6-.8-11.9 2.5-14.4 7.9-1.6 3.4-1.7 6.9-.7 10 .8 2.6.1 5.3-1.7 7.4-4.7 5.6-6.4 13.5-3.6 21C10 61 20.1 66.6 30 64.6c8.3-1.6 14.4-7.9 16.3-15.4.7-2.9 3-5 5.9-5.7 4.5-1.2 8.6-4.2 10.9-8.7A17.2 17.2 0 0 0 58 13.2z'
-        />
-        <circle cx='48' cy='27' r='7' />
-        <g fill='currentColor'>
-            <circle cx='25' cy='19' r='4' />
-            <circle cx='26' cy='44' r='11' />
-            <circle cx='35' cy='25' r='2' />
-            <circle cx='42' cy='38' r='2' />
-            <circle cx='48' cy='27' r='7' />
-        </g>
-        <path
-            fill='none'
-            stroke='#000'
-            strokeWidth='2'
-            strokeLinecap='round'
-            d='M30 6l1-3m7 8l1-3m9 2V7m10 6l2-3m4 11l3-1m-2 11l3 1m-6 10l-2-3m-9 5l2 3m-8 5l4 2m-10 6l3 3m-11 5l-1-3m-10-1l-1 4m-10-6l3-3m-6-7l-3 1m2-12H2m8-10l-4-1m6-7l-4-1m4-9l-3-1m11-6l-2-3'
-        />
-    </svg>
-);
-
-export const Template = props => (
-    <svg viewBox='0 0 70 70'>
-        <g strokeWidth='4' stroke='#000'>
-            <rect
-                fill='#FFF'
-                stroke='currentColor'
-                x='16'
-                y='2'
-                width='48'
-                height='56'
-                strokeDasharray='4'
-                strokeDashoffset='2'
-            />
-            <polygon fill='#fff' points='6,12 38,12 54,28 54,68 6,68' />
-            <polyline fill='currentColor' points='38,12 38,28 54,28' />
-            <polygon fill='none' points='6,12 38,12 54,28 54,68 6,68' />
-        </g>
-    </svg>
-);
-
-export const Page = props => (
-    <svg viewBox='0 0 70 70'>
-        <g strokeWidth='4' stroke='#000'>
-            <rect fill='currentColor' x='16' y='2' width='48' height='56' />
-            <polygon fill='#FFF' points='6,12 38,12 54,28 54,68 6,68' />
-            <polyline fill='none' points='38,12 38,28 54,28' />
-        </g>
-    </svg>
-);
-
-const legacy = {
-    '#re-icon-atom': Atom,
-    '#re-icon-catalyst': Catalyst,
-    '#re-icon-close': Close,
-    '#re-icon-dna': Dna,
-    '#re-icon-molecule': Molecule,
-    '#re-icon-organism': Organism,
-    '#re-icon-page': Page,
-    '#re-icon-template': Template,
-    '#re-icon-settings': Settings,
-};
-
-export default {
-    Atom,
-    Catalyst,
-    ChevronLeft,
-    Clipboard,
-    Close,
-    Code,
-    Collapse,
-    Dna,
-    Docs,
-    Fullscreen,
-    Link,
-    Markup,
-    Menu,
-    Molecule,
-    Notes,
-    Organism,
-    Page,
-    Search,
-    Settings,
-    Template,
-    ...legacy,
-};
diff --git a/.core/components/Toolkit/Loading/_style.scss b/.core/components/Toolkit/Loading/_style.scss
deleted file mode 100644
index 43050edc..00000000
--- a/.core/components/Toolkit/Loading/_style.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-.re-toolkit-loading {
-    width: 100%;
-    height: 30vh;
-    min-height: 400px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-
-
-    .loader {
-        width: 100px;
-        height: 100px;
-        background-size: contain;
-        background-position: center;
-        background-image: url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibGRzLWdvb2V5cmluZyIgd2lkdGg9IjIwMHB4IiAgaGVpZ2h0PSIyMDBweCIgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgc3R5bGU9ImJhY2tncm91bmQ6IG5vbmU7Ij48ZGVmcz4gICAgIDxmaWx0ZXIgaWQ9Imdvb2V5IiB4PSItMTAwJSIgeT0iLTEwMCUiIHdpZHRoPSIzMDAlIiBoZWlnaHQ9IjMwMCUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+ICAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlR3JhcGhpYyIgc3RkRGV2aWF0aW9uPSI0LjgwMDAwMDAwMDAwMDAwMSI+PC9mZUdhdXNzaWFuQmx1cj48ZmVDb21wb25lbnRUcmFuc2ZlciByZXN1bHQ9ImN1dG9mZiI+ICA8ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIxMCIgaW50ZXJjZXB0PSItNSI+PC9mZUZ1bmNBPjwvZmVDb21wb25lbnRUcmFuc2Zlcj4gICAgIDwvZmlsdGVyPiAgIDwvZGVmcz48ZyBmaWx0ZXI9InVybCgjZ29vZXkpIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MCA1MCkiPjxnIHRyYW5zZm9ybT0icm90YXRlKDE0Ljg1NTQpIj4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iMCIgcj0iNy45OTIyOSIgZmlsbD0iIzRmODJiYSI+ICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InIiIGtleVRpbWVzPSIwOzAuNTsxIiB2YWx1ZXM9IjcuMTk5OTk5OTk5OTk5OTk5OzE2Ljc5OTk5OTk5OTk5OTk5Nzs3LjE5OTk5OTk5OTk5OTk5OSIgZHVyPSI0cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGJlZ2luPSItNHMiPjwvYW5pbWF0ZT4gIDwvY2lyY2xlPiAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIGtleVRpbWVzPSIwOzEiIHZhbHVlcz0iMDszNjAiIGR1cj0iNHMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBiZWdpbj0iMHMiPjwvYW5pbWF0ZVRyYW5zZm9ybT48L2c+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUwIDUwKSI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoMTczLjcxMSkiPiAgPGNpcmNsZSBjeD0iMzAiIGN5PSIwIiByPSIxMy4yOTU0IiBmaWxsPSIjMjQzNDQxIj4gICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIga2V5VGltZXM9IjA7MC41OzEiIHZhbHVlcz0iNy4xOTk5OTk5OTk5OTk5OTk7MTYuNzk5OTk5OTk5OTk5OTk3OzcuMTk5OTk5OTk5OTk5OTk5IiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49Ii0zLjJzIj48L2FuaW1hdGU+ICA8L2NpcmNsZT4gIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiBrZXlUaW1lcz0iMDsxIiB2YWx1ZXM9IjA7MzYwIiBkdXI9IjJzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49Ii0wLjhzIj48L2FuaW1hdGVUcmFuc2Zvcm0+PC9nPjwvZz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MCA1MCkiPjxnIHRyYW5zZm9ybT0icm90YXRlKDExNi41NjYpIj4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iMCIgcj0iOC42NjMxNCIgZmlsbD0iI2Y0ZjFlZCI+ICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InIiIGtleVRpbWVzPSIwOzAuNTsxIiB2YWx1ZXM9IjcuMTk5OTk5OTk5OTk5OTk5OzE2Ljc5OTk5OTk5OTk5OTk5Nzs3LjE5OTk5OTk5OTk5OTk5OSIgZHVyPSIxLjMzMzMzMzMzMzMzMzMzMzNzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49Ii0yLjRzIj48L2FuaW1hdGU+ICA8L2NpcmNsZT4gIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiBrZXlUaW1lcz0iMDsxIiB2YWx1ZXM9IjA7MzYwIiBkdXI9IjEuMzMzMzMzMzMzMzMzMzMzM3MiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBiZWdpbj0iLTEuNnMiPjwvYW5pbWF0ZVRyYW5zZm9ybT48L2c+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUwIDUwKSI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoMjAzLjQyMikiPiAgPGNpcmNsZSBjeD0iMzAiIGN5PSIwIiByPSIxMS43MTA4IiBmaWxsPSIjYTZhZGIyIj4gICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIga2V5VGltZXM9IjA7MC41OzEiIHZhbHVlcz0iNy4xOTk5OTk5OTk5OTk5OTk7MTYuNzk5OTk5OTk5OTk5OTk3OzcuMTk5OTk5OTk5OTk5OTk5IiBkdXI9IjFzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49Ii0xLjZzIj48L2FuaW1hdGU+ICA8L2NpcmNsZT4gIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiBrZXlUaW1lcz0iMDsxIiB2YWx1ZXM9IjA7MzYwIiBkdXI9IjFzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49Ii0yLjRzIj48L2FuaW1hdGVUcmFuc2Zvcm0+PC9nPjwvZz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MCA1MCkiPjxnIHRyYW5zZm9ybT0icm90YXRlKDc0LjI3NykiPiAgPGNpcmNsZSBjeD0iMzAiIGN5PSIwIiByPSIxMS4xNjE0IiBmaWxsPSIjNGY4MmJhIj4gICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIga2V5VGltZXM9IjA7MC41OzEiIHZhbHVlcz0iNy4xOTk5OTk5OTk5OTk5OTk7MTYuNzk5OTk5OTk5OTk5OTk3OzcuMTk5OTk5OTk5OTk5OTk5IiBkdXI9IjAuOHMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBiZWdpbj0iLTAuOHMiPjwvYW5pbWF0ZT4gIDwvY2lyY2xlPiAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIGtleVRpbWVzPSIwOzEiIHZhbHVlcz0iMDszNjAiIGR1cj0iMC44cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGJlZ2luPSItMy4ycyI+PC9hbmltYXRlVHJhbnNmb3JtPjwvZz48L2c+PC9nPjwvc3ZnPg==);
-    }
-}
diff --git a/.core/components/Toolkit/Loading/index.js b/.core/components/Toolkit/Loading/index.js
deleted file mode 100644
index bd54f879..00000000
--- a/.core/components/Toolkit/Loading/index.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import React, { Component } from 'react';
-import { TweenMax } from 'gsap/umd/TweenMax';
-
-/**
- * -----------------------------------------------------------------------------
- * Functional Component: Loading
- * -----------------------------------------------------------------------------
- */
-
-export default class Loading extends Component {
-    constructor(props) {
-        super(props);
-
-        this.container = React.createRef();
-        this.fadeOut = this.fadeOut.bind(this);
-    }
-
-    componentDidMount() {
-        this.fadeOut();
-    }
-
-    fadeOut() {
-        const { onComplete } = this.props;
-        const elm = this.container.current;
-
-        TweenMax.to(elm, 0.25, { opacity: 0, delay: 0.5, onComplete });
-    }
-
-    render() {
-        return (
-            <div className='re-toolkit-loading' ref={this.container}>
-                <div className='loader' />
-            </div>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/Markdown/index.js b/.core/components/Toolkit/Markdown/index.js
deleted file mode 100644
index 8df97cf1..00000000
--- a/.core/components/Toolkit/Markdown/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import { vs, vs2015 } from 'react-syntax-highlighter/dist/cjs/styles/hljs';
-import SyntaxHighlighter from 'react-syntax-highlighter';
-import { renderToStaticMarkup } from 'react-dom/server';
-import marked from 'marked';
-import React from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Markdown
- * -----------------------------------------------------------------------------
- */
-
-const markedRenderer = (theme = 'dark') => {
-    const style = theme === 'dark' ? vs2015 : vs;
-    const rndr = new marked.Renderer();
-
-    rndr.code = function(markup, lang) {
-        const hl = renderToStaticMarkup(
-            <SyntaxHighlighter
-                showLineNumbers={true}
-                style={style}
-                customStyle={{ padding: '20px 30px' }}
-                language={lang}>
-                {markup}
-            </SyntaxHighlighter>,
-        );
-
-        return `<div class="re-toolkit-code inline">${hl}</div>`;
-    };
-
-    return rndr;
-};
-
-const parseMarkdown = (md, theme = 'dark') => {
-    marked.setOptions({
-        xhtml: true,
-        gfm: true,
-        breaks: true,
-    });
-
-    md = marked(md, { renderer: markedRenderer(theme) });
-    return { __html: md };
-};
-
-const Markdown = ({ children, theme }) => (
-    <div
-        className='markdown'
-        dangerouslySetInnerHTML={parseMarkdown(children, theme)}
-    />
-);
-
-Markdown.defaultProps = {
-    theme: 'dark',
-};
-
-export default Markdown;
diff --git a/.core/components/Toolkit/Menu/MenuFilters.js b/.core/components/Toolkit/Menu/MenuFilters.js
deleted file mode 100644
index 4ef893ab..00000000
--- a/.core/components/Toolkit/Menu/MenuFilters.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Icon from 'reactium-core/components/Toolkit/Icon';
-
-const MenuFilters = ({ filters = [], onFilterClick }) =>
-    filters.length > 0 && (
-        <li className={'filters'}>
-            {filters.map((item, i) => {
-                let { type, label } = item;
-                return (
-                    <button
-                        key={`filter-${i}`}
-                        className={'filters-remove-btn'}
-                        onClick={e => {
-                            onFilterClick(e, item);
-                        }}>
-                        <Icon.Close width={12} height={12} />
-                        {label}
-                    </button>
-                );
-            })}
-        </li>
-    );
-
-export default MenuFilters;
diff --git a/.core/components/Toolkit/Menu/MenuItems.js b/.core/components/Toolkit/Menu/MenuItems.js
deleted file mode 100644
index 1592abd7..00000000
--- a/.core/components/Toolkit/Menu/MenuItems.js
+++ /dev/null
@@ -1,130 +0,0 @@
-import op from 'object-path';
-import _ from 'underscore';
-import MenuLink from './MenuLink';
-import React, { Fragment } from 'react';
-
-const MenuItems = ({
-    onItemClick,
-    onMenuItemToggle,
-    prefs,
-    group,
-    data = {},
-    filters = [],
-    filterTest,
-    search,
-    searchTest,
-}) => {
-    const collapseAll = op.get(prefs, 'menu.all', false);
-
-    return Object.keys(data)
-        .filter(key => {
-            const { elements = {}, hidden = false, hideEmpty, label } = data[
-                key
-            ];
-
-            if (!hideEmpty) {
-                return true;
-            }
-
-            if (Object.keys(elements).length < 1) {
-                return false;
-            }
-
-            return !hidden;
-        })
-        .map((key, k) => {
-            let {
-                label,
-                route,
-                redirect = false,
-                elements = {},
-                target = null,
-            } = data[key];
-
-            // Test the label against the search value
-            const isMatch = searchTest(label);
-            if (isMatch !== true && Object.keys(elements).length < 1) {
-                return false;
-            }
-
-            // Do a search on the label and sub children.
-            // If the search is true add it to the childSearch array to be drawn in the menu later.
-            const childSearch = [];
-
-            if (Object.keys(elements).length > 0) {
-                Object.keys(elements).forEach((elm, i) => {
-                    let item = elements[elm];
-                    let { label, type } = item;
-
-                    if (
-                        searchTest(label) === true &&
-                        filterTest(type) === true
-                    ) {
-                        childSearch.push(elm);
-                    }
-                });
-            }
-
-            // No childrenSearch and no search match
-            if (isMatch !== true && childSearch.length < 1) {
-                return;
-            }
-
-            // No childSearch and filters
-            if (childSearch.length < 1 && filters.length > 0) {
-                return;
-            }
-
-            let cls =
-                op.get(prefs, `menu.${key}`, collapseAll) === true
-                    ? 'collapsed'
-                    : 'expanded';
-            cls = group === key ? 'expanded' : cls;
-            cls = search || filters.length > 0 ? 'expanded' : cls;
-
-            return (
-                <li
-                    key={`group-${key}`}
-                    id={`menu-group-${key}`}
-                    className={cls}>
-                    <MenuLink {...data[key]} className='heading' />
-
-                    {childSearch.length > 0 && (
-                        <Fragment>
-                            {group !== key && (
-                                <button
-                                    type={'button'}
-                                    className={'heading-toggle'}
-                                    data-target={key}
-                                    onClick={onMenuItemToggle}
-                                />
-                            )}
-
-                            <ul id={`menu-group-${key}-items`}>
-                                {childSearch
-                                    .filter(elm =>
-                                        Boolean(
-                                            searchTest(elements[elm].label) !==
-                                                true ||
-                                                elements[elm].hidden === true
-                                                ? false
-                                                : true,
-                                        ),
-                                    )
-                                    .map((elm, i) => (
-                                        <li key={`menu-item-${i}`}>
-                                            <MenuLink
-                                                {...elements[elm]}
-                                                className='link'
-                                            />
-                                        </li>
-                                    ))}
-                            </ul>
-                        </Fragment>
-                    )}
-                </li>
-            );
-        });
-};
-
-export default MenuItems;
diff --git a/.core/components/Toolkit/Menu/MenuLink.js b/.core/components/Toolkit/Menu/MenuLink.js
deleted file mode 100644
index 5c03a9f4..00000000
--- a/.core/components/Toolkit/Menu/MenuLink.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import { NavLink } from 'react-router-dom';
-
-const MenuLink = ({
-    label,
-    onItemClick,
-    redirect,
-    route,
-    target,
-    className = 'link',
-}) =>
-    redirect === true ? (
-        <a
-            className={className}
-            href={route}
-            target={target}
-            onClick={onItemClick}>
-            {label}
-        </a>
-    ) : (
-        <NavLink className={className} exact={true} to={route}>
-            {label}
-        </NavLink>
-    );
-
-export default MenuLink;
diff --git a/.core/components/Toolkit/Menu/_style.scss b/.core/components/Toolkit/Menu/_style.scss
deleted file mode 100644
index d80ecf4a..00000000
--- a/.core/components/Toolkit/Menu/_style.scss
+++ /dev/null
@@ -1,234 +0,0 @@
-
-
-
-.re-toolkit-menu {
-    width: $menu-width;
-    min-width: $menu-width;
-    display: flex;
-    align-items: stretch;
-    flex-grow: 1;
-    flex-shrink: 0;
-    flex-direction: column;
-    overflow: hidden;
-
-    &-toggle {
-        position: fixed;
-        bottom: 0;
-        width: $toolbar-width;
-        height: 40px;
-        background-color: $white;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        border: 1px solid transparent;
-        z-index: 999999;
-
-        svg {
-            width: 20px;
-            height: 20px;
-        }
-
-        &:hover {
-            svg {
-                opacity: 0.5;
-            }
-        }
-
-        &-right {
-            @extend .re-toolkit-menu-toggle;
-            border-top-left-radius: 4px;
-            right: 0;
-        }
-
-        &-left {
-            @extend .re-toolkit-menu-toggle;
-            border-top-right-radius: 4px;
-            left: 0;
-        }
-    }
-
-    .filters {
-        padding: 8px 12px 4px 12px;
-        border-bottom: 1px solid $grey-light;
-        display: flex;
-        flex-wrap: wrap;
-
-        &-remove-btn {
-            font-size        : 11px;
-            padding          : 4px 8px;
-            color            : $white;
-            background-color : $blue;
-            text-transform   : lowercase;
-            margin-right     : 5px;
-            margin-bottom    : 4px;
-            border-radius    : 2px;
-            transition       : opacity .2s ease-in-out;
-            display: flex;
-            align-items: center;
-
-            svg {
-                margin-right : 6px;
-                fill         : $white;
-                margin-bottom: -1px;
-            }
-
-            &:hover {
-                opacity: 0.75;
-            }
-        }
-    }
-
-    ul {
-        li {
-            position: relative;
-
-            a {
-                display: block;
-                text-decoration: none;
-                color: $gray;
-
-                &:hover {
-                    opacity: 0.7;
-                }
-
-                &.link {
-                    padding: 15px 25px 15px 45px;
-                    font-size: 12px;
-
-                    &:hover,
-                    &:focus,
-                    &.active {
-                        color: darken($gray, 10%);
-                    }
-
-                    &:before {
-                        content: '';
-                        position: absolute;
-                        top: 50%;
-                        left: 0;
-                        width: 8px;
-                        height: 8px;
-                        transition: transform 1s ease-in-out;
-                        transform: translateY(-50%) translateX(-150%) rotate(45deg);
-                        background-color: $blue;
-                    }
-
-                    &:after {
-                        content: '';
-                        position: absolute;
-                        right: 0;
-                        bottom: 0;
-                        width: 92%;
-                        height: 1px;
-                        background-color: $grey;
-                        opacity: 0.25;
-                    }
-
-                    &.active {
-                        &:before {
-                            content: '';
-                            position: absolute;
-                            top: 50%;
-                            left: 0;
-                            width: 8px;
-                            height: 8px;
-                            transition: transform 1s ease-in-out;
-                            transform: translateY(-50%) translateX(-50%) rotate(45deg);
-                            background-color: $blue;
-                        }
-                    }
-                }
-
-                &.heading {
-                    @extend h1;
-
-                    padding: 15px 24px;
-                    font-size: 11px;
-                    font-weight: bold;
-
-                    border-left: 2px solid transparent;
-                    color: lighten($black, 20%);
-                    position: relative;
-
-                    &:after {
-                        content: '';
-                        width: 100%;
-                        height: 1px;
-                        bottom: 0;
-                        left: 0;
-                        position: absolute;
-                        background-color: lighten($border-color, 5%);
-                    }
-
-                    &.active {
-                        border-left: 2px solid $blue;
-                    }
-                }
-            }
-
-            .heading-toggle {
-                position: absolute;
-                width: 50px;
-                height: 40px;
-                top: 0;
-                right: 0;
-                display: flex;
-                align-items: center;
-                justify-content: center;
-                color: $grey;
-                background-color: $white;
-                transition: color .25s ease-in-out;
-                font-size: 8px;
-
-                &:focus,
-                &:hover {
-                    color: $blue;
-                }
-            }
-
-            &.expanded {
-                ul {
-                    height: auto;
-                    overflow: visible;
-                }
-
-                .heading-toggle {
-                    &:after {
-                        font-size: inherit;
-                        color: inherit;
-                        content: "\25B2";
-                    }
-                }
-            }
-
-            &.collapsed {
-                ul {
-                    height: 0px;
-                    overflow: hidden;
-                    display: none;
-                }
-
-                .heading-toggle {
-                    &:after {
-                        font-size: inherit;
-                        color: inherit;
-                        content: "\25BC";
-                    }
-                }
-            }
-        }
-    }
-
-    &-middle {
-        flex-grow: 1;
-        flex-wrap: wrap;
-        overflow-y: auto;
-        padding-bottom: 40px;
-    }
-}
-
-.fullscreen {
-    .re-toolkit-menu-toggle {
-        z-index: 1;
-    }
-}
diff --git a/.core/components/Toolkit/Menu/index.js b/.core/components/Toolkit/Menu/index.js
deleted file mode 100644
index 72729070..00000000
--- a/.core/components/Toolkit/Menu/index.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import { NavLink } from 'react-router-dom';
-import Search from '../Search';
-import _ from 'underscore';
-import op from 'object-path';
-import MenuItems from './MenuItems';
-import MenuFilters from './MenuFilters';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Menu
- * -----------------------------------------------------------------------------
- */
-export default class Menu extends Component {
-    static defaultProps = {
-        onFilterClick: null,
-        onItemClick: null,
-        onMenuItemToggle: null,
-        search: null,
-        prefs: {},
-        group: null,
-        filters: [],
-        data: {},
-    };
-
-    constructor(props) {
-        super(props);
-        this.state = {};
-        this.search = null;
-        this.filterTest = this.filterTest.bind(this);
-        this.searchTest = this.searchTest.bind(this);
-        this.onSearch = this.onSearch.bind(this);
-        this.onSearchClear = this.onSearchClear.bind(this);
-    }
-
-    componentDidUpdate() {
-        let link = document.querySelector(
-            '.re-toolkit-menu-middle .link.active',
-        );
-
-        if (link) {
-            link.scrollIntoView({ behavior: 'instant' });
-        } else {
-            let heading = document.querySelector(
-                '.re-toolkit-menu-middle .heading.active',
-            );
-            if (heading) {
-                heading.scrollIntoView({ behavior: 'instant' });
-            }
-        }
-    }
-
-    onSearch(e) {
-        const { target } = e;
-        const { data } = this.props;
-
-        let search = target.value;
-        search = _.compact(search.split(' ')).join(' ');
-        search = search.replace(/\s+/g, ' ').replace(/^\s+|\s+$/, '');
-        search = search.length < 1 ? null : search;
-
-        this.search = search;
-        this.setState({ search });
-    }
-
-    onSearchClear(e) {
-        this.search = null;
-        this.setState({ search: null });
-    }
-
-    searchTest(str) {
-        const { search } = this;
-
-        if (!search || search === null) {
-            return true;
-        }
-
-        str = _.compact(str.split(' '))
-            .join(' ')
-            .replace(/\s+/g, ' ')
-            .replace(/^\s+|\s+$/, '')
-            .toLowerCase();
-
-        return new RegExp(search, 'i').test(str);
-    }
-
-    filterTest(type) {
-        const { filters = [] } = this.props;
-        return filters.length < 1
-            ? true
-            : _.pluck(filters, 'type').includes(type);
-    }
-
-    render() {
-        const { search } = this.state;
-        this.search = search;
-
-        return (
-            <div className={'re-toolkit-menu'}>
-                <div className={'re-toolkit-menu-top'}>
-                    <Search
-                        text={search}
-                        onChange={this.onSearch}
-                        onSearchClear={this.onSearchClear}
-                    />
-                </div>
-                <div className={'re-toolkit-menu-middle'}>
-                    <ul>
-                        <MenuFilters {...this.props} />
-                        <MenuItems
-                            {...this.props}
-                            search={search}
-                            searchTest={this.searchTest}
-                            filterTest={this.filterTest}
-                        />
-                    </ul>
-                </div>
-                <div className={'re-toolkit-menu-bottom'} />
-            </div>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/Notify/_style.scss b/.core/components/Toolkit/Notify/_style.scss
deleted file mode 100644
index 7b1339ae..00000000
--- a/.core/components/Toolkit/Notify/_style.scss
+++ /dev/null
@@ -1,73 +0,0 @@
-.re-notice {
-    position: fixed;
-    top: 0;
-    display: none;
-    background-color: $white;
-    max-width: 300px;
-    width: 100%;
-    min-height: 60px;
-    padding: 20px 0;
-    margin: 10px;
-    align-items: center;
-    box-shadow: 0 0 10px 5px $grey-light;
-    z-index: 40000;
-
-    @include breakpoint(xs) {
-        max-width: calc(100% - 20px);
-    }
-
-    > div {
-        flex-grow: 1;
-        font-size: 15px;
-    }
-
-    &-close {
-        width: 50px;
-        height: 30px;
-        padding: 0;
-        margin: 0;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-        flex-shrink: 0;
-
-        svg {
-            width: 12px;
-            height: 12px;
-        }
-
-        &:hover,
-        &:focus {
-            opacity: 0.5;
-        }
-    }
-
-    &.right {
-        right: 0;
-        border-left: 2px solid $blue;
-        justify-content: flex-start;
-
-        > div {
-            padding-left: 25px;
-        }
-    }
-
-    &.left {
-        left: 0;
-        border-right: 2px solid $blue;
-        justify-content: flex-end;
-
-        > div {
-            padding-right: 25px;
-        }
-
-        .re-notice-close {
-            order: -1;
-        }
-    }
-
-    &.visible {
-        top: $header-height;
-        display: flex;
-    }
-}
diff --git a/.core/components/Toolkit/Notify/index.js b/.core/components/Toolkit/Notify/index.js
deleted file mode 100644
index 027ac432..00000000
--- a/.core/components/Toolkit/Notify/index.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import op from 'object-path';
-import { TweenMax, Power2 } from 'gsap/umd/TweenMax';
-import Icon from 'reactium-core/components/Toolkit/Icon';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Notify
- * -----------------------------------------------------------------------------
- */
-
-export default class Notify extends Component {
-    static defaultProps = {
-        autohide: false,
-        dismissable: true,
-        message: null,
-        onCloseClick: null,
-        prefs: {},
-        visible: false,
-    };
-
-    constructor(props) {
-        super(props);
-        this.state = {};
-        this.cont = null;
-        this.timer = null;
-        this.autoClose = this.autoClose.bind(this);
-    }
-
-    componentWillUnmount() {
-        if (this.timer) {
-            clearTimeout(this.timer);
-        }
-    }
-
-    autoClose() {
-        const { onCloseClick } = this.props;
-
-        clearTimeout(this.timer);
-        this.timer = null;
-
-        if (typeof onCloseClick === 'function') {
-            onCloseClick();
-        }
-    }
-
-    render() {
-        const {
-            autohide,
-            dismissable,
-            message,
-            onCloseClick,
-            prefs,
-            visible,
-        } = this.props;
-
-        let pos = op.get(prefs, 'sidebar.position', 'left');
-        pos = pos === 'left' ? 'right' : 'left';
-
-        if (autohide !== false) {
-            if (this.timer !== null) {
-                clearTimeout(this.timer);
-                this.timer = null;
-            }
-
-            const time = typeof autohide === 'number' ? autohide : 5000;
-            this.timer = setTimeout(this.autoClose, time);
-        }
-
-        return (
-            <aside
-                className={`re-notice ${pos} ${visible ? 'visible' : ''}`}
-                ref={elm => {
-                    this.cont = elm;
-                }}>
-                <div>{message}</div>
-                {dismissable === true && (
-                    <button
-                        type='button'
-                        className='re-notice-close'
-                        onClick={onCloseClick}>
-                        <Icon.Close />
-                    </button>
-                )}
-            </aside>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/Search/_style.scss b/.core/components/Toolkit/Search/_style.scss
deleted file mode 100644
index 6a0d7e0e..00000000
--- a/.core/components/Toolkit/Search/_style.scss
+++ /dev/null
@@ -1,60 +0,0 @@
-.re-toolkit-search {
-    padding: 15px 10px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    border-bottom: 1px solid lighten($border-color, 5%);
-    height: $search-height;
-    min-height: $search-height;
-    width: 248px;
-    overflow: hidden;
-    background-color: $white;
-    position: relative;
-
-    input {
-        width: 100%;
-        border-radius: 50px;
-        background-color: $grey-light;
-        color: $gray;
-        font-size: 14px;
-        padding: 7px 32px 7px 15px;
-        outline: none;
-        border: 1px solid $border-color;
-    }
-
-    &-clear {
-        background-color: $white;
-        border: 1px solid $border-color;
-        border-radius: 100%;
-        position: absolute;
-        margin-right: 2px;
-        right: 0;
-        top: 50%;
-        width: 24px;
-        height: 24px;
-        transform: translate(-50%, -50%);
-        display: flex;
-        align-items: center;
-        justify-content: center;
-
-        svg {
-            fill: $gray;
-        }
-
-        &:hover {
-            opacity: 0.75;
-        }
-
-        &:active,
-        &:focus {
-            border: 1px solid $grey;
-            opacity: 1;
-
-            svg {
-                fill: $blue;
-            }
-        }
-
-
-    }
-}
diff --git a/.core/components/Toolkit/Search/index.js b/.core/components/Toolkit/Search/index.js
deleted file mode 100644
index f1fe8c9f..00000000
--- a/.core/components/Toolkit/Search/index.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component } from 'react';
-import { Close } from 'reactium-core/components/Toolkit/Icon';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Search
- * -----------------------------------------------------------------------------
- */
-
-const noop = () => {};
-
-export default class Search extends Component {
-    static defaultProps = {
-        text: null,
-        onChange: noop,
-        onSearchClear: noop,
-    };
-
-    constructor(props) {
-        super(props);
-        this.state = {};
-        this.input = React.createRef();
-    }
-
-    onInput(e) {
-        const { onChange } = this.props;
-        onChange(e);
-    }
-
-    onSearchClear(e) {
-        const { onSearchClear } = this.props;
-        this.input.current.value = '';
-        this.input.current.focus();
-        onSearchClear();
-    }
-
-    render() {
-        const { text } = this.props;
-
-        return (
-            <div className='re-toolkit-search'>
-                <input
-                    type='text'
-                    name='search'
-                    ref={this.input}
-                    placeholder='search'
-                    onKeyUp={this.onInput.bind(this)}
-                    onChange={this.onInput.bind(this)}
-                />
-
-                <button
-                    type='button'
-                    className='re-toolkit-search-clear'
-                    onClick={this.onSearchClear.bind(this)}>
-                    <Close width={14} height={14} />
-                </button>
-            </div>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/Settings/_style.scss b/.core/components/Toolkit/Settings/_style.scss
deleted file mode 100644
index 9c956103..00000000
--- a/.core/components/Toolkit/Settings/_style.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-.re-toolkit-settings {
-    > .re-toolkit-card {
-        width      : 100%;
-        min-width  : 320px;
-        max-width  : 540px;
-        top        : 75px;
-        left       : 50%;
-        display    : block;
-        position   : absolute;
-        transform  : translateX(-50%);
-        box-shadow : 0 0 15px 1px rgba(0,0,0, 0.5);
-
-        @include breakpoint(xs) {
-            width: calc(100% - 30px);
-            min-width  : 320px;
-            max-width  : 480px;
-
-            .re-toolkit-card-list {
-                max-height: 300px;
-                overflow-y: auto;
-            }
-        }
-    }
-}
diff --git a/.core/components/Toolkit/Settings/index.js b/.core/components/Toolkit/Settings/index.js
deleted file mode 100644
index 93d6e700..00000000
--- a/.core/components/Toolkit/Settings/index.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import { TweenMax, Power2 } from 'gsap/umd/TweenMax';
-import Card from '../Content/Card';
-import op from 'object-path';
-import defaultState from '../state';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Settings
- * -----------------------------------------------------------------------------
- */
-
-const noop = () => {};
-
-export default class Settings extends Component {
-    static defaultProps = {
-        ...defaultState,
-    };
-
-    constructor(props) {
-        super(props);
-
-        this.cont = React.createRef();
-        this.open = this.open.bind(this);
-        this.close = this.close.bind(this);
-        this.toggle = this.toggle.bind(this);
-        this.dismiss = this.dismiss.bind(this);
-        this.state = { visible: this.props.visible };
-    }
-
-    close(callback) {
-        const { speed = 0.25, onSettingsClose } = this.props;
-        const _self = this;
-
-        TweenMax.to(this.cont.current, speed, {
-            opacity: 0,
-            ease: Power2.easeInOut,
-            onComplete: () => {
-                this.setState({ visible: false });
-
-                if (typeof callback === 'function') {
-                    callback();
-                }
-
-                if (typeof onSettingsClose === 'function') {
-                    onSettingsClose();
-                }
-            },
-        });
-    }
-
-    open(callback) {
-        if (!this.cont) {
-            return;
-        }
-
-        let { speed = 0.25, onSettingsOpen } = this.props;
-
-        let _self = this;
-
-        TweenMax.set(this.cont.current, { display: 'block', opacity: 0 });
-        TweenMax.to(this.cont.current, speed, {
-            opacity: 1,
-            //ease: Power2.easeInOut,
-            onComplete: () => {
-                this.cont.current.focus();
-                this.setState({ visible: true });
-
-                if (typeof callback === 'function') {
-                    callback();
-                }
-
-                if (typeof onSettingsOpen === 'function') {
-                    onSettingsOpen();
-                }
-            },
-        });
-    }
-
-    toggle() {
-        const { visible } = this.state;
-
-        if (visible !== true) {
-            this.open();
-        } else {
-            this.close();
-        }
-    }
-
-    dismiss(e) {
-        if (e.target.id === 'lightbox') {
-            this.close();
-        }
-    }
-
-    onSwitchClick(e, { pref, other }) {
-        const { onSwitchClick = noop } = this.props;
-
-        e.target.classList.toggle('active');
-
-        onSwitchClick({ pref, value: other });
-    }
-
-    renderSettings() {
-        const { prefs = {}, settings = [] } = this.props;
-
-        return settings.map((item, i) => {
-            let { text = [], values = [], labels = [], help, pref } = item;
-
-            let value = op.get(prefs, pref);
-            let idx = values.indexOf(value);
-            idx = idx == -1 ? 0 : idx;
-
-            let active = idx === 1 ? 'active' : '';
-            let other = idx === 0 && values.length > 1 ? values[1] : values[0];
-
-            return (
-                <li className='re-toolkit-card-list-item' key={`setting-${i}`}>
-                    {text.length > 0 && (
-                        <div className='re-toolkit-card-list-text'>
-                            <div>{text[idx]}</div>
-                            {help ? <small>{help}</small> : null}
-                        </div>
-                    )}
-                    <div>
-                        <button
-                            type='button'
-                            className={`re-toolkit-switch ${active}`}
-                            onClick={e => {
-                                this.onSwitchClick(e, { pref, other });
-                            }}>
-                            {labels.length > 0
-                                ? labels.map((label, l) => {
-                                      return (
-                                          <span key={`label-${l}`}>
-                                              {label}
-                                          </span>
-                                      );
-                                  })
-                                : null}
-                        </button>
-                    </div>
-                </li>
-            );
-        });
-    }
-
-    render() {
-        const { visible } = this.state;
-        const { buttons = {} } = this.props;
-        const display = visible === false ? 'none' : 'block';
-        const opacity = visible === false ? 0 : 1;
-
-        return (
-            <div
-                id='lightbox'
-                ref={this.cont}
-                onClick={this.dismiss}
-                className='re-toolkit-settings'
-                style={{ display, opacity }}>
-                <Card
-                    id='settings-card'
-                    title='Settings'
-                    onButtonClick={this.close}
-                    buttons={buttons}>
-                    <ul className='re-toolkit-card-list'>
-                        {this.renderSettings()}
-                    </ul>
-                </Card>
-            </div>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/Sidebar/_style.scss b/.core/components/Toolkit/Sidebar/_style.scss
deleted file mode 100644
index ed685b47..00000000
--- a/.core/components/Toolkit/Sidebar/_style.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-.re-toolkit-sidebar {
-    display: flex;
-    //position: relative;
-    //min-width: $sidebar-width;
-    width: $sidebar-width;
-    height: calc(100vh - #{$header-height});
-    overflow: hidden;
-    background-color: $white;
-    box-shadow: $drop-shadow;
-    flex-shrink: 0;
-    // margin-left: 0;
-    // margin-right: 0;
-
-    &.collapsed {
-        display: none;
-        width: 0px;
-    }
-
-    &.right {
-        order: 10;
-        flex-direction: row-reverse;
-    }
-
-    @include breakpoint(xs) {
-        &-closed {
-            box-shadow: none;
-            width: 0px;
-            min-width: 0px;
-        }
-    }
-}
diff --git a/.core/components/Toolkit/Sidebar/index.js b/.core/components/Toolkit/Sidebar/index.js
deleted file mode 100644
index 0262a57d..00000000
--- a/.core/components/Toolkit/Sidebar/index.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Toolbar from '../Toolbar';
-import Menu from '../Menu';
-import op from 'object-path';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Sidebar
- * -----------------------------------------------------------------------------
- */
-const position = prefs => op.get(prefs, 'sidebar.position', 'left');
-
-const expanded = prefs => op.get(prefs, 'sidebar.expanded', true);
-
-const Sidebar = ({
-    menu,
-    onFilterClick,
-    onMenuItemClick,
-    onMenuItemToggle,
-    onToolbarItemClick,
-    group,
-    filters = [],
-    toolbar = {},
-    prefs = {},
-    update,
-}) => (
-    <aside
-        id='reactium-sidebar'
-        className={`re-toolkit-sidebar ${position(prefs)} ${
-            expanded(prefs) ? 'expanded' : 'collapsed'
-        }`}>
-        <Toolbar {...toolbar} onToolbarItemClick={onToolbarItemClick} />
-        <Menu
-            prefs={prefs}
-            data={menu}
-            group={group}
-            update={update}
-            onFilterClick={onFilterClick}
-            onItemClick={onMenuItemClick}
-            onMenuItemToggle={onMenuItemToggle}
-            filters={filters}
-        />
-    </aside>
-);
-
-Sidebar.defaultProps = {
-    prefs: {},
-    toolbar: {},
-    menu: {},
-    filters: [],
-    group: null,
-    onFilterClick: null,
-    onMenuItemClick: null,
-    onMenuItemToggle: null,
-    onToolbarItemClick: null,
-};
-
-export default Sidebar;
diff --git a/.core/components/Toolkit/Toolbar/_style.scss b/.core/components/Toolkit/Toolbar/_style.scss
deleted file mode 100644
index a681e95b..00000000
--- a/.core/components/Toolkit/Toolbar/_style.scss
+++ /dev/null
@@ -1,133 +0,0 @@
-.re-toolkit-toolbar {
-    width: $toolbar-width;
-    min-width: $toolbar-width;
-    overflow: hidden;
-    display: flex;
-    align-items: stretch;
-    box-shadow: $drop-shadow;
-    flex-shrink: 0;
-
-    > div {
-        min-width: $toolbar-width + 40px;
-        padding-bottom: 40px;
-        display: flex;
-        flex-direction: column;
-        overflow-y: auto;
-        flex-shrink: 0;
-    }
-
-    .spacer {
-        min-height: 10px;
-        flex: 1;
-    }
-
-    button {
-        width: $toolbar-width;
-        height: 72px;
-        min-height: 72px;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-        flex-direction: column;
-        font-size: 10px;
-        color: $black;
-        position: relative;
-
-        &:before {
-            content: '';
-            position: absolute;
-            top: 50%;
-            left: 0;
-            width: 5px;
-            height: 5px;
-            transform: translateY(-120%) translateX(-150%) rotate(45deg);
-            background-color: $blue;
-            transition: transform 0.5s ease-in-out;
-        }
-
-        div {
-            margin-top: 5px;
-        }
-
-        svg {
-            width: 24px;
-            height: 24px;
-            color: $blue;
-
-            use {
-                color: #bbb;
-                transition: color 0.2s ease-out;
-            }
-        }
-
-        &:hover {
-            color: $black;
-
-            svg {
-                use {
-                    color: #749cc8;
-                }
-            }
-        }
-
-        &.active,
-        &:focus {
-            &:before {
-                content: '';
-                position: absolute;
-                top: 50%;
-                left: 0;
-                width: 8px;
-                height: 8px;
-                transform: translateY(-120%) translateX(-50%) rotate(45deg);
-                background-color: $blue;
-                transition: transform 0.5s ease-in-out;
-            }
-
-            svg {
-                use {
-                    color: #749cc8;
-                }
-            }
-        }
-    }
-
-    button.toggle {
-        height: 64px;
-        min-height: 64px;
-
-        svg {
-            width: 18px;
-            height: 18px;
-        }
-
-        &:hover {
-            color: $black;
-            opacity: 0.5;
-        }
-
-        &.active,
-        &:focus {
-            &:before {
-                content: '';
-                display: none;
-            }
-        }
-    }
-}
-
-.re-toolkit-icons {
-    display: none;
-
-    .st0 {
-        fill: $black;
-    }
-
-    .cls-1 {
-        fill: $toolbar-svg-fill;
-    }
-
-    .cls-2 {
-        fill: $white;
-    }
-}
diff --git a/.core/components/Toolkit/Toolbar/index.js b/.core/components/Toolkit/Toolbar/index.js
deleted file mode 100644
index e2dd3592..00000000
--- a/.core/components/Toolkit/Toolbar/index.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import defaultState from '../state';
-import Icon from 'reactium-core/components/Toolkit/Icon';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Toolbar
- * -----------------------------------------------------------------------------
- */
-const noop = () => {};
-
-export default class Toolbar extends Component {
-    static defaultProps = {
-        onToolbarItemClick: noop,
-        buttons: defaultState.buttons.toolbar,
-    };
-
-    constructor(props) {
-        super(props);
-        this.state = {};
-        this.onButtonClick = this.onButtonClick.bind(this);
-    }
-
-    onButtonClick(e) {
-        const { onToolbarItemClick = noop } = this.props;
-        e['type'] = e.currentTarget.id;
-        onToolbarItemClick(e, this);
-    }
-
-    render() {
-        const { buttons } = this.props;
-
-        return (
-            <nav className='re-toolkit-toolbar'>
-                <div>
-                    {buttons.map(
-                        ({ icon: ico, name, label = null, cls = null }, i) => {
-                            const Ico = Icon[ico];
-                            return name === 'spacer' ? (
-                                <div
-                                    className='spacer'
-                                    key={`re-toolkit-toolbar-${i}`}
-                                />
-                            ) : (
-                                <button
-                                    onClick={this.onButtonClick}
-                                    type='button'
-                                    key={`re-toolkit-toolbar-${i}`}
-                                    id={`toolbar-${name}`}
-                                    className={cls}>
-                                    {ico && Ico && <Ico />}
-                                    {label ? <div>{label}</div> : ''}
-                                </button>
-                            );
-                        },
-                    )}
-                </div>
-            </nav>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/Toolkit.js b/.core/components/Toolkit/Toolkit.js
deleted file mode 100644
index 029a7f12..00000000
--- a/.core/components/Toolkit/Toolkit.js
+++ /dev/null
@@ -1,437 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import _ from 'underscore';
-import op from 'object-path';
-import Header from './Header';
-import Sidebar from './Sidebar';
-import Content from './Content';
-import Settings from './Settings';
-import Notify from './Notify';
-import Loading from './Loading';
-import { Helmet } from 'react-helmet';
-import React, { Component, Fragment } from 'react';
-import { Plugins } from 'reactium-core/components/Plugable';
-import config from 'appdir/toolkit';
-
-const assetPath = op.get(config, 'assets.path', '/assets');
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Toolkit
- * -----------------------------------------------------------------------------
- */
-
-export default class Toolkit extends Component {
-    static defaultProps = {
-        update: Date.now(),
-        prefs: {},
-        filters: [],
-        style: null,
-        showSettings: false,
-    };
-
-    constructor(props) {
-        super(props);
-
-        this.state = {};
-        this.content = null;
-        this.sidebar = null;
-        this.settings = null;
-        this.notify = null;
-        this.onResize = this.onResize.bind(this);
-        this.onKeyPress = this.onKeyPress.bind(this);
-        this.togglePref = this.togglePref.bind(this);
-        this.toggleSettings = this.toggleSettings.bind(this);
-    }
-
-    componentDidMount() {
-        window.addEventListener('resize', this.onResize);
-        window.addEventListener('keydown', this.onKeyPress);
-    }
-
-    componentWillUnmount() {
-        window.removeEventListener('resize', this.onResize);
-        window.removeEventListener('keydown', this.onKeyPress);
-    }
-
-    onKeyPress(e) {
-        const { altKey, shiftKey, code } = e;
-        const codes = ['bracketleft'];
-
-        if (codes.includes(String(code).toLowerCase()) && altKey && !shiftKey) {
-            e.preventDefault();
-            this.props.menuToggle();
-        }
-
-        if (codes.includes(String(code).toLowerCase()) && altKey && shiftKey) {
-            e.preventDefault();
-            this.toggleSettings({ type: 'toolbar-toggle-settings' });
-        }
-    }
-
-    onCopyClick(type) {
-        if (type !== 'copy') {
-            return;
-        }
-        const autohide = 3000;
-        const dismissable = true;
-        const elm = this.notify;
-        const message = 'Code copied!';
-
-        this.props.notice.show({ message, autohide, dismissable, elm });
-    }
-
-    onNoticeDismiss() {
-        const elm = this.notify;
-
-        this.props.notice.hide({ elm });
-    }
-
-    onResize() {
-        let w = window.innerWidth;
-        if (w < 768) {
-            const { prefs } = this.props;
-            const expanded = op.get(prefs, 'sidebar.expanded', true);
-
-            if (expanded === true) {
-                this.toggleMenu();
-            }
-        }
-    }
-
-    onMenuItemClick(e) {
-        const url = e.target.getAttribute('href');
-        this.props.menuItemClick(url);
-    }
-
-    onMenuItemToggle(e) {
-        const { prefs } = this.props;
-        const target = e.currentTarget.dataset.target;
-
-        const collapseAll = op.get(prefs, 'menu.all', false);
-        const value = !op.get(prefs, `menu.${target}`, collapseAll);
-
-        const data = {
-            state: {
-                id: target,
-                value,
-            },
-        };
-
-        const type = 'toggle-menu';
-
-        this.togglePref({ type, data });
-    }
-
-    onButtonClick(e, data) {
-        const { type } = e;
-        this.togglePref({ type, data });
-        this.toggleFilter({ type, data });
-        this.toggleFullscreen({ type, data, e });
-        this.toggleSettings({ type });
-        this.onCopyClick(type);
-    }
-
-    onFilterClick(e, filter) {
-        let { filters = [] } = this.state;
-
-        let { type } = filter;
-
-        let idx = _.indexOf(_.pluck(filters, 'type'), type);
-        if (idx > -1) {
-            filters.splice(idx, 1);
-        }
-
-        this.setState({ filters });
-    }
-
-    onSettingsOpen() {
-        this.props.toggleSettings();
-    }
-
-    onSettingsClose() {
-        this.props.toggleSettings();
-    }
-
-    onSettingSwitchClick({ pref, value }) {
-        const key = `prefs.${pref}`;
-
-        this.props.set({ key, value });
-
-        this.setState({ update: Date.now() });
-    }
-
-    onThemeChange(e) {
-        this.props.setTheme(e.target.value);
-    }
-
-    toggleFilter({ type, data }) {
-        const isFilter = new RegExp('^toolbar-filter').test(type);
-        if (isFilter !== true) {
-            return;
-        }
-
-        const { manifest } = this.props;
-        const { filters = [] } = this.state;
-
-        let filter = type.split('toolbar-filter-').join('');
-
-        if (filter !== 'all') {
-            if (!_.findWhere(filters, { type: filter })) {
-                let { buttons } = manifest.toolbar;
-                let btn = _.findWhere(buttons, { name: `filter-${filter}` });
-                let { label } = btn;
-
-                filter = { type: filter, label };
-
-                filters.push(filter);
-            } else {
-                let idx = _.indexOf(_.pluck(filters, 'type'), filter);
-                if (idx > -1) {
-                    filters.splice(idx, 1);
-                }
-            }
-        } else {
-            filters = [];
-        }
-
-        this.setState({ filters });
-    }
-
-    toggleFullscreen({ type, data, e }) {
-        if (type !== 'toggle-fullscreen') {
-            return;
-        }
-        data.toggleFullScreen(e);
-    }
-
-    toggleMenu() {
-        this.props.menuToggle();
-        this.setState({ update: Date.now() });
-    }
-
-    togglePref({ type, data }) {
-        const toggles = [
-            'toggle-code',
-            'toggle-codeColor',
-            'toggle-docs',
-            'toggle-link',
-            'toggle-menu',
-        ];
-
-        if (toggles.indexOf(type) < 0) {
-            return;
-        }
-
-        let { set } = this.props;
-
-        let value;
-        let key = type.split('toggle-').join('');
-        key = `prefs.${key}.${data.state.id}`;
-
-        switch (type) {
-            case 'toggle-link':
-            case 'toggle-code': {
-                let k = type === 'toggle-code' ? 'codes' : 'docs';
-                k = type === 'toggle-link' ? 'link' : k;
-
-                value = !op.get(
-                    this.content,
-                    `${k}.${data.state.id}.state.visible`,
-                );
-
-                break;
-            }
-
-            case 'toggle-codeColor': {
-                value = data.state.theme;
-                break;
-            }
-
-            case 'toggle-menu': {
-                value = data.state.value;
-                break;
-            }
-        }
-
-        set({ key, value });
-        this.setState({ update: Date.now() });
-    }
-
-    toggleSettings({ type }) {
-        if (type !== 'toolbar-toggle-settings') {
-            return;
-        }
-        this.settings.toggle();
-    }
-
-    getElements({ menu, group, element }) {
-        let elements = {};
-
-        if (Object.keys(menu).length < 1 || !group) {
-            return null;
-        }
-
-        if (!element) {
-            let { component = null } = menu[group];
-            elements = component || menu[group]['elements'];
-        } else {
-            elements[element] = menu[group]['elements'][element];
-        }
-
-        return elements;
-    }
-
-    filterMenu(menu) {
-        // Loop through menu items and if the group has hidden === true -> remove it
-        Object.keys(menu).forEach(k => {
-            if (op.get(menu, 'hidden', false) === true) {
-                delete menu[k];
-                return;
-            }
-
-            const elements = op.get(menu, `${k}.elements`, {});
-
-            Object.keys(elements).forEach(e => {
-                if (op.get(elements, `${e}.hidden`, false) === true) {
-                    delete elements[e];
-                }
-            });
-
-            menu[k]['elements'] = elements;
-        });
-
-        return menu;
-    }
-
-    render() {
-        const { filters = [] } = this.state;
-        let {
-            update = Date.now(),
-            manifest = {},
-            prefs = {},
-            group,
-            element,
-            showSettings,
-            showMenu,
-            style,
-            notify,
-            loading,
-        } = this.props;
-
-        let {
-            themes = [],
-            menu = {},
-            toolbar = {},
-            sidebar = {},
-            header = {},
-            overview,
-        } = manifest;
-
-        menu = this.filterMenu(menu);
-
-        let elements = this.getElements({ menu, group, element });
-        let groupName = group
-            ? menu[group]['label']
-            : op.get(config, 'header.name', 'Reactium');
-        let theme = _.findWhere(themes, { selected: true });
-
-        if (!style) {
-            style = theme ? theme.css : null;
-        }
-
-        // update manifest to have the selected style
-        themes = themes.map(item => {
-            let { css } = item;
-            item['selected'] = css === style;
-            return item;
-        });
-
-        return (
-            <Fragment>
-                <Helmet
-                    titleTemplate={`%s | ${op.get(
-                        config,
-                        'header.title',
-                        'Style Guide',
-                    )}`}>
-                    <title>{groupName}</title>
-                    <html lang='en' />
-                    <body className='re-toolkit' />
-                </Helmet>
-                <Plugins zone='toolkit-head' />
-
-                <Header
-                    {...header}
-                    update={update}
-                    themes={themes}
-                    style={style}
-                    assetPath={assetPath}
-                    onThemeChange={this.onThemeChange.bind(this)}
-                />
-
-                <main className={'re-toolkit-container'}>
-                    <Sidebar
-                        {...sidebar}
-                        menu={menu}
-                        prefs={prefs}
-                        update={update}
-                        toolbar={toolbar}
-                        filters={filters}
-                        group={group}
-                        onFilterClick={this.onFilterClick.bind(this)}
-                        onMenuItemClick={this.onMenuItemClick.bind(this)}
-                        onMenuItemToggle={this.onMenuItemToggle.bind(this)}
-                        onToolbarItemClick={this.onButtonClick.bind(this)}
-                    />
-
-                    {!loading && (
-                        <Content
-                            group={group}
-                            prefs={prefs}
-                            menu={menu}
-                            style={style}
-                            data={elements}
-                            update={update}
-                            title={groupName}
-                            element={element}
-                            defaultComponent={overview}
-                            ref={elm => {
-                                this.content = elm;
-                            }}
-                            onMenuToggleClick={this.toggleMenu.bind(this)}
-                            onButtonClick={this.onButtonClick.bind(this)}
-                            onCrumbClick={this.onMenuItemClick.bind(this)}
-                            onCopyClick={this.onCopyClick.bind(this)}
-                        />
-                    )}
-                    {loading && <Loading onComplete={this.props.loaded} />}
-                </main>
-
-                <Settings
-                    onSwitchClick={this.onSettingSwitchClick.bind(this)}
-                    onSettingsClose={this.onSettingsClose.bind(this)}
-                    onSettingsOpen={this.onSettingsOpen.bind(this)}
-                    ref={elm => {
-                        this.settings = elm;
-                    }}
-                    visible={showSettings}
-                    update={update}
-                    prefs={prefs}
-                />
-
-                <Notify
-                    prefs={prefs}
-                    ref={elm => {
-                        this.notify = elm;
-                    }}
-                    onCloseClick={this.onNoticeDismiss.bind(this)}
-                    {...notify}
-                />
-            </Fragment>
-        );
-    }
-}
diff --git a/.core/components/Toolkit/_lib/tools.js b/.core/components/Toolkit/_lib/tools.js
deleted file mode 100644
index adcbee76..00000000
--- a/.core/components/Toolkit/_lib/tools.js
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-const getDisplayName = (Component) => {
-    return (
-        Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown')
-    );
-};
-
-export {
-    getDisplayName,
-}
diff --git a/.core/components/Toolkit/_scss/_colors.scss b/.core/components/Toolkit/_scss/_colors.scss
deleted file mode 100644
index 8a25705e..00000000
--- a/.core/components/Toolkit/_scss/_colors.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-$grey-light       : #F3F3F3;
-$grey             : #CCCCCC;
-$gray             : #7A7A7A;
-$white            : #FFFFFF;
-$black            : #000000;
-$blue             : #4F82BA;
-$toolbar-svg-fill : lighten($blue, 10%);
-$drop-shadow      : 1px 0 15px 1px rgba(0,0,0,.05);
-$border-color     : lighten($grey, 11%);
diff --git a/.core/components/Toolkit/_scss/_layout.scss b/.core/components/Toolkit/_scss/_layout.scss
deleted file mode 100644
index cd52285d..00000000
--- a/.core/components/Toolkit/_scss/_layout.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-html {
-    overflow: hidden;
-    width: 100%;
-    height: 100%;
-}
-body {
-    background-color: $grey-light;
-    position: relative;
-    overflow-x: hidden;
-}
-
-.re-toolkit-container {
-    display: flex;
-    align-items: stretch;
-    padding-top: $header-height;
-    height: 100vh;
-}
diff --git a/.core/components/Toolkit/_scss/_lightbox.scss b/.core/components/Toolkit/_scss/_lightbox.scss
deleted file mode 100644
index dbd2687b..00000000
--- a/.core/components/Toolkit/_scss/_lightbox.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#lightbox {
-    display          : block;
-    z-index          : $z-top;
-    position         : absolute;
-    width            : 100vw;
-    height           : 100vh;
-    top              : 0;
-    left             : 0;
-    overflow-x       : hidden;
-    overflow-y       : auto;
-    background-color : rgba(0, 0, 0, 0.25);
-}
diff --git a/.core/components/Toolkit/_scss/_reset.scss b/.core/components/Toolkit/_scss/_reset.scss
deleted file mode 100644
index 29748171..00000000
--- a/.core/components/Toolkit/_scss/_reset.scss
+++ /dev/null
@@ -1,66 +0,0 @@
-* {
-    margin: 0;
-    padding: 0;
-    border: 0;
-    box-sizing: border-box;
-    vertical-align: baseline;
-    font-family: inherit;
-}
-/* HTML5 display-role reset for older browsers */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-menu,
-nav,
-section {
-    display: block;
-}
-
-body {
-    line-height: 1;
-    font-family: Helvetica, Arial, sans-serif;
-}
-
-li,
-ol,
-ul {
-    list-style: none;
-}
-
-blockquote,
-q {
-    quotes: none;
-}
-
-blockquote {
-    &:after,
-    &:before {
-        content: '';
-        content: none;
-    }
-}
-
-q {
-    &:after,
-    &:before {
-        content: '';
-        content: none;
-    }
-}
-
-table {
-    border-collapse: collapse;
-    border-spacing: 0;
-}
-
-button {
-    background-color: transparent;
-    outline: none;
-    border: 0;
-    cursor: pointer;
-}
diff --git a/.core/components/Toolkit/_scss/_typography.scss b/.core/components/Toolkit/_scss/_typography.scss
deleted file mode 100644
index fa6c33d7..00000000
--- a/.core/components/Toolkit/_scss/_typography.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-* {
-    font-family: Helvetica, Arial, sans-serif;
-}
-
-h1, h2, h3, h4, h5, h6 {
-    line-height: 1;
-    padding: 0 0 10px 0;
-    margin: 0;
-    font-weight: lighter;
-    font-family: Verdana, sans-serif;
-}
-
-h1 { font-size: 32px; }
-
-h2 { font-size: 24px; }
-
-h3 { font-size: 16px; }
-
-h4 { font-size: 14px; }
-
-h5 { font-size: 12px; }
-
-h6 { font-size: 12px; font-weight: normal; }
-
-small {
-    font-size: 12px;
-}
-
-em {
-    font-style: italic;
-}
diff --git a/.core/components/Toolkit/_scss/_variables.scss b/.core/components/Toolkit/_scss/_variables.scss
deleted file mode 100644
index bdb1f4ab..00000000
--- a/.core/components/Toolkit/_scss/_variables.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-@import 'colors';
-
-$breaks: (
-    xs: 767px,
-    sm: 768px,
-    md: 992px,
-    lg: 1200px,
-    xl: 1920px,
-);
-
-$header-height: 60px;
-$toolbar-width: 72px;
-$sidebar-width: 320px;
-$search-height: 64px;
-$menu-width: $sidebar-width - $toolbar-width;
-$menu-height-offset: $header-height + $search-height;
-
-$z-top    : 100000;
-$z-middle : 50000;
-$z-bottom : 25000;
diff --git a/.core/components/Toolkit/_scss/core.scss b/.core/components/Toolkit/_scss/core.scss
deleted file mode 100644
index 24f3f65e..00000000
--- a/.core/components/Toolkit/_scss/core.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-
-@import 'reset';
-@import 'variables';
-@import 'mixins/breakpoint';
-@import 'typography';
-@import 'layout';
-@import 'lightbox';
-@import '../Header/style';
-@import '../Sidebar/style';
-@import '../Content/style';
-@import '../Content/Card/style';
-@import '../Content/Dna/style';
-@import '../Menu/style';
-@import '../Search/style';
-@import '../Toolbar/style';
-@import '../Content/Code/style';
-@import '../Content/Docs/style';
-@import '../Settings/style';
-@import '../Notify/style';
-@import '../Loading/style';
diff --git a/.core/components/Toolkit/_scss/mixins/_breakpoint.scss b/.core/components/Toolkit/_scss/mixins/_breakpoint.scss
deleted file mode 100644
index a487de73..00000000
--- a/.core/components/Toolkit/_scss/mixins/_breakpoint.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-@mixin breakpoint($size) {
-    @if ($size == xs) {
-        @media (max-width: map-get($breaks, $size)) { @content; }
-    }
-
-    @else {
-        @media (min-width: map-get($breaks, $size)) { @content; }
-    }
-}
diff --git a/.core/components/Toolkit/actionTypes.js b/.core/components/Toolkit/actionTypes.js
deleted file mode 100644
index 5c8d85b8..00000000
--- a/.core/components/Toolkit/actionTypes.js
+++ /dev/null
@@ -1,12 +0,0 @@
-export default {
-    TOOLKIT_MOUNT: 'TOOLKIT_MOUNT',
-    TOOLKIT_LOAD: 'TOOLKIT_LOAD',
-    TOOLKIT_LOADED: 'TOOLKIT_LOADED',
-    TOOLKIT_NAV: 'TOOLKIT_NAV',
-    TOOLKIT_PREF: 'TOOLKIT_PREF',
-    TOOLKIT_THEME: 'TOOLKIT_THEME',
-    TOOLKIT_MENU_TOGGLE: 'TOOLKIT_MENU_TOGGLE',
-    TOOLKIT_NOTICE_TOGGLE: 'TOOLKIT_NOTICE_TOGGLE',
-    TOOLKIT_NOTICE_UPDATE: 'TOOLKIT_NOTICE_UPDATE',
-    TOOLKIT_SETTINGS_TOGGLE: 'TOOLKIT_SETTINGS_TOGGLE',
-};
diff --git a/.core/components/Toolkit/actions.js b/.core/components/Toolkit/actions.js
deleted file mode 100644
index 064b75ad..00000000
--- a/.core/components/Toolkit/actions.js
+++ /dev/null
@@ -1,179 +0,0 @@
-import _ from 'underscore';
-import op from 'object-path';
-import deps from 'dependencies';
-import { themes, assets } from 'appdir/toolkit';
-import { TweenMax, Power2 } from 'gsap/umd/TweenMax';
-
-const isToolkit = path => {
-    let exp = /^\/toolkit/i;
-    return exp.test(path);
-};
-
-const assetPath = op.get(assets, 'path', '/assets');
-
-export default {
-    load: data => dispatch =>
-        dispatch({
-            type: deps().actionTypes.TOOLKIT_LOAD,
-            data,
-        }),
-
-    loaded: () => dispatch =>
-        dispatch({ type: deps().actionTypes.TOOLKIT_LOADED }),
-
-    mount: data => dispatch =>
-        dispatch({
-            type: deps().actionTypes.TOOLKIT_MOUNT,
-            data,
-        }),
-
-    unmount: data => dispatch =>
-        dispatch({
-            type: deps().actionTypes.TOOLKIT_UNMOUNT,
-        }),
-
-    menuItemClick: url => dispatch => {
-        if (isToolkit(url)) {
-            const uarr = url.split('/toolkit')[1].split('/');
-            uarr.shift();
-
-            const group = uarr[0];
-            const element = uarr[1];
-            const params = { group, element };
-
-            return dispatch({
-                type: deps().actionTypes.TOOLKIT_NAV,
-                params,
-            });
-        }
-    },
-
-    menuToggle: () => (dispatch, getState) => {
-        const elm = document.getElementById('reactium-sidebar');
-        if (!elm) {
-            return;
-        }
-
-        const state = getState()['Toolkit'];
-        const { animating = false } = state;
-
-        if (animating === true) {
-            return;
-        }
-
-        // Let the app know you're animating
-        dispatch({ type: deps().actionTypes.TOOLKIT_MENU_TOGGLE });
-
-        // Unset display: none
-        TweenMax.set(elm, { display: 'flex' });
-
-        let expanded = op.get(state, 'prefs.sidebar.expanded', false);
-        const w = expanded === true ? 0 : 320;
-        const anime = {
-            ease: Power2.easeInOut,
-            width: `${w}px`,
-            onComplete: () => {
-                expanded = !expanded;
-
-                let display = expanded === true ? 'flex' : 'none';
-
-                TweenMax.set(elm, { display });
-
-                dispatch({ type: deps().actionTypes.TOOLKIT_MENU_TOGGLE });
-                dispatch({
-                    type: deps().actionTypes.TOOLKIT_PREF,
-                    value: expanded,
-                    key: 'prefs.sidebar.expanded',
-                });
-            },
-        };
-
-        TweenMax.to(elm, 0.25, anime);
-    },
-
-    notice: {
-        hide: params => (dispatch, getState) => {
-            const state = getState()['Toolkit'];
-            const { animating = false } = op.get(state, 'notify', {});
-            let { elm } = params;
-
-            elm = elm.cont;
-
-            if (animating === true) {
-                return;
-            }
-
-            dispatch({
-                type: deps().actionTypes.TOOLKIT_NOTICE_UPDATE,
-                params: { ...state.notify, animating: true },
-            });
-
-            const h = -(elm.offsetHeight + 20);
-
-            TweenMax.to(elm, 0.25, {
-                top: `${h}px`,
-                ease: Power2.easeInOut,
-                onComplete: () => {
-                    dispatch({
-                        type: deps().actionTypes.TOOLKIT_NOTICE_TOGGLE,
-                        visible: false,
-                    });
-
-                    elm.style.display = 'none';
-                },
-            });
-        },
-
-        show: params => (dispatch, getState) => {
-            const state = getState()['Toolkit'];
-            const { animating = false } = op.get(state, 'notify', {});
-            let { autohide, dismissable, elm, message } = params;
-
-            elm = elm.cont;
-
-            if (animating === true) {
-                return;
-            }
-
-            elm.style.display = 'flex';
-
-            params['animating'] = true;
-
-            dispatch({
-                type: deps().actionTypes.TOOLKIT_NOTICE_UPDATE,
-                params,
-            });
-
-            TweenMax.to(elm, 0.25, {
-                top: '60px',
-                ease: Power2.easeInOut,
-                onComplete: () => {
-                    dispatch({
-                        type: deps().actionTypes.TOOLKIT_NOTICE_TOGGLE,
-                        visible: true,
-                    });
-                },
-            });
-        },
-    },
-
-    set: ({ key, value }) => dispatch =>
-        dispatch({
-            type: deps().actionTypes.TOOLKIT_PREF,
-            value,
-            key,
-        }),
-
-    setTheme: theme => dispatch => {
-        theme =
-            op.get(_.findWhere(themes, { css: theme }), 'css') ||
-            `${assetPath}/style/style.css`;
-        return dispatch({
-            type: deps().actionTypes.TOOLKIT_THEME,
-            theme,
-        });
-    },
-
-    toggleSettings: () => dispatch =>
-        dispatch({ type: deps().actionTypes.TOOLKIT_SETTINGS_TOGGLE }),
-};
diff --git a/.core/components/Toolkit/index.js b/.core/components/Toolkit/index.js
deleted file mode 100644
index b2a19ea2..00000000
--- a/.core/components/Toolkit/index.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React from 'react';
-import { connect } from 'react-redux';
-import deps from 'dependencies';
-import { Plugins } from 'reactium-core/components/Plugable';
-
-const Toolkit = props => <Plugins zone='toolkit' {...props} />;
-
-/**
- * -----------------------------------------------------------------------------
- * Inject Redux State and Actions into React Component: Toolkit
- * -----------------------------------------------------------------------------
- */
-const mapStateToProps = (state, props) => ({
-    ...state.Toolkit,
-    ...props,
-});
-
-const mapDispatchToProps = dispatch => ({
-    mount: params => dispatch(deps().actions.Toolkit.mount(params)),
-    menuItemClick: url => dispatch(deps().actions.Toolkit.menuItemClick(url)),
-    menuToggle: () => dispatch(deps().actions.Toolkit.menuToggle()),
-    notice: {
-        hide: params => dispatch(deps().actions.Toolkit.notice.hide(params)),
-        show: params => dispatch(deps().actions.Toolkit.notice.show(params)),
-    },
-    set: data => dispatch(deps().actions.Toolkit.set(data)),
-    setTheme: data => dispatch(deps().actions.Toolkit.setTheme(data)),
-    toggleSettings: () => dispatch(deps().actions.Toolkit.toggleSettings()),
-    loaded: () => dispatch(deps().actions.Toolkit.loaded()),
-});
-
-export default connect(
-    mapStateToProps,
-    mapDispatchToProps,
-)(Toolkit);
diff --git a/.core/components/Toolkit/plugin.js b/.core/components/Toolkit/plugin.js
deleted file mode 100644
index b97fe09e..00000000
--- a/.core/components/Toolkit/plugin.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import loadable from '@loadable/component';
-const Toolkit = loadable(() => import('./Toolkit'));
-
-export default {
-    /**
-     * Required - used as rendering key. Make this unique.
-     * @type {String}
-     */
-    id: 'Toolkit',
-
-    /**
-     * Component to render. May also be a string, and
-     * the component will be looked up in components directory.
-     * @type {Component|String}
-     */
-    component: Toolkit,
-
-    /**
-     * One or more zones this component should render.
-     * @type {String|Array}
-     */
-    zone: 'toolkit',
-
-    /**
-     * By default plugins in zone are rendering in ascending order.
-     * @type {Number}
-     */
-    order: 0,
-
-    /**
-     * (Optional) additional search subpaths to use to find the component,
-     * if String provided for component property.
-     * @type {[type]}
-     *
-     * e.g. If component is a string 'TextInput', uncommenting the line below would
-     * look in components/common-ui/form/inputs and components/general to find
-     * the component 'TextInput'
-     */
-    // paths: ['common-ui/form/inputs', 'general']
-
-    /**
-     * Additional params: (optional)
-     *
-     * Any free-form additional properties you provide below, will be provided as params
-     * to the component when rendered.
-     *
-     * e.g. Below will be provided to the MyComponent, <MyComponent pageType={'home'} />
-     * These can also be used to help sort or filter plugins, or however you have your
-     * component use params.
-     * @type {Mixed}
-     */
-    // pageType: 'home',
-};
diff --git a/.core/components/Toolkit/reducers.js b/.core/components/Toolkit/reducers.js
deleted file mode 100644
index 636b713c..00000000
--- a/.core/components/Toolkit/reducers.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import deps from 'dependencies';
-import manifest from 'appdir/toolkit';
-import op from 'object-path';
-
-export default (state = {}, action) => {
-    let newState;
-
-    switch (action.type) {
-        case deps().actionTypes.TOOLKIT_LOAD:
-            return { ...state, ...action.data, manifest, loading: true };
-
-        case deps().actionTypes.TOOLKIT_LOADED:
-            return { ...state, loading: null };
-
-        case deps().actionTypes.TOOLKIT_MOUNT:
-            return { ...state, ...action.data, manifest };
-
-        case deps().actionTypes.TOOLKIT_NAV:
-        case deps().actionTypes.UPDATE_ROUTE:
-            const { group = null, element = null } = action.params;
-            return { ...state, group, element };
-
-        case deps().actionTypes.TOOLKIT_PREF:
-            newState = { ...state, update: Date.now() };
-            const karry = action.key.split('.');
-            const all = karry.pop();
-
-            if (all === 'all') {
-                op.empty(newState, karry.join('.'), null);
-            }
-
-            op.set(newState, action.key, action.value);
-
-            return newState;
-
-        case deps().actionTypes.TOOLKIT_THEME:
-            return { ...state, style: action.theme, update: Date.now() };
-
-        case deps().actionTypes.TOOLKIT_MENU_TOGGLE:
-            const { animating = false } = state;
-            return { ...state, animating: !animating, update: Date.now() };
-
-        case deps().actionTypes.TOOLKIT_NOTICE_UPDATE:
-            delete action.params.elm;
-            return { ...state, notify: action.params };
-
-        case deps().actionTypes.TOOLKIT_NOTICE_TOGGLE:
-            newState = { ...state };
-
-            if (action.visible === false) {
-                op.set(newState, 'notify', {});
-            }
-
-            op.set(newState, 'notify.animating', false);
-            op.set(newState, 'notify.visible', action.visible);
-
-            return newState;
-
-        case deps().actionTypes.TOOLKIT_SETTINGS_TOGGLE:
-            return { ...state, showSettings: !state.showSettings };
-
-        default:
-            return state;
-    }
-};
diff --git a/.core/components/Toolkit/route.js b/.core/components/Toolkit/route.js
deleted file mode 100644
index f887c049..00000000
--- a/.core/components/Toolkit/route.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import Toolkit from './index';
-import deps from 'dependencies';
-
-export default [
-    {
-        path: ['/toolkit/:group/:element', '/toolkit/:group', '/toolkit'],
-        exact: true,
-        component: Toolkit,
-        load: (params, search) => deps().actions.Toolkit.load(params, search),
-    },
-];
diff --git a/.core/components/Toolkit/state.js b/.core/components/Toolkit/state.js
deleted file mode 100644
index c4065491..00000000
--- a/.core/components/Toolkit/state.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- Toolkit Initial State
-*/
-
-export default {
-    persist: ['prefs', 'style'],
-    version: '2.0.2',
-    style: '/style/style.css',
-    prefs: {
-        code: {
-            all: false,
-        },
-        codeColor: {
-            all: 'light',
-        },
-        docs: {
-            all: false,
-        },
-        dna: {
-            all: false,
-        },
-        sidebar: {
-            position: 'left',
-            expanded: true,
-        },
-        menu: {
-            all: false,
-        },
-    },
-    settings: [
-        {
-            text: ['Sidebar position: left', 'Sidebar position: right'],
-            values: ['left', 'right'],
-            pref: 'sidebar.position',
-            labels: ['R', 'L'],
-            default: 'left',
-        },
-        {
-            text: ['Menu: expanded', 'Menu: collapsed'],
-            values: [false, true],
-            pref: 'menu.all',
-            help: 'Expand or collapse all menu items',
-            default: false,
-        },
-        {
-            text: ['Documentation: collapsed', 'Documentation: expanded'],
-            values: [false, true],
-            pref: 'docs.all',
-            help: 'Expand or collapse all documentation',
-            default: false,
-        },
-        {
-            text: ['DNA: collapsed', 'DNA: expanded'],
-            values: [false, true],
-            pref: 'link.all',
-            help: 'Expand or collapse all DNA views',
-            default: false,
-        },
-        {
-            text: ['Code view: collapsed', 'Code view: expanded'],
-            values: [false, true],
-            pref: 'code.all',
-            help: 'Expand or collapse all code views',
-            default: false,
-        },
-        {
-            text: ['Syntax highlighting: light', 'Syntax highlighting: dark'],
-            values: ['light', 'dark'],
-            pref: 'codeColor.all',
-            help: 'Switch the code view syntax highlighting',
-            default: 'light',
-        },
-        {
-            text: ['Syntax wrap text: no', 'Syntax wrap text: yes'],
-            values: [false, true],
-            pref: 'syntax.wrap',
-            help: 'Wrap code view lines at 80 columns',
-            default: false,
-        },
-    ],
-    onSettingsClose: null,
-    onSettingsOpen: null,
-    onSwitchClick: null,
-    visible: false,
-    speed: 0.125,
-    manifest: {},
-    buttons: {
-        header: [{ name: 'toggle-settings', title: 'close', icon: 'Close' }],
-        toolbar: [
-            { icon: 'Dna', name: 'filter-all', label: 'All Elements' },
-            { icon: 'Atom', name: 'filter-atom', label: 'Atoms' },
-            {
-                icon: 'Molecule',
-                name: 'filter-molecule',
-                label: 'Molecules',
-            },
-            {
-                icon: 'Organism',
-                name: 'filter-organism',
-                label: 'Organisms',
-            },
-            {
-                icon: 'Catalyst',
-                name: 'filter-catalyst',
-                label: 'Catalysts',
-            },
-            { icon: 'Page', name: 'filter-template', label: 'Pages' },
-            {
-                icon: 'Template',
-                name: 'filter-template',
-                label: 'Templates',
-            },
-            { name: 'spacer' },
-        ],
-    },
-};
diff --git a/.core/dependencies/getComponents.js b/.core/dependencies/getComponents.js
deleted file mode 100644
index d9bf1b43..00000000
--- a/.core/dependencies/getComponents.js
+++ /dev/null
@@ -1,74 +0,0 @@
-import React, { Suspense, lazy } from 'react';
-
-export default (elms = []) => {
-    let cmps = {};
-    if (typeof window !== 'undefined') {
-        const contexts = require('manifest').contexts;
-
-        // Traverse the Array of bindable elements and require the components for them
-        elms.forEach(({ type, path }) => {
-            let req;
-
-            // The path to the component
-            path = !path ? type : path;
-            Object.entries(contexts).forEach(([name, context]) => {
-                [
-                    `./${path}/index.js`,
-                    `./${path}/index.jsx`,
-                    `./${path}.js`,
-                    `./${path}.jsx`,
-                ].forEach(attempt => {
-                    // Exit if the component has already been defined
-                    if (cmps[type]) {
-                        return;
-                    }
-
-                    const found = context.keys().find(key => key === attempt);
-                    if (found) {
-                        req = context(attempt);
-                    }
-
-                    if (req) {
-                        let Component;
-                        if ('default' in req) {
-                            // sync context
-                            Component = req.default;
-                        } else {
-                            let Fallback = () => (
-                                <div className='get-components-loading' />
-                            );
-
-                            try {
-                                Fallback = require('components/Fallback')
-                                    .default;
-                            } catch (err) {
-                                console.log(err);
-                                // left intentionally blank
-                            }
-
-                            // async context
-                            const Found = lazy(() => req);
-                            Component = () => (
-                                <Suspense fallback={<Fallback />}>
-                                    <Found />
-                                </Suspense>
-                            );
-                        }
-
-                        cmps[type] = Component;
-                    }
-                });
-            });
-        });
-    }
-
-    // SSR and not found component cases
-    elms.forEach(({ type, path }) => {
-        if (!cmps[type]) {
-            cmps[type] = () => null;
-        }
-    });
-
-    // Output the Components Object
-    return cmps;
-};
diff --git a/.core/dependencies/index.js b/.core/dependencies/index.js
deleted file mode 100644
index 6941383c..00000000
--- a/.core/dependencies/index.js
+++ /dev/null
@@ -1,103 +0,0 @@
-import op from 'object-path';
-import Reactium from 'reactium-core/sdk';
-
-class ReactiumDependencies {
-    constructor() {
-        this.loaded = false;
-        this.actions = {};
-        this.actionTypes = {};
-        this.services = {};
-        this.reducers = {};
-        this.plugins = {};
-        this.plugableConfig = {};
-        this.coreTypes = [
-            'allActions',
-            'allActionTypes',
-            'allReducers',
-            'allInitialStates',
-            'allServices',
-            'allMiddleware',
-            'allEnhancers',
-            'allPlugins',
-        ];
-    }
-
-    _init() {
-        if (this.loaded) return;
-
-        this.loaded = true;
-        this.reducers = this.manifest.allReducers;
-        this.actions = this.manifest.allActions;
-        this.actionTypes = Object.keys(this.manifest.allActionTypes).reduce(
-            (types, key) => ({
-                ...types,
-                ...this.manifest.allActionTypes[key],
-            }),
-            {},
-        );
-        this.services = this.manifest.allServices;
-
-        this.plugins = this.manifest.allPlugins;
-
-        try {
-            let plugableConfig = require('appdir/plugable');
-            if ('default' in plugableConfig) {
-                plugableConfig = plugableConfig.default;
-            }
-            this.plugableConfig = plugableConfig;
-        } catch (error) {}
-
-        // Resolve non-core types as dependencies
-        Object.keys(this.manifest).forEach(type => {
-            if (!this.coreTypes.find(coreType => coreType === type)) {
-                this[type] = this.manifest[type];
-            }
-        });
-
-        console.log('Dependencies loaded.');
-    }
-}
-
-const dependencies = new ReactiumDependencies();
-
-export default () => {
-    if (!dependencies.loaded) {
-        console.warning(
-            new Error('Use of dependencies before dependencies-loaded.'),
-        );
-        throw dependencyError;
-    }
-
-    return dependencies;
-};
-
-export const restHeaders = () => {
-    return {};
-};
-
-// File scoped
-dependencies.manifest = require('manifest').get();
-export const manifest = dependencies.manifest;
-
-Reactium.Hook.register(
-    'dependencies-load',
-    () =>
-        new Promise(resolve => {
-            if (dependencies.loaded) resolve();
-
-            const interval = setInterval(() => {
-                const loaded =
-                    typeof window !== 'undefined' ||
-                    Object.values(dependencies.manifest).reduce(
-                        (loaded, dependency) => loaded && !!dependency,
-                        true,
-                    );
-                if (loaded) {
-                    clearInterval(interval);
-                    dependencies._init();
-                    resolve();
-                }
-            }, 100);
-        }),
-    Reactium.Enums.priority.highest,
-);
diff --git a/.core/easy-connect.js b/.core/easy-connect.js
deleted file mode 100644
index 87d70b2c..00000000
--- a/.core/easy-connect.js
+++ /dev/null
@@ -1,92 +0,0 @@
-import { useContext, useState, useEffect, useRef } from 'react';
-import { connect, ReactReduxContext } from 'react-redux';
-import op from 'object-path';
-import * as equals from 'shallow-equals';
-
-const noop = () => {};
-
-/**
- * An "easy connect" helper for redux.
- * A simple wrapper for react-redux connect.
- * Provides getState and dispatch from store using connect HoC
- *
- * @example
- * import { ec } from 'reactium-core/easy-connect';
- * import MyComponent from './MyComponent';
- *
- * // MyComponent exported from here will have props getState and dispatch
- * // off the redux store
- * export default ec(MyComponent);
- */
-export const ec = Component => {
-    return connect(state => ({
-        ...op.get(state, Component.name, {}),
-        getState: () => state,
-    }))(Component);
-};
-
-/**
- * useStore hook - just gimme the store damnit!
- * Custom React hooks for accessing store or specific data from the store.
- * @return {Object} The redux store.
- */
-export const useStore = () =>
-    op.get(useContext(ReactReduxContext), 'store', {
-        getState: () => ({}),
-        subscribe: noop,
-        dispatch: noop,
-    });
-
-/**
- * Default to shallow equals.
- */
-const defaultShouldUpdate = ({ prevState, newState }) =>
-    !equals(prevState, newState);
-
-/**
- * useSelect hook - subscribe to subtree of redux and control updates.
- * @description select subtree from redux state, and govern when to inform component of changes.
- * @param params [Object|function] - select function or object with select and shouldUpdate properties
- *
- * @param select [Function] select function is passed the full redux state, returns your
- * custom derived object / substate.
- * @param shouldUpdate [Function] passed object with newState and prevState.
- *
- * Returns true if state should be updated in hook.
- */
-export const useSelect = params => {
-    let select = newState => newState;
-    let shouldUpdate = defaultShouldUpdate;
-    if (typeof params === 'function') {
-        select = params;
-    } else {
-        select = op.get(params, 'select', select);
-        shouldUpdate = op.get(params, 'shouldUpdate', shouldUpdate);
-    }
-
-    const { getState, subscribe } = useStore();
-    const stateRef = useRef(select(getState()));
-    const [value, setValue] = useState(stateRef.current);
-
-    const setState = () => {
-        const newState = select(getState());
-        const prevState = stateRef.current;
-
-        if (
-            shouldUpdate({
-                newState,
-                prevState,
-            })
-        ) {
-            stateRef.current = newState;
-            setValue(stateRef.current);
-        }
-    };
-
-    useEffect(() => {
-        setState();
-        return subscribe(setState);
-    });
-
-    return stateRef.current;
-};
diff --git a/.core/enzyme.js b/.core/enzyme.js
deleted file mode 100644
index 7c60d45f..00000000
--- a/.core/enzyme.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Enzyme, { configure, shallow, mount, render } from 'enzyme';
-import Adapter from 'enzyme-adapter-react-16';
-
-configure({ adapter: new Adapter() });
-
-export { shallow, mount, render };
-export default Enzyme;
diff --git a/.core/get-task.js b/.core/get-task.js
deleted file mode 100644
index 1606ba39..00000000
--- a/.core/get-task.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = gulp => name => {
-    const func = function(done) {
-        return gulp.task(name)(done);
-    };
-    func.displayName = name;
-
-    return func;
-};
diff --git a/.core/gulp.config.js b/.core/gulp.config.js
deleted file mode 100644
index df15bda3..00000000
--- a/.core/gulp.config.js
+++ /dev/null
@@ -1,124 +0,0 @@
-'use strict';
-
-const fs = require('fs');
-const path = require('path');
-const globby = require('globby');
-const rootPath = path.resolve(__dirname, '..');
-
-const defaultConfig = {
-    entries: globby
-        .sync('./src/app/*.js')
-        .map(p => path.resolve(p))
-        .reduce((entries, entry) => {
-            entries[path.parse(entry).name] = entry;
-            return entries;
-        }, {}),
-    defines: {},
-    browsers: 'last 1 version',
-    port: {
-        browsersync: 3000,
-        proxy: 3030,
-    },
-    open: true,
-    cssPreProcessor: 'sass',
-    watch: {
-        js: ['src/app/**/*'],
-        markup: ['src/**/*.html', 'src/**/*.css'],
-        colors: ['src/**/*/colors.json'],
-        restartWatches: [
-            'src/**/assets/style/*.less',
-            'src/**/assets/style/*.scss',
-            'src/**/assets/style/*.sass',
-            '.core/components/Toolkit/style.scss',
-        ],
-        style: [
-            'src/**/*.less',
-            'src/**/*.scss',
-            'src/**/*.sass',
-            '.core/**/*.less',
-            '.core/**/*.scss',
-            '.core/**/*.sass',
-            '!{src/**/assets/style/*.less}',
-            '!{src/**/assets/style/*.scss}',
-            '!{src/**/assets/style/*.sass}',
-            '!{.core/components/Toolkit/style.scss}',
-        ],
-        assets: [
-            'src/**/assets/**/*',
-            'src/assets/**/*',
-            '!{src/**/*/assets/style,src/**/*/assets/style/**}',
-            '!{src/**/*/assets/js,src/**/*/assets/js/**}',
-            '!{src/assets/style,src/assets/style/**}',
-            '!{src/assets/js,src/assets/js/**}',
-        ],
-        server: ['src/index.js', 'src/server/**/*.js'],
-        templates: ['src/server/**/*.hbs'],
-    },
-    src: {
-        app: 'src',
-        colors: ['src/**/*/colors.json'],
-        js: ['src/app/**/*'],
-        json: ['src/**/*.json'],
-        markup: ['src/**/*.html', 'src/**/*.css'],
-        style: [
-            'src/**/*.scss',
-            '.core/**/*.scss',
-            '!{src/**/_*.scss}',
-            '!{.core/**/_*.scss}',
-        ],
-        assets: [
-            '.core/assets/**/*',
-            'src/**/assets/**/*',
-            'src/assets/**/*',
-            '!{src/**/*/assets/style,src/**/*/assets/style/**}',
-            '!{src/**/*/assets/js,src/**/*/assets/js/**}',
-            '!{src/assets/style,src/assets/style/**}',
-            '!{src/assets/js,src/assets/js/**}',
-        ],
-        compress: [
-            'public/assets/**/*',
-            'public/assets/js/sw/**/*',
-            '!public/assets/js/*.js',
-            '!public/assets/**/*.gz',
-        ],
-        includes: ['./node_modules'],
-        appdir: path.resolve(__dirname, 'src/app'),
-        rootdir: path.resolve(__dirname),
-        manifest: path.normalize(`${rootPath}/src/manifest.js`),
-    },
-    dest: {
-        dist: 'public',
-        js: '../public/assets/js',
-        markup: 'public',
-        style: 'public/assets/style',
-        assets: 'public/assets',
-        static: 'dist',
-        library: 'lib',
-        build: 'build/src',
-        buildCore: 'build/core',
-        colors: 'src/assets/style/_scss/_colors.scss',
-        startPath: '/',
-    },
-    umd: {
-        defaultWorker: path.resolve(
-            __dirname,
-            '../public/assets/js/umd/service-worker/service-worker.js',
-        ),
-        manifest: path.normalize(`${rootPath}/.tmp/umd-manifest.json`),
-        outputPath: path.resolve(__dirname, '../public/assets/js/umd'),
-    },
-    sw: {
-        globDirectory: 'public',
-        globPatterns: ['**/*.{html,js,css,js.gz,css.gz}'],
-        swDest: 'public/assets/js/sw/sw.js',
-        clientsClaim: true,
-        skipWaiting: true,
-    },
-};
-
-let gulpConfigOverride = _ => _;
-if (fs.existsSync(`${rootPath}/gulp.config.override.js`)) {
-    gulpConfigOverride = require(`${rootPath}/gulp.config.override.js`);
-}
-
-module.exports = gulpConfigOverride(defaultConfig);
diff --git a/.core/gulp.tasks.js b/.core/gulp.tasks.js
deleted file mode 100644
index 9bca4278..00000000
--- a/.core/gulp.tasks.js
+++ /dev/null
@@ -1,483 +0,0 @@
-'use strict';
-
-const del = require('del');
-const fs = require('fs-extra');
-const path = require('path');
-const globby = require('globby');
-const webpack = require('webpack');
-const browserSync = require('browser-sync');
-const gulpif = require('gulp-if');
-const gulpwatch = require('@atomic-reactor/gulp-watch');
-const run = require('gulp-run');
-const prefix = require('gulp-autoprefixer');
-const sass = require('gulp-sass');
-const gzip = require('gulp-gzip');
-const jsonFunctions = require('node-sass-functions-json').default;
-const tildeImporter = require('node-sass-tilde-importer');
-const less = require('gulp-less');
-const cleanCSS = require('gulp-clean-css');
-const sourcemaps = require('gulp-sourcemaps');
-const rename = require('gulp-rename');
-const chalk = require('chalk');
-const moment = require('moment');
-const reactiumConfig = require('./reactium-config');
-const regenManifest = require('./manifest/manifest-tools');
-const umdWebpackGenerator = require('./umd.webpack.config');
-const rootPath = path.resolve(__dirname, '..');
-const { fork } = require('child_process');
-const workbox = require('workbox-build');
-
-// For backward compatibility with gulp override tasks using run-sequence module
-// make compatible with gulp4
-require('module-alias').addAlias('run-sequence', 'gulp4-run-sequence');
-
-const reactium = (gulp, config, webpackConfig) => {
-    const task = require('./get-task')(gulp);
-
-    const env = process.env.NODE_ENV || 'development';
-    const isDev = env === 'development';
-
-    const assetPath = p => {
-        p.dirname = p.dirname.split('assets').pop();
-    };
-    const markupPath = p => {
-        if (p.extname === '.css') {
-            p.dirname = config.dest.style.split(config.dest.markup).pop();
-        }
-    };
-
-    // Update config from environment variables
-    config.port.browsersync = process.env.hasOwnProperty('APP_PORT')
-        ? Number(process.env.APP_PORT)
-        : Number(config.port.browsersync);
-
-    const noop = done => done();
-
-    const timestamp = () => {
-        let now = moment().format('HH:mm:ss');
-        return `[${chalk.blue(now)}]`;
-    };
-
-    const watcher = e => {
-        let src = path.relative(path.resolve(__dirname), e.path);
-        let ePathRelative = path.relative(path.resolve(config.src.app), e.path);
-        let fpath = path.resolve(
-            rootPath,
-            `${config.dest.dist}/${ePathRelative.replace(
-                /^.*?\/assets/,
-                'assets',
-            )}`,
-        );
-
-        let displaySrc = path.relative(rootPath, e.path);
-        let displayDest = path.relative(rootPath, fpath);
-
-        if (fs.existsSync(fpath)) {
-            del.sync([fpath]);
-        }
-
-        if (e.event !== 'unlink') {
-            const destPath = path.dirname(fpath);
-            if (!fs.existsSync(destPath)) {
-                fs.mkdirSync(destPath, { recursive: true });
-            }
-
-            fs.createReadStream(e.path)
-                .pipe(fs.createWriteStream(fpath))
-                .on('error', error => console.error(timestamp(), error));
-        }
-
-        console.log(
-            `${timestamp()} File ${e.event}: ${displaySrc} -> ${displayDest}`,
-        );
-    };
-
-    const serve = ({ open } = { open: config.open }) => done => {
-        // Serve locally
-        // Delay to allow server time to start
-
-        setTimeout(() => {
-            browserSync({
-                notify: false,
-                timestamps: true,
-                logPrefix: '00:00:00',
-                port: config.port.browsersync,
-                ui: { port: config.port.browsersync + 1 },
-                proxy: `localhost:${config.port.proxy}`,
-                open: open,
-                ghostMode: false,
-                startPath: config.dest.startPath,
-            });
-
-            done();
-        }, 5000);
-    };
-
-    const watch = (done, restart = false) => {
-        let watchProcess = fork(path.resolve(__dirname, './gulp.watch.js'), {
-            env: process.env,
-            stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
-        });
-        watchProcess.send({ config, webpackConfig, restart });
-        watchProcess.on('message', message => {
-            switch (message) {
-                case 'build-started': {
-                    console.log("[00:00:00] Starting 'build'...");
-                    done();
-                    return;
-                }
-                case 'restart-watches': {
-                    console.log("[00:00:00] Restarting 'watch'...");
-                    watchProcess.kill();
-                    watch(_ => _, true);
-                    return;
-                }
-            }
-        });
-    };
-
-    const local = ({ ssr = false } = {}) => () => {
-        const SSR_MODE = ssr ? 'on' : 'off';
-
-        // warnings here
-        if (!fs.existsSync(rootPath, 'src/app/components/Fallback/index.js')) {
-            console.log('');
-            console.log(
-                chalk.magenta(
-                    'Create a `src/app/components/Fallback` component with default export to support lazy loaded components and remove the webpack warning you see below.',
-                ),
-            );
-            console.log('');
-        }
-
-        let watch = new run.Command(
-            `cross-env SSR_MODE=${SSR_MODE} NODE_ENV=development gulp`,
-            { verbosity: 3 },
-        );
-        let babel = new run.Command(
-            `cross-env SSR_MODE=${SSR_MODE} NODE_ENV=development nodemon ./.core/index.js --exec babel-node`,
-            { verbosity: 3 },
-        );
-
-        watch.exec();
-        babel.exec();
-    };
-
-    const assets = () =>
-        gulp
-            .src(config.src.assets)
-            .pipe(rename(assetPath))
-            .pipe(gulp.dest(config.dest.assets));
-
-    const build = gulp.series(
-        task('preBuild'),
-        task('clean'),
-        task('manifest'),
-        gulp.parallel(task('markup'), task('json')),
-        gulp.parallel(task('assets'), task('styles')),
-        task('scripts'),
-        task('umdLibraries'),
-        task('serviceWorker'),
-        task('compress'),
-        task('postBuild'),
-    );
-
-    const clean = done => {
-        // Remove build files
-        del.sync([config.dest.dist]);
-        done();
-    };
-
-    const defaultTask = env === 'development' ? task('watch') : task('build');
-
-    const json = () =>
-        gulp.src(config.src.json).pipe(gulp.dest(config.dest.build));
-
-    const manifest = gulp.series(
-        gulp.parallel(task('mainManifest'), task('umdManifest')),
-    );
-
-    const mainManifest = done => {
-        // Generate manifest.js file
-        regenManifest({
-            manifestFilePath: config.src.manifest,
-            manifestConfig: reactiumConfig.manifest,
-            manifestTemplateFilePath: path.resolve(
-                __dirname,
-                'manifest/templates/manifest.hbs',
-            ),
-            manifestProcessor: require('./manifest/processors/manifest'),
-        });
-        done();
-    };
-
-    const umdManifest = done => {
-        // Generate manifest all all umd libraries
-        regenManifest({
-            manifestFilePath: config.umd.manifest,
-            manifestConfig: reactiumConfig.manifest.umd,
-            manifestTemplateFilePath: path.resolve(
-                __dirname,
-                'manifest/templates/umd.hbs',
-            ),
-            manifestProcessor: require('./manifest/processors/umd'),
-        });
-        done();
-    };
-
-    const markup = () =>
-        gulp
-            .src(config.src.markup)
-            .pipe(rename(markupPath))
-            .pipe(gulp.dest(config.dest.markup));
-
-    const scripts = done => {
-        // Compile js
-        if (!isDev) {
-            webpack(webpackConfig, (err, stats) => {
-                if (err) {
-                    console.log(err());
-                    done();
-                    return;
-                }
-
-                let result = stats.toJson();
-
-                if (result.errors.length > 0) {
-                    result.errors.forEach(error => {
-                        console.log(error);
-                    });
-
-                    done();
-                    return;
-                }
-
-                done();
-            });
-        } else {
-            done();
-        }
-    };
-
-    const umdLibraries = async done => {
-        let umdConfigs = [];
-        try {
-            umdConfigs = JSON.parse(
-                fs.readFileSync(config.umd.manifest, 'utf8'),
-            );
-        } catch (error) {
-            console.log(error);
-        }
-
-        for (let umd of umdConfigs) {
-            try {
-                console.log(`Generating UMD library ${umd.libraryName}`);
-                await new Promise((resolve, reject) => {
-                    webpack(umdWebpackGenerator(umd), (err, stats) => {
-                        if (err) {
-                            reject(err());
-                            return;
-                        }
-
-                        let result = stats.toJson();
-                        if (result.errors.length > 0) {
-                            result.errors.forEach(error => {
-                                console.log(error);
-                            });
-
-                            reject(result.errors);
-                            return;
-                        }
-
-                        resolve();
-                    });
-                });
-            } catch (error) {
-                console.log(error);
-            }
-        }
-
-        done();
-    };
-
-    const serviceWorker = () => {
-        let method = 'generateSW';
-        let swConfig = {
-            ...config.sw,
-        };
-
-        if (fs.existsSync(config.umd.defaultWorker)) {
-            method = 'injectManifest';
-            swConfig.swSrc = config.umd.defaultWorker;
-            delete swConfig.clientsClaim;
-            delete swConfig.skipWaiting;
-        }
-
-        return workbox[method](swConfig)
-            .then(({ warnings }) => {
-                // In case there are any warnings from workbox-build, log them.
-                for (const warning of warnings) {
-                    console.warn(warning);
-                }
-                console.info('Service worker generation completed.');
-            })
-            .catch(error => {
-                console.warn('Service worker generation failed:', error);
-            });
-    };
-
-    const staticTask = task('static:copy');
-
-    const staticCopy = done => {
-        // Copy static files
-        fs.copySync(config.dest.dist, config.dest.static);
-
-        let mainPage = path.normalize(
-            `${config.dest.static}/index-static.html`,
-        );
-
-        if (fs.existsSync(mainPage)) {
-            let newName = mainPage
-                .split('index-static.html')
-                .join('index.html');
-            fs.renameSync(mainPage, newName);
-        }
-
-        done();
-    };
-
-    const stylesColors = done => {
-        if (config.cssPreProcessor === 'sass') {
-            // Currently only works with sass
-            let colorProfiles = globby.sync(config.src.colors);
-            if (colorProfiles.length > 0) {
-                let colorFileContents =
-                    '// WARNING: Do not directly edit this file !!!!\n// File generated by gulp styles:colors task\n';
-                let colorVars = [];
-                let colorArr = [];
-
-                colorProfiles.forEach(filePath => {
-                    let profile = fs.readFileSync(path.resolve(filePath));
-                    profile = JSON.parse(profile);
-
-                    colorVars.push(`\n\n// ~/${filePath}`);
-
-                    Object.keys(profile).forEach(k => {
-                        let code = profile[k];
-                        let cvar = `$${k}`;
-                        let vline = `${cvar}: ${code} !default;`;
-                        let cname = k.split('color-').join('');
-                        let aline = `\t"${cname}": ${cvar}`;
-
-                        colorVars.push(vline);
-                        colorArr.push(aline);
-                    });
-                });
-
-                colorFileContents += colorVars.join('\n') + '\n\n\n';
-                colorFileContents += `$color: (\n${colorArr.join(
-                    ',\n',
-                )}\n) !default;\n\n\n`;
-
-                fs.ensureFileSync(config.dest.colors);
-                fs.writeFileSync(config.dest.colors, colorFileContents, 'utf8');
-            }
-        }
-
-        done();
-    };
-
-    const stylesCompile = () => {
-        // Compile Sass & Less
-        let isSass = config.cssPreProcessor === 'sass';
-        let isLess = config.cssPreProcessor === 'less';
-
-        return gulp
-            .src(config.src.style)
-            .pipe(gulpif(isDev, sourcemaps.init()))
-            .pipe(
-                gulpif(
-                    isSass,
-                    sass({
-                        functions: {
-                            ...jsonFunctions,
-                        },
-                        importer: tildeImporter,
-                        includePaths: config.src.includes,
-                    }).on('error', sass.logError),
-                ),
-            )
-            .pipe(gulpif(isLess, less({ paths: config.src.includes })))
-            .pipe(prefix(config.browsers))
-            .pipe(gulpif(!isDev, cleanCSS()))
-            .pipe(gulpif(isDev, sourcemaps.write()))
-            .pipe(rename({ dirname: '' }))
-            .pipe(gulp.dest(config.dest.style))
-            .pipe(gulpif(isDev, browserSync.stream()));
-    };
-
-    const styles = gulp.series(task('styles:colors'), task('styles:compile'));
-
-    const compress = done =>
-        isDev
-            ? done()
-            : gulp
-                  .src(config.src.compress)
-                  .pipe(gzip())
-                  .pipe(gulp.dest(config.dest.assets));
-
-    const watchFork = done => {
-        // Watch for file changes
-        gulp.watch(config.watch.colors, gulp.task('styles:colors'));
-        gulp.watch(config.watch.style, gulp.task('styles:compile'));
-        gulpwatch(config.watch.markup, watcher);
-        gulpwatch(config.watch.assets, watcher);
-        const scriptWatcher = gulp.watch(
-            config.watch.js,
-            gulp.parallel(
-                task('manifest'),
-                gulp.series(task('umdManifest'), task('umdLibraries')),
-            ),
-        );
-        done();
-    };
-
-    const tasks = {
-        local: local(),
-        'local:ssr': local({ ssr: true }),
-        assets,
-        preBuild: noop,
-        build,
-        compress,
-        postBuild: noop,
-        postServe: noop,
-        clean,
-        default: defaultTask,
-        json,
-        manifest,
-        mainManifest,
-        umdManifest,
-        umdLibraries,
-        markup,
-        scripts,
-        serve: serve(),
-        'serve-restart': serve({ open: false }),
-        serviceWorker,
-        static: staticTask,
-        'static:copy': staticCopy,
-        'styles:colors': stylesColors,
-        'styles:compile': stylesCompile,
-        styles,
-        watch,
-        watchFork,
-    };
-
-    let tasksOverride = _ => _;
-    if (fs.existsSync(`${rootPath}/gulp.tasks.override.js`)) {
-        tasksOverride = require(`${rootPath}/gulp.tasks.override.js`);
-    }
-
-    return tasksOverride(tasks, config);
-};
-
-module.exports = reactium;
diff --git a/.core/gulp.watch.js b/.core/gulp.watch.js
deleted file mode 100644
index d0a088ec..00000000
--- a/.core/gulp.watch.js
+++ /dev/null
@@ -1,29 +0,0 @@
-const gulp = require('gulp');
-const gulpTasks = require('./gulp.tasks');
-const gulpwatch = require('@atomic-reactor/gulp-watch');
-const task = require('./get-task')(gulp);
-
-process.on('message', ({ config, webpackConfig, restart }) => {
-    const tasks = gulpTasks(gulp, config, webpackConfig);
-    Object.entries(tasks).forEach(([name, task]) => gulp.task(name, task));
-
-    const asyncDone = done => {
-        process.send('build-started');
-        done();
-    };
-
-    const asyncBuild = gulp.series(
-        task('build'),
-        task('watchFork'),
-        restart ? task('serve-restart') : task('serve'),
-        task('postServe'),
-        asyncDone,
-    );
-
-    gulp.task('asyncBuild', asyncBuild);
-    gulp.task('asyncBuild')();
-
-    gulpwatch(config.watch.restartWatches, () => {
-        process.send('restart-watches');
-    });
-});
diff --git a/.core/gulpfile.js b/.core/gulpfile.js
deleted file mode 100644
index 891afd62..00000000
--- a/.core/gulpfile.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-const fs = require('fs');
-const gulp = require('gulp');
-const config = require('./gulp.config');
-const webpackConfig = require('./webpack.config')(config);
-const tasks = require('./gulp.tasks')(gulp, config, webpackConfig);
-
-Object.entries(tasks).forEach(([name, task]) => gulp.task(name, task));
diff --git a/.core/index.js b/.core/index.js
deleted file mode 100644
index 058ac618..00000000
--- a/.core/index.js
+++ /dev/null
@@ -1,226 +0,0 @@
-//------------------------------------------------------------------------------
-// node.js starter application for hosting
-//------------------------------------------------------------------------------
-
-import cors from 'cors';
-import express from 'express';
-import bodyParser from 'body-parser';
-import router from './server/router';
-import cookieParser from 'cookie-parser';
-import cookieSession from 'cookie-session';
-import proxy from 'http-proxy-middleware';
-import morgan from 'morgan';
-import apiConfig from 'appdir/api/config';
-import path from 'path';
-import fs from 'fs';
-import op from 'object-path';
-import _ from 'underscore';
-import staticGzip from 'express-static-gzip';
-import moment from 'moment';
-import Enums from 'reactium-core/sdk/enums';
-
-global.defines = {};
-global.rootPath = path.resolve(__dirname, '..');
-global.parseAppId = apiConfig.parseAppId;
-global.restAPI = apiConfig.restAPI;
-global.isSSR = 'SSR_MODE' in process.env && process.env.SSR_MODE === 'on';
-
-// SSR Defines
-if (!'defines' in global) {
-    global.defines = {};
-}
-if (fs.existsSync(`${rootPath}/src/app/server/defines.js`)) {
-    const defs = require(`${rootPath}/src/app/server/defines.js`);
-    Object.keys(defs).forEach(key => {
-        if (key !== 'process.env') {
-            global.defines[key] = defs[key];
-        }
-    });
-}
-
-const app = express();
-
-let gulpConfig;
-try {
-    gulpConfig = require('./gulp.config');
-} catch (err) {
-    gulpConfig = { port: { proxy: 3030 } };
-}
-
-let node_env = process.env.hasOwnProperty('NODE_ENV')
-    ? process.env.NODE_ENV
-    : 'development';
-
-// PORT setup:
-let port = gulpConfig.port.proxy;
-let pvar = op.get(process.env, 'PORT_VAR', false);
-
-if (pvar) {
-    port = op.get(process.env, pvar, port);
-} else {
-    port = op.get(process.env, 'APP_PORT', port);
-    port = op.get(process.env, 'PORT', port);
-}
-
-port = Number(port);
-
-const adminURL = process.env.ACTINIUM_ADMIN_URL || false;
-
-// set app variables
-app.set('x-powered-by', false);
-
-// express middlewares
-let middlewares = [
-    process.env.DEBUG === 'on'
-        ? {
-              name: 'logging',
-              use: morgan('combined'),
-              order: Enums.priority.highest,
-          }
-        : false,
-    {
-        name: 'cors',
-        use: cors(),
-        order: Enums.priority.highest,
-    },
-    {
-        name: 'placeholder',
-        use: require('./server/middleware/placeholder'),
-        order: Enums.priority.highest,
-    },
-    {
-        name: 'api',
-        use: proxy('/api', {
-            target: restAPI,
-            changeOrigin: true,
-            pathRewrite: {
-                '^/api': '',
-            },
-            logLevel: process.env.DEBUG === 'on' ? 'debug' : 'error',
-            ws: true,
-        }),
-        order: Enums.priority.highest,
-    },
-    // parsers
-    {
-        name: 'jsonParser',
-        use: bodyParser.json(),
-        order: Enums.priority.high,
-    },
-    {
-        name: 'urlEncoded',
-        use: bodyParser.urlencoded({ extended: true }),
-        order: Enums.priority.high,
-    },
-
-    // cookies
-    {
-        name: 'cookieParser',
-        use: cookieParser(),
-        order: Enums.priority.high,
-    },
-    {
-        name: 'cookieSession',
-        use: cookieSession({
-            name: op.get(process.env, 'COOKIE_SESSION_NAME', 'aljtka4'),
-            keys: JSON.parse(
-                op.get(
-                    process.env,
-                    'COOKIE_SESSION_KEYS',
-                    JSON.stringify([
-                        'Q2FtZXJvbiBSdWxlcw',
-                        'vT3GtyZKbnoNSdWxlcw',
-                    ]),
-                ),
-            ),
-            order: Enums.priority.high,
-        }),
-    },
-];
-
-// development mode
-if (process.env.NODE_ENV === 'development') {
-    const webpack = require('webpack');
-    const gulpConfig = require('./gulp.config');
-    const webpackConfig = require('./webpack.config')(gulpConfig);
-    const wpMiddlware = require('webpack-dev-middleware');
-    const wpHotMiddlware = require('webpack-hot-middleware');
-    const publicPath = `http://localhost:${port}/`;
-
-    // local development overrides for webpack config
-    webpackConfig.entry.main = [
-        `webpack-hot-middleware/client?path=/__webpack_hmr&quiet=true`,
-        webpackConfig.entry.main,
-    ];
-    webpackConfig.plugins.push(new webpack.HotModuleReplacementPlugin());
-    webpackConfig.output.publicPath = publicPath;
-
-    const compiler = webpack(webpackConfig);
-
-    middlewares.push({
-        name: 'webpack',
-        use: wpMiddlware(compiler, {
-            serverSideRender: true,
-            path: '/',
-            publicPath,
-        }),
-        order: Enums.priority.high,
-    });
-    middlewares.push({
-        name: 'hmr',
-        use: wpHotMiddlware(compiler, {
-            reload: true,
-        }),
-        order: Enums.priority.high,
-    });
-}
-
-// serve the static files out of ./public or specified directory
-const staticAssets =
-    process.env.PUBLIC_DIRECTORY || path.resolve(process.cwd(), 'public');
-
-middlewares.push({
-    name: 'static',
-    use: staticGzip(staticAssets),
-    order: Enums.priority.neutral,
-});
-
-// default route handler
-middlewares.push({
-    name: 'router',
-    use: router,
-    order: Enums.priority.neutral,
-});
-
-// Give app an opportunity to change middlewares
-if (fs.existsSync(`${rootPath}/src/app/server/middleware.js`)) {
-    middlewares = require(`${rootPath}/src/app/server/middleware.js`)(
-        middlewares,
-    );
-}
-
-_.sortBy(_.compact(middlewares), 'order').forEach(({ use }) => {
-    if (Array.isArray(use)) {
-        app.use(...use);
-    } else {
-        app.use(use);
-    }
-});
-
-// start server on the specified port and binding host
-app.listen(port, '0.0.0.0', function() {
-    console.log(
-        `[${moment().format(
-            'HH:mm:ss',
-        )}] Reactium Server running on port '${port}'...`,
-    );
-});
-
-// Provide opportunity for ssl server
-if (fs.existsSync(`${rootPath}/src/app/server/ssl.js`)) {
-    require(`${rootPath}/src/app/server/ssl.js`)(app);
-}
-
-if (isSSR) {
-    app.dependencies = global.dependencies = require('dependencies').default;
-}
diff --git a/.core/manifest/manifest-tools.js b/.core/manifest/manifest-tools.js
deleted file mode 100644
index 10486f53..00000000
--- a/.core/manifest/manifest-tools.js
+++ /dev/null
@@ -1,113 +0,0 @@
-const tree = require('directory-tree');
-const path = require('path');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const op = require('object-path');
-const prettier = require('prettier');
-const moment = require('moment');
-const chalk = require('chalk');
-const diff = require('fast-diff');
-const hb = require('handlebars');
-
-const flattenRegistry = (registry = { children: [] }, manifest = []) =>
-    registry.children.reduce((manifest, item) => {
-        if ('children' in item) {
-            return flattenRegistry(item, manifest);
-        }
-        if ('path' in item) {
-            manifest.push(item);
-        }
-        return manifest;
-    }, manifest);
-
-const sources = (sourcePath, searchParams) =>
-    flattenRegistry(tree(sourcePath, searchParams));
-
-const find = (searches = [], sourceMappings = [], searchParams) => {
-    let mappings = searches.reduce((mappings, { name, type }) => {
-        mappings[name] = {
-            type,
-            imports: [],
-        };
-        return mappings;
-    }, {});
-
-    sourceMappings.forEach(sourceMapping => {
-        mappings = sources(sourceMapping.from)
-            .map(file => file.path)
-            .reduce((mappings, file) => {
-                searches.forEach(({ name, pattern, ignore }) => {
-                    if (pattern.test(file) && (!ignore || !ignore.test(file))) {
-                        mappings[name].imports.push(
-                            file
-                                .replace(/\\/g, '/')
-                                .replace(sourceMapping.from, sourceMapping.to)
-                                .replace(/.jsx?$/, ''),
-                        );
-                    }
-                });
-
-                return mappings;
-            }, mappings);
-    });
-
-    return mappings;
-};
-
-module.exports = function({
-    manifestFilePath,
-    manifestConfig,
-    manifestTemplateFilePath,
-    manifestProcessor,
-}) {
-    const patterns = op.get(manifestConfig, 'patterns', []);
-    const sourceMappings = op.get(manifestConfig, 'sourceMappings', []);
-    const searchParams = op.get(manifestConfig, 'searchParams', {
-        extensions: /\.jsx?$/,
-        exclude: [/.ds_store/i, /.core\/.cli\//i, /.cli\//i],
-    });
-
-    const manifest = find(patterns, sourceMappings, searchParams);
-
-    const template = hb.compile(
-        fs.readFileSync(manifestTemplateFilePath, 'utf-8'),
-    );
-
-    let fileContents = template(
-        manifestProcessor({
-            manifest,
-            contexts: manifestConfig.contexts,
-            manifestConfig,
-        }),
-    );
-
-    if (/.jsx?$/.test(manifestFilePath)) {
-        fileContents = prettier.format(fileContents, {
-            parser: 'babel',
-            trailingComma: 'all',
-            singleQuote: true,
-            tabWidth: 4,
-            useTabs: false,
-        });
-    }
-
-    const manifestHasChanged = () => {
-        const prevFileContents = fs.readFileSync(manifestFilePath, 'utf-8');
-        const changes = diff(prevFileContents, fileContents).filter(
-            ([code, change]) => code !== 0,
-        );
-        return changes.length > 0;
-    };
-
-    // Write Manifest only if it does not exist or has changed
-    if (!fs.existsSync(manifestFilePath) || manifestHasChanged()) {
-        console.log(
-            `[${moment().format('HH:mm:ss')}] Writing  '${chalk.cyan(
-                manifestFilePath,
-            )}'...`,
-        );
-        const dir = path.dirname(manifestFilePath);
-        fs.ensureDirSync(dir);
-        fs.writeFileSync(manifestFilePath, fileContents);
-    }
-};
diff --git a/.core/manifest/processors/manifest.js b/.core/manifest/processors/manifest.js
deleted file mode 100644
index c8fa7eee..00000000
--- a/.core/manifest/processors/manifest.js
+++ /dev/null
@@ -1,60 +0,0 @@
-const op = require('object-path');
-
-module.exports = data => {
-    const types = Object.entries(data.manifest).map(([name, typeDomains]) => {
-        const domainRegExp = new RegExp(`\/([A-Za-z_0-9]+?)\/[A-Za-z_0-9]+$`);
-        const { imports, type } = typeDomains;
-        const domains = imports
-            .map(file => file.replace(/\\/g, '/'))
-            .filter(file => file.match(domainRegExp))
-            .map(file => {
-                let [, domain] = file.match(domainRegExp);
-                return {
-                    domain,
-                    file,
-                };
-            });
-
-        return {
-            name,
-            domains,
-        };
-    });
-
-    const contexts = Object.entries(data.contexts).map(([context, pattern]) => {
-        const { modulePath, filePattern, mode } = pattern;
-        return {
-            context,
-            modulePath,
-            filePattern,
-            mode,
-        };
-    });
-
-    const externals = Object.values(
-        op.get(data, 'manifestConfig.pluginExternals', {}),
-    ).map(external => {
-        const { externalName, requirePath } = external;
-        if (/^\/.*\/i?$/.test(externalName))
-            return {
-                ...external,
-                externalName: requirePath,
-                requirePath,
-            };
-
-        return external;
-    });
-
-    const externalAliases = externals.filter(
-        ({ defaultAlias }) => defaultAlias,
-    );
-
-    return {
-        types,
-        contexts,
-        externals,
-        externalAliases,
-        contextObj: JSON.stringify(data.contexts, null, 2),
-        manifest: JSON.stringify(data.manifest, null, 2),
-    };
-};
diff --git a/.core/manifest/processors/umd.js b/.core/manifest/processors/umd.js
deleted file mode 100644
index e4987d92..00000000
--- a/.core/manifest/processors/umd.js
+++ /dev/null
@@ -1,69 +0,0 @@
-const path = require('path');
-const fs = require('fs-extra');
-const _ = require('underscore');
-const op = require('object-path');
-const config = require('../../gulp.config');
-
-module.exports = data => {
-    const umdConfigs = op
-        .get(data, 'manifest.allUmdConfig.imports', [])
-        .reduce((configs, configPath) => {
-            const dir = path.dirname(path.normalize(configPath));
-            let config = {};
-            try {
-                config = JSON.parse(
-                    fs.readFileSync(path.normalize(configPath), 'utf8'),
-                );
-            } catch (err) {}
-
-            configs[dir] = config;
-
-            return configs;
-        }, {});
-
-    const defaultLibraryExternals = Object.values(
-        op.get(data, 'manifestConfig.defaultLibraryExternals', {}),
-    ).reduce((externals, { externalName }) => {
-        externals[externalName] = externalName;
-        return externals;
-    }, {});
-
-    return JSON.stringify(
-        op.get(data, 'manifest.allUmdEntries.imports', []).map(entryPath => {
-            const dir = path.dirname(entryPath);
-            const umdConfig = op.get(umdConfigs, dir, {});
-            const libraryName = op.get(
-                umdConfig,
-                'libraryName',
-                path.basename(dir),
-            );
-            const outputBase = op.get(config, 'umd.outputPath');
-            const outputPath = path.resolve(
-                outputBase,
-                op.get(umdConfig, 'outputPath', libraryName),
-            );
-            const outputFile = op.get(
-                umdConfig,
-                'outputFile',
-                `${libraryName}.js`,
-            );
-            const externals = op.get(
-                umdConfig,
-                'externals',
-                defaultLibraryExternals,
-            );
-            const globalObject = op.get(umdConfig, 'globalObject', 'window');
-
-            return {
-                entry: path.normalize(entryPath + '.js'),
-                libraryName,
-                outputPath,
-                outputFile,
-                externals,
-                globalObject,
-            };
-        }),
-        null,
-        2,
-    );
-};
diff --git a/.core/manifest/templates/manifest.hbs b/.core/manifest/templates/manifest.hbs
deleted file mode 100644
index 55e685dd..00000000
--- a/.core/manifest/templates/manifest.hbs
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Generated by createManifest.js
- * DO NOT directly edit this file !!!!!!
- */
-
-module.exports = {
-    get: () => {
-        return {
-        {{#each types}}
-            '{{name}}': {
-                {{#each domains}}
-                    '{{domain}}': require('{{file}}').default,
-                {{/each}}
-            },
-        {{/each}}
-        };
-    },
-    contexts: {
-        {{#each contexts}}
-        '{{context}}': typeof window !== 'undefined' && require.context('{{modulePath}}', true, /{{filePattern}}/, '{{mode}}'),
-        {{/each}}
-    },
-    externals: () => {
-        if (typeof window !== 'undefined') {
-            {{#each externals}}
-            window['{{externalName}}'] = require('{{requirePath}}');
-            {{/each}}
-            {{#each externalAliases}}
-            window['{{defaultAlias}}'] = window['{{externalName}}'];
-            {{/each}}
-        }
-    },
-    listContexts: () => {
-        return {{{contextObj}}}
-    },
-    list: () => {
-        return {{{manifest}}};
-    },
-}
diff --git a/.core/manifest/templates/umd.hbs b/.core/manifest/templates/umd.hbs
deleted file mode 100644
index f1c9f5a0..00000000
--- a/.core/manifest/templates/umd.hbs
+++ /dev/null
@@ -1 +0,0 @@
-{{{this}}}
diff --git a/.core/pluginRegistration/index.js b/.core/pluginRegistration/index.js
deleted file mode 100644
index 37e4d919..00000000
--- a/.core/pluginRegistration/index.js
+++ /dev/null
@@ -1,29 +0,0 @@
-const facilities = {};
-
-export const pluginRegistration = {
-    setDeps: deps => (facilities.deps = deps),
-    setStore: ({ store, allReducers, middlewares }) => {
-        facilities.redux = {
-            store,
-            middlewares,
-            reducers: allReducers,
-        };
-    },
-};
-
-const noop = () => {};
-export default {
-    register: (registerCallback = noop) => {
-        // Get Parse API if possible
-        let Parse;
-        try {
-            Parse = require('appdir/api').default;
-        } catch (error) {}
-
-        registerCallback({
-            deps: facilities.deps(),
-            redux: facilities.redux,
-            Parse,
-        });
-    },
-};
diff --git a/.core/reactium-config.js b/.core/reactium-config.js
deleted file mode 100644
index b4cb91f5..00000000
--- a/.core/reactium-config.js
+++ /dev/null
@@ -1,330 +0,0 @@
-const fs = require('fs');
-const path = require('path');
-const rootPath = path.resolve(__dirname, '..');
-const gulpConfig = require('./gulp.config');
-
-const contextMode = () => {
-    if (
-        process.env.NODE_ENV !== 'development' ||
-        process.env.LAZY_GET_COMPONENTS === 'on'
-    ) {
-        return 'lazy-once';
-    }
-
-    return 'sync';
-};
-
-const defaultLibraryExternals = {
-    Reactium: {
-        externalName: '/sdk$/',
-        // relative to src/manifest.js
-        requirePath: 'reactium-core/sdk',
-        // to provide both es6 named exports and Reactium default alias
-        defaultAlias: 'Reactium',
-    },
-    react: {
-        externalName: 'react',
-        requirePath: 'react',
-        // to provide both es6 named exports and React default alias
-        defaultAlias: 'React',
-    },
-    redux: {
-        externalName: 'redux',
-        requirePath: 'redux',
-    },
-    'gsap/umd/TweenMax': {
-        externalName: '/^gsap.*$/',
-        requirePath: 'gsap/umd/TweenMax',
-    },
-    'reactium-core/easy-connect': {
-        externalName: '/easy-connect$/',
-        // relative to src/manifest.js
-        requirePath: 'reactium-core/easy-connect',
-    },
-    underscore: {
-        externalName: 'underscore',
-        requirePath: 'underscore',
-    },
-    'object-path': {
-        externalName: 'object-path',
-        requirePath: 'object-path',
-    },
-    semver: {
-        externalName: 'semver',
-        requirePath: 'semver',
-    },
-    moment: {
-        externalName: 'moment',
-        requirePath: 'moment',
-    },
-    classnames: {
-        externalName: 'classnames',
-        requirePath: 'classnames',
-    },
-    'prop-types': {
-        externalName: 'prop-types',
-        requirePath: 'prop-types',
-    },
-    'react-router-dom': {
-        externalName: 'react-router-dom',
-        requirePath: 'react-router-dom',
-    },
-    'redux-super-thunk': {
-        externalName: 'redux-super-thunk',
-        requirePath: 'redux-super-thunk',
-    },
-};
-
-const defaultManifestConfig = {
-    patterns: [
-        {
-            name: 'allActions',
-            type: 'actions',
-            pattern: /actions.jsx?$/,
-            ignore: /\.cli/,
-        },
-        {
-            name: 'allActionTypes',
-            type: 'actionTypes',
-            pattern: /actionTypes.jsx?$/,
-        },
-        {
-            name: 'allReducers',
-            type: 'reducers',
-            pattern: /reducers.jsx?$/,
-        },
-        {
-            name: 'allInitialStates',
-            type: 'state',
-            pattern: /state.jsx?$/,
-        },
-        {
-            name: 'allRoutes',
-            type: 'route',
-            pattern: /route.jsx?$/,
-        },
-        {
-            name: 'allServices',
-            type: 'services',
-            pattern: /services.jsx?$/,
-        },
-        {
-            name: 'allMiddleware',
-            type: 'middleware',
-            pattern: /middleware.jsx?$/,
-            ignore: /server\/middleware/,
-        },
-        {
-            name: 'allEnhancers',
-            type: 'enhancer',
-            pattern: /enhancer.jsx?$/,
-        },
-        {
-            name: 'allPlugins',
-            type: 'plugin',
-            pattern: /plugin.jsx?$/,
-        },
-    ],
-    sourceMappings: [
-        {
-            from: 'src/app/',
-            to: '',
-        },
-        {
-            from: '.core/',
-            to: 'reactium-core/',
-        },
-    ],
-    pluginExternals: defaultLibraryExternals,
-    contexts: {
-        components: {
-            modulePath: 'components',
-            filePattern: '.js?$',
-            mode: contextMode(),
-        },
-        common: {
-            modulePath: 'components/common-ui/',
-            filePattern: '.js?$',
-            mode: contextMode(),
-        },
-        toolkit: {
-            modulePath: 'toolkit',
-            filePattern: '.js?$',
-            mode: contextMode(),
-        },
-        core: {
-            modulePath: 'reactium-core/components',
-            filePattern: '.js?$',
-            mode: contextMode(),
-        },
-    },
-    umd: {
-        defaultLibraryExternals,
-        patterns: [
-            {
-                name: 'allUmdEntries',
-                type: 'umd',
-                pattern: /umd.js$/,
-                ignore: /assets/,
-            },
-            {
-                name: 'allUmdConfig',
-                type: 'config',
-                pattern: /umd-config.json$/,
-                ignore: /assets/,
-            },
-        ],
-        sourceMappings: [
-            {
-                from: 'src/',
-                to: path.resolve(rootPath, 'src') + '/',
-            },
-        ],
-        searchParams: {
-            extensions: /\.(js|json)$/,
-            exclude: [
-                /.ds_store/i,
-                /.core/i,
-                /.cli\//i,
-                /src\/assets/,
-                /src\/app\/toolkit/,
-            ],
-        },
-    },
-};
-
-let manifestConfigOverride = _ => _;
-if (fs.existsSync(`${rootPath}/manifest.config.override.js`)) {
-    manifestConfigOverride = require(`${rootPath}/manifest.config.override.js`);
-}
-const manifestConfig = manifestConfigOverride(defaultManifestConfig);
-
-/**
- * Use liberally for additional core configuration.
- * @type {Object}
- */
-module.exports = {
-    version: '3.1.0',
-    semver: '^3.0.0',
-    build: gulpConfig,
-    update: {
-        package: {
-            dependencies: {
-                remove: [
-                    '@babel/plugin-syntax-dynamic-import',
-                    '@babel/polyfill',
-                    'ajv',
-                    'beautify',
-                    'express-http-proxy',
-                    'htmltojsx',
-                    'js-beautify',
-                ],
-            },
-            devDependencies: {
-                remove: [
-                    'atomic-reactor-cli',
-                    'babel-cli',
-                    'babel-core',
-                    'babel-preset-env',
-                    'babel-preset-react',
-                    'babel-preset-stage-2',
-                    'gulp-install',
-                    'gulp-csso',
-                    'nodemon',
-                    'run-sequence',
-                    'vinyl-source-stream',
-                    'webpack-visualizer-plugin',
-                ],
-            },
-            scripts: {
-                add: {
-                    build: 'npm-run-all build:*',
-                    static: 'npm-run-all build:* && gulp static',
-                    local: 'gulp local',
-                    'local:ssr': 'gulp local:ssr',
-                },
-                remove: [
-                    'build:cleanup',
-                    'local-fe-start',
-                    'local-fe:gulp',
-                    'local-fe:babel-node',
-                    'local-ssr-start',
-                    'local-ssr:gulp',
-                    'local-ssr:babel-node',
-                    'react-redux',
-                    'static:build',
-                ],
-            },
-        },
-        files: {
-            add: [
-                {
-                    overwrite: true,
-                    version: '>=3.0.0',
-                    destination: '/Dockerfile',
-                    source: '/tmp/update/Dockerfile',
-                },
-                {
-                    overwrite: true,
-                    version: '>=2.3.16',
-                    destination: '/src/app/plugable',
-                    source: '/tmp/update/src/app/plugable',
-                },
-                {
-                    overwrite: false,
-                    version: '>=2.3.16',
-                    destination: '.stylelintrc',
-                    source: '/tmp/update/.stylelintrc',
-                },
-                {
-                    overwrite: false,
-                    version: '>=2.3.16',
-                    destination:
-                        '/src/app/components/common-ui/Icon/defaultProps.js',
-                    source:
-                        '/tmp/update/src/app/components/common-ui/Icon/defaultProps.js',
-                },
-                {
-                    overwrite: false,
-                    version: '>=2.3.16',
-                    destination: '/src/app/components/common-ui/Icon/index.js',
-                    source:
-                        '/tmp/update/src/app/components/common-ui/Icon/index.js',
-                },
-                {
-                    overwrite: true,
-                    version: '>=2.3.16',
-                    destination: '/src/app/components/common-ui/Icon/Feather',
-                    source:
-                        '/tmp/update/src/app/components/common-ui/Icon/Feather',
-                },
-                {
-                    overwrite: true,
-                    version: '>=2.3.16',
-                    destination: '/src/app/toolkit/icons/Feather',
-                    source: '/tmp/update/src/app/toolkit/icons/Feather',
-                },
-                {
-                    overwrite: true,
-                    version: '>=3.0.2',
-                    destination: '/.eslintrc',
-                    source: '/tmp/update/.eslintrc',
-                },
-                {
-                    overwrite: false,
-                    version: '>=3.0.3',
-                    destination: '/src/app/components/Fallback',
-                    source: '/tmp/update/src/app/components/Fallback',
-                },
-                {
-                    overwrite: false,
-                    version: '>=3.0.19',
-                    destination: '/jest.config.js',
-                    source: '/tmp/update/jest.config.js',
-                },
-            ],
-            remove: [],
-        },
-    },
-    manifest: manifestConfig,
-};
diff --git a/.core/redux/enhancer.js b/.core/redux/enhancer.js
deleted file mode 100644
index 98f6a57f..00000000
--- a/.core/redux/enhancer.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import DevTools from 'reactium-core/components/DevTools';
-
-export default (enhancers = [], isServer = false) => {
-    return [
-        {
-            name: 'devtools',
-            order: 1001,
-            enhancer:
-                process.env.NODE_ENV === 'development'
-                    ? DevTools.instrument()
-                    : _ => _,
-        },
-        ...enhancers,
-    ];
-};
diff --git a/.core/redux/middleware.js b/.core/redux/middleware.js
deleted file mode 100644
index 7839b532..00000000
--- a/.core/redux/middleware.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import thunk from 'redux-super-thunk';
-
-export default (middlewares = [], isServer = false) => {
-    let newMiddlewares = [
-        {
-            order: -1000,
-            name: 'super-thunk',
-            mw: thunk,
-        },
-    ];
-
-    if (!isServer && typeof window !== 'undefined') {
-        const { save: lsSave } = require('redux-local-persist');
-
-        newMiddlewares.push({
-            order: -1000,
-            name: 'local-persist',
-            mw: lsSave(),
-        });
-    }
-
-    return [...middlewares, ...newMiddlewares];
-};
diff --git a/.core/redux/storeCreator.js b/.core/redux/storeCreator.js
deleted file mode 100644
index eeb55244..00000000
--- a/.core/redux/storeCreator.js
+++ /dev/null
@@ -1,118 +0,0 @@
-import Reactium from 'reactium-core/sdk';
-import { createStore, combineReducers, compose } from 'redux';
-import { applyMiddleware } from 'redux-super-thunk';
-import { manifest } from 'dependencies';
-import _ from 'underscore';
-
-let store;
-
-/**
- * -----------------------------------------------------------------------------
- * @description Redux setup
- * -----------------------------------------------------------------------------
- */
-let localizeState = true;
-let initialState = {};
-if (typeof window !== 'undefined') {
-    if ('INITIAL_STATE' in window) {
-        initialState = window.INITIAL_STATE;
-        delete window.INITIAL_STATE;
-    }
-}
-
-// Make sure initial loaded state matches reducers
-const sanitizeInitialState = state =>
-    Object.keys(state)
-        .filter(s => s in manifest.allReducers)
-        .reduce(
-            (states, key) => ({
-                ...states,
-                [key]: state[key],
-            }),
-            {},
-        );
-
-const loadDependencyStack = (dependency, items, isServer) => {
-    return Object.keys(dependency).reduce(
-        (items, key) => dependency[key](items, isServer),
-        items,
-    );
-};
-
-const noop = cb => {};
-const storeCreator = async ({ server = false } = {}) => {
-    // Avoid replacing existing store.
-    if (store) return store;
-
-    // Load InitialState first from modules
-    let importedStates = manifest.allInitialStates;
-    initialState = {
-        ...sanitizeInitialState(importedStates),
-        ...initialState,
-    };
-
-    let middlewares = loadDependencyStack(manifest.allMiddleware, [], server);
-
-    // Get localized state and apply it
-    if (!server && typeof window !== 'undefined') {
-        const {
-            save: lsSave,
-            load: lsLoad,
-            clear: lsClear,
-        } = require('redux-local-persist');
-
-        if (middlewares.find(mw => mw.name === 'local-persist')) {
-            initialState = {
-                ...initialState,
-                ...sanitizeInitialState(
-                    lsLoad({ initialState: manifest.allInitialStates }),
-                ),
-            };
-        } else {
-            lsClear();
-        }
-    }
-
-    // Combine all Top-level reducers into one
-    let rootReducer = combineReducers(manifest.allReducers);
-
-    // add redux enhancers
-    let enhancers = _.sortBy(
-        loadDependencyStack(
-            manifest.allEnhancers,
-            [
-                {
-                    name: 'applyMiddleware',
-                    enhancer: applyMiddleware(
-                        ..._.sortBy(middlewares, 'order').map(({ mw }) => mw),
-                    ),
-                    order: 1000,
-                },
-            ],
-            server,
-        ),
-        'order',
-    ).map(({ enhancer }) => enhancer);
-
-    // Create the store
-    store = compose(...enhancers)(createStore)(rootReducer, initialState);
-
-    // Allow plugins the ability to interact with store directly
-    await Reactium.Hook.run('store-created', {
-        store,
-        allReducers: manifest.allReducers,
-        middlewares,
-    });
-
-    return store;
-};
-
-Reactium.Hook.register(
-    'store-create',
-    async (config, context) => {
-        context.store = await storeCreator(config);
-        console.log('Redux store created.');
-        return Promise.resolve();
-    },
-    Reactium.Enums.priority.highest,
-);
diff --git a/.core/sdk/enums.js b/.core/sdk/enums.js
deleted file mode 100644
index 7cdf6612..00000000
--- a/.core/sdk/enums.js
+++ /dev/null
@@ -1,13 +0,0 @@
-export default {
-    priority: {
-        highest: -1000,
-        high: -500,
-        neutral: 0,
-        low: 500,
-        lowest: 1000,
-    },
-    Plugin: {
-        prematureCallError: callName =>
-            `${callName} called before ready. Wait for Plugin.register() promise to be resolved.`,
-    },
-};
diff --git a/.core/sdk/hook/index.js b/.core/sdk/hook/index.js
deleted file mode 100644
index 7459e74b..00000000
--- a/.core/sdk/hook/index.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import uuid from 'uuid/v4';
-import _ from 'underscore';
-import op from 'object-path';
-import ActionSequence from 'action-sequence';
-import Enums from '../enums';
-
-const noop = () => Promise.resolve();
-
-const Hook = {
-    action: {
-        middleware: {},
-        install: {},
-        start: {},
-        uninstall: {},
-        activate: {},
-        deactivate: {},
-        warning: {},
-    },
-    silent: ['warning', 'install'],
-    chill: {
-        install: 0,
-    },
-};
-
-Hook.flush = name => op.set(Hook.action, name, {});
-
-Hook.unregister = id =>
-    Object.keys(Hook.action).forEach(action => {
-        op.del(Hook.action, `${action}.${id}`);
-    });
-
-Hook.register = (name, callback, order = Enums.priority.neutral, id) => {
-    id = id || uuid();
-    op.set(Hook.action, `${name}.${id}`, { id, order, callback });
-    return id;
-};
-
-Hook.list = () => Object.keys(Hook.action).sort();
-
-Hook.run = (name, ...params) => {
-    const context = { hook: name, params };
-
-    const actions = _.sortBy(
-        Object.values(op.get(Hook.action, `${name}`, {})),
-        'order',
-    ).reduce((acts, action) => {
-        const { callback = noop, id } = action;
-        acts[id] = () => callback(...params, context);
-        return acts;
-    }, {});
-
-    return ActionSequence({ actions }).then(() => {
-        return context;
-    });
-};
-
-export default Hook;
diff --git a/.core/sdk/index.js b/.core/sdk/index.js
deleted file mode 100644
index e85052d6..00000000
--- a/.core/sdk/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import Hook from './hook';
-import Plugin from './plugin';
-import Reducer from './reducer';
-import Middleware from './middleware';
-import Zone from './zone';
-import Routing from './routing';
-import Enums from './enums';
-import User from './user';
-import Roles from './roles';
-import Parse from 'appdir/api';
-
-const Cloud = Parse.Cloud;
-
-export default {
-    Hook,
-    Plugin,
-    Reducer,
-    Middleware,
-    Zone,
-    Routing,
-    Enums,
-    User,
-    Roles,
-    Cloud,
-};
diff --git a/.core/sdk/middleware/index.js b/.core/sdk/middleware/index.js
deleted file mode 100644
index 7d2986da..00000000
--- a/.core/sdk/middleware/index.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import Plugin from '../plugin';
-import { combineMiddlewares } from 'redux';
-import Enums from '../enums';
-import _ from 'underscore';
-
-const Middleware = {};
-const prematureCallError = Enums.Plugin.prematureCallError;
-
-Middleware.register = (name, mw, order = Enums.priority.neutral) => {
-    if (!Plugin.ready) {
-        console.error(new Error(prematureCallError('Middleware.register()')));
-        return;
-    }
-
-    if (name && typeof mw === 'function') {
-        Plugin.redux.middlewares.push({
-            name,
-            mw,
-            order,
-        });
-
-        Plugin.redux.store.replaceMiddlewares(
-            _.sortBy(Plugin.redux.middlewares, 'order').map(({ mw }) => mw),
-        );
-    }
-};
-
-Middleware.unregister = removeName => {
-    if (!Plugin.ready) {
-        console.error(new Error(prematureCallError('Middleware.unregister()')));
-        return;
-    }
-
-    if (removeName) {
-        const mw = Plugin.redux.middlewares.find(
-            ({ name }) => name === removeName,
-        );
-
-        if (mw) {
-            Plugin.redux.middlewares = Plugin.redux.middlewares.filter(
-                ({ name }) => name !== removeName,
-            );
-            Plugin.redux.store.replaceMiddlewares(
-                _.sortBy(Plugin.redux.middlewares, 'order').map(({ mw }) => mw),
-            );
-        }
-    }
-};
-
-export default Middleware;
diff --git a/.core/sdk/plugin/index.js b/.core/sdk/plugin/index.js
deleted file mode 100644
index b7a1e8ec..00000000
--- a/.core/sdk/plugin/index.js
+++ /dev/null
@@ -1,99 +0,0 @@
-import Hook from '../hook';
-import _ from 'underscore';
-import Enums from '../enums';
-
-const plugins = {};
-const Plugin = {};
-const prematureCallError = Enums.Plugin.prematureCallError;
-
-Plugin.ready = false;
-
-Plugin.init = ID => {
-    if (!Plugin.ready) {
-        console.error(new Error(prematureCallError('Plugin.init()')));
-        return;
-    }
-
-    if (ID && ID in plugins) {
-        plugins[ID].callback();
-    } else {
-        _.sortBy(Object.values(plugins), 'order').forEach(({ callback }) =>
-            callback(),
-        );
-    }
-    return Promise.resolve();
-};
-
-Plugin.register = (ID, order = Enums.priority.neutral) => {
-    if (ID) {
-        return new Promise(resolve => {
-            plugins[ID] = {
-                callback: resolve,
-                order,
-            };
-
-            if (Plugin.ready) Plugin.init(ID);
-        });
-    }
-
-    return Promise.reject(new Error('No ID provided for plugin.'));
-};
-
-Plugin.unregister = ID => {
-    if (Plugin.ready) {
-        console.error(
-            new Error(
-                'Plugin.unregister() called too late. Reduce the order of your Plugin.register() call.',
-            ),
-        );
-        return;
-    }
-
-    if (ID && ID in plugins) {
-        delete plugins[ID];
-    }
-};
-
-Plugin.addComponent = plugin => {
-    if (!Plugin.ready) {
-        console.error(new Error(prematureCallError('Plugin.addComponent()')));
-        return;
-    }
-
-    Plugin.redux.store.dispatch(Plugin.deps.actions.Plugable.addPlugin(plugin));
-};
-
-Plugin.removeComponent = ID => {
-    if (!Plugin.ready) {
-        console.error(
-            new Error(prematureCallError('Plugin.removeComponent()')),
-        );
-        return;
-    }
-
-    Plugin.redux.store.dispatch(Plugin.deps.actions.Plugable.removePlugin(ID));
-};
-
-export default Plugin;
-
-Hook.register('plugin-init', Plugin.init, Enums.priority.highest);
-
-Hook.register(
-    'plugin-dependencies',
-    ({ deps }) => {
-        Plugin.deps = deps;
-        Plugin.ready = true;
-        Hook.run('plugin-init');
-        return Promise.resolve();
-    },
-    Enums.priority.high,
-);
-
-Hook.register(
-    'store-created',
-    redux => {
-        Plugin.redux = redux;
-        return Promise.resolve();
-    },
-    Enums.priority.high,
-);
diff --git a/.core/sdk/reducer/index.js b/.core/sdk/reducer/index.js
deleted file mode 100644
index 2ec3a0fc..00000000
--- a/.core/sdk/reducer/index.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import Plugin from '../plugin';
-import { combineReducers } from 'redux';
-import Enums from '../enums';
-
-const Reducer = {};
-const prematureCallError = Enums.Plugin.prematureCallError;
-
-Reducer.register = (ID, reducer) => {
-    if (!Plugin.ready) {
-        console.error(new Error(prematureCallError('Reducer.register()')));
-        return;
-    }
-
-    if (ID) {
-        Plugin.redux.allReducers[ID] = reducer;
-        Plugin.redux.store.replaceReducer(
-            combineReducers({ ...Plugin.redux.allReducers }),
-        );
-    }
-};
-
-Reducer.unregister = ID => {
-    if (!Plugin.ready) {
-        console.error(new Error(prematureCallError('Reducer.unregister()')));
-        return;
-    }
-
-    if (ID in Plugin.redux.allReducers) {
-        delete Plugin.redux.allReducers[ID];
-        Plugin.redux.store.replaceReducer(
-            combineReducers({ ...Plugin.redux.allReducers }),
-        );
-    }
-};
-
-export default Reducer;
diff --git a/.core/sdk/roles/index.js b/.core/sdk/roles/index.js
deleted file mode 100644
index fcfa8d5d..00000000
--- a/.core/sdk/roles/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-const Roles = {};
-
-export default Roles;
diff --git a/.core/sdk/routing/index.js b/.core/sdk/routing/index.js
deleted file mode 100644
index 2b73b802..00000000
--- a/.core/sdk/routing/index.js
+++ /dev/null
@@ -1,64 +0,0 @@
-import Hook from '../hook';
-import uuid from 'uuid/v4';
-import _ from 'underscore';
-import moment from 'moment';
-
-class Routing {
-    loaded = false;
-    updated = null;
-    routes = [];
-    NotFound = () => null;
-    subscriptions = {};
-
-    load = async () => {
-        if (this.loaded) return;
-        const { routes = [] } = await Hook.run('routes-init');
-        const { NotFound } = await Hook.run('404-component');
-        this.loaded = true;
-        this.routes = routes.map(route => {
-            route.id = uuid();
-            return route;
-        });
-
-        this.NotFound = NotFound;
-        this._update();
-        console.log('Initializing routes.');
-    };
-
-    subscribe(cb) {
-        if (typeof cb === 'function') {
-            const id = uuid();
-            this.subscriptions[id] = cb;
-            return () => {
-                delete this.subscriptions[id];
-            };
-        }
-    }
-
-    register(route = {}) {
-        route.id = uuid();
-        this.routes.push(route);
-        this._update();
-        return route.id;
-    }
-
-    unregister(id) {
-        this.routes = this.routes.filter(route => id !== route.id);
-        this._update();
-    }
-
-    _update() {
-        this.updated = moment().format('HH:mm:ss');
-        Object.values(this.subscriptions).forEach(cb => cb());
-    }
-
-    get() {
-        return _.sortBy(this.routes, 'order').concat([
-            { id: 'NotFound', component: this.NotFound, order: 1000 },
-        ]);
-    }
-}
-
-const routing = new Routing();
-
-export default routing;
diff --git a/.core/sdk/user/index.js b/.core/sdk/user/index.js
deleted file mode 100644
index fcb41172..00000000
--- a/.core/sdk/user/index.js
+++ /dev/null
@@ -1,216 +0,0 @@
-import Hook from '../hook';
-import _ from 'underscore';
-import op from 'object-path';
-import Parse from 'appdir/api';
-
-const User = { Role: {} };
-
-/**
- * ## User Hooks
- * ### user.auth
- * Triggered after the user has successfully authenticated. Parameters: `user`.
- * ### user.before.logout
- * Triggered before the user has been logged out. Parameters: `user`.
- * ### user.after.logout
- * Triggered after the user has successfully logged out. Parameters: `user`.
- * ### user.before.register
- * Triggered before the new user is created. Parameters: `user`.
- * ### user.after.register
- * Triggered after the new user has been created. Parameters: `user`.
- * ### user.find
- * Triggered after successfully finding a user. Parameters: `results`.
- * ### user.can
- * Triggered after the capabilities have been checked for a user. Parameters: `capabilities`, `user`.
- * ### user.role.add
- * Triggered after a user has been added to a role. Parameters: `role`, `user`.
- * ### user.role.remove
- * Triggered after a user has been removed from a role. Parameters: `role`, `user`.
- */
-
-/**
- * @function User.auth(username, password)
- * @description Authenticate with the Actinium server.
- * @param username {String}
- * @param password {String}
- * @returns {Promise}
- */
-User.auth = (username, password) =>
-    Parse.User.logIn(username, password)
-        .then(u => u.fetch())
-        .then(u => u.toJSON())
-        .then(async u => {
-            await Hook.run('user.auth', u);
-            return u;
-        });
-
-/**
- * @function User.login(username, password)
- * @description Alias of User.auth()
- * @see User.auth()
- */
-User.logIn = User.auth;
-
-/**
- * @function User.logOut()
- * @description Invalidate the current user.
- * @returns {Promise}
- */
-User.logOut = async () => {
-    const u = Uesr.current();
-
-    await Hook.run('user.before.logout', u);
-
-    try {
-        return Parse.User.logOut().then(async () => {
-            await Hook.run('user.after.logout', u);
-            return u;
-        });
-    } catch (err) {
-        return Promise.resolve();
-    }
-};
-
-/**
- * @function User.current()
- * @description Retrieve the current authenticated user.
- * @returns {Object}
- */
-User.current = () => {
-    const u = Parse.User.current();
-    return u ? u.toJSON() : {};
-};
-
-/**
- * @function User.register({...params})
- * @description Asyncronously create a new user.
- * @param params New user object.
- * @prop params.username {String} [required] Unique username used when authenticating.
- * @prop params.password {String} [required] Password used when authenticating.
- * @prop params.confirm {String} [required] Password confirmation.
- * @prop params.email {String} [required] Email address used when resetting password and for system messaging.
- * @returns {Object} The new user object.
- */
-User.register = async user => {
-    await Hook.run('user.before.register', user);
-    const newUser = await Parse.Cloud.run('user-save', user);
-    await Hook.run('user.after.register', newUser);
-    return newUser;
-};
-
-/**
- * @function User.find({ objectId, username, email })
- * @description Asyncronously find a user.
- * @param params Query parameters.
- * @property params.email {String} Search by the email field.
- * @property params.userId {String} Search by the objectId field.
- * @property params.username {String} Search by the username field.
- * @returns {Object} The user object.
- */
-User.find = async ({ userId, username, email }) => {
-    const current = User.current();
-
-    const u = await Parse.Cloud.run('user-find', {
-        objectId: userId,
-        username,
-        email,
-    });
-
-    if (op.get(u, 'objectId') === op.get(current, 'objectId')) {
-        await Parse.User.current().fetch();
-    }
-
-    if (u) {
-        await Hook.run('user.find', u);
-    }
-
-    return u;
-};
-
-/**
- * @function User.isRole(role, userId)
- * @description Asyncronously find out if a user is a member of a specific role.
- * @param role {String} The role to check for.
- * @param userId {String} [optional] The objectId of the user. If empty the current user is used.
- * @erturns {Boolean}
- */
-User.isRole = async (role, userId) => {
-    const u = userId ? await User.find({ objectId: userId }) : User.current();
-
-    if (!u) {
-        return Promise.reject('invalid userId');
-    }
-
-    return op.has(u, ['roles', role]);
-};
-
-/**
- * @function User.can(capabilities, userId)
- * @description Asyncronously find out if a user has a set of capabilities.
- * @param capabilities {String|Array} The capabilities to check for. **Note: User must have all of the capabilities you are checking for.
- * @param userId {String} [optional] The objectId of the user. If empty the current user is used.
- * @erturns {Boolean}
- */
-User.can = async (caps, userId) => {
-    caps = _.isSring(caps) ? String(caps).replace(' ', '') : caps;
-    caps = Array.isArray(caps) ? caps : caps.split(',');
-    const u = userId ? await User.find({ objectId: userId }) : User.current();
-
-    if (!u) {
-        return Promise.reject('invalid userId');
-    }
-
-    if (op.has(u, ['roles', 'super-admin'])) {
-        return true;
-    }
-
-    await Hook.run('user.can', caps, u);
-
-    return (
-        _.intersection(caps, op.get(u, 'capabilities', [])).length ===
-        caps.length
-    );
-};
-
-/**
- * @function User.Role.add(role, userId)
- * @description Asyncronously add a user to a role.
- * @param role {String} The role name. Example: 'super-admin'.
- * @param userId {String} [optional] The objectId of the user. If empty the current user is used.
- * @returns {Object} The updated user object.
- */
-User.Role.add = async (role, userId) => {
-    const u = userId || op.get(User.current(), 'objectId');
-    if (!u) {
-        return Promise.reject('invalid userId');
-    }
-
-    return Parse.Cloud.run('role-user-add', { role, user: u })
-        .then(() => User.find({ userId: u }))
-        .then(async u => {
-            await Hook.run('user.role.add', role, u);
-            return u;
-        });
-};
-
-/**
- * @function User.Role.remove(role, userId)
- * @description Asyncronously remove a user to a role.
- * @param role {String} The role name. Example: 'super-admin'.
- * @param userId {String} [optional] The objectId of the user. If empty the current user is used.
- * @returns {Object} The updated user object.
- */
-User.Role.remove = (role, userId) => {
-    const u = userId || op.get(User.current(), 'objectId');
-    if (!u) {
-        return Promise.reject('invalid userId');
-    }
-
-    return Parse.Cloud.run('role-user-remove', { role, user: u })
-        .then(() => User.find({ userId: u }))
-        .then(async u => {
-            await Hook.run('user.role.remove', role, u);
-            return u;
-        });
-};
-
-export default User;
diff --git a/.core/sdk/zone/index.js b/.core/sdk/zone/index.js
deleted file mode 100644
index ff9ceb32..00000000
--- a/.core/sdk/zone/index.js
+++ /dev/null
@@ -1,107 +0,0 @@
-import Plugin from '../plugin';
-import { combineZones } from 'redux';
-import Enums from '../enums';
-import op from 'object-path';
-
-const Zone = {};
-const prematureCallError = Enums.Plugin.prematureCallError;
-const types = {
-    mapper: 'Mapper',
-    filter: 'Filter',
-    sort: 'Sort',
-};
-
-const addControl = (
-    type,
-    name,
-    zone,
-    argument,
-    order = Enums.priority.neutral,
-) => {
-    const controlType = `plugin${types[type]}s`;
-
-    if (!Plugin.ready) {
-        console.error(
-            new Error(prematureCallError(`Zone.add${types[type]}()`)),
-        );
-        return;
-    }
-
-    const controls = op.get(
-        Plugin.redux.store.getState(),
-        ['Plugable', 'controls', name],
-        {
-            pluginMappers: [],
-            pluginFilters: [],
-            pluginSorts: [],
-        },
-    );
-
-    if (name && zone && argument) {
-        controls[controlType].push({
-            zone,
-            [type]: argument,
-            order,
-        });
-
-        Plugin.redux.store.dispatch(
-            Plugin.deps.actions.Plugable.addControls({
-                name,
-                controls,
-            }),
-        );
-    }
-};
-
-const removeControl = (type, name, zone) => {
-    const controlType = `plugin${types[type]}s`;
-
-    if (!Plugin.ready) {
-        console.error(
-            new Error(prematureCallError(`Zone.remove${types[type]}()`)),
-        );
-        return;
-    }
-
-    const controls = op.get(
-        Plugin.redux.store.getState(),
-        ['Plugable', 'controls', name],
-        {
-            pluginMappers: [],
-            pluginFilters: [],
-            pluginSorts: [],
-        },
-    );
-
-    if (name && zone) {
-        controls[controlType] = controls[controlType].filter(
-            ({ zone: controlZone }) => zone !== controlZone,
-        );
-
-        Plugin.redux.store.dispatch(
-            Plugin.deps.actions.Plugable.addControls({
-                name,
-                controls,
-            }),
-        );
-    }
-};
-
-['mapper', 'filter', 'sort'].forEach(type => {
-    Zone[`add${types[type]}`] = (...params) => {
-        addControl(type, ...params);
-    };
-    Zone[`remove${types[type]}`] = (...params) => {
-        removeControl(type, ...params);
-    };
-});
-
-Zone.addSort = (
-    name,
-    zone,
-    sortBy = 'order',
-    reverse = false,
-    order = Enums.priority.neutral,
-) => addControl('sort', name, zone, { sortBy, reverse }, order);
-
-export default Zone;
diff --git a/.core/server/middleware/placeholder.js b/.core/server/middleware/placeholder.js
deleted file mode 100644
index dfdcd223..00000000
--- a/.core/server/middleware/placeholder.js
+++ /dev/null
@@ -1,104 +0,0 @@
-const express = require('express');
-const router = express.Router();
-const xss = require('xss');
-
-const placeholder = (req, res) => {
-    const { width = 640, height = 480, filename = '' } = req.params;
-
-    const {
-        title = '',
-        pattern = '#f7f7f7',
-        color = '#fff',
-        background = '#444',
-        notes = '',
-        region = '0,0,100,100',
-        content = 'none',
-    } = req.query;
-
-    const [
-        xPercent = 0,
-        yPercent = 0,
-        widthPercent = 100,
-        heightPercent = 100,
-    ] = (region || []).split(',');
-
-    const useTitle = title === '' ? filename : title;
-
-    res.set('Content-Type', 'image/svg+xml');
-    res.send(`<?xml version="1.0" standalone="no"?>
-    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="${xss(
-        width
-    )}" height="${xss(height)}" viewBox="0 0 ${xss(width)} ${xss(
-        height
-    )}" font-family="sans-serif"  preserveAspectRatio="none">
-    <mask id="mask">
-        <rect width="100%" height="100%" fill="#444"/>
-        <rect x="${xss(xPercent)}%" y="${xss(yPercent)}%" width="${xss(
-        widthPercent
-    )}%" height="${xss(heightPercent)}%" fill="#fff"/>
-    </mask>
-<pattern id="pattern" x="50%" y="50%" width="40" height="40" patternUnits="userSpaceOnUse">
-            <rect width="100%" height="100%"/>
-    <path fill="#fff" d="M0,0L50,50V40L10,0zM0,30V40H10M30,0L50,20V30L20,0zM0,10L40,50H30L0,20" />
-</pattern>
-<pattern id="mountains" width="100" height="11"  patternUnits="userSpaceOnUse">
-    <polygon fill="black" points="0,11.1 6.7,4.4 7.2,4.9 8.9,3.3 12.3,6.7 13.3,5.7 16.5,8.9 18.6,6.8 20.1,8.3 23.5,5 26.4,7.9 33.2,1.2 38.2,6.2 39.4,4.9 45.2,10.7 50.9,5.1 53.4,7.6 57.7,3.3 58.5,4.1 62.6,0 64.9,2.3 66,1.1 74.3,9.4 78.9,4.8 80.7,6.5 85.8,1.4 89.5,5.1 91.8,2.9 100,11.1 "/>
-</pattern>
-    <symbol id="male" viewBox="0 0 100 100" overflow="visible">
-        <circle cx="50" cy="50" r="30"/>
-        <rect x="10" y="85" width="80" height="100" rx="30"/>
-        <rect x="23" y="160" width="24" height="120" rx="10"/>
-        <rect x="53" y="160" width="24" height="120" rx="10"/>
-    </symbol>
-    <symbol id="female" viewBox="0 0 100 100" overflow="visible">
-        <use xlink:href="#male" />
-        <path d="M50,85L95,200H5"/>
-    </symbol>
-
-    <symbol id="landscape" viewBox="0 0 100 100" overflow="visible">
-        <circle cx="50" cy="50" r="30" fill="white"/>
-        <rect transform="translate(-2140,50) scale(8)"  width="4000" height="11" fill="url(#mountains)"/>
-<rect x="-2140" y="137" width="32000" height="5000%"  fill="black"/>
-    </symbol>
-<rect width="100%" height="100%" fill="${xss(background)}" />
-    <svg x="${xss(xPercent)}%" y="${xss(yPercent)}%" width="${xss(
-        widthPercent
-    )}%" height="${xss(heightPercent)}%" overflow="visible" opacity="0.25" >
-    <use xlink:href="#${xss(content)}"/>
-</svg>
-<rect mask="url(#mask)" width="100%" height="100%" fill="url(#pattern)" opacity=".05" />
-<rect width="100%" height="100%" fill="none" stroke="${xss(
-        color
-    )}" stroke-opacity="0.7" stroke-width="2%" />
-<svg viewBox="0 0 60 100">
-    <text transform="translate(30,44)" text-anchor="middle" alignment-baseline="central" font-size="12" fill="${xss(
-        color
-    )}">
-        <tspan x="0">${xss(
-            width
-        )}</tspan><tspan x="0" dy="9">×</tspan><tspan x="0" dy="11">${xss(
-        height
-    )}</tspan>
-    </text>
-</svg>
-<svg height="20%" viewBox="0 0 200 40" preserveAspectRatio="xMidYMin" opacity=".5" font-size="10" overflow="visible">
-    <text transform="translate(100,37)" text-anchor="middle" fill="${xss(
-        color
-    )}">
-        <tspan x="0">${xss(useTitle)}</tspan>
-    </text>
-</svg>
-<svg y="80%" height="20%" viewBox="0 0 200 40" preserveAspectRatio="xMidYMax" font-size="10" opacity=".5" overflow="visible">
-    <text transform="translate(100,11)" text-anchor="middle" fill="${xss(
-        color
-    )}">
-        <tspan x="0">${xss(notes)}</tspan>
-    </text>
-</svg>
-</svg>`);
-};
-
-router.get('/placeholder/:width/:height/:filename', placeholder);
-router.get('/placeholder/:width/:height', placeholder);
-
-module.exports = router;
diff --git a/.core/server/renderer/feo.js b/.core/server/renderer/feo.js
deleted file mode 100644
index 7cc193cd..00000000
--- a/.core/server/renderer/feo.js
+++ /dev/null
@@ -1,2 +0,0 @@
-module.exports = template => (req, res, context) =>
-    Promise.resolve(template(req, res, context));
diff --git a/.core/server/renderer/index.js b/.core/server/renderer/index.js
deleted file mode 100644
index ae834ba3..00000000
--- a/.core/server/renderer/index.js
+++ /dev/null
@@ -1,152 +0,0 @@
-const normalizeAssets = assets => (Array.isArray(assets) ? assets : [assets]);
-const globby = require('globby');
-const path = require('path');
-const fs = require('fs');
-const semver = require('semver');
-const op = require('object-path');
-
-const isToolkit = str => {
-    let exp = /^\/toolkit/i;
-    return exp.test(str);
-};
-
-const isMain = str => {
-    let exp = /^\/main/i;
-    return exp.test(str);
-};
-
-const styles = (req, res, includeSheets = [], excludeSheets = []) => {
-    let sarr = [];
-    const theme = op.get(
-        req,
-        'query.theme',
-        process.env.DEFAULT_THEME || 'style',
-    );
-    const defaultStylesheet = `${theme}.css`;
-
-    let styles = [];
-    let publicDir =
-        process.env.PUBLIC_DIRECTORY || path.resolve(process.cwd(), 'public');
-    let styleDir = path.normalize(path.join(publicDir, '/assets/style'));
-    let includes = [defaultStylesheet].concat(includeSheets);
-    let excludes = ['core.css', 'toolkit.css'].concat(excludeSheets);
-
-    if (isToolkit(req.path)) {
-        const p = path.normalize(path.join(styleDir, 'core.css'));
-        styles.push(
-            `<link rel="stylesheet" href="${p.split(publicDir).join('')}">`,
-        );
-    } else {
-        styles = styles.concat(
-            fs
-                .readdirSync(styleDir)
-                .map(item => {
-                    const p = path.normalize(path.join(styleDir, item));
-                    if (fs.statSync(p).isFile()) {
-                        return `<link rel="stylesheet" href="${p
-                            .split(publicDir)
-                            .join('')}">`;
-                    }
-                    return false;
-                })
-                .filter(item => {
-                    if (
-                        item &&
-                        includes.find(search => item.indexOf(search) >= 0)
-                    ) {
-                        return true;
-                    }
-
-                    if (
-                        !item ||
-                        excludes.find(search => item.indexOf(search) >= 0)
-                    ) {
-                        return false;
-                    }
-                }),
-        );
-    }
-
-    return styles.join('\n\t');
-};
-
-const prioritize = scriptName => (a, b) => {
-    if (a === scriptName) return -1;
-    if (b === scriptName) return 1;
-    return 0;
-};
-
-const scripts = (req, res) => {
-    const scriptPathBase =
-        process.env.PUBLIC_DIRECTORY || `${process.cwd()}/public`;
-
-    let scriptTags = globby
-        .sync(path.resolve(scriptPathBase, 'assets', 'js', '*main.js'))
-        .map(script => path.parse(script).base)
-        .map(script => `<script src="/assets/js/${script}"></script>`)
-        .join('\n');
-
-    if (process.env.NODE_ENV === 'development') {
-        const assetsByChunkName = res.locals.webpackStats.toJson()
-            .assetsByChunkName;
-
-        scriptTags = Object.values(assetsByChunkName)
-            .map(chunk => {
-                return normalizeAssets(chunk).filter(path =>
-                    path.endsWith('.js'),
-                );
-            })
-            .reduce((files, chunk) => files.concat(chunk), [])
-            .filter(file => /main.js$/.test(file))
-            .map(path => `<script src="/${path}"></script>`)
-            .join('\n');
-    }
-
-    return scriptTags;
-};
-
-const sanitizeTemplateVersion = version => {
-    if (semver.valid(version)) {
-        return version;
-    }
-    return semver.coerce(version);
-};
-
-export default (req, res, context) => {
-    req.scripts = scripts(req, res);
-    req.styles = styles(req, res);
-
-    let template,
-        renderMode = isSSR ? 'ssr' : 'feo';
-
-    const { semver: coreSemver } = require(`${rootPath}/.core/reactium-config`);
-    const coreTemplate = require(`../template/${renderMode}`);
-
-    template = coreTemplate.template;
-
-    if (fs.existsSync(`${rootPath}/src/app/server/template/${renderMode}.js`)) {
-        let localTemplate = require(`${rootPath}/src/app/server/template/${renderMode}`);
-        let templateVersion = sanitizeTemplateVersion(localTemplate.version);
-
-        // Check to see if local template should be compatible with core
-        if (semver.satisfies(templateVersion, coreSemver)) {
-            template = localTemplate.template;
-
-            const { includeSheets, excludeSheets } = localTemplate;
-
-            req.styles = styles(req, res, includeSheets, excludeSheets);
-
-            // Accept local styles
-            req.styles =
-                op.has(localTemplate, 'styles') && !isToolkit(req.path)
-                    ? localTemplate.styles(req)
-                    : req.styles;
-        } else {
-            console.warn(
-                `${rootPath}/src/app/server/template/${renderMode}.js is out of date, and will not be used. Use 'arcli server template' command to update.`,
-            );
-        }
-    }
-
-    return require(`./${renderMode}`)(template)(req, res, context);
-};
diff --git a/.core/server/renderer/ssr.js b/.core/server/renderer/ssr.js
deleted file mode 100644
index 4c48b34f..00000000
--- a/.core/server/renderer/ssr.js
+++ /dev/null
@@ -1,79 +0,0 @@
-import React from 'react';
-import { Provider } from 'react-redux';
-import { Helmet } from 'react-helmet';
-import { renderToString } from 'react-dom/server';
-import querystring from 'querystring';
-import op from 'object-path';
-import { matchRoutes } from 'react-router-config';
-import Reactium from 'reactium-core/sdk';
-import 'reactium-core/redux/storeCreator';
-import { PlugableProvider } from 'reactium-core/components/Plugable';
-import Router from 'reactium-core/components/Router/server';
-import 'reactium-core/components/Router/reactium-hooks';
-
-const app = {};
-app.dependencies = global.dependencies = require('dependencies').default;
-
-const renderer = template => async (req, res, context) => {
-    await Reactium.Hook.run('dependencies-load');
-    await Reactium.Routing.load();
-    const routes = Reactium.Routing.get();
-    const { store } = await Reactium.Hook.run('store-create', { server: true });
-    const [url] = req.originalUrl.split('?');
-    const matches = matchRoutes(routes, url);
-
-    try {
-        let [match] = matches;
-        if (matches.length > 1) {
-            match = matches.find(match => match.isExact);
-        }
-
-        const matchedRoute = op.get(match, 'route', {});
-        const route = {
-            ...matchedRoute,
-            params: op.get(match, 'match.params', {}),
-            query: req.query ? req.query : {},
-        };
-
-        // Check for 404
-        context.notFound = !matches.length || !('path' in matchedRoute);
-
-        // Wait for loader or go ahead and render on error
-        console.log('[Reactium] Loading page data...');
-        const data = await ('load' in route && typeof route.load === 'function'
-            ? Promise.resolve(route.load(route.params, route.query)).then(
-                  thunk => thunk(store.dispatch, store.getState, store),
-              )
-            : Promise.resolve());
-
-        await Reactium.Hook.run(
-            'data-loaded',
-            data,
-            route,
-            route.params,
-            route.query,
-        );
-        console.log('[Reactium] Page data loading complete.');
-    } catch (error) {
-        console.error('[Reactium] Page data loading error.', error);
-    }
-
-    const body = renderToString(
-        <Provider store={store}>
-            <PlugableProvider {...app.dependencies().plugableConfig}>
-                <Router
-                    server={true}
-                    location={req.originalUrl}
-                    context={context}
-                    routes={routes}
-                />
-            </PlugableProvider>
-        </Provider>,
-    );
-
-    const helmet = Helmet.renderStatic();
-
-    return template(body, helmet, store, req, res);
-};
-
-module.exports = template => renderer(template);
diff --git a/.core/server/router.js b/.core/server/router.js
deleted file mode 100644
index fc1137b9..00000000
--- a/.core/server/router.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import express from 'express';
-import renderer from './renderer';
-import fs from 'fs';
-import path from 'path';
-import httpAuth from 'http-auth';
-
-const router = express.Router();
-
-// Conditional basic auth
-const basicAuthFile = path.resolve(process.env.BASIC_AUTH_FILE || '.htpasswd');
-if (fs.existsSync(basicAuthFile)) {
-    router.use((req, res, next) => {
-        if ( req.url !== '/elb-healthcheck' ) {
-            let basic    = httpAuth.basic({
-                realm    : "Reactium.",
-                file     : basicAuthFile
-            });
-
-            httpAuth.connect(basic)(req, res, next);
-        } else {
-            next();
-        }
-    })
-}
-
-router.get('/elb-healthcheck', (req, res) => res.send('Up'));
-
-process.on('unhandledRejection', (reason, p) => {
-  console.log('[Reactium] Unhandled Rejection at: Promise', p, 'reason:', reason);
-  // application specific logging, throwing an error, or other logic here
-});
-
-router.get('*', (req, res) => {
-    const context = {};
-
-    renderer(req, res, context)
-    .then(content => {
-        if (context.url) {
-            console.log('[Reactium] Redirecting to ', context.url);
-            return res.redirect(302, context.url);
-        }
-
-        let status = 200;
-        if (/^\/404/.test(req.path) || context.notFound ) {
-            status = 404;
-        }
-
-        res.status(status).send(content);
-    })
-    .catch(err => {
-        console.error('[Reactium] React SSR Error', err);
-        res.status(500).send('[Reactium] Internal Server Error');
-    });
-});
-
-export default router;
diff --git a/.core/server/template/feo.js b/.core/server/template/feo.js
deleted file mode 100644
index 2c5eb32e..00000000
--- a/.core/server/template/feo.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import serialize from 'serialize-javascript';
-
-module.exports = {
-    version: '%TEMPLATE_VERSION%',
-    template: req => {
-        return `<!DOCTYPE html>
-        <html>
-            <head>
-                <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-                ${req.styles}
-            </head>
-            <body>
-                <Component type="DevTools"></Component>
-                <div id="router"></div>
-
-                <script>
-                    window.ssr = false;
-                    window.defines = ${serialize(defines)};
-                    window.restAPI = '/api';
-                    window.parseAppId = '${parseAppId}';
-                </script>
-                ${req.scripts}
-            </body>
-        </html>`;
-    }
-};
diff --git a/.core/server/template/ssr.js b/.core/server/template/ssr.js
deleted file mode 100644
index a1e08cb0..00000000
--- a/.core/server/template/ssr.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import serialize from 'serialize-javascript';
-
-module.exports = {
-    version: '%TEMPLATE_VERSION%',
-    template: (content, helmet, store, req, res) => {
-        return `<!DOCTYPE html>
-        <html ${helmet.htmlAttributes.toString()}>
-            <head>
-                <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-                ${helmet.title.toString()}
-                ${helmet.meta.toString()}
-                ${helmet.link.toString()}
-                ${req.styles}
-            </head>
-            <body ${helmet.bodyAttributes.toString()}>
-                <Component type="DevTools"></Component>
-                <div id="router">${content}</div>
-
-                <script>
-                    window.ssr = true;
-                    window.defines = ${serialize(defines)};
-                    window.INITIAL_STATE = ${serialize(store.getState())}
-                    window.restAPI = '/api';
-                    window.parseAppId = '${parseAppId}'
-                </script>
-                ${req.scripts}
-            </body>
-        </html>`;
-    }
-};
diff --git a/.core/umd.webpack.config.js b/.core/umd.webpack.config.js
deleted file mode 100644
index 88487360..00000000
--- a/.core/umd.webpack.config.js
+++ /dev/null
@@ -1,67 +0,0 @@
-const fs = require('fs');
-const path = require('path');
-const env = process.env.NODE_ENV || 'development';
-const rootPath = path.resolve(__dirname, '..');
-const CompressionPlugin = require('compression-webpack-plugin');
-
-module.exports = umd => {
-    const plugins = [];
-    if (env === 'production') {
-        plugins.push(new CompressionPlugin());
-    }
-
-    const config = {
-        mode: env,
-        entry: umd.entry,
-        devtool: 'inline-source-map',
-        output: {
-            path: umd.outputPath,
-            filename: umd.outputFile,
-            library: umd.libraryName,
-            libraryTarget: 'umd',
-            globalObject: umd.globalObject,
-        },
-        module: {
-            rules: [
-                {
-                    test: /(\.jsx|\.js)$/,
-                    loader: 'babel-loader',
-                    options: {
-                        presets: ['@babel/preset-env', '@babel/react'],
-                        plugins: [
-                            [
-                                '@babel/plugin-proposal-class-properties',
-                                {
-                                    loose: true,
-                                },
-                            ],
-                            ['module-resolver'],
-                        ],
-                    },
-                },
-            ],
-        },
-        externals: Object.entries(umd.externals).reduce(
-            (externals, [key, value]) => {
-                // regex key
-                if (/^\/.*\/i?$/.test(key)) {
-                    const args = [key.replace(/^\//, '').replace(/\/i?$/, '')];
-                    if (/i$/.test(key)) args.push('i');
-                    externals.push(new RegExp(...args));
-                    return externals;
-                }
-                externals.push(value);
-                return externals;
-            },
-            [],
-        ),
-        plugins,
-    };
-
-    let override = (umd, config) => config;
-    if (fs.existsSync(`${rootPath}/umd.webpack.override.js`)) {
-        override = require(`${rootPath}/umd.webpack.override.js`);
-    }
-
-    return override(umd, config);
-};
diff --git a/.core/webpack.config.js b/.core/webpack.config.js
deleted file mode 100644
index 17809c12..00000000
--- a/.core/webpack.config.js
+++ /dev/null
@@ -1,151 +0,0 @@
-'use strict';
-
-const fs = require('fs');
-const path = require('path');
-const webpack = require('webpack');
-const FilterWarningsPlugin = require('webpack-filter-warnings-plugin');
-const CompressionPlugin = require('compression-webpack-plugin');
-const env = process.env.NODE_ENV || 'development';
-const rootPath = path.resolve(__dirname, '..');
-
-let defines = {};
-if (fs.existsSync(`${rootPath}/src/app/server/defines.js`)) {
-    defines = require(`${rootPath}/src/app/server/defines.js`);
-}
-
-module.exports = config => {
-    let plugins = [];
-    let externals = [];
-    let target = 'web';
-    let filename = '[name].js';
-    let entries = config.entries;
-    let dest = config.dest.js;
-    let tools = env === 'development' ? 'source-map' : '';
-
-    Object.keys(defines).forEach(key => {
-        if (key !== 'process.env') {
-            config.defines[key] = JSON.stringify(defines[key]);
-        }
-    });
-
-    config.defines['process.env'] = {
-        NODE_ENV: JSON.stringify(env),
-    };
-
-    if ('process.env' in defines) {
-        Object.keys(defines['process.env']).forEach(key => {
-            config.defines['process.env'][key] = JSON.stringify(
-                defines['process.env'][key],
-            );
-        });
-    }
-
-    plugins.push(new webpack.DefinePlugin(config.defines));
-    plugins.push(
-        new webpack.ContextReplacementPlugin(/^toolkit/, context => {
-            context.request = path.resolve('./src/app/toolkit');
-        }),
-    );
-    plugins.push(
-        new webpack.ContextReplacementPlugin(
-            /^components\/common-ui/,
-            context => {
-                context.request = path.resolve(
-                    './src/app/components/common-ui',
-                );
-            },
-        ),
-    );
-    plugins.push(
-        new webpack.ContextReplacementPlugin(/^components/, context => {
-            context.request = path.resolve('./src/app/components');
-        }),
-    );
-    plugins.push(
-        new webpack.ContextReplacementPlugin(
-            /^reactium-core\/components/,
-            context => {
-                context.request = path.resolve('./.core/components');
-            },
-        ),
-    );
-    plugins.push(
-        new FilterWarningsPlugin({
-            exclude: /Critical dependency: the request of a dependency is an expression/i,
-        }),
-    );
-
-    if (env === 'production') {
-        plugins.push(new CompressionPlugin());
-    }
-
-    const defaultConfig = {
-        target: target,
-        entry: entries,
-        devtool: tools,
-        plugins: plugins,
-        externals: externals,
-        mode: env,
-        output: {
-            publicPath: '/assets/js/',
-            path: path.resolve(__dirname, dest),
-            filename,
-        },
-        optimization: {
-            minimize: Boolean(env !== 'development'),
-            splitChunks: {
-                chunks: 'all',
-            },
-        },
-        module: {
-            rules: [
-                {
-                    test: [/\.jsx|js($|\?)/],
-                    exclude: [/node_modules/, /umd.js$/],
-                    resolve: {
-                        extensions: ['.js', '.jsx', '.json'],
-                    },
-                    use: [
-                        {
-                            loader: 'babel-loader',
-                        },
-                    ],
-                },
-                {
-                    test: [
-                        /umd.js$/,
-                        /\.hbs$/,
-                        /\.css$/,
-                        /\.sass$/,
-                        /\.scss$/,
-                        /\.less$/,
-                        /\.BACKUP$/,
-                        /\.png$/,
-                        /\.jpg$/,
-                        /\.gif$/,
-                        /\.core\/server/,
-                        /\.core\/manifest/,
-                        /\.core\/index.js/,
-                        /\.core\/gulp/,
-                        /\.core\/.*?config/,
-                        /\.core\/.cli\//,
-                        /\.cli/,
-                        /src\/app\/server/,
-                    ],
-                    use: [
-                        {
-                            loader: 'ignore-loader',
-                        },
-                    ],
-                },
-            ],
-        },
-    };
-
-    let webPackOverride = _ => _;
-    if (fs.existsSync(`${rootPath}/webpack.override.js`)) {
-        webPackOverride = require(`${rootPath}/webpack.override.js`);
-    }
-
-    return webPackOverride(defaultConfig);
-};
diff --git a/.dockerignore b/.dockerignore
index 899c9e05..52220d96 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,4 +1,5 @@
 node_modules
+reactium_modules
 npm-debug.log
 Dockerfile*
 docker-compose*
diff --git a/.flowconfig b/.flowconfig
new file mode 100644
index 00000000..8eebeb60
--- /dev/null
+++ b/.flowconfig
@@ -0,0 +1,20 @@
+[ignore]
+<PROJECT_ROOT>/node_modules
+<PROJECT_ROOT>/reactium_modules
+<PROJECT_ROOT>/public
+<PROJECT_ROOT>/dist
+<PROJECT_ROOT>/.core
+<PROJECT_ROOT>/.cli
+.*umd\.js
+.*sw\.js
+
+[include]
+src/
+
+[libs]
+
+[lints]
+
+[options]
+
+[strict]
diff --git a/.gettext.json b/.gettext.json
new file mode 100644
index 00000000..3e64aeaf
--- /dev/null
+++ b/.gettext.json
@@ -0,0 +1,46 @@
+{
+    "js": {
+        "parsers": [
+            {
+                "expression": "gettext",
+                "arguments": {
+                    "text": 0
+                }
+            },
+            {
+                "expression": "__",
+                "arguments": {
+                    "text": 0
+                }
+            },
+            {
+                "expression": "ngettext",
+                "arguments": {
+                    "text": 0,
+                    "textPlural": 1
+                }
+            },
+            {
+                "expression": "_n",
+                "arguments": {
+                    "text": 0,
+                    "textPlural": 1
+                }
+            },
+            {
+                "expression": "pgettext",
+                "arguments": {
+                    "context": 0,
+                    "text": 1
+                }
+            }
+        ],
+        "glob": {
+            "pattern": "src/app/**/*.js"
+        }
+    },
+    "headers": {
+        "Language": "en_US"
+    },
+    "output": "src/reactium-translations/template.pot"
+}
diff --git a/.gitignore b/.gitignore
index 845b79f7..e62501a1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,6 +35,7 @@ build/Release
 # Dependency directories
 node_modules/
 jspm_packages/
+reactium_modules/
 
 # Typescript v1 declaration files
 typings/
@@ -81,4 +82,14 @@ Thumbs.db
 .cli-cache
 
 # Manifest
+src/domains.js
 src/manifest.js
+src/externals-manifest.js
+src/app/server/webpack-manifest.json
+
+# Translation .mo
+*.mo
+
+# Editor configs
+*.code-workspace
+*.vscode
diff --git a/.huskyrc b/.huskyrc
new file mode 100644
index 00000000..41fa87e2
--- /dev/null
+++ b/.huskyrc
@@ -0,0 +1,7 @@
+{
+    "husky": {
+        "hooks": {
+            "pre-commit": "lint-staged"
+        }
+    }
+}
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 00000000..57e286f4
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1,3 @@
+audit = false
+fund = false
+loglevel = error
diff --git a/.prettierignore b/.prettierignore
index 50e80354..e25376e6 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,2 +1,4 @@
 package.json
 src/assets/vendor
+docs
+*.md
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 7a3d4275..2f32094d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
 # Build Stage
-FROM node:carbon as build
+FROM node:lts-hydrogen as build
 
 RUN mkdir /tmp/app
 
@@ -13,25 +13,34 @@ COPY package*.json ./
 # Bundle app source
 COPY . .
 
-RUN chown -R node ./
-
-USER node
+# Allocate as much as 2GB for build heap
+ENV NODE_OPTIONS=--max_old_space_size=2078
 
 # Run App build within container context
-RUN npm install && npm run build
+RUN npx reactium install && npm run build
 
+# Remove Development Deps before next stage
 RUN npm prune --production
 
 # Deployable Stage
-FROM node:carbon
+FROM node:lts-hydrogen
 
 # Create app directory
 WORKDIR /usr/src/app
 
+# Dependencies of server
+COPY --from=build /tmp/app/package.json ./package.json
 COPY --from=build /tmp/app/node_modules ./node_modules
+COPY --from=build /tmp/app/reactium_modules ./reactium_modules
+
+# Includes all server src and built assets
+COPY --from=build /tmp/app/src ./src
 COPY --from=build /tmp/app/public ./public
-COPY --from=build /tmp/app/build ./build
+
+RUN chown -R node ./
+
+USER node
 
 EXPOSE 3030
 
-CMD [ "node", "./build/.core/index.js" ]
+CMD [ "npm", "start" ]
diff --git a/LICENSE b/LICENSE
index 636beef2..22b783fd 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2017 Atomic-Reactor
+Copyright (c) 2021 Reactium LLC
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/apidoc.json b/apidoc.json
new file mode 100644
index 00000000..4d6930c0
--- /dev/null
+++ b/apidoc.json
@@ -0,0 +1,5 @@
+{
+    "version": "4.1.6",
+    "description": "Reactium SDK",
+    "title": "Reactium SDK"
+}
diff --git a/babel.config.js b/babel.config.js
index c6efd151..f2cc5d55 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,4 +1,4 @@
-const config = require('./.core/babel.config');
+const config = require('@atomic-reactor/reactium-core/babel.config');
 
 // @example
 //
diff --git a/docs/api_data.js b/docs/api_data.js
new file mode 100644
index 00000000..7b4062fb
--- /dev/null
+++ b/docs/api_data.js
@@ -0,0 +1,6055 @@
+define({ "api": [
+  {
+    "type": "Async",
+    "url": "Capability.User.get(userID,refresh)",
+    "title": "Capability.User.get()",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.User.get",
+    "description": "<p>Return an Array of capability names granted to the user.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "userID",
+            "description": "<p>The Reactium.User id. If empty the User.current id is used.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "refres",
+            "defaultValue": "false",
+            "description": "<p>Fetch capabilities from the server instead of cache.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "const canEditArticle = async userID => {\n    const caps = await Reactium.Capability.User.get(userID);\n    return caps.includes('content.article.update');\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Static",
+    "url": "Capability.autosync",
+    "title": "Capability.autosync",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.autosync",
+    "description": "<p>Time in milliseconds that controls when registered capabilities are propagated to the server. If set to <code>false</code>, manually push registered capabilities with <code>Capability.propagate()</code>. Default: <code>10000</code>.</p>",
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Static",
+    "url": "Capability.cache",
+    "title": "Capability.cache",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.cache",
+    "description": "<p>Time in milliseconds that controls how long to cache capability request results. Default: <code>60000</code>.</p>",
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Function",
+    "url": "Capability.clearCache()",
+    "title": "Capability.clearCache()",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.clearCache",
+    "description": "<p>Clear Capability related Cache keys.</p>",
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.propagate(force)",
+    "title": "Capability.propagate()",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.propagate",
+    "description": "<p>Propagate registered capabilities to an Actinium server.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "force",
+            "defaultValue": "false",
+            "description": "<p>Execute the propagation regardless of if a current propagation operation is under way. The resolution of the previous propagation operation will be cancelled. If <code>Capability.autosync</code> is <code>true</code>, this function will be called whenever the autosync is initiated.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "await Capability.propagate();",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Function",
+    "url": "Capability.register(id)",
+    "title": "Capability.register()",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.register",
+    "description": "<p>Register a new capability.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>String value used when checking for the capability. This function is limited in scope and regularly shouldn't be used. Server-side capability registration is preferred.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "Capability.register('my-ui.view')",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Hook",
+    "url": "Hooks",
+    "title": "Hooks",
+    "name": "Hooks",
+    "description": "<p>Here are the standard hooks that fire (in order) on the bootstrap of your Reactium application.</p> <table> <thead> <tr> <th style=\"text-align:left\">Hook</th> <th style=\"text-align:left\">Description</th> </tr> </thead> <tbody> <tr> <td style=\"text-align:left\">init</td> <td style=\"text-align:left\">Called before all other hooks on startup.</td> </tr> <tr> <td style=\"text-align:left\">dependencies-load</td> <td style=\"text-align:left\">Called while application dependencies are loaded.</td> </tr> <tr> <td style=\"text-align:left\">service-worker-init</td> <td style=\"text-align:left\">Called while service worker is loaded.</td> </tr> <tr> <td style=\"text-align:left\">zone-defaults</td> <td style=\"text-align:left\">Called while rendering zone default components are loaded.</td> </tr> <tr> <td style=\"text-align:left\">store-create</td> <td style=\"text-align:left\">Called while Redux store is being created.</td> </tr> <tr> <td style=\"text-align:left\">store-created</td> <td style=\"text-align:left\">Called after Redux store is created.</td> </tr> <tr> <td style=\"text-align:left\">plugin-dependencies</td> <td style=\"text-align:left\">Called before loading runtime plugins.</td> </tr> <tr> <td style=\"text-align:left\">plugin-init</td> <td style=\"text-align:left\">Called to initiate plugin registration.</td> </tr> <tr> <td style=\"text-align:left\">routes-init</td> <td style=\"text-align:left\">Called to initiaze React router</td> </tr> <tr> <td style=\"text-align:left\">register-route</td> <td style=\"text-align:left\">Called for each route that is registered</td> </tr> <tr> <td style=\"text-align:left\">data-loaded</td> <td style=\"text-align:left\">Called on route load to pre-load data</td> </tr> <tr> <td style=\"text-align:left\">plugin-ready</td> <td style=\"text-align:left\">Called after all plugins registration callbacks have completed</td> </tr> <tr> <td style=\"text-align:left\">component-bindings</td> <td style=\"text-align:left\">Called to sibling React components and their DOM element bindings</td> </tr> <tr> <td style=\"text-align:left\">app-bindpoint</td> <td style=\"text-align:left\">Called to define the main application bind point.</td> </tr> <tr> <td style=\"text-align:left\">app-context-provider</td> <td style=\"text-align:left\">Called to define React application-wrapping context providers, such as Redux / Theme, etc.</td> </tr> <tr> <td style=\"text-align:left\">app-router</td> <td style=\"text-align:left\">Called to provide the React router component</td> </tr> <tr> <td style=\"text-align:left\">app-boot-message</td> <td style=\"text-align:left\">Called to define the javascript console boot message</td> </tr> <tr> <td style=\"text-align:left\">app-ready</td> <td style=\"text-align:left\">Called when the application is being bound or hydrated by ReactDOM</td> </tr> </tbody> </table>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/reactium-hooks.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppBindings",
+    "title": "Server.AppBindings",
+    "name": "Server.AppBindings",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines React bind pointes in markup.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppBindings",
+            "description": "<p>Server app binding registry object.</p>"
+          }
+        ],
+        "binding": [
+          {
+            "group": "binding",
+            "type": "String",
+            "optional": true,
+            "field": "component",
+            "description": "<p>string name of component to bind directly if possible (must be in a webpack search context in reactium-config)</p>"
+          },
+          {
+            "group": "binding",
+            "type": "String",
+            "optional": true,
+            "field": "markup",
+            "description": "<p>ordinary markup that React will use to bind the app.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "ReactiumBoot.Hook.registerSync(\n    'Server.AppBindings',\n    (req, AppBindings) => {\n        // Find the registered component \"DevTools\" and bind it\n        AppBindings.register('DevTools', {\n            component: 'DevTools',\n        });\n\n        // Add ordinary markup for React to bind to\n        AppBindings.register('router', {\n            markup: '<div id=\"router\"></div>',\n        });\n    },\n    ReactiumBoot.Enums.priority.highest,\n    'SERVER-APP-BINDINGS-CORE',\n);",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppGlobals",
+    "title": "Server.AppGlobals",
+    "name": "Server.AppGlobals",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines window globals to be defined in template. Will also define global for nodejs (useful for Server-Side-Rendering).</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppGlobals",
+            "description": "<p>Server app globals registry object.</p>"
+          }
+        ],
+        "global": [
+          {
+            "group": "global",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>The property name that will be added to window (for browser) or global (for nodejs).</p>"
+          },
+          {
+            "group": "global",
+            "type": "Mixed",
+            "optional": false,
+            "field": "value",
+            "description": "<p>any javascript value that can be serialized for use in a script tag</p>"
+          },
+          {
+            "group": "global",
+            "type": "Mixed",
+            "optional": true,
+            "field": "serverValue",
+            "description": "<p>optional different value for the server global, useful when value should be used differently on the server code</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "// will result in window.environment = 'local' in browser and global.environment = 'local' on nodejs\nReactiumBoot.Hook.registerSync(\n    'Server.AppGlobals',\n    (req, AppGlobals) => {\n        // Find the registered component \"DevTools\" and bind it\n        AppGlobals.register('environment', {\n            name: 'environment',\n            value: 'local',\n        });\n    });",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppHeaders",
+    "title": "Server.AppHeaders",
+    "name": "Server.AppHeaders",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines html head tags (exluding stylesheet). Use this hook to register/unregister <head> tags as strings. Note: if using Server Side Render and react-helmet, this is often unnecessary to do.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppHeaders",
+            "description": "<p>Server app header registry object.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "ReactiumBoot.Hook.register('Server.AppHeaders', async (req, AppHeaders) => {\n   // given some data was added to req by express middleware\n   const seo = req.seo;\n   if (seo) {\n       if (seo.canonicalURL) {\n           AppHeaders.register('canonical-url', {\n               header: `<link rel=\"canonical\" href=\"${seo.canonicalURL}\" />`\n           });\n       }\n       if (seo.description) {\n           AppHeaders.register('meta-description', {\n               header: `<meta name=\"description\" content=\"${seo.description}\"/>`\n           });\n       }\n   }\n});",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppScripts",
+    "title": "Server.AppScripts",
+    "name": "Server.AppScripts",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines javascript files to be loaded.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppScripts",
+            "description": "<p>Server app scripts registry object.</p>"
+          }
+        ],
+        "script": [
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "footer",
+            "defaultValue": "true",
+            "description": "<p>Place the script tag in the footer if true</p>"
+          },
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "header",
+            "defaultValue": "false",
+            "description": "<p>Place the script tag above the body if true</p>"
+          },
+          {
+            "group": "script",
+            "type": "String",
+            "optional": true,
+            "field": "path",
+            "description": "<p>the src of the javascript</p>"
+          },
+          {
+            "group": "script",
+            "type": "String",
+            "optional": true,
+            "field": "charset",
+            "defaultValue": "UTF-8",
+            "description": "<p>charset attribute</p>"
+          },
+          {
+            "group": "script",
+            "type": "String",
+            "optional": true,
+            "field": "type",
+            "description": "<p>type attribute</p>"
+          },
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "defer",
+            "defaultValue": "false",
+            "description": "<p>Add defer attribute</p>"
+          },
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "async",
+            "defaultValue": "false",
+            "description": "<p>Add async attribute</p>"
+          },
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "content",
+            "description": "<p>script content</p>"
+          },
+          {
+            "group": "script",
+            "type": "Number",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "0",
+            "description": "<p>loading order of script</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "ReactiumBoot.Hook.register('Server.AppScripts', async (req, AppScripts) => {\n    AppScripts.register('my-onsite-script', {\n        path: '/assets/js/some-additional.js'\n        footer: true, // load in footer (optional)\n        header: false, // don't load in header (optional)\n        order: 1, // scripts will be ordered by this\n    });\n\n    AppScripts.register('my-csn-script', {\n        path: 'https://cdn.example.com/cdn.loaded.js'\n        header: true, // maybe for an external\n        order: 1, // scripts will be ordered by this\n    });\n});",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppSnippets",
+    "title": "Server.AppSnippets",
+    "name": "Server.AppSnippets",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines snippets of code to be added to document in their entirety.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppSnippets",
+            "description": "<p>Server app snippets registry object.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "     ReactiumBoot.Hook.register('Server.AppSnippets', async (req, AppSnippets) => {\n        AppSnippets.register('ga-tracking', {\n            snippet: `<script>\n(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\nm=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n\nga('create', '', 'auto');\nga('send', 'pageview');\n</script>`,\n          order: 1,\n        })\n     });",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppStyleSheets",
+    "title": "Server.AppStyleSheets",
+    "name": "Server.AppStyleSheets",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines css files to be loaded.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppStyleSheets",
+            "description": "<p>Server app styles registry object.</p>"
+          }
+        ],
+        "stylesheet": [
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "href",
+            "description": "<p>the src of the stylesheet or resource</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "Number",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "0",
+            "description": "<p>loading order of stylesheet or resource</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "rel",
+            "defaultValue": "stylesheet",
+            "description": "<p>the rel attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "crossorigin",
+            "description": "<p>the crossorigin attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "referrerpolicy",
+            "description": "<p>the referrerpolicy attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "hrefLang",
+            "description": "<p>the hreflang attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "sizes",
+            "description": "<p>the sizes attribute if rel=icon</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "type",
+            "description": "<p>the type attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "Function",
+            "optional": true,
+            "field": "when",
+            "description": "<p>callback passed the request object, and returns true or false if the css should be included</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "ReactiumBoot.Hook.register('Server.AppStyleSheets', async (req, AppStyleSheets) => {\n    AppStyleSheets.register('my-stylesheet', {\n        href: '/assets/css/some-additional.css'\n    });\n\n    AppStyleSheets.register('my-csn-script', {\n        href: 'https://cdn.example.com/cdn.loaded.css'\n        order: 1, // scripts will be ordered by this\n    });\n});",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.Middleware",
+    "title": "Server.Middleware",
+    "name": "Server.Middleware",
+    "description": "<p>Used to register or unregister express middleware.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "Middleware",
+            "description": "<p>Server express middleware registry object.</p>"
+          }
+        ],
+        "middleware": [
+          {
+            "group": "middleware",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>Name of the middleware.</p>"
+          }
+        ],
+        "middlware": [
+          {
+            "group": "middlware",
+            "type": "Function",
+            "optional": false,
+            "field": "use",
+            "description": "<p>the express middleware function.</p>"
+          },
+          {
+            "group": "middlware",
+            "type": "Number",
+            "optional": false,
+            "field": "order",
+            "description": "<p>the loading order of the middleware</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "const express = require('express');\nconst router = express.Router();\nconst axios = require('axios');\n\n// register a new backend route /foo with express\nrouter.get('/', (req, res) => {\n   res.send('Foo!!')\n});\n\nReactiumBoot.Hook.registerSync('Server.Middleware', Middleware => {\n   Middleware.register('foo-page', {\n       name: 'foo-page',\n       use: router,\n       order: ReactiumBoot.Enums.priority.highest,\n   })\n});\n\nReactiumBoot.Hook.registerSync('Server.Middleware', Middleware => {\n   const intercept = express.Router();\n   intercept.post('/api*', (req, res) => {\n       res.json({\n           foo: 'bar'\n       });\n   });\n\n   // check api health every 90 seconds and intercept api if it goes down\n   Middleware.register('downapi', {\n       name: 'downapi',\n       use: async (res, req, next) => {\n           try {\n               let healthy = ReactiumBoot.Cache.get('health-check');\n               if (healthy === undefined) {\n                   const response = await axios.get(process.env.REST_API_URI + '/healthcheck');\n                   healthy = response.data;\n                   ReactiumBoot.Cache.set('health-check', healthy, 1000 * 90);\n               }\n           } catch (error) {\n               console.error(error);\n               ReactiumBoot.Cache.set('health-check', false, 1000 * 90);\n               healthy = false;\n           }\n\n           if (healthy === true) next();\n           return intercept(req, req, next);\n       },\n       order: ReactiumBoot.Enums.priority.highest,\n   })\n});",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.ResponseHeaders",
+    "title": "Server.ResponseHeaders",
+    "name": "Server.ResponseHeaders",
+    "description": "<p>On html template responses on server, this hook is called when HTTP headers are added to the response. Both sync and async hook is called.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "responseHeaders",
+            "description": "<p>object with key pairs (header name =&gt; header value)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>Node/Express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "res",
+            "description": "<p>Node/Express response object</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/router.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.ServiceWorkerAllowed",
+    "title": "Server.ServiceWorkerAllowed",
+    "description": "<p>Called on server-side during service-worker-allowed middleware. Used to define the HTTP response header &quot;Service-Worker-Allowed&quot;. By default, this header will allow the document root, &quot;/&quot;. Both sync and async version called.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "responseHeader",
+            "description": "<p>with property 'Service-Worker-Allowed' (case sensitive) and its value.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>Node/Express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "res",
+            "description": "<p>Node/Express response object</p>"
+          }
+        ]
+      }
+    },
+    "name": "Server.ServiceWorkerAllowed",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.afterApp",
+    "title": "Server.afterApp",
+    "name": "Server.afterApp",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Called after other Server hooks.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "Server",
+            "description": "<p>ReactiumBoot Server object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.beforeApp",
+    "title": "Server.beforeApp",
+    "name": "Server.beforeApp",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Called before other Server hooks.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "Server",
+            "description": "<p>ReactiumBoot Server object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-bindpoint",
+    "title": "app-bindpoint",
+    "name": "app-bindpoint",
+    "description": "<p>Called after plugin and routing initialization to define the DOM element used for mounting the Single-Page application (SPA). By default, the application will bind to <code>document.getElementById('router')</code>, but this can be changed with this hook. This is related to the HTML template artifacts left by the server-side <code>Server.AppBindings</code> hook. async only - used in front-end application only</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>context.appElement MUST be an HTMLElement where your React appliation will bind to the DOM.</p>"
+          }
+        ],
+        "appElement": [
+          {
+            "group": "appElement",
+            "type": "HTMLElement",
+            "optional": false,
+            "field": "the",
+            "description": "<p>DOM element to bind to - by default <code>document.getElementById('router')</code>.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-boot-message",
+    "title": "app-boot-message",
+    "name": "app-boot-message",
+    "description": "<p>Called during application binding, this minor hook will allow you to change the format of the of the front-end Javascript console message indicating application start. async only - used in front-end application only</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-context-provider",
+    "title": "app-context-provider",
+    "name": "app-context-provider",
+    "description": "<p>Called after app-bindpoint to define any React context providers, using the <a href=\"#api-Reactium-Reactium.AppContext\">Reactium.AppContext</a> registry.</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-ready",
+    "title": "app-ready",
+    "description": "<p>The final hook run after the front-end application has bee bound or hydrated. After this point, the all hooks are runtime hooks.</p>",
+    "name": "app-ready",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-router",
+    "title": "app-router",
+    "name": "app-router",
+    "description": "<p>Called after app-context-provider to define the registered Router component (i.e. <code>Reactium.Component.register('Router'...)</code>). After this hook, the ReactDOM bindings will actually take place. async only - used in front-end application only</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "component-bindings",
+    "title": "component-bindings",
+    "name": "component-bindings",
+    "description": "<p>Called after plugin and routing initialization to define element and dynamic component for one-off component bindings to the DOM. e.g. In development mode, used to render Redux Dev tools. async only - used in front-end application only</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>context.bindPoints MUST be an array of binding objects after this hook is called</p>"
+          }
+        ],
+        "binding": [
+          {
+            "group": "binding",
+            "type": "HTMLElement",
+            "optional": false,
+            "field": "the",
+            "description": "<p>DOM element to bind to (e.g. document.getElementById('my-element'))</p>"
+          },
+          {
+            "group": "binding",
+            "type": "String",
+            "optional": false,
+            "field": "string",
+            "description": "<p>matching a React component module in one of the Reactium built-in webpack contexts (src/app/components or src/app/components/common-ui) e.g. 'DevTools' maps to src/app/components/DevTools</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "dependencies-load",
+    "title": "dependencies-load",
+    "name": "dependencies-load",
+    "description": "<p>Called after init to give an application a change to load async dependencies. Many Domain Driven Design (DDD) artifacts from generated src/manifest.js are loaded on this hook async only - used in front-end</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "dependencies-load",
+    "title": "dependencies-load",
+    "name": "dependencies-load",
+    "description": "<p>Called after init to give an application a change to load async dependencies. Many Domain Driven Design (DDD) artifacts from generated src/manifest.js are loaded on this hook async only - used in front-end</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/reactium-hooks.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "init",
+    "title": "init",
+    "name": "init",
+    "description": "<p>Called before all other hooks on Reactium application startup. async only - used in front-end</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "plugin-dependencies",
+    "title": "plugin-dependencies",
+    "name": "plugin-dependencies",
+    "description": "<p>Called to indicate all bootstrap dependencies should now be loaded, but before application routes have been initialized. There are 2 default registered callback in Reactium core on this hook. 1. (Highest Priority): The generated src/manifest.js dependencies are attached to this hook context (as context.deps). 2. (High Priority): <code>plugin-init</code> hook will be invoked, at which point all Reactium.Plugin registrations will be called.</p> <pre><code> Any hooks that registered after Reactium.Plugin will only be useful if they happen to be invoked during the normal runtime operations of the application.  An important exception to this is `routes-init`, which is deferred until after plugins initialize so they may dynamically add routes before Reactium hands off  control to the Router.  async only - used in front-end</code></pre>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>Core attaches generated manifest loaded dependencies to context.deps</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "plugin-ready",
+    "title": "plugin-ready",
+    "name": "plugin-ready",
+    "description": "<p>Called after all plugin registration callbacks have completed and routes have loaded.</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "register-route",
+    "title": "register-route",
+    "name": "register-route",
+    "description": "<p>Called on boot after routes-init, and during runtime operation of the front-end application, whenever a new route is registered. Can be used to augment a router object before it is registered to the router. async only - used in front-end</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "route",
+            "description": "<p>the new or updated route, indentified by unique id (route.id)</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "routes-init",
+    "title": "routes-init",
+    "name": "routes-init",
+    "description": "<p>Called after plugin-init, to add React Router routes to Reactium.Routing register before the Router component is initialized and finally the application is bound to the DOM. async only - used in front-end</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "sdk-init",
+    "title": "sdk-init",
+    "name": "sdk-init",
+    "description": "<p>Called after reactium-hooks.js DDD artifacts are loaded, to allow the Reactium SDK singleton to be extended before the init hook.</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "service-worker-init",
+    "title": "service-worker-init",
+    "name": "service-worker-init",
+    "description": "<p>Called after dependencies-load in Reactium.ServiceWorker to register any webapp service worker code for the app. By default, this hook is implemented to register the customizable Google Workbox implementation that will be compiled (to /assets/js/sw/sw.js). Also, async loads and instantiates a a google workbox-window Workbox object on Reactium.ServiceWorker.worker. async only - used in front-end webapp only</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-service-worker/sdk/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "zone-defaults",
+    "title": "zone-defaults",
+    "name": "zone-defaults",
+    "description": "<p>Called after dependencies-load by Reactium.Zone.init() for loading default component rendering Zone controls and components. async only - used in front-end</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>used to create initial controls and components. controls.filter for default filtering, controls.sort for default sorting, controls.mapper for default mapping and controls.components for initial registered components. zone.js Domain Driven Design (DDD) artifacts from generated src/manifest.js are registered with Reactium.Zone at this time. See Reactium.Zone SDK for runtime operations.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useAsyncEffect(cb,dependencies)",
+    "title": "useAsyncEffect()",
+    "description": "<p>Just like React's built-in <code>useEffect</code>, but can use async/await. If the return is a promise for a function, the function will be used as the unmount callback.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>Just like callback provided as first argument of <code>useEffect</code>, but takes as its own first argument a method to see if the component is mounted. This is useful for deciding if your async response (i.e. one that would attempt to change state) should happen.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": true,
+            "field": "deps",
+            "description": "<p>Deps list passed to <code>useEffect</code></p>"
+          }
+        ]
+      }
+    },
+    "name": "useAsyncEffect",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Reactium Usage",
+        "content": "import React, { useState } from 'react';\nimport { useAsyncEffect } from 'reactium-core/sdk';\n\nconst MyComponent = props => {\n    const [show, setShow] = useState(false);\n\n    // change state allowing value to show\n    // asynchrounously, but only if component is still mounted\n    useAsyncEffect(async isMounted => {\n        setShow(false);\n        await new Promise(resolve => setTimeout(resolve, 3000));\n        if (isMounted()) setShow(true);\n\n        // unmount callback\n        return () => {};\n    }, [ props.value ]);\n\n    return (\n        {show && <div>{props.value}</div>}\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "StandAlone Import",
+        "content": "import { useAsyncEffect } from '@atomic-reactor/reactium-sdk-core';",
+        "type": "json"
+      },
+      {
+        "title": "Wrong Usage",
+        "content": "import React, { useState } from 'react';\nimport { useAsyncEffect } from 'reactium-core/sdk';\n\nconst MyComponent = props => {\n    const [show, setShow] = useState(false);\n\n    // change state allowing value to show\n    // asynchrounously, but only if component is still mounted\n    useAsyncEffect(async isMounted => {\n        // Warning: don't do this, wait until promise resolves to check isMounted()!!\n        if (isMounted()) { // this may be true *before* promise resolves and false *after*\n            setShow(false);\n            await new Promise(resolve => setTimeout(resolve, 3000));\n            setShow(true);\n        }\n\n        // unmount callback\n        return () => {};\n    }, [ props.value ]);\n\n    return (\n        {show && <div>{props.value}</div>}\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/async-effect.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useBreakpoint(width)",
+    "title": "useBreakpoint()",
+    "description": "<p>Returns string representing the breakpoint size for a given width.</p> <p>When using the out of the box scss styles in Reactium, a grid system is in place, and is defined by an overridable sass map <code>$breakpoints-max</code>, defined by default as:</p> <pre class=\"prettyprint\">$breakpoints-max: ('xs': 640, 'sm': 990, 'md': 1280, 'lg': 1440,'xl': 1600) !default; </code></pre>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": false,
+            "field": "width",
+            "description": "<p>the width to check the breakpoint for. Example for the default <code>$breakpoints-max</code> providing a width of 640 or less will return <code>xs</code>, 990 or less will return <code>sm</code> and so on.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useBreakpoint",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useBreakpoints()",
+    "title": "useBreakpoints()",
+    "description": "<p>Provides an object describing the maximum width for each breakpoint used in the Reactium grid styles. When using the out of the box scss styles in Reactium, a grid system is in place, and is defined by an overridable sass map <code>$breakpoints-max</code>, defined by default as:</p> <pre class=\"prettyprint\">$breakpoints-max: ('xs': 640, 'sm': 990, 'md': 1280, 'lg': 1440,'xl': 1600) !default; </code></pre> <p>These breakpoint maximums are automatically encoded and added to the stylesheet as <code>:after</code> psuedo-element <code>content</code> property, which can be loaded in the browser and used for in browser responsive behavior. Potentially, this can mean only having to manage your responsive breakpoints in one place (the stylesheet).</p>",
+    "name": "useBreakpoints",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useCapability(capability)",
+    "title": "useCapability()",
+    "description": "<p>React hook to get capability object.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "capability",
+            "description": "<p>the name/tag of the capability</p>"
+          }
+        ]
+      }
+    },
+    "name": "useCapability",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/capability.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useCapabilityCheck(capabilities,strict)",
+    "title": "useCapabilityCheck()",
+    "description": "<p>React hook to check a list of capabilities. Uses Reactium.Capability.check().</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "capabilities",
+            "description": "<p>array of 1 or more capabilities</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "strict",
+            "defaultValue": "true",
+            "description": "<p>when true all capabilities must be allowed for current user</p>"
+          }
+        ]
+      }
+    },
+    "name": "useCapabilityCheck",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/capability.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useDerivedState(props,subscriptions,updateAll)",
+    "title": "useDerivedState()",
+    "description": "<p>Sometimes you would like to derive state from your component props, and also allow either a prop change, or an internal state change either to take effect. This hook will allow you to create a state object from your component props, and subscribe (by array of object-paths) only to those prop changes you would like to see reflected in a rendering updates to your component state. This hook returns an array similar in nature to the return of React's built-in <code>useState()</code> hook (<code>[state,setState]</code>), with some differences.</p> <ol> <li>The initial value coming from props (on first render) will contain all that was present in the props object passed to it. Note that any values that are not present in your component props on first render, or that which are explicitly subscribed to, will not exist in the returned state element.</li> <li>The setState callback can receive whole or partial state objects, and will be merged with the existing state.</li> <li>There is a third element function <code>forceRefresh</code></li> </ol>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "props",
+            "description": "<p>the component props</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": true,
+            "field": "subscriptions",
+            "description": "<p>Array of string object-paths in your component props you would like to update your component state for. By default, this is empty, and if left empty you will get only the initial props, and no updates. Each selected property is shallow compared with the previous version of that prop (not the current state). Only a change of prop will trigger a prop-based update and rerender.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "updateAll",
+            "defaultValue": "false",
+            "description": "<p>When true, an update to any subscribed object-path on your props will cause <em>all</em> the props to imprint on your component state.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.14",
+    "name": "useDerivedState",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Returns",
+        "content": "// The hook returns an array containing [state, setState, forceRefresh]\nconst [state, setState, forceRefresh] = useDerivedState(props, ['path.to.value1', 'path.to.value2']);",
+        "type": "json"
+      },
+      {
+        "title": "Usage",
+        "content": "import React from 'react';\nimport { useDerivedState } from 'reactium-core/sdk';\nimport op from 'object-path';\n\nconst MyComponent = props => {\n    const [state, setState] = useDerivedState(props, ['path.to.value1', 'path.to.value2']);\n    const value1 = op.get(state, 'path.to.value1', 'Default value 1');\n    const value2 = op.get(state, 'path.to.value2', 'Default value 2');\n\n    // setState merges this object with previous state\n    const updateValue1 = () => setState({\n        path: {\n            to: {\n                value1: 'foo',\n            }\n        }\n    });\n\n    return (<div>\n        <div>Value 1: {value1}</div>\n        <div>Value 2: {value2}</div>\n        <button onClick={updateValue1}>Update Value 1</button>\n    </div>);\n}\n\nexport default MyComponent;",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/derived-state.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useDocument()",
+    "title": "useDocument()",
+    "description": "<p>Serves same use-case as <code>useWindow()</code>, but provides context aware <code>document</code> object or <code>undefined</code>, that can be used normally as well as in the <code>react-frame-component</code> within the toolkit.</p>",
+    "name": "useDocument",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useEventEffect(eventTarget,eventCallbacks,deps)",
+    "title": "useEventEffect()",
+    "version": "1.0.7",
+    "description": "<p>React hook to short hand for addEventListener and removeEventLister for one or more callbacks.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "eventTarget",
+            "description": "<p>Some event target object (implementing addEventListener and removeEventLister)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "eventCallbacks",
+            "description": "<p>Object keys are event names, and Object values are callbacks to be subscribed/unsubscribed.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "useEffectDeps",
+            "optional": false,
+            "field": "deps",
+            "description": "<p>consistent with React useEffect deps list.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useEventEffect",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "EventEffectComponent.js",
+        "content": "import React, { useState } from 'react';\nimport { useEventEffect } from 'reactium-core/sdk';\n\nconst EventEffectComponent = () => {\n    const [size, setSize] = useState({\n        width: window.innerWidth,\n        height: window.innerHeight,\n    });\n\n    const [online, setOnline] = useState(window.onLine);\n\n    const onResize = e => {\n        setSize({\n            width: window.innerWidth,\n            height: window.innerHeight,\n        });\n    };\n\n    const onNetworkChange = e => {\n        setOnline(window.onLine);\n    };\n\n    useEventEffect(\n        window,\n        {\n            resize: onResize,\n            online: onNetworkChange,\n            offline: onNetworkChange,\n        },\n        [],\n    );\n\n    return (\n        <div className='status'>\n            <span className='status-width'>width: {size.width}</span>\n            <span className='status-height'>height: {size.height}</span>\n            <span className={`status-${online ? 'online' : 'offline'}`}></span>\n        </div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/event-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useEventHandle(handle)",
+    "title": "useEventHandle()",
+    "description": "<p>React hook to create an imperative handle that is also an implementation of EventTarget. Can be used in conjunction with useImperativeHandle (React built-in) or useRegisterHandle/useHandle (Reactium SDK hooks).</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "handle",
+            "description": "<p>Interface for interacting with your component.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useEventHandle",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "EventHandleComponent.js",
+        "content": "import React, { useEffect } from 'react';\nimport { useRegisterHandle, useEventHandle } from 'reactium-core/sdk';\n\nconst EventHandleComponent = () => {\n     const [ value, setValue ] = useState(1);\n     const createHandle = () => ({\n         value, setValue,\n     });\n\n     const [ handle, setHandle ] = useEventHandle(createHandle());\n\n     useEffect(() => {\n         setHandle(createHandle());\n     }, [value]);\n\n     useRegisterHandle('EventHandleComponent', () => handle);\n\n     const onClick = () => {\n         if (handle) {\n            setValue(value + 1);\n            handle.dispatchEvent(new CustomEvent('do-something'));\n         }\n     }\n\n     return (<button onClick={onClick}>Click Me ({value})</button>);\n };\n\n export default EventHandleComponent;",
+        "type": "json"
+      },
+      {
+        "title": "EventHandleConsumer.js",
+        "content": "import React, { useEffect, useState } from 'react';\nimport { useHandle } from 'reactium-core/sdk';\n\nconst EventHandleConsumer = props => {\n    const [state, setState] = useState();\n    const handleEventTarget = useHandle('EventHandleComponent');\n\n    // when 'do-something' event occurs on\n    // EventHandleComponent, this component can react\n    const onDoSomething = e => {\n        setState(e.target.value);\n    };\n\n    useEffect(() => {\n        if (handleEventTarget) {\n            handleEventTarget.addEventListener('do-something', onDoSomething);\n        }\n        return () => handleEventTarget.removeEventListener('do-something', onDoSomething);\n    }, [handleEventTarget]);\n\n    return (\n        <div>\n            value: {state}\n        </div>\n    );\n};\n\nexport default EventHandleConsumer;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/event-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useEventRefs()",
+    "title": "useEventRefs()",
+    "version": "1.0.7",
+    "group": "ReactHook",
+    "name": "useEventRefs",
+    "description": "<p>Like useRefs, creates a single reference object that can be managed using the <code>get</code>/<code>set</code>/<code>del</code>/<code>clear</code> functions, however also an EventTarget object. <code>set</code>/<code>del</code>/<code>clear</code> methods dispatch <code>before-set</code>/<code>set</code>, <code>before-del</code>/<code>del</code>, and <code>before-clear</code>/<code>clear</code> events respectively.</p>",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React, { useState } from 'react';\nimport { useRefs } from '@atomic-reactor/reactium-sdk-core';\n\nconst MyComponent = () => {\n    const refs = useEventRefs();\n    const [ready, setReady] = useState(false);\n\n    const onChildRefReady = e => {\n        if (e.key === 'my.component') {\n            setReady(refs.get(e.key) !== undefined);\n        }\n    };\n\n    useEffect(() => {\n        refs.addEventListener('set', onChildRefReady);\n        return () => refs.removeEventListener('set', onChildRefReady);\n    }, []);\n\n    return (\n        <MyForwardRefComponent ref={cmp => refs.set('my.component', cmp)} />\n        {ready && <Controller control={refs.get('my.component')} />}\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useRefs.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useFocusEffect(container,dependencies)",
+    "title": "useFocusEffect()",
+    "group": "ReactHook",
+    "name": "useFocusEffect",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Element",
+            "optional": false,
+            "field": "container",
+            "description": "<p>The DOM element to search for the 'data-focus' element.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": true,
+            "field": "dependencies",
+            "description": "<p>Dependencies list passed to <code>useEffect</code>.</p>"
+          }
+        ],
+        "Returns": [
+          {
+            "group": "Returns",
+            "type": "Boolean",
+            "optional": false,
+            "field": "focused",
+            "description": "<p>If the 'data-focus' element was found.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Reactium Usage",
+        "content": "import cn from 'classnames';\nimport React, { useRef } from 'react';\nimport { useFocusEffect } from 'reactium-core/sdk';\n\nconst MyComponent = props => {\n    const containerRef = useRef();\n\n    const [focused] = useFocusEffect(containerRef.current);\n\n    return (\n        <form ref={containerRef}>\n            <input className={cn({ focused })} type='text' data-focus />\n            <button type='submit'>Submit</button>\n        </form>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "Returns",
+        "content": "{Array} [focused:Element, setFocused:Function]",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/focus-effect.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useFulfilledObject(object,keys)",
+    "title": "useFulfilledObject()",
+    "name": "useFulfilledObject",
+    "group": "ReactHook",
+    "description": "<p>Asyncronous React hook that determines if the supplied object has values for the supplied keys. Useful when you have many <code>useEffect</code> calls and need to know if multiple pieces of the state are set and ready for rendering.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "object",
+            "description": "<p>The object to check.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": false,
+            "field": "keys",
+            "description": "<p>List of object paths to validate.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "\nimport React, { useEffect, useState } from 'react';\nimport { useFulfilledObject } from 'reactium-core/sdk';\n\nconst MyComponent = () => {\n\n    const [state, setNewState] = useState({});\n    const [updatedState, ready, attempts] = useFulfilledObject(state, ['msg', 'timestamp']);\n\n    const setState = newState => {\n        newState = { ...state, ...newState };\n        setNewState(newState);\n    };\n\n    useEffect(() => {\n        if (!state.msg) {\n            setState({ msg: 'ok'});\n        }\n    }, [state]);\n\n    useEffect(() => {\n        if (!state.timestamp) {\n            setState({ timestamp: Date.now() });\n        }\n    }, [state]);\n\n    const render = () => {\n        return ready !== true ? null : <div>I'm READY!!</div>;\n    };\n\n    return render();\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/fulfilled-object.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useHandle(id,defaultValue)",
+    "title": "useHandle()",
+    "description": "<p>React hook to subscribe to a specific imperative handle reference. Useful for having one functional component control another.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": true,
+            "field": "defaultValue",
+            "description": "<p>the value to use for the handle if it does not exist.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useHandle",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Counter.js",
+        "content": "import React, { useState } from 'react';\nimport { useRegisterHandle } from 'reactium-core/sdk';\n\nconst Counter = ({id = 1}) => {\n    const [count, setCount] = useState(Number(id));\n\n    // id 'counter.1' by default\n    useRegisterHandle(['counter', id], () => ({\n        increment: () => setCount(count + 1),\n    }), [count]);\n\n    return (\n        <div>\n            <h1>Counter {id}</h1>\n            Count: {count}\n        </div>\n    );\n};\n\nexport default Counter;",
+        "type": "json"
+      },
+      {
+        "title": "CounterControl.js",
+        "content": "import React from 'react';\nimport { useHandle } from 'reactium-core/sdk';\n\nconst noop = () => {};\nconst CounterControl = () => {\n    // Get increment control on handle identified at path 'counter.1'\n    const { increment } = useHandle('counter.1', { increment: noop }});\n\n    return (\n        <div>\n            <h1>CounterControl</h1>\n            <button onClick={increment}>Increment Counter</button>\n        </div>\n    );\n};\n\nexport default CounterControl;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useHookComponent(hookName,defaultComponent,...params)",
+    "title": "useHookComponent()",
+    "description": "<p>A React hook used to define React component(s) that can be overrided by Reactium plugins, using the <code>Reactium.Component.register()</code> function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "hookName",
+            "description": "<p>the unique string used to register component(s).</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Component",
+            "optional": false,
+            "field": "defaultComponent",
+            "description": "<p>the default React component(s) to be returned by the hook.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "params",
+            "description": "<p>variadic list of parameters to be passed to the Reactium hook specified by hookName.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useHookComponent",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "parent.js",
+        "content": "import React from 'react';\nimport { useHookComponent } from 'reactium-core/sdk';\n\n// component to be used unless overriden by Reactium.Component.register()\nconst DefaultComponent = () => <div>Default or Placeholder component</div>\n\nexport props => {\n    const MyComponent = useHookComponent('my-component', DefaultComponent);\n    return (\n        <div>\n            <MyComponent {...props} />\n        </div>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "reactium-hooks.js",
+        "content": "import React from 'react';\nimport Reactium from 'reactium-core/sdk';\n\n// component to be used unless overriden by Reactium.Component.register()\nconst ReplacementComponent = () => <div>My Plugin's Component</div>\n\nReactium.Component.register('my-component', ReplacementComponent);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/component.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useIsContainer(element,container)",
+    "title": "useIsContainer()",
+    "name": "useIsContainer",
+    "group": "ReactHook",
+    "description": "<p>React hook that determines if the element is a child of the container. Useful for traversing the DOM to find out if an event or action happened within the specified container.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Node",
+            "optional": false,
+            "field": "element",
+            "description": "<p>The inner most element. Consider this the starting point.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Node",
+            "optional": false,
+            "field": "container",
+            "description": "<p>The outer most element. Consider this the destination.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import { useIsContainer } from 'reactium-core/sdk';\nimport React, { useEffect, useRef, useState } from 'react';\n\nexport const Dropdown = props => {\n    const container = useRef();\n\n    const [expanded, setExpanded] = useState(props.expanded || false);\n\n    const isContainer = useIsContainer();\n\n    const dismiss = e => {\n        // already dismissed? -> do nothing!\n        if (!expanded) return;\n\n        // e.target is inside container.current? -> do nothing!\n        if (isContainer(e.target, container.current)) return;\n\n        // e.target is outside container.current? -> collapse the menu\n        setExpanded(false);\n    };\n\n    const toggle = () => setExpanded(!expanded);\n\n    useEffect(() => {\n        if (!container.current || typeof window === 'undefined') return;\n\n        window.addEventListener('mousedown', dismiss);\n        window.addEventListener('touchstart', dismiss);\n\n        return () => {\n            window.removeEventListener('mousedown', dismiss);\n            window.removeEventListener('touchstart', dismiss);\n        }\n\n    }, [container.current]);\n\n    return (\n        <div ref={container}>\n            <button onClick={toggle}>Toggle Dropdown</button>\n            {expanded && (\n                <ul>\n                    <li><a href='#item-1' onClick={toggle}>Item 1</a></li>\n                    <li><a href='#item-2' onClick={toggle}>Item 2</a></li>\n                    <li><a href='#item-3' onClick={toggle}>Item 3</a></li>\n                </ul>\n            )}\n        </div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/is-container.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useRefs()",
+    "title": "useRefs()",
+    "group": "ReactHook",
+    "name": "useRefs",
+    "description": "<p>Creates a single reference object that can be managed using the <code>get</code>/<code>set</code>/<code>del</code>/<code>clear</code> functions.</p>",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React, { useEffect, useState } from 'react';\nimport { useRefs } from '@atomic-reactor/reactium-sdk-core';\n\nconst MyComponent = () => {\n    const refs = useRefs();\n    const [state, setState] = useState({ input: null });\n\n    const onClick = () => {\n        const inputElm = refs.get('input');\n        setState({ ...state, input: inputElm.value });\n        inputElm.value = '';\n    };\n\n    return (\n        <div ref={elm => refs.set('container', elm)}>\n            {state.input && <div>{state.input}</div>}\n            <input type='text' ref={elm => refs.set('input', elm)} />\n            <button onClick={onClick}>Update</button>\n        </div>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "Proxy Reference Usage",
+        "content": "// sometimes you need a forwarded ref to be a ref object from useRef() or React.createRef()\n// You can create proxy factory for the refs to achieve this.\nimport React, { useEffect, useState } from 'react';\nimport { EventForm } from '@atomic-reactor/reactium-ui';\nimport { useRefs } from '@atomic-reactor/reactium-sdk-core';\n\nconst MyComponent = () => {\n   const refs = useRefs();\n   // creates a factory for React.createRef() object to your refs\n   const refProxy = refs.createProxy('form');\n\n   const [state, setState] = useState({});\n\n   const onSubmit = e => {\n       const formRef = refs.get('form');\n       setState({ ...formRef.getValue() });\n   };\n\n   // EventForm expects a reference object, not a callback function\n   // When EventForm references ref.current, it will actually get refs.get('form').\n   // When EventForm sets the ref.current value, it will actually perform refs.set('form', value);\n   return (\n       <EventForm ref={refProxy} onSubmit={onSubmit}>\n           <input type='text' name=\"foo\" />\n           <button type=\"submit\">Submit the Form</button>\n       </EventForm>\n   );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useRefs.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useRegisterHandle(id,cb,deps)",
+    "title": "useRegisterHandle()",
+    "description": "<p>React hook to create a new imperative handle reference, similar to <code>useImperativeHandle()</code> except that instead of using <code>React.forwardRef()</code> to attach the handle to a parent compenent ref. A ref is generated for you and is assigned the current value of the callback <code>cb</code>, is registered with <code>Reactium.Handle</code>, and made available to all other components at the object path <code>id</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>Function that returns value to be assigned to the imperative handle reference.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": false,
+            "field": "deps",
+            "description": "<p>Array of values to watch for changes. When changed, your reference will be updated by calling <code>cb</code> again. All <code>Reactium.Handle.subscribe()</code> subscribers will be called on updates, and relevant <code>useHandle()</code> hooks will trigger rerenders.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useRegisterHandle",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useRegisterSyncHandle(id,cb,deps)",
+    "title": "useRegisterSyncHandle()",
+    "description": "<p>React hook to create a new imperative handle reference, similar to <code>useRegisterHandle()</code> except that it returns a sync state object (see useSyncState) and will cause rerenders in the controlled component.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "initial",
+            "description": "<p>value of the state handle.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useRegisterSyncHandle",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Counter.js",
+        "content": "import React, { useState } from 'react';\nimport { useRegisterSyncHandle } from 'reactium-core/sdk';\n\nconst Counter = ({id = 1}) => {\n    const state = useRegisterSyncHandle('counter', {\n        foo: {\n            count: Number(id)\n        },\n    });\n\n    state.extend('incrementCount', () => {\n        state.set('foo.count', state.get('foo.count', id) + 1);\n    });\n\n    return (\n        <div>\n            <h1>Counter {id}</h1>\n            Count: {state.get('foo.count', id)}\n        </div>\n    );\n};\n\nexport default Counter;",
+        "type": "json"
+      },
+      {
+        "title": "CounterControl.js",
+        "content": "import React from 'react';\nimport { useSelectHandle } from 'reactium-core/sdk';\n\nconst noop = () => {};\nconst CounterControl = () => {\n    const { handle, count } = useSelectHandle('counter', 'foo.count', 1);\n\n    // set state for Counter, as well as cause this component to rerender\n\n    return (\n        <div>\n            <h1>CounterControl</h1>\n            <button onClick={handle.incrementCount}>\n              Increment Counter ({count})\n            </button>\n        </div>\n    );\n};\n\nexport default CounterControl;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/sync-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useRoles(search)",
+    "title": "useRoles()",
+    "description": "<p>React hook to get roles object. If search is provided, will retrieve a specific role.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "search",
+            "description": "<p>Name, level or object id of the roles to retrieve. If not provide, an object will all roles will be returned.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useRoles",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/roles.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useScrollToggle()",
+    "title": "useScrollToggle()",
+    "description": "<p>React hook to that returns a control allowing you to <code>enable</code>, <code>disable</code>, or <code>toggle</code> scroll locking on the body element. Also registers the returned handle as <code>BodyScroll</code>. To use the BodyScroll handle, you need only apply useSelectHandle() in one global component. See useSelectHandle() for information on using registered handles.</p>",
+    "name": "useScrollToggle",
+    "group": "ReactHook",
+    "version": "1.2.7",
+    "examples": [
+      {
+        "title": "NPM Usage",
+        "content": "import { useScrollToggle } from '@atomic-reactor/reactium-sdk-core';",
+        "type": "json"
+      },
+      {
+        "title": "Reactium Usage",
+        "content": "import { useScrollToggle } from 'reactium-core/sdk';",
+        "type": "json"
+      },
+      {
+        "title": "Modal.js",
+        "content": "import React, { useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n    cxFactory,\n    useScrollToggle,\n    useIsContainer,\n    useEventEffect,\n    useRegister\n    HookComponent,\n} from '@atomic-reactor/reactium-sdk-core';\n\n const Modal = () => {\n    const bodyScroll = useScrollToggle();\n    const handle = useRegisterSyncHandle('Modal', {\n        open: false,\n        Contents: {\n            Component: () => null,\n        },\n    });\n\n    // Close modal and disable scroll lock on body\n    handle.extend('close', () => {\n        handle.set('open', false);\n        bodyScroll.enable();\n    });\n\n    // Open modal, showing component, and stop scroll on body\n    handle.extend('open', Component => {\n        handle.set('Contents', { Component });\n        handle.set('open', true);\n        bodyScroll.disable();\n    });\n\n    const isContainer = useIsContainer();\n    const container = useRef();\n    const content = useRef();\n    const dismiss = e => {\n        if (\n            isContainer(e.target, container.current) &&\n            !isContainer(e.target, content.current)\n        ) {\n            handle.close();\n        }\n    };\n\n    useEventEffect(\n        window,\n        {\n            mousedown: dismiss,\n            touchstart: dismiss,\n        },\n        [container.current],\n    );\n\n    const cn = cxFactory('modal');\n    const Component = handle.get('Contents.Component', () => null);\n\n    return ReactDOM.createPortal(\n        <div\n            ref={container}\n            className={`${cn()} ${cn({ open: handle.get('open', false) })}`}>\n            <div ref={content} className={cn('contents')}>\n                <Component modal={handle} />\n            </div>\n        </div>,\n        document.querySelector('body'),\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "LockToggle.js",
+        "content": "import React from 'react';\nimport {\n    useSelectHandle,\n} from '@atomic-reactor/reactium-sdk-core';\n\n// Somewhere else in the app, useScrollToggle() has been invoked.\nconst LockToggle = () => {\n    const { handle: BodyScroll } = useSelectHandle('BodyScroll');\n    return (\n        <button onClick={BodyScroll.toggle}>\n        {\n            BodyScroll.get('enabled') ? 'Lock Scrolling' : 'Unlock Scrolling'\n        }\n        </button>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useScrollToggle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useSelectHandle(id,cb,deps)",
+    "title": "useSelectHandle()",
+    "description": "<p>React hook to subscribe to updates to state on an imperative handle created by useRegisterSyncHandle. See useRegisterSyncHandle for full example.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String|Array|Function",
+            "optional": false,
+            "field": "selector",
+            "description": "<p>object path string or array, or selector function passed the sync state object (see useSyncState); returns seleted state</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": true,
+            "field": "default",
+            "description": "<p>default selected value (if selector is String or Array)</p>"
+          }
+        ]
+      }
+    },
+    "name": "useSelectHandle",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/sync-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useSettingGroup(group)",
+    "title": "useSettingGroup()",
+    "version": "3.2.1",
+    "description": "<p>Get and set a group of Actinium settings.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "group",
+            "description": "<p>the setting group id</p>"
+          }
+        ]
+      }
+    },
+    "name": "useSettingGroup",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React from 'react';\nimport { useSettingGroup } from 'reactium-core/sdk';\nimport op from 'object-path';\n\nexport default () => {\n    const { canGet, canSet, settingGroup, setSettingGroup } = useSettingGroup('MySettings');\n\n    // Set MySetting.foo = 'bar' on click\n    return (\n        <div>\n            {canGet && <span>Foo Setting: {op.get(settingGroup, 'foo')}</span>}\n\n            <button disabled={!canSet} onClick={() => setSettingGroup({\n                ...settingGroup,\n                foo: 'bar',\n            })}>Update Setting</button>\n        </div>\n    )\n}",
+        "type": "json"
+      },
+      {
+        "title": "Returns",
+        "content": "{\n    canGet, // Boolean, if current user is allowed to get this setting group\n    canSet, // Boolean, if current user is allowed to set this setting group\n    settingGroup, // setting group object\n    setSettingGroup, // wrapper around Reactium.Setting.set(), will trigger optimistic update and rerender on response\n}",
+        "type": "json"
+      }
+    ],
+    "filename": ".core/sdk/named-exports/setting.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useStatus(initialStatus)",
+    "title": "useStatus()",
+    "group": "ReactHook",
+    "name": "useStatus",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "initialStatus",
+            "defaultValue": "pending",
+            "description": "<p>The initial status of the hook.</p>"
+          }
+        ]
+      }
+    },
+    "description": "<p>Synchronously set a status value that can be checked within a function scope without updating the state of the component. Useful when doing asynchronous activities and the next activity depends on a status of some sort from the previous activity.</p> <p>Returns [status:String, setStatus:Function, isStatus:Function, getStatus:Function]</p> <h3>status</h3> <p>The current asynchronous status value. (is accurate once per render)</p> <h3>setStatus(status:String, forceRender:Boolean = false)</h3> <p>Set the status value. If forceRender is true, a rerender will be triggered. <em><strong>Beware:</strong></em> forceRender may have unintended consequence and should be used in last status before re-rendering situations only.</p> <h3>isStatus(statuses:Array)</h3> <p>Check if the current status matches the statuses passed.</p> <h3>getStatus()</h3> <p>Get the synchrounous value of the status. This can matter if you need to set and check the value in the same render cycle.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useStatus.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useSyncHandle(id,updateEvent)",
+    "title": "useSyncHandle()",
+    "description": "<p>React hook to subscribe to updates for a registered sync handle.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "updateEvent",
+            "defaultValue": "set",
+            "description": "<p>Trigger update of the consuming component when EventTarget event of this type is dispatched. Defaults tot 'set'.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useSyncHandle",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/sync-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useSyncState(initialState,updateEvent)",
+    "title": "useSyncState()",
+    "name": "useSyncState",
+    "group": "ReactHook",
+    "description": "<p>Intended to provide an object to get and set state synchrounously, while providing a <code>EventTarget</code> object that can dispatch a <code>set</code> event whenever the state is changed. The hook will also dispatch a <code>change</code> event whenever the synced state changes. The hook can also listen for a specified event on the <code>EventTarget</code> object, and update the synced state with the <code>event.detail</code> property when the event is dispatched.</p> <p>The hook uses the <code>ReactiumSyncState</code> class to implement the synced state and <code>EventTarget</code> behavior. The class uses the <a href=\"https://github.com/mariocasciaro/object-path\"><code>object-path</code></a> module to manipulate the state object, and provides the following methods:</p> <ul> <li><code>get(path, defaultValue)</code>: Gets the value at the specified path in the synced state, or the entire synced state if no path is provided. If the value at the specified path is <code>undefined</code>, returns the provided default value instead.</li> <li><code>set(path, value)</code>: Sets the value at the specified path in the synced state, or replaces the entire synced state if no path is provided. The <code>path</code> parameter can be a string or array, representing a path in the object, or <code>undefined</code> to replace the entire object. Dispatches a <code>set</code> event. If the new value is different from the previous value, also dispatches a <code>change</code> event.</li> <li><code>set(path, value, update)</code>: Sets the value at the specified path in the synced state, or replaces the entire synced state if no path is provided. If <code>update</code> is <code>true</code>, dispatches a <code>set</code> event. If the new value is different from the previous value and <code>update</code> is <code>true</code>, also dispatches a <code>change</code> event. The <code>path</code> parameter can be a string or array, representing a path in the object, or <code>undefined</code> to replace the entire object.</li> <li><code>extend(prop, method)</code>: Extends the <code>ReactiumSyncState</code> instance with the provided method, bound to the instance.</li> </ul>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "initialState",
+            "description": "<p>The initial state of the synced state.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "string",
+            "optional": true,
+            "field": "updateEvent",
+            "defaultValue": "set",
+            "description": "<p>The event name to listen for on the <code>EventTarget</code> object. When the event is dispatched, the hook will update the synced state with the <code>event.detail</code> property, and trigger a rerender of the React component.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Simple",
+        "content": "import React from 'react';\nimport { useSyncState } from 'reactium-sdk-core';\n\nconst ExampleComponent = () => {\n    const [syncState, setSyncState] = useSyncState({ count: 0 });\n\n    return (\n        <>\n            <div>Count: {syncState.get('count')}</div>\n            <button onClick={() => setSyncState({ count: syncState.get('count') + 1 })}>\n                Increment\n            </button>\n        </>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "get and set",
+        "content": "import { useSyncState } from 'reactium-sdk-core';\n\nfunction MyComponent() {\n  const syncState = useSyncState({ foo: 'bar' });\n\n  const handleClick = () => {\n    // Get the entire synced state\n    console.log(syncState.get()); // { foo: 'bar' }\n\n    // Get a property of the synced state\n    console.log(syncState.get('foo')); // 'bar'\n\n    // Update a property of the synced state\n    syncState.set('foo', 'baz');\n    console.log(syncState.get('foo')); // 'baz'\n\n    // Replace the entire synced state\n    syncState.set({ foo: 'bar', baz: 'qux' });\n    console.log(syncState.get()); // { foo: 'bar', baz: 'qux' }\n  };\n\n  return <button onClick={handleClick}>Update State</button>;\n}",
+        "type": "json"
+      },
+      {
+        "title": "Form Usage",
+        "content": "import { useSyncState } from 'reactium-sdk-core';\n\nfunction MyForm() {\n  const syncState = useSyncState({\n    user: {\n      name: 'John Doe',\n      age: 30,\n      address: {\n        street: '123 Main St',\n        city: 'New York',\n        state: 'NY',\n      },\n    },\n  });\n\n  const handleChange = (event) => {\n    const { name, value } = event.target;\n    syncState.set(name, value);\n  };\n\n  return (\n    <form>\n      <label htmlFor=\"name\">Name:</label>\n      <input\n        type=\"text\"\n        id=\"name\"\n        name=\"user.name\"\n        value={syncState.get('user.name')}\n        onChange={handleChange}\n      />\n      <br />\n      <label htmlFor=\"age\">Age:</label>\n      <input\n        type=\"number\"\n        id=\"age\"\n        name=\"user.age\"\n        value={syncState.get('user.age')}\n        onChange={handleChange}\n      />\n      <br />\n      <label htmlFor=\"street\">Street:</label>\n      <input\n        type=\"text\"\n        id=\"street\"\n        name=\"user.address.street\"\n        value={syncState.get('user.address.street')}\n        onChange={handleChange}\n      />\n      <br />\n      <label htmlFor=\"city\">City:</label>\n      <input\n        type=\"text\"\n        id=\"city\"\n        name=\"user.address.city\"\n        value={syncState.get('user.address.city')}\n        onChange={handleChange}\n      />\n      <br />\n      <label htmlFor=\"state\">State:</label>\n      <input\n        type=\"text\"\n        id=\"state\"\n        name=\"user.address.state\"\n        value={syncState.get('user.address.state')}\n        onChange={handleChange}\n      />\n      <br />\n    </form>\n  );\n}",
+        "type": "json"
+      }
+    ],
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "ReactiumSyncState",
+            "optional": false,
+            "field": "syncState",
+            "description": "<p>The <code>ReactiumSyncState</code> instance returned by the hook.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useSyncState.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useWindow()",
+    "title": "useWindow()",
+    "description": "<p>React hook which resolves to the browser or electron window when run in normal context or in the Reactium toolkit. Otherwise will return <code>undefined</code>. This is important particularly when you need to inspect the window inside the <code>react-frame-component</code> (<code>FrameContextConsumer</code>) which sandboxes your component withing the toolkit. Your component will automatically be rendered inside the WindowProvider, which will provide the correct <code>window</code> and <code>document</code> objects. See <code>useWindowSize()</code> for the most important use case.</p>",
+    "examples": [
+      {
+        "title": "BrowserComponent.js",
+        "content": "import Reactium, { useWindow } from 'reactium-core/sdk';\nimport React, { useEffect } from 'react';\nimport op from 'object-path';\n\nexport default () => {\n    const window = useWindow();\n    const [width, setWidth] = op.get(window, 'innerWidth', 1);\n\n    useEffect(() => {\n        const isBrowser = Reactium.Utils.isWindow(window);\n        const updateWidth = () => setWidth(window.innerWidth);\n\n        // safe for server-side rendering, which has no window\n        // when used in toolkit Frame, will use correct window object\n        if (isBrowser) {\n            window.addEventListener('resize', updateWidth)\n            return () => window.removeEventListener('resize', updateWidth);\n        }\n    }, []);\n};\n\n // import WindowProvider from 'reactium-core/components/WindowProvider';",
+        "type": "json"
+      }
+    ],
+    "name": "useWindow",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useWindowSize(params)",
+    "title": "useWindowSize()",
+    "description": "<p>Returns window <code>innerWidth</code> number, <code>innerHeight</code> number, and current <code>breakpoint</code>, and updates on window resizes. When using the out of the box scss styles in Reactium, a grid system is in place, and is defined by an overridable sass map <code>$breakpoints-max</code>, defined by default as:</p> <pre class=\"prettyprint\">$breakpoints-max: ('xs': 640, 'sm': 990, 'md': 1280, 'lg': 1440,'xl': 1600) !default; </code></pre>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": true,
+            "field": "params",
+            "description": "<p><code>defaultWidth</code>, <code>defaultHeight</code>, and debounce <code>delay</code> properties.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "params.defaultWidth",
+            "defaultValue": "1",
+            "description": "<p>Default width returned by the hook when window object is <code>undefined</code>.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "params.defaultHeight",
+            "defaultValue": "1",
+            "description": "<p>Default height returned by the hook when window object is <code>undefined</code>.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "params.delay",
+            "defaultValue": "0",
+            "description": "<p>Debounce delay to throttle many window resize events, to prevent unnecessary rerenders of your component using this hook.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useWindowSize",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "ResponsiveComponent.js",
+        "content": "import React from 'react';\nimport { useWindowSize } from 'reactium-core/sdk';\n\nconst Mobile = () => {\n   return (\n       <div>I'm a mobile component</div>\n   );\n}\n\nconst Tablet = () => {\n   return (\n       <div>I'm a tablet component</div>\n   );\n}\n\nconst Desktop = () => {\n   return (\n       <div>I'm a desktop component</div>\n   );\n}\n\nexport () => {\n   const { breakpoint } = useWindowSize();\n\n   switch(breakpoint) {\n       case 'xl':\n       case 'lg':\n       return <Desktop />;\n\n       case 'md':\n       return <Tablet />;\n\n       case 'xs':\n       case 'sm':\n       default:\n       return <Mobile />;\n   }\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useZoneComponents(zone)",
+    "title": "useZoneComponents()",
+    "description": "<p>A React hook used in the <code>Zone</code> component to determine what components should currently be rendered. Useful to observe a zone in another component. If you want to observe to the zone components without necessarily causing a rerender in your component, use <code>Reactium.Zone.getZoneComponents()</code> (to get a list of components in the zone), alone or in combination with <code>Reactium.Zone.subscribe()</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone id.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": false,
+            "field": "dereference",
+            "defaultValue": "true",
+            "description": "<p>If true, returns the current value of the components in the zone, separate from the reference. Otherwise, returns the ReactiumSyncState object. This can be useful if you wish to use the components value with a non-memoized value.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useZoneComponents",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import React from 'react';\nimport { useZoneComponents } from 'reactium-core/sdk';\n\nexport props => {\n    const zoneComponents = useZoneComponents('my-zone');\n\n    return (\n        <div>\n            Components in Zone: {zoneComponents.length}\n        </div>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "NoDereference",
+        "content": "import React from 'react';\nimport { useZoneComponents } from 'reactium-core/sdk';\n\n// Use this method when the zone components are not refreshing smoothly on\n// rendering.\nexport props => {\n    const zoneComponents = useZoneComponents('my-zone', false);\n\n    return (\n        <div>\n            Components in Zone: {zoneComponents.get().length}\n        </div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/Zone.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "Object",
+    "url": "Cache",
+    "title": "Cache",
+    "version": "3.0.3",
+    "name": "Cache",
+    "group": "Reactium.Cache",
+    "description": "<p>Cache allows you to easily store application data in memory.</p>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.clear()",
+    "title": "Cache.clear()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.clear",
+    "description": "<p>Delete all cached values.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The key to delete. If the value is an <code>{Object}</code> you can use an object path to delete a specific part of the value. The updated value is then returned.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Cache.clear();",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.del(key)",
+    "title": "Cache.del()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.del",
+    "description": "<p>Delete the value for a given key. Returns <code>{Boolean}</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The key to delete. If the value is an <code>{Object}</code> you can use an object path to delete a specific part of the value. The updated value is then returned.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "// Given the cached value: { foo: { bar: 123, blah: 'hahaha' } }\nReactium.Cache.del('foo.bar'); // returns: { blah: 'hahaha' }\nReactium.Cache.del('foo');     // returns: true",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.get(key)",
+    "title": "Cache.get()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.get",
+    "description": "<p>Retrieves the value for a given key. If the value is not cached <code>null</code> is returned.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "key",
+            "description": "<p>The key to retrieve. If the value is an <code>{Object}</code> you can use an object path for the key. If no key is specified the entire cache is returned.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": true,
+            "field": "default",
+            "description": "<p>The default value to return if key is not found.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "// Given the cached value: { foo: { bar: 123 } }\nReactium.Cache.get('foo.bar'); // returns: 123;\nReactium.Cache.get('foo');     // returns: { bar: 123 }",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.keys()",
+    "title": "Cache.keys()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.keys",
+    "description": "<p>Returns an array of the cached keys.</p>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.memsize()",
+    "title": "Cache.memsize()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.memsize",
+    "description": "<p>Returns the number of entries taking up space in the cache.</p>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.merge(values)",
+    "title": "Cache.merge()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.merge",
+    "description": "<p>Merges the supplied values object with the current cache. Any existing entries will remain in cache. Duplicates will be overwritten unless <code>option.skipDuplicates</code> is <code>true</code>. Entries that would have exipired since being merged will expire upon merge but their timeoutCallback will not be invoked. Returns the new size of the cache.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "values",
+            "description": "<p>Key value pairs to merge into the cache.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "// Give the existing cache: { foo: 'bar' }\n\nReactium.Cache.merge({\n    test: {\n        value: 123,\n        expire: 5000,\n    },\n});\n\nReactium.Cache.get()\n// returns: { foo: 'bar', test: 123 }",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.set(key,value,timeout,timeoutCallback)",
+    "title": "Cache.set()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.set",
+    "description": "<p>Sets the value for a given key. If the value is an <code>{Object}</code> and is already cached, you can use an object path to update a specific part of the value. Returns the cached value.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The key to set. If the key is an object path and the key does not exist, it will be created.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "value",
+            "description": "<p>The value to cache.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "timeout",
+            "description": "<p>Remove the value in the specified time in milliseconds. If no timeout value specified, the value will remain indefinitely.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": true,
+            "field": "timeoutCallback",
+            "description": "<p>Function called when the timeout has expired. The timeoutCallback will be passed the key and value as arguments.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "// The following are equivalent\nReactium.Cache.set('foo', { bar: 123 });\nReactium.Cache.set('foo.bar', 123);\n\n// Set to expire in 5 seconds\nReactium.Cache.set('error', 'Ivnalid username or password', 5000);\n\n// Set to expire in 5 seconds and use a timeoutCallback\nReactium.Cache.set('foo', { bar: 456 }, 5000, (key, value) => console.log(key, value));",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.size()",
+    "title": "Cache.size()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.size",
+    "description": "<p>Returns the current number of entries in the cache.</p>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.subscribe(key,cb)",
+    "title": "Cache.subscribe()",
+    "group": "Reactium.Cache",
+    "name": "Cache.subscribe",
+    "description": "<p>Subscribe to cache changes that impact a particular key. Returns an unsubscribe function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "key",
+            "description": "<p>object path of the cache value (array or string)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>The callback function to call when impacting changes have been made to the subscribed cache. Changes include any set/put, delete, clear, merge, or expiration that <em>may</em> impact the value you care about.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "const foo = Reactium.Cache.get('values.foo');\nReactium.Cache.subscribe('values.foo', ({op, ...params}) => {\nswitch(op) {\n    case 'set': {\n        const { key, value } = params;\n        // do something with new value if applicable\n        // you can see the key that impacted the cache value\n        break;\n    }\n     case 'del': {\n        // the key that was deleted\n        const { key } = params;\n        // do something about the deletion\n        break;\n    }\n     case 'expire': {\n        // do something about expiration (which will have impacted your value for sure)\n        // this will never be called if your value doesn't expire\n        break;\n    }\n     case 'merge': {\n        // complete cache object after merge\n        // may impact you, you'll have to check\n        const { obj } = params;\n        if (op.get(obj, 'values.foo') !== foo) {\n            // do something\n        }\n        break;\n    }\n     default:\n    break;\n}\n});",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.check(capabilities,strict)",
+    "title": "Capability.check",
+    "version": "3.2.1",
+    "name": "Capability.check",
+    "group": "Reactium.Capability",
+    "description": "<p>Check a list of capabilities on the current user.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": false,
+            "field": "capabilities",
+            "description": "<p>list of string capabilities to check, returns true if current user is allowed, false if not allowed</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "strict",
+            "defaultValue": "true",
+            "description": "<p>When true all capabilities must be allowed for user for check to return true, otherwise only one capability is required to get a true value.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "userID",
+            "description": "<p>The Reactium.User id to check.</p>"
+          }
+        ]
+      }
+    },
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.check(capabilities,strict)",
+    "title": "Capability.check",
+    "version": "3.2.1",
+    "description": "<p>Retrieve an enumerated list of capabilities for the specified user.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": false,
+            "field": "capabilities",
+            "description": "<p>list of string capabilities to check, returns true if current user is allowed, false if not allowed.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "userID",
+            "description": "<p>The Actinium.User id value. If empty the current user is used.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Capability.check",
+    "group": "Reactium.Capability",
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.get(capability)",
+    "title": "Capability.get()",
+    "version": "3.2.1",
+    "description": "<p>Get allowed and excluded roles for a capability.</p>",
+    "name": "Capability.get",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nCapability.get('do-something').then(({allowed = [], excluded = []}) => {\n    if (allowed.includes('contributor')) console.log('Contributor allowed to do something');\n})",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.grant(capability,role)",
+    "title": "Capability.grant()",
+    "version": "3.2.1",
+    "description": "<p>Add role(s) to the capability allowed list.</p>",
+    "name": "Capability.grant",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "Capability.grant('taxonomy.update', 'moderator');\nCapability.grant('taxonomy.update', ['moderator']);",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.restrict(capability,role)",
+    "title": "Capability.restrict()",
+    "version": "3.2.1",
+    "description": "<p>Add role(s) to the capability excluded list.</p>",
+    "name": "Capability.restrict",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "Capability.restrict('taxonomy.update', 'moderator');\nCapability.restrict('taxonomy.update', ['moderator']);",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.revoke(capability,role)",
+    "title": "Capability.revoke()",
+    "version": "3.2.1",
+    "description": "<p>Remove role(s) from the capability allowed list.</p>",
+    "name": "Capability.revoke",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "Capability.revoke('taxonomy.update', 'moderator');\nCapability.revoke('taxonomy.update', ['moderator']);",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.unrestrict(capability,role)",
+    "title": "Capability.unrestrict()",
+    "version": "3.2.1",
+    "description": "<p>Remove role(s) from the capability excluded list.</p>",
+    "name": "Capability.unrestrict",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "Capability.unrestrict('taxonomy.update', 'moderator');\nCapability.unrestrict('taxonomy.update', ['moderator']);",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Function",
+    "url": "Component.register(hook,component,order)",
+    "title": "Component.register()",
+    "group": "Reactium.Component",
+    "name": "Component.register",
+    "description": "<p>Register a React component to be used with a specific useHookComponent React hook. This must be called before the useHookComponent that defines the hook.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "hook",
+            "description": "<p>The hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "component",
+            "description": "<p>component(s) to be output by useHookComponent</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": false,
+            "field": "order",
+            "description": "<p>precedent of this if Component.register is called multiple times (e.g. if you are trying to override core or another plugin)</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-hooks.js",
+        "content": "import React from 'react';\nimport Reactium from 'reactium-core/sdk';\n\n// component to be used unless overriden by Reactium.Component.register()\nconst ReplacementComponentA = () => <div>My Plugin's Component</div>\nconst ReplacementComponentB = () => <div>My Alternative Component</div>\n\n// Simple Version\nReactium.Component.register('my-component', ReplacementComponentA);\n\n// Advanced Form using Reactium.Hook SDK\nReactium.Hook.register('my-component', async (...params) => {\n    const context = params.pop(); // context is last argument\n    const [param] = params;\n    if (param === 'test') {\n        context.component = ReplacementComponentA;\n    } else {\n        context.component = ReplacementComponentB;\n    }\n}\n})",
+        "type": "json"
+      },
+      {
+        "title": "parent.js",
+        "content": "import React from 'react';\nimport { useHookComponent } from 'reactium-core/sdk';\n\n// component to be used unless overriden by Reactium.Component.register()\nconst DefaultComponent = () => <div>Default or Placeholder component</div>\n\nexport props => {\n    const MyComponent = useHookComponent('my-component', DefaultComponent, 'test');\n    return (\n        <div>\n            <MyComponent {...props} />\n        </div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/component/index.js",
+    "groupTitle": "Reactium.Component"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.get(id)",
+    "title": "Handle.get()",
+    "description": "<p>Get a specific imperative handle reference, by object path (id). If id is full object path to the handle, returns a React reference if it exists, otherwise <code>undefined</code>. If id is partial object path, returns object containing one or more references if the path exists, otherwise 'undefined'.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'</p>"
+          }
+        ]
+      }
+    },
+    "name": "Handle.get",
+    "group": "Reactium.Handle",
+    "examples": [
+      {
+        "title": "CountList.js",
+        "content": "import React from 'react';\nimport Counter from './Counter';\nimport CounterControl from './CounterControl';\n const CountList = props => {\n    return (\n        <>\n            <Counter id='1'/>\n            <Counter id='2'/>\n            <CounterControl />\n        </>\n    );\n};\n export default CountList;",
+        "type": "json"
+      },
+      {
+        "title": "Counter.js",
+        "content": "import React, { useState } from 'react';\nimport { useRegisterHandle } from 'reactium-core/sdk';\n const Counter = ({id = 1}) => {\n    const [count, setCount] = useState(Number(id));\n     // hook form of Handle.register and Handle.unregister\n    // handles ref creation for you\n    useRegisterHandle(['counter', id], () => ({\n        increment: () => setCount(count + 1),\n    }), [count]);\n     return (\n        <div>\n            <h1>Counter {id}</h1>\n            Count: {count}\n        </div>\n    );\n};\n export default Counter;",
+        "type": "json"
+      },
+      {
+        "title": "CounterControl.js",
+        "content": "import React from 'react';\nimport Reactium from 'reactium-core/sdk';\n const CounterControl = () => {\n   // get object with all handles in the \"counter\" partial path\n    const handles = Reactium.Handle.get('counter');\n     const click = () => {\n       // equivalent to getting handle 'counter.1' and `counter.2` separately\n       // loop through all counters and call increment on click\n        Object.values(handles).forEach(({current}) => current.increment())\n    };\n     return (\n        <div>\n            <h1>CounterControl</h1>\n            <button onClick={click}>Increment All Counters</button>\n        </div>\n    );\n};\n export default CounterControl;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.list()",
+    "title": "Handle.list()",
+    "description": "<p>Get full object containing all current reference handles.</p>",
+    "name": "Handle.list",
+    "group": "Reactium.Handle",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.register(id,ref)",
+    "title": "Handle.register()",
+    "description": "<p>Register an imperative handle reference. See <code>useRegisterHandle()</code> React hook for easier pattern for functional components.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Ref",
+            "optional": false,
+            "field": "ref",
+            "description": "<p>React reference created with <code>React.createRef()`` or </code>React.useRef()`.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "update",
+            "defaultValue": "true",
+            "description": "<p>Update <code>useHandle</code> subscribers of this handle id.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Handle.register",
+    "group": "Reactium.Handle",
+    "examples": [
+      {
+        "title": "MyControllableComponent.js",
+        "content": "import React, {useEffect, useState, useRef} from 'react';\nimport Reactium from 'reactium-core/sdk';\n// This component is externally controllable on registered handle\n// with id: 'controlled.handle' or ['controlled', 'handle']\nexport default () => {\nconst [count, setCount] = useState(1);\nconst increment = () => setCount(count + 1);\nconst ref = useRef({\n    increment,\n});\n useEffect(() => {\n    Reactium.register('controlled.handle', ref);\n    return () => Reactium.unregister('controlled.handle');\n}, [count]);\n return (<div>Count is {count}</div>);\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.subscribe(cb)",
+    "title": "Handle.subscribe()",
+    "description": "<p>Subscribe to changes in imperative handle references (registrations and unregistrations). Returns unsubscribe function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>callback to be called when a handle is registered or unregistered</p>"
+          }
+        ]
+      }
+    },
+    "name": "Handle.subscribe",
+    "group": "Reactium.Handle",
+    "examples": [
+      {
+        "title": "MyComponent.js",
+        "content": "import React, {useState, useEffect} from 'react';\nimport Reactium from 'reactium-core/sdk';\nimport op from 'object-path'\nexport default () => {\nconst [handle, updateHandle] = useState(Reactium.Handle.get('path.to.handle'));\nuseEffect(() => Reactium.Handle.subscribe(() => {\n    const h = Reactium.Handle.get('path.to.handle');\n    if (handle.current !== h.current) updateHandle(h);\n}), []);\n const doSomething = () => {\n    if (op.has(handle, 'current.action')) handle.current.action;\n};\n return (<button onClick={doSomething}>Some Action</button>);\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.unregister(id)",
+    "title": "Handle.unregister()",
+    "description": "<p>Unregister an imperative handle reference. See <code>Handle.register()</code> for example usage.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'</p>"
+          }
+        ]
+      }
+    },
+    "name": "Handle.unregister",
+    "group": "Reactium.Handle",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Objectt",
+    "url": "Reactium.Handle",
+    "title": "Handle",
+    "name": "Reactium.Handle",
+    "description": "<p>Similar concept to an imperative handle created when using <code>React.forwardRef()</code> and the <code>useImperativeHandle()</code> React hook. Reactium provides the <code>Reactium.Handle</code> object to manage references created in your components to allow imperative control of your component from outside the component. This is used when you wish to change the internal state of your component from outside using a technique other than changing the component <code>props</code> (i.e. declarative control).</p> <p>This technique makes use of references created with <code>React.createRef()</code> or the <code>useRef()</code> hook for functional components. The developer can then assign the <code>current</code> property of this reference to be an object containing methods or callbacks (i.e. methods that can invoke <code>this.setState()</code> or the update callback returned by <code>useState()</code> hook) that will cause the state of the component to change (and rerender).</p> <p>By registering this &quot;handle reference&quot; on the <code>Reactium.Handle</code> singleton, other distant components can exercise imperative control over your component.</p> <p>For developers that prefer the use of React hooks, Reactium provides two hooks for your use: <code>useRegisterHandle()</code> and <code>useHandle()</code> to register and use these handles respectively.</p>",
+    "group": "Reactium.Handle",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.flush(name)",
+    "title": "Hook.flush()",
+    "name": "Hook.flush",
+    "description": "<p>Clear all registered callbacks for a hook.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "type",
+            "defaultValue": "async",
+            "description": "<p>'async' or 'sync' hooks</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.list()",
+    "title": "Hook.list()",
+    "name": "Hook.list",
+    "description": "<p>Register a hook callback.</p>",
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.register(name,callback,order,id)",
+    "title": "Hook.register()",
+    "name": "Hook.register",
+    "description": "<p>Register a hook callback.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "callback",
+            "description": "<p>async function (or returning promise) that will be called when the hook is run. The hook callback will receive any parameters provided to Hook.run, followed by a context object (passed by reference to each callback).</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Integer",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>order of which the callback will be called when this hook is run.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "id",
+            "description": "<p>the unique id. If not provided, a uuid will be generated</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Hook.register('plugin-init', async context => {\n// mutate context object asynchrounously here\n    console.log('Plugins initialized!');\n}, Enums.priority.highest);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.registerSync(name,callback,order,id)",
+    "title": "Hook.registerSync()",
+    "name": "Hook.registerSync",
+    "description": "<p>Register a sync hook callback.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "callback",
+            "description": "<p>function returning promise that will be called when the hook is run. The hook callback will receive any parameters provided to Hook.run, followed by a context object (passed by reference to each callback).</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Integer",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>order of which the callback will be called when this hook is run.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "id",
+            "description": "<p>the unique id. If not provided, a uuid will be generated</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Hook.registerSync('my-sync-hook', context => {\n    // mutate context object synchrounously here\n    console.log('my-sync-hook run!');\n}, Enums.priority.highest);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.run(name,...params)",
+    "title": "Hook.run()",
+    "name": "Hook.run",
+    "description": "<p>Run hook callbacks.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "...params",
+            "description": "<p>any number of arbitrary parameters (variadic)</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>context object passed to each callback (after other variadic parameters)</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.runSync(name,...params)",
+    "title": "Hook.runSync()",
+    "name": "Hook.runSync",
+    "description": "<p>Run hook callbacks sychronously.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "...params",
+            "description": "<p>any number of arbitrary parameters (variadic)</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>context object passed to each callback (after other variadic parameters)</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.unregister(id)",
+    "title": "Hook.unregister()",
+    "name": "Hook.unregister",
+    "description": "<p>Unregister a registered hook callback by id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the unique id provided by Hook.register() or Hook.list()</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Plugin.isActive(ID)",
+    "title": "Plugin.isActive()",
+    "group": "Reactium.Plugin",
+    "name": "Plugin.isActive",
+    "description": "<p>Determine if a plugin ID is active.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the plugin id.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Plugin.isActive('Media');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/plugin/index.js",
+    "groupTitle": "Reactium.Plugin"
+  },
+  {
+    "type": "Function",
+    "url": "Plugin.list()",
+    "title": "Plugin.list()",
+    "group": "Reactium.Plugin",
+    "name": "Plugin.list",
+    "description": "<p>Return the list of registered plugins.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/plugin/index.js",
+    "groupTitle": "Reactium.Plugin"
+  },
+  {
+    "type": "Function",
+    "url": "Plugin.register(ID,order)",
+    "title": "Plugin.register()",
+    "name": "Plugin.register",
+    "description": "<p>Register a Reactium plugin.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the plugin id</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Integer",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>Priority of the plugin initialization respective to other existing plugins.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Plugin",
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nconst newReducer = (state = { active: false }, action) => {\n    if (action.type === 'ACTIVATE') {\n        return {\n            ...state,\n            active: true,\n        };\n    }\n    return state;\n};\n\nconst register = async () => {\n    await Reactium.Plugin.register('myPlugin');\n    Reactium.Reducer.register('myPlugin', newReducer);\n};\n\nregister();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/plugin/index.js",
+    "groupTitle": "Reactium.Plugin"
+  },
+  {
+    "type": "Function",
+    "url": "Plugin.unregister(ID)",
+    "title": "Plugin.unregister()",
+    "name": "Plugin.unregister",
+    "description": "<p>Unregister a Reactium plugin by unique id. This can only be called prior to the <code>plugin-dependencies</code> hook, or <code>Reactium.Plugin.ready === true</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the plugin id</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Plugin",
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import Reactium from 'reactium-core/sdk';\n\n// Before Reactium.Plugin.ready\nReactium.Hook.register('plugin-dependencies', () => {\n    // Prevent myPlugin registration callback from occurring\n    Reactium.Plugin.unregister('myPlugin');\n    return Promise.resolve();\n}, Enums.priority.highest)",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/plugin/index.js",
+    "groupTitle": "Reactium.Plugin"
+  },
+  {
+    "type": "Function",
+    "url": "Prefs.clear(key)",
+    "title": "Prefs.clear()",
+    "version": "0.0.17",
+    "description": "<p>Clear one or more preferences.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "key",
+            "description": "<p>If specified as an object-path, will unset a specific preference path. Otherwise, all preferences will be cleared.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Prefs.clear",
+    "group": "Reactium.Prefs",
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nReactium.Prefs.clear();",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/prefs/index.js",
+    "groupTitle": "Reactium.Prefs"
+  },
+  {
+    "type": "Function",
+    "url": "Prefs.get(key,defaultValue)",
+    "title": "Prefs.get()",
+    "version": "0.0.17",
+    "description": "<p>Get one or more preferences by object path.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "key",
+            "description": "<p>If specified as an object-path, will get a specific preference by this path. Otherwise, all preferences will be returned.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "defaultValue",
+            "description": "<p>The value to return if the preference has not been set.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Prefs.get",
+    "group": "Reactium.Prefs",
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nconst myPref = Reactium.Prefs.get('my.object.path', { someDefault: 'foo' });",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/prefs/index.js",
+    "groupTitle": "Reactium.Prefs"
+  },
+  {
+    "type": "Function",
+    "url": "Prefs.set(key,value)",
+    "title": "Prefs.set()",
+    "version": "0.0.17",
+    "description": "<p>Get one or more preferences by object path.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The object-path to use to set the value.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "value",
+            "description": "<p>The value to set to the key.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Prefs.set",
+    "group": "Reactium.Prefs",
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nReactium.Prefs.set('my.object.path', { value: 'foo' });",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/prefs/index.js",
+    "groupTitle": "Reactium.Prefs"
+  },
+  {
+    "type": "Object",
+    "url": "Reactium.Pulse.Task",
+    "title": "Pulse.Task",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task",
+    "description": "<p>Pulse Task object that performs the heavy lifting for the Pulse API.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.ID",
+    "title": "Pulse.Task.ID",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.ID",
+    "description": "<p>[read-only] The unique ID of the task. Returns: <code>String</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.attempt",
+    "title": "Pulse.Task.attempt",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.attempt",
+    "description": "<p>[read-only] The current attempt for the active task. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.delay",
+    "title": "Pulse.Task.delay",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.attempt",
+    "description": "<p>The current attempt for the active task. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.attempts",
+    "title": "Pulse.Task.attempts",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.attempts",
+    "description": "<p>The number of times a task will retry before it fails. Default: <code>-1</code>. You can set this value after the task has started.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.autostart",
+    "title": "Pulse.Task.autostart",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.autostart",
+    "description": "<p>[read-only] If the task autastarted upon creation. Default: <code>true</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.complete",
+    "title": "Pulse.Task.complete",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.complete",
+    "description": "<p>[read-only] Relevant only when the <code>repeat</code> property is higher than 1. Returns: <code>Boolean</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.count",
+    "title": "Pulse.Task.count",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.count",
+    "description": "<p>[read-only] The current number of times the task has succeeded. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.error",
+    "title": "Pulse.Task.error",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.error",
+    "description": "<p>[read-only] The current error message if applicable. Returns: <code>string</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.failed",
+    "title": "Pulse.Task.failed",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.failed",
+    "description": "<p>[read-only] Expresses if the current task has reached the maximum attempts. Returns: <code>Boolean</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.now()",
+    "title": "Pulse.Task.now()",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.now",
+    "description": "<p>Force run the task without waiting for it's delay. If the task is running this is a <code>noop</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.progress",
+    "title": "Pulse.Task.progress",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.progress",
+    "description": "<p>[read-only] The current amount of the repeat that has been completed. Relevant only when <code>repeat</code> is higher than 1. Returns: <code>0-1</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.repeat",
+    "title": "Pulse.Task.repeat",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.repeat",
+    "description": "<p>The current number of times to run the task. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.retry()",
+    "title": "Pulse.Task.retry()",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.retry",
+    "description": "<p>Force a retry of the task. Useful for when you want to manually handle retries within your callback function.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.start()",
+    "title": "Pulse.Task.start()",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.start",
+    "description": "<p>Start the task. Useful for when you want manually start a task in your callback function.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.status",
+    "title": "Pulse.Task.status",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.status",
+    "description": "<p>[read-only] The current status of the task. For comparing the status use the Pulse.ENUMS.STATUS values</p>",
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "const task = Pulse.get('MyTask');\nif (task.status === Pulse.ENUMS.STATUS.STOPPED) {\ntask.start();\n}",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.stop()",
+    "title": "Pulse.Task.stop()",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.stop",
+    "description": "<p>Stop the task</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.timer",
+    "title": "Pulse.Task.timer",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.timer",
+    "description": "<p>[read-only] The reference to the current setTimeout. This value will change for each task run. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.get(ID)",
+    "title": "Pulse.get()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.get",
+    "description": "<p>Retrieve a registered task. Returns a <code>Pulse.Task</code> object.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The ID of the task.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "const task = Reactium.Pulse.get('MyTask');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.register(ID,callback,options,params)",
+    "title": "Pulse.register()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.register",
+    "description": "<p>Register a new task. The callback function can be any function and supports returning a <code>Promise</code> from the function. If a <code>Promise</code> is rejected, or the callback function returns an <code>Error</code> object or <code>false</code>, a retry will be triggered if possible. In cases where no more retries can be executed, the task will fail.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The unique ID of the task.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "callback",
+            "description": "<p>The function to execute when the task is run. The first parameter passed to the callback function will be a reference to the current task object.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": true,
+            "field": "options",
+            "description": "<p>The <code>Pulse.Task</code> configuration object.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "..attempts",
+            "defaultValue": "-1",
+            "description": "<p>Number of times to retry a task. By default the task will retry indefinitely.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "..autostart",
+            "defaultValue": "true",
+            "description": "<p>Start the task when it is registered.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "..delay",
+            "defaultValue": "1000",
+            "description": "<p>Time in milliseconds before the task is run again. The task will not run again until after it's callback has been executed.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "..repeat",
+            "defaultValue": "-1",
+            "description": "<p>Number of times to repeat the task. Used in determining if the task is complete. A task with -1 as the value will never complete.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Arguments",
+            "optional": true,
+            "field": "params",
+            "description": "<p>Additional parameters to pass to the callback function.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "import React, { useEffect } from 'react';\nimport Reactium from 'reactium-core/sdk';\n\nconst MyComponent = () => {\n  const myFunction = (task, ...params) => {\n      // Do something here\n      const result = 1 === 2;\n\n      if (task.failed) { // Attempted the task 5 times\n          console.log('myFunction FAILED after', task.attempts, 'attempts with the following parameters:', ...params);\n      }\n\n      if (task.complete) { // Succeeded 5 times\n          console.log('myFunction COMPLETED after', task.attempts, 'attempts with the following parameters:', ...params);\n      }\n\n      // Trigger a retry because we're returning `false`\n      return result;\n  };\n\n  useEffect(() => {\n      // Register myFunction as a task\n      Reactium.Pulse.register('MyComponent', myFunction, {\n          attempts: 5,\n          delay: 1000,\n          repeat: 5\n      }, 'param 1', 'param 2', 'param 3');\n\n      // Unregister task when the component unmounts\n      return () => Reactium.Pulse.unregister('MyComponent');\n  }, [Reactium.Pulse]);\n\n  return <div>MyComponent</div>;\n};\n\nexport default MyComponent;",
+        "type": "json"
+      },
+      {
+        "title": "Persist",
+        "content": "// For cases where you want the task to persist even after the component has\n// been unmounted or the route has changed causing a rerender:\n\n\nimport React, { useEffect } from 'react';\nimport Reactium from 'reactium-core/sdk';\n\nconst MyComponent = () => {\n\n  useEffect(() => {\n      Reactium.Pulse.register('MyComponent', MyComponent.staticTask);\n  }, [Reactium.Pulse]);\n\n  return <div>MyComponent</div>\n};\n\nMyComponent.staticTask = (task, ...params) => new Promise((resolve, reject) => {\n  // Perform an async task\n  setTimeout(() => resolve('this is awkward...'), 10000);\n});\n\nexport default MyComponent;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.start(ID)",
+    "title": "Pulse.start()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.start",
+    "description": "<p>Start a registered task if it is stopped.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The task unique ID.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "Reactium.Pulse.start('MyTask');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.startAll()",
+    "title": "Pulse.startAll()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.startAll",
+    "description": "<p>Start all stopped tasks.</p>",
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "Reactium.Pulse.startAll();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.stop(ID)",
+    "title": "Pulse.stop()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.stop",
+    "description": "<p>Stop a registered task if it is running.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The task unique ID.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "Reactium.Pulse.stop('MyTask');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.stopAll()",
+    "title": "Pulse.stopAll()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.stopAll",
+    "description": "<p>Stop all running registered tasks.</p>",
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "Reactium.Pulse.stopAll();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.unregister(ID)",
+    "title": "Pulse.unregister()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.unregister",
+    "description": "<p>Stop and unregister a task. If the task is running, it's current attempt will resolve before the task is removed.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The task unique ID.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "useEffect(() => {\n   // Register myFunction as a task\n   Reactium.Pulse.register('MyComponent', myFunction, {\n       attempts: 5,\n       delay: 1000,\n       repeat: 5\n   }, 'param 1', 'param 2', 'param 3');\n\n   // Unregister task when the component unmounts\n   return () => Reactium.Pulse.unregister('MyComponent');\n}, [Reactium.Pulse]);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Object",
+    "url": "Reactium.Pulse",
+    "title": "Pulse",
+    "group": "Reactium.Pulse",
+    "name": "Reactium.Pulse",
+    "description": "<p>Simple interface for creating long or short polls.</p> <h3>Motivation</h3> <p>Often is the case where you find yourself sprinkling <code>setTimeout</code> or <code>setInterval</code> all over your code and before you know it, you have so many or rewrite the same structures over and over with a slight twist here and there. The Pulse API is designed to lighten the load on those situations and give a clean interface to easily create and manage polls.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.reset()",
+    "title": "Pulse.Task.reset()",
+    "group": "Reactium.Pulse",
+    "name": "Reactium.Pulse.Task.reset",
+    "description": "<p>Resets the task's attempt count and run count. Useful for catastrophic failures in your callback function.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Routing.get()",
+    "title": "Routing.get()",
+    "name": "Routing.get",
+    "description": "<p>Get sorted array of all route objects.</p>",
+    "group": "Reactium.Routing",
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Reactium.Routing"
+  },
+  {
+    "type": "Function",
+    "url": "Routing.register(route)",
+    "title": "Routing.register()",
+    "description": "<p>Dynamically register a new React router route.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "route",
+            "description": "<p>object to be used as properties of React Router <code>&lt;Route /&gt;</code> component, including:</p> <ol> <li>path - the routing pattern</li> <li>exact - true/false if the pattern should be matched exactly</li> <li>component - the React component to render on this route</li> <li>order - (special) the priority of this route in the list of routes (which route will resolve first)</li> <li>load - (special) high-order Redux action function (thunk) to run when this route is resolved (should return a promise)</li> <li>... any other property <code>&lt;Route /&gt;</code> component accepts</li> </ol> <h2>Important Note</h2> <p>The browser will still render the route correctly (will not break the page), however the server will deliver a 404 status code on cold loads of the page (i.e. hard-refresh of the browser).</p>"
+          }
+        ]
+      }
+    },
+    "name": "Routing.register",
+    "group": "Reactium.Routing",
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "String",
+            "optional": false,
+            "field": "uuid",
+            "description": "<p>unique id of the route</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import React from 'react';\nimport op from 'object-path';\nimport Reactium, { useSelect } from 'reactium-core/sdk';\n\n// A new component subscribing to Redux state.myPlugin.name\nconst HelloYou = () => {\n    const name = useSelect(state => op.get(state, 'myPlugin.name', 'unknown'));\n    return {\n        <div>Hello {name}</div>\n    };\n};\n\n// A Redux-Thunk high-order action function (useful for async actions)\nconst loadAction = (params, search) => (dispatch, getState) => {\n    dispatch({\n        type: 'MY_NAME',\n        name: op.get(params, 'name', 'unknown'),\n    });\n\n    return Promise.resolve();\n};\n\n// Register new routing pattern '/hello-world/:name'\nconst routeId = Reactium.Routing.register({\n    path: '/hello-world/:name',\n    exact: true,\n    component: HelloYou,\n    load: loadAction,\n});\n\n// Register reducer to handle 'MY_NAME' action\nconst myReducer = (state = {name: 'unknown'}, action) => {\n    if (action.type === 'MY_NAME') return {\n        ...state,\n        name: action.name,\n    };\n    return state;\n};\nReactium.Plugin.register('myPlugin').then(() => {\n    Reactium.Reducer.register('myPlugin', myReducer);\n})",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Reactium.Routing"
+  },
+  {
+    "type": "Function",
+    "url": "Routing.unregister(id)",
+    "title": "Routing.unregister()",
+    "name": "Routing.unregister",
+    "description": "<p>Unregister an existing route, by id. Note: You can not unregister the 'NotFound' component. You can only replace it using the registering a NotFound component with Reactium.Component.register().</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the route id</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "update",
+            "defaultValue": "true",
+            "description": "<p>update subscribers</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Routing",
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Reactium.Routing"
+  },
+  {
+    "type": "Function",
+    "url": "Setting.get(key,defaultValue,refresh)",
+    "title": "Setting.get()",
+    "group": "Reactium.Setting",
+    "name": "Setting.get",
+    "description": "<p>Get a setting value.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The unique setting key.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "defaultValue",
+            "description": "<p>The default value if the setting doesn't exist.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": false,
+            "field": "refresh",
+            "description": "<p>if true, get a fresh value, even if already cached.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Setting.get('site.hostname');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-setting/sdk/index.js",
+    "groupTitle": "Reactium.Setting"
+  },
+  {
+    "type": "Function",
+    "url": "Setting.load(autoRefresh)",
+    "title": "Setting.load()",
+    "name": "Setting.load",
+    "group": "Reactium.Setting",
+    "description": "<p>Load all settings, with cache. When called multiple times in the cache period, the result will come from memory cache.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "autoRefresh",
+            "defaultValue": "true",
+            "description": "<p>when true, settings will be automatically loaded again every <code>Enums.cache.settings</code> milliseconds. When false, auto reload of settings will not happen.</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Object",
+            "optional": false,
+            "field": "settings",
+            "description": "<p>an object with setting the current user has access to.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-setting/sdk/index.js",
+    "groupTitle": "Reactium.Setting"
+  },
+  {
+    "type": "Function",
+    "url": "Setting.set(key,value)",
+    "title": "Setting.set()",
+    "group": "Reactium.Setting",
+    "name": "Setting.set",
+    "description": "<p>Create or update a setting value. Returns a <code>{Promise}</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The unique setting key.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": true,
+            "field": "value",
+            "description": "<p>The setting value.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "public",
+            "defaultValue": "false",
+            "description": "<p>When true, this settings will be readable by anonymous. Useful for global insensitive application settings, such as &quot;site name&quot;.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Setting.set('site', { title: 'My Awesome Site', hostname: 'mysite.com' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-setting/sdk/index.js",
+    "groupTitle": "Reactium.Setting"
+  },
+  {
+    "type": "Function",
+    "url": "Setting.unset(key)",
+    "title": "Setting.unset()",
+    "group": "Reactium.Setting",
+    "name": "Setting.unset",
+    "description": "<p>Unset a setting value. Returns a <code>{Promise}</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The unique setting key.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Setting.unset('site.title');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-setting/sdk/index.js",
+    "groupTitle": "Reactium.Setting"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.Meta.delete(params)",
+    "title": "User.Meta.delete()",
+    "group": "Reactium.User",
+    "name": "User.Meta.delete",
+    "description": "<p>Mutate the <code>Actinium.User.meta</code> object by deleting a key value pair. Calls the <code>user-meta-delete</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for retrieving a user and the key value pair to apply to the user meta object.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Look up the user object by the objectId field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Look up the user object by the username field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Look up the user object by the email field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-meta-delete",
+            "description": "<p>Triggered before the <code>user-meta-delete</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-meta-delete-response",
+            "description": "<p>Triggered after the <code>user-meta-delete</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.user, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.Meta.update(params)",
+    "title": "User.Meta.update()",
+    "group": "Reactium.User",
+    "name": "User.Meta.update",
+    "description": "<p>Mutate the <code>Actinium.User.meta</code> object. Calls the <code>user-meta-update</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for retrieving a user and the key value pair to apply to the user meta object.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Look up the user object by the objectId field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Look up the user object by the username field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Look up the user object by the email field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-meta-update",
+            "description": "<p>Triggered before the <code>user-meta-update</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-meta-update-response",
+            "description": "<p>Triggered after the <code>user-meta-update</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.user, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "const updatedUser = await User.Meta.update({ objectId: 'slertjt5wzb', random: 'meta value' });",
+        "content": "const updatedUser = await User.Meta.update({ objectId: 'slertjt5wzb', random: 'meta value' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.Pref.delete(params)",
+    "title": "User.Pref.delete()",
+    "group": "Reactium.User",
+    "name": "User.Pref.delete",
+    "description": "<p>Mutate the <code>Actinium.User.pref</code> object by deleting a key value pair. Calls the <code>user-pref-delete</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for retrieving a user and the key value pair to apply to the user pref object.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Look up the user object by the objectId field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Look up the user object by the username field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Look up the user object by the email field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-pref-delete",
+            "description": "<p>Triggered before the <code>user-pref-delete</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-pref-delete-response",
+            "description": "<p>Triggered after the <code>user-pref-delete</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.user, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.Pref.update(params)",
+    "title": "User.Pref.update()",
+    "group": "Reactium.User",
+    "name": "User.Pref.update",
+    "description": "<p>Mutate the <code>Actinium.User.pref</code> object. Calls the <code>user-pref-update</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for retrieving a user and the key value pair to apply to the user pref object.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Look up the user object by the objectId field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Look up the user object by the username field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Look up the user object by the email field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-pref-update",
+            "description": "<p>Triggered before the <code>user-pref-update</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-pref-update-response",
+            "description": "<p>Triggered after the <code>user-pref-update</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.user, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "const updatedUser = await User.Pref.update({ objectId: 'slertjt5wzb', random: 'pref value' });",
+        "content": "const updatedUser = await User.Pref.update({ objectId: 'slertjt5wzb', random: 'pref value' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.Role.add(role,objectId)",
+    "title": "User.Role.add()",
+    "description": "<p>Asyncronously add a user to a role.</p>",
+    "name": "User.Role.add",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "role",
+            "description": "<p>The role name. Example: 'super-admin'.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>The objectId of the user. If empty the current user is used.</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Promise",
+            "optional": false,
+            "field": "user",
+            "description": "<p>The updated user object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.Role.remove(role,objectId)",
+    "title": "User.Role.remove()",
+    "description": "<p>Asyncronously remove a user to a role.</p>",
+    "name": "User.Role.remove",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "role",
+            "description": "<p>The role name. Example: 'super-admin'.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>The objectId of the user. If empty the current user is used.</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Promise",
+            "optional": false,
+            "field": "user",
+            "description": "<p>The updated user object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.auth(username,password)",
+    "title": "User.auth()",
+    "description": "<p>Authenticate with the Actinium server.</p>",
+    "name": "User.auth",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "username",
+            "description": ""
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "password",
+            "description": ""
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.can(capabilities,strict)",
+    "title": "User.can()",
+    "description": "<p>Asyncronously find out if a user has a set of capabilities.</p>",
+    "name": "User.can",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "capabilities",
+            "description": "<p>The capability(s) to check for (string or array)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "strict",
+            "defaultValue": "true",
+            "description": "<p>Compare capabilities where the user must have all capabilities <code>[true]</code>, or at least 1 <code>[false]</code>.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.current(parseObject)",
+    "title": "User.current()",
+    "group": "Reactium.User",
+    "name": "User.current",
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Object",
+            "optional": false,
+            "field": "user",
+            "description": "<p>the current user</p>"
+          }
+        ]
+      }
+    },
+    "description": "<p>Retrieve the current authenticated user.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "parseObject",
+            "defaultValue": "false",
+            "description": "<p>By default the return value is an object. If you need the Actinium.User object instead pass <code>true</code>.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.forgot()",
+    "title": "User.forgot()",
+    "group": "Reactium.User",
+    "name": "User.forgot",
+    "description": "<p>Intiates the forgot password routine.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "email",
+            "description": "<p>The email address associated with a user object.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "User.forgot('someone@email.com').then(response => {\n    console.log(response);\n});",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.getSessionToken()",
+    "title": "User.getSessionToken()",
+    "description": "<p>If the user is logged in, get the current session token.</p>",
+    "name": "User.getSessionToken",
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.hasValidSession()",
+    "title": "User.hasValidSession()",
+    "description": "<p>Check to make sure the current user and associated session are valid.</p>",
+    "name": "User.hasValidSession",
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.isCurrent(user)",
+    "title": "User.isCurrent()",
+    "group": "Reactium.User",
+    "name": "User.isCurrent",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "The",
+            "description": "<p>User object to check.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "// if signed in as steveMcQu33n this will return true.\nconst isMe = User.isCurrent({ username: 'steveMcQu33n' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.isRole(role,objectId)",
+    "title": "User.isRole()",
+    "description": "<p>Asyncronously find out if a user is a member of a specific role.</p>",
+    "name": "User.isRole",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "role",
+            "description": "<p>The role to check for.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "userID",
+            "description": "<p>The Actinium.User id. If empty, the User.current() id is used.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.list(params)",
+    "title": "User.list()",
+    "group": "Reactium.User",
+    "name": "User.list",
+    "description": "<p>Retrieve a list of <code>Actinium.User</code> objects. Calls the <code>user-list</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "role",
+            "description": "<p>Filter the results to the specified <code>Actinium.Role</code> name.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "search",
+            "description": "<p>Search using logical <code>or</code>. The query will RegExp compare to the default fields: <code>username</code>, <code>email</code>, <code>fname</code>, <code>lname</code>.</p> <p><em>Note:</em> You can add or remove fields via the <code>user-search-fields</code> hook.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Mixed",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p><code>{String|Array}</code> Search for a specific objectId or array of objectIds.</p> <p><em>Note:</em> If <code>search</code> is specified, this value is ignored.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Mixed",
+            "optional": true,
+            "field": "email",
+            "description": "<p><code>{String|Array}</code> Search for a specific email address or array of email addresses.</p> <p><em>Note:</em> If <code>search</code> is specified, this value is ignored.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Mixed",
+            "optional": true,
+            "field": "username",
+            "description": "<p><code>{String|Array}</code> Search for a specific username or array of usernames.</p> <p><em>Note:</em> If <code>search</code> is specified, this value is ignored.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Boolean",
+            "optional": true,
+            "field": "optimize",
+            "defaultValue": "false",
+            "description": "<p>If the count of the results is less than or equal to 1000, all objects will be returned. The page number will be set to 1 and the number of pages will also be 1.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Boolean",
+            "optional": true,
+            "field": "refresh",
+            "defaultValue": "false",
+            "description": "<p>By default the results are cached for 90 seconds. You can flush the cache with this parameter.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "indexBy",
+            "description": "<p>Index the results by the specified field and return them as an Object.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "order",
+            "description": "<p>Order the results <code>ascending</code> or <code>descending</code>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "orderBy",
+            "defaultValue": "username",
+            "description": "<p>Order the results by the specified field.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Number",
+            "optional": true,
+            "field": "page",
+            "defaultValue": "1",
+            "description": "<p>The page number of results to return.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Number",
+            "optional": true,
+            "field": "limit",
+            "defaultValue": "20",
+            "description": "<p>The number of results to return per page.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-list",
+            "description": "<p>Triggered before the user-list Cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-list-response",
+            "description": "<p>Triggered after the user-list Cloud function is called.</p> <pre class=\"prettyprint\">Arguments: response:Object, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "const superAdmins = await User.list({ role: 'super-admin', refresh: true });\n\nconst user = await User.list({ objectId: 'tlakQ34VOI' });\n\nconst search = await User.list({ search: 'jeff' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.logOut()",
+    "title": "User.logOut()",
+    "description": "<p>Invalidate the current user.</p>",
+    "name": "User.logOut",
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.login(username,password)",
+    "title": "User.login()",
+    "description": "<p>Alias of User.auth()</p>",
+    "name": "User.login",
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.register(params)",
+    "title": "User.register()",
+    "description": "<p>Asyncronously create a new user.</p>",
+    "name": "User.register",
+    "parameter": {
+      "fields": {
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "username",
+            "description": "<p>Unique username used when authenticating.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "password",
+            "description": "<p>Password used when authenticating.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "confirm",
+            "description": "<p>Password confirmation.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "email",
+            "description": "<p>Email address used when resetting password and for system messaging.</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Promise",
+            "optional": false,
+            "field": "user",
+            "description": "<p>The new user object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.reset()",
+    "title": "User.reset()",
+    "group": "Reactium.User",
+    "name": "User.reset",
+    "description": "<p>Reset the user password.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "token",
+            "description": "<p>The token received from the <code>User.forgot()</code> email message.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "password",
+            "description": "<p>The new password.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.retrieve(params,options)",
+    "title": "User.retrieve()",
+    "group": "Reactium.User",
+    "name": "User.retrieve",
+    "description": "<p>Retrieve a single <code>Actinium.User</code> object. Calls the <code>user-retrieve</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Query parameters. See <a href=\"#api-Reactium.User-User.list\">User.list()</a> for more details.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Retrieve by the objectId field.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Retrieve by the username field.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Retrieve by the email address field.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-retrieve",
+            "description": "<p>Triggered before the <code>user-retrieve</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-retrieve",
+            "description": "<p>Triggered after the <code>user-retrieve</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Object, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.save(params)",
+    "title": "User.save()",
+    "group": "Reactium.User",
+    "name": "User.save",
+    "description": "<p>Save a <code>Actinium.User</code> object.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Key value pairs to apply to the <code>Actinium.User</code> object. Calls the <code>user-save</code> cloud function.</p> <p><em>Note:</em> Any additional key value pairs will be added to the user object as a new column.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "username",
+            "description": "<p>The unique username used when signing in.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "email",
+            "description": "<p>The email address to associate with the user account.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "password",
+            "description": "<p>The password used when signing in.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "role",
+            "description": "<p>The <code>Actinium.Role</code> name to add the user to.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-save",
+            "description": "<p>Mutate the <code>Actinium.User</code> object before save is complete.</p> <pre class=\"prettyprint\">Arguments:  req:Object:Actinium.User </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-save-response",
+            "description": "<p>Take action after the <code>Actinium.User</code> object has been saved.</p> <pre class=\"prettyprint\">Arguments: req:Object:Actinium.User </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-save-error",
+            "description": "<p>Take action after the <code>Actinium.User</code> returns an error.</p> <pre class=\"prettyprint\">Arguments: error:Object, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.serialize(user)",
+    "title": "User.serialize()",
+    "group": "Reactium.User",
+    "name": "User.serialize",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "Convert",
+            "description": "<p>a <code>Actinium.User</code> object into a JSON object. If the object is already serialized it is returned.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "const u = User.serialize(user);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.trash(params)",
+    "title": "User.trash()",
+    "group": "Reactium.User",
+    "name": "User.trash",
+    "description": "<p>Send a single <code>Actinium.User</code> object to the recycle bin. Calls <code>user-trash</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for deleting a user.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "objectId",
+            "description": "<p>The Actinium.User objectId.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-trash",
+            "description": "<p>Triggered before the <code>user-trash</code> cloud function is run.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.User </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-trash",
+            "description": "<p>Triggered after the <code>user-trash</code> cloud function is run.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.User </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Class",
+    "url": "Fullscreen",
+    "title": "Fullscreen",
+    "group": "Reactium.Utilities",
+    "name": "Fullscreen",
+    "description": "<p>Cross browser utility for toggling fullscreen mode.</p>",
+    "parameter": {
+      "fields": {
+        "Event": [
+          {
+            "group": "Event",
+            "type": "Event",
+            "optional": false,
+            "field": "fullscreenchange",
+            "description": "<p>Triggered when the browser's fullscreen state changes.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": " // isExpanded()\n Reactium.Utils.Fullscreen.isExpanded();\n\n // isCollapsed()\n Reactium.Utils.Fullscreen.isCollapsed();\n\n // collapse()\n Reactium.Utils.Fullscreen.collapse();\n\n // expand()\n Reactium.Utils.Fullscreen.expand();\n\n // toggle()\n Reactium.Utils.Fullscreen.toggle();\n\n // Event: fullscreenchange\nimport React, { useEffect, useState } from 'react';\nimport Reactium from 'reactium-core/sdk';\n\nconst MyComponent = () => {\n    const [state, setState] = useState(Reactium.Utils.Fullscreen.isExpanded());\n\n    const update = () => {\n        setState(Reactium.Utils.Fullscreen.isExpanded());\n    }\n\n    useEffect(() => {\n        // ssr safety\n        if (typeof document === 'undefined') return;\n\n        // listen for fullscreenchange\n        document.addEventListener('fullscreenchange', update);\n\n        // prevent memory leak\n        return () => {\n            document.removeEventListener('fullscreenchange', update);\n        };\n    });\n\n    return (<div>{state}</div>);\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/fullscreen.js",
+    "groupTitle": "Reactium.Utilities"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.abbreviatedNumber(number)",
+    "title": "Utils.abbreviatedNumber()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "Utils.abbreviatedNumber",
+    "description": "<p>Abbreviate a long number to a string.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": false,
+            "field": "number",
+            "description": "<p>The number to abbreviate.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Utils.abbreviatedNumber(5000);\n// Returns: 5k\n\nReactium.Utils.abbreviatedNumber(500000);\n// Returns .5m",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.breakpoint(width)",
+    "title": "Utils.breakpoint()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "Utils.breakpoint",
+    "description": "<p>Get the breakpoint of a window width.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "width",
+            "defaultValue": "window.innerWidth",
+            "description": "<p>Custom width to check. Useful if you have a resize event and want to skip the function from looking up the value again. Reactium.Utils.breakpoint(); // Returns: the current window.innerWidth breakpoint.</p> <p>Reactium.Utils.breakpoint(1024); // Returns: sm</p>"
+          }
+        ]
+      }
+    },
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.breakpoints()",
+    "title": "Utils.breakpoints",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "Utils.breakpoints",
+    "description": "<p>Get breakpoints from browser body:after psuedo element or <code>Utils.BREAKPOINTS_DEFAULT</code> if unset or node.</p> <table> <thead> <tr> <th>Breakpoint</th> <th>Range</th> </tr> </thead> <tbody> <tr> <td>xs</td> <td>0 - 640</td> </tr> <tr> <td>sm</td> <td>641 - 990</td> </tr> <tr> <td>md</td> <td>991 - 1280</td> </tr> <tr> <td>lg</td> <td>1281 - 1440</td> </tr> <tr> <td>xl</td> <td>1600+</td> </tr> </tbody> </table>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Utils.cxFactory",
+    "url": "Utils.cxFactory",
+    "title": "Utils.cxFactory",
+    "description": "<p>Create a CSS classname namespace (prefix) to use on one or more sub-class. Uses the same syntax as the <code>classnames</code> library.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "namespace",
+            "description": "<p>the CSS class prefix</p>"
+          }
+        ]
+      }
+    },
+    "name": "Utils.cxFactory",
+    "group": "Reactium.Utils",
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "import Reactium from 'reactium-core/sdk';\nimport React from 'react';\n\nconst MyComponent = props => {\n    const cx = Reactium.Utils.cxFactory('my-component');\n    const { foo } = props;\n\n    return (\n        <div className={cx()}>\n            <div className={cx('sub-1')}>\n                Classes:\n                .my-component-sub-1\n            </div>\n            <div className={cx('sub-2', { bar: foo === 'bar' })}>\n                Classes:\n                .my-component-sub-2\n                .my-component-foo\n            </div>\n        </div>\n    );\n};\n\nMyComponent.defaultProps = {\n    foo: 'bar',\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.isWindow(iframeWindow)",
+    "title": "Utils.isWindow()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "Utils.isWindow",
+    "description": "<p>Determine if the window object has been set. Useful when developing for server side rendering.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Window",
+            "optional": true,
+            "field": "iframeWindow",
+            "description": "<p>iframe window reference.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Utils.isWindow();\n// Returns: true if executed in a browser.\n// Returns: false if executed in node (server side rendering).",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Utils.registryFactory(name,idField)",
+    "title": "Utils.registryFactory()",
+    "description": "<p>Creates a new instance of a simple registry object. Useful for creating an SDK registry for allowing plugins to register &quot;things&quot;. e.g. components that will render inside a component, callbacks that will run.</p> <p>More documentation needed:</p> <ul> <li>register method: used to register an object on registry</li> <li>unregister method: used to unregister an object on registry</li> <li>list property: getter for list of registered objects</li> <li>protect method: called to prevent overwriting an id on registry</li> <li>unprotect method: called to again allow overwriting on id</li> </ul>",
+    "name": "Utils.registryFactory",
+    "group": "Reactium.Utils",
+    "examples": [
+      {
+        "title": "Basic Reactium Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\n\n// trivial example of creation of new registry\nconst myRegistryPlugin = async () => {\n    await Reactium.Plugin.register('MyRegistryPlugin', Reactium.Enums.priority.highest);\n\n    // Using Plugin API to extend the SDK\n    // Adds a new registry to the SDK called `MyRegistry`\n    Reactium.MyRegistry = Reactium.Utils.registryFactory('MyRegistry');\n};\nmyRegistryPlugin();\n\n// trivial example of registry usage\nconst anotherPlugin = async () => {\n    await Reactium.Plugin.register('AnotherPlugin');\n\n    // register object with id 'anotherId' on registry\n    Reactium.MyRegistry.register('anotherId', {\n        foo: 'bar',\n    });\n\n    // iterate through registered items\n    Reactium.MyRegistry.list.forEach(item => console.log(item));\n\n    // unregister object with id 'anotherId'\n    Reactium.MyRegistry.unregister('anotherId');\n};\nanotherPlugin();",
+        "type": "json"
+      },
+      {
+        "title": "Basic Core Usage",
+        "content": "import SDK from '@atomic-reactor/reactium-sdk-core';\nexport default SDK.Utils.registryFactory('MyRegistry');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "function",
+    "url": "Utils.splitParts",
+    "title": "splitParts",
+    "name": "Utils.splitParts",
+    "group": "Reactium.Utils",
+    "description": "<p>splitParts is a utility function that allows you to easily interpolate React components into a string. It works by tokenizing the string, allowing you to identify specific parts that you want to replace with a React component. You can then use the replace method to specify the values for these tokens, and the value method to get an array of the parts, which you can map over and return the appropriate React components for each part. This can be useful for situations where you want to dynamically render a string that includes both plain text and React components.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "strVal",
+            "description": "<p>The input string to tokenize</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "import React from 'react';",
+        "content": "\nimport React from 'react';\nimport Reactium, { __ } from 'reactium-core/sdk';\nimport moment from 'moment';\nimport md5 from 'md5';\n\nconst Gravatar = props => {\n    const { email } = props;\n    return (\n        <img\n            className='gravatar'\n            src={`https://www.gravatar.com/avatar/${md5(\n                email.toLowerCase(),\n            )}?size=50`}\n            alt={email}\n        />\n    );\n};\n\nexport default props => {\n    const description = __('%email% updated post %slug% at %time%');\n    const parts = Reactium.Utils.splitParts(description);\n    Object.entries(props).forEach(([key, value]) => {\n        parts.replace(key, value);\n    });\n\n    return (\n        <span className='by-line'>\n            {parts.value().map(part => {\n                // arbitrary React component possible\n                const { key, value } = part;\n\n                switch (key) {\n                    case 'email': {\n                        return <Gravatar key={key} email={value} />;\n                    }\n                    case 'time': {\n                        return (\n                            <span key={key} className='time'>\n                                {moment(value).fromNow()}\n                            </span>\n                        );\n                    }\n                    default: {\n                        // plain string part\n                        return <span key={key}>{value}</span>;\n                    }\n                }\n            })}\n        </span>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.isBrowserWindow(iframeWindow)",
+    "title": "Utils.isBrowserWindow()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "isBrowserWindow",
+    "description": "<p>If global window object exists, and does not have boolean isJSDOM flag, this context may be browser or electron. Use isElectronWindow() to know the latter.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Window",
+            "optional": true,
+            "field": "iframeWindow",
+            "description": "<p>iframe window reference.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import { isBrowserWindow } from 'reactium-core/sdk';\nisBrowserWindow();\n// Returns: true if executed in browser or electron.\n// Returns: false if executed on server.",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.isElectronWindow(iframeWindow)",
+    "title": "Utils.isElectronWindow()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "isElectronWindow",
+    "description": "<p>Determine if window is an electron window. Useful for detecting electron usage.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Window",
+            "optional": true,
+            "field": "iframeWindow",
+            "description": "<p>iframe window reference.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import { isElectronWindow } from 'reactium-core/sdk';\nisElectronWindow();\n// Returns: true if executed in electron.\n// Returns: false if executed in node or browser.",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.isServerWindow(iframeWindow)",
+    "title": "Utils.isServerWindow()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "isServerWindow",
+    "description": "<p>If global window object exists, and has boolean isJSDOM flag, this context is a JSON window object (not in the browser or electron)</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Window",
+            "optional": true,
+            "field": "iframeWindow",
+            "description": "<p>iframe window reference.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import { isServerWindow } from 'reactium-core/sdk';\nisServerWindow();\n// Returns: true if executed in server SSR context.\n// Returns: false if executed in browser or electron.",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.addComponent(component,capabilities,strict)",
+    "title": "Zone.addComponent()",
+    "name": "Zone.addComponent",
+    "description": "<p>Register a component to a component zone.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>component object, determines what component renders in a zone, what order and additional properties to pass to the component.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": true,
+            "field": "capabilities",
+            "description": "<p>list of capabilities to check before adding component to zone. Can also be added as property of zone component object.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "strict",
+            "defaultValue": "true",
+            "description": "<p>true to only add component if all capabilities are allowed, otherwise only one capability is necessary</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "plugin-example.js",
+        "content": "import SomeComponent from './path/to/SomeComponent';\nimport Reactium from 'reactium-core/sdk';\n\nReactium.Plugin.register('myPlugin').then(() => {\n    // When the component is initialized, `<SomeComponent>` will render in\n    // `\"zone-1\"`\n    Reactium.Zone.addComponent({\n        // Required - Component to render. May also be a string, if the component\n        // has been registered with Reactium.Component.register().\n        // @type {Component|String}\n        component: SomeComponent,\n\n        // Required - One or more zones this component should render.\n        // @type {String|Array}\n        zone: ['zone-1'],\n\n        // By default components in zone are rendering in ascending order.\n        // @type {Number}\n        order: {{order}},\n\n        // [Optional] - additional search subpaths to use to find the component,\n        // if String provided for component property.\n        // @type {[type]}\n        //\n        // e.g. If component is a string 'TextInput', uncommenting the line below would\n        // look in components/common-ui/form/inputs and components/general to find\n        // the component 'TextInput'\n        // paths: ['common-ui/form/inputs', 'general']\n\n        // [Optional] - Additional params:\n        //\n        // Any arbitrary free-form additional properties you provide below, will be provided as params\n        // to the component when rendered.\n        //\n        // e.g. Below will be provided to the MyComponent, <MyComponent pageType={'home'} />\n        // These can also be used to help sort or filter components, or however you have your\n        // component use params.\n        // @type {Mixed}\n        // pageType: 'home',\n    })\n})",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.addFilter(zone,filter,order)",
+    "title": "Zone.addFilter()",
+    "name": "Zone.addFilter",
+    "description": "<p>Add a component zone filter function, used to filter which components will appear in <code>&lt;Zone /&gt;</code> Returns unique id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone this filter will apply to</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "filter",
+            "description": "<p>the filter function that will be passed each zone component object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>the priority your filter will take in list of filters in this zone</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "reactium-hooks.js",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nconst registerPlugin = async () => {\n    await Reactium.Plugin.register('MyVIPView');\n    const permitted = await Reactium.User.can(['vip.view']);\n\n    // Hide this component if current user shouldn't see vip components\n    const filter = component => {\n      return component.type !== 'vip' || !permitted\n    };\n\n    const id = Reactium.Zone.addFilter('zone-1', filter)\n}\nregisterPlugin();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.addMapper(zone,mapper,order)",
+    "title": "Zone.addMapper()",
+    "name": "Zone.addMapper",
+    "description": "<p>Add a component zone mapping function, used to augment the zone component object before passed to <code>&lt;Zone /&gt;</code>. Returns unique id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone this mapper will apply to</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "mapper",
+            "description": "<p>the mapper function that will be passed each component object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>the priority your mapper will take in list of mappers in this zone</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nimport React from 'react';\nimport VIPBadge from './some/path/Vip';\n// for this zone, if component is of type \"vip\", add a VIPBage component to the component\n// components children property\nconst mapper = (component) => {\n    if (component.type === 'vip')\n    component.children = [\n        <VIPBadge />\n    ];\n    return component;\n};\nconst id = Reactium.Zone.addMapper('zone-1', mapper)",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.addSort(zone,sortBy,reverse,order)",
+    "title": "Zone.addSort()",
+    "name": "Zone.addSort",
+    "description": "<p>Add a component zone sort critera, used to augment the zone component object before passed to <code>&lt;Zone /&gt;</code></p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone this sort will apply to</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "sortBy",
+            "defaultValue": "order",
+            "description": "<p>zone component object property to sort the list of components by</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "reverse",
+            "defaultValue": "false",
+            "description": "<p>reverse sort order</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>the priority your sort will take in list of sorts in this zone</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\n\n// sort by zone component.type property\nReactium.Zone.addSort('zone-1', 'type')",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.getZoneComponent(zone,id)",
+    "title": "Zone.getZoneComponent()",
+    "name": "Zone.getZoneComponent",
+    "description": "<p>Get the component from a zone by its id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone name to get components from</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the registered component, specified in the object passed to Zone.addComponent() or returned by it.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.getZoneComponents(zone,raw)",
+    "title": "Zone.getZoneComponents()",
+    "name": "Zone.getZoneComponents",
+    "description": "<p>Get existing registrations for a zone, by default goes through mapping, sorting, filtering. Add raw=true to get unadulterated list, even if they may not be renderable in the Zone. Returns the object used in Zone.addComponent()</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone name to get components from</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "raw",
+            "defaultValue": "false",
+            "description": "<p>Set to true to get all components, whether or not they are currently filtered, and without mapping or extra sorting.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.hasZoneComponent(zone,id)",
+    "title": "Zone.hasZoneComponent()",
+    "name": "Zone.hasZoneComponent",
+    "description": "<p>Returns true if component with id is present in the zone.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone name to get components from</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the registered component, specified in the object passed to Zone.addComponent() or returned by it.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.removeComponent(ID)",
+    "title": "Zone.removeComponent()",
+    "name": "Zone.removeComponent",
+    "description": "<p>Removes a component added by <code>Zone.addComponent()</code> from a component zone by id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the unique component object id.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.removeFilter(id)",
+    "title": "Zone.removeFilter()",
+    "name": "Zone.removeFilter",
+    "description": "<p>Remove filter functions for a component zone for this component.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the filter to remove</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Zone.removeFilter(filterId);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.removeMapper(id)",
+    "title": "Zone.removeMapper()",
+    "name": "Zone.removeMapper",
+    "description": "<p>Remove mapping functions for a zone..</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the mapper to remove from the zone</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Zone.removeMapper(mapperId);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.removeSort(componentName,zone)",
+    "title": "Zone.removeSort()",
+    "name": "Zone.removeSort",
+    "description": "<p>Remove sort critera for a component zone for this component. This should be called only: //   * @apiParam {String} zone the zone to remove this sort from</p>",
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Zone.removeSort('myPlugin', 'zone-1');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.subscribe(zone,cb)",
+    "title": "Zone.subscribe()",
+    "name": "Zone.subscribe",
+    "description": "<p>Subscribe to components added, removed, or updated in a particular rendering zone. Returns an unsubscribe function. Call this function to unsubscribe from changes.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone to subscribe to</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "callback",
+            "description": "<p>a function that will be called when a change occurs to zone.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "useZoneComponents.js",
+        "content": "import Reactium from 'reactium-core/sdk';\nimport { useState, useEffect } from 'react';\n\nexport const useZoneComponents = zone => {\n    const [components, updateComponents] = useState(Reactium.Zone.getZoneComponents(zone));\n\n    useEffect(() => Reactium.Zone.subscribe(zone, zoneComponents => {\n        updateComponents(zoneComponents)\n    }), [zone]);\n\n    return components;\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.updateComponent(id,updatedComponent)",
+    "title": "Zone.updateComponent()",
+    "name": "Zone.updateComponent",
+    "description": "<p>Register a component to a component zone.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the unique component object id.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "updatedComponent",
+            "description": "<p>updated zone component object, will be merged with existing.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Object",
+    "url": "Reactium.AppContext",
+    "title": "Reactium.AppContext",
+    "group": "Reactium",
+    "name": "Reactium.AppContext",
+    "description": "<p>A Registry used for top-level React wrapping context provider, such as Redux or Theme. See <a href=\"#api-Reactium-Registry\">Registry</a> for full details on Registry methods / properties. Use this to register a React context provider, as well as any properties that are passed to the context.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "list",
+            "description": "<p>get list of most recent (or highest order) registered objects, filtering out unregistered or banned objects.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "register",
+            "description": "<p><code>reg.register(id,data)</code> pass an identifier and a data object to register the object. The identifier will be added if it is not already registered (but protected) and not banned.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unregister",
+            "description": "<p><code>reg.unregister(id)</code> pass an identifier to unregister an object. When in HISTORY mode (default), previous registration will be retained, but the object will not be listed. In CLEAN mode, the previous registrations will be removed, unless protected.</p>"
+          }
+        ],
+        "register": [
+          {
+            "group": "register",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the data object to be registered</p>"
+          },
+          {
+            "group": "register",
+            "type": "Provider",
+            "optional": false,
+            "field": "data",
+            "description": "<p>the object to be registered</p>"
+          }
+        ],
+        "Provider": [
+          {
+            "group": "Provider",
+            "type": "ContextProvider",
+            "optional": false,
+            "field": "provider",
+            "description": "<p>the context provider. This provider must be a React component that will render children.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-hooks.js",
+        "content": "// Example of Registering Material UI Theme\nimport Reactium from 'reactium-core/sdk';\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\nimport { purple } from '@mui/material/colors';\n\n(async () => {\n    await Reactium.Plugin.register('MUI-Theme');\n\n    await Reactium.Hook.register('app-context-provider', async () => {\n        const theme = createTheme({\n            palette: {\n                primary: {\n                    // Purple and green play nicely together.\n                    main: purple[500],\n                },\n                secondary: {\n                    // This is green.A700 as hex.\n                    main: '#11cb5f',\n                },\n            },\n        });\n\n        Reactium.AppContext.register('ThemeProvider', {\n            // provider required\n            provider: ThemeProvider,\n\n            // remainder are optional props passed to your provider, in this case the theme\n            theme,\n        });\n    })\n})();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/app-context.js",
+    "groupTitle": "Reactium"
+  },
+  {
+    "type": "Object",
+    "url": "Registry",
+    "title": "Registry",
+    "group": "Reactium",
+    "name": "Registry",
+    "description": "<p>Reactium uses a number of registry objects used to registering all sorts of objects that will be used elsewhere in the framework. New registry objects are generally instanciated as singletons on the overall SDK.</p> <p>There are many registry objects attached by default to the SDK, and developers can create new ones using <code>Utils.registryFactory()</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "listById",
+            "description": "<p>get Object keyed by id of most recent (or highest order) registered objects, filtering out unregistered or banned objects.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "list",
+            "description": "<p>get list of most recent (or highest order) registered objects, filtering out unregistered or banned objects.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "registered",
+            "description": "<p>get list of all historically registrated objects, even duplicates, ordered by order property of object (defaults to 100).</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "protected",
+            "description": "<p>get list of protected registrations ids</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "unregistered",
+            "description": "<p>get list of all existing registered objects ids that have been subsequently unregistered.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "banned",
+            "description": "<p>get list of all banned objects ids.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "mode",
+            "description": "<p>get current mode (Default Utils.Registry.MODES.HISTORY)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "get",
+            "description": "<p><code>reg.get(id,defaultValue)</code> pass the identifier of an object get that object from the registry. Optionally provide a default value if the id doesn't exist in the registry.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "isProtected",
+            "description": "<p>pass the identifier of an object to see if it has been protected</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "isRegistered",
+            "description": "<p>pass the identifier of an object to see if it has been registered</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "isUnRegistered",
+            "description": "<p>pass the identifier of an object to see is NOT registered.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "isBanned",
+            "description": "<p>pass the identifier of an object to see if it has been banned</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "ban",
+            "description": "<p><code>reg.ban(id)</code> pass the identifier of an object to ban. Banned objects can not be registered and will not be show in list. Useful when you have code that needs to preempt the registration of an object from code you do not control. E.g. a plugin is introducing undesireable or disabled functionality</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "cleanup",
+            "description": "<p><code>reg.cleanup(id)</code> pass the identifier of an object to be purged from historical registrations (i.e. free up memory) Automatically performed in mode Utils.Registry.CLEAN</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "protect",
+            "description": "<p><code>reg.protect(id)</code> pass the identifier of an object to protect. Protected objects can not be overridden or cleaned up.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "register",
+            "description": "<p><code>reg.register(id,data)</code> pass an identifier and a data object to register the object. The identifier will be added if it is not already registered (but protected) and not banned.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unprotect",
+            "description": "<p><code>reg.unprotect(id)</code> pass an identifier to unprotect an object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unregister",
+            "description": "<p><code>reg.unregister(id)</code> pass an identifier to unregister an object. When in HISTORY mode (default), previous registration will be retained, but the object will not be listed. In CLEAN mode, the previous registrations will be removed, unless protected.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "flush",
+            "description": "<p><code>reg.flush()</code> clear all registrations. Resets registry to newly constructed state.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "subscribe",
+            "description": "<p><code>reg.subscribe(cb,id)</code> Adds a callback to indicate changes to the registry. Callback is called on register, unregister, protect, unprotect, ban, cleanup, and flush. Returns unsubscribe function.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unsubscribe",
+            "description": "<p><code>reg.unsubscribe(id)</code> unsubscribe a subscriber by id</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unsubscribeAll",
+            "description": "<p><code>reg.unsubscribeAll()</code> unsubscribe all subscribers to changes made on the registry</p>"
+          }
+        ],
+        "register": [
+          {
+            "group": "register",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the data object to be registered</p>"
+          },
+          {
+            "group": "register",
+            "type": "Object",
+            "optional": false,
+            "field": "data",
+            "description": "<p>the object to be registered</p>"
+          }
+        ],
+        "subscribe": [
+          {
+            "group": "subscribe",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>Callback to be invoked on changes to the registry.</p>"
+          },
+          {
+            "group": "subscribe",
+            "type": "String",
+            "optional": true,
+            "field": "id",
+            "description": "<p>optional id of the callback, if you want to invoke unsubscribe manually by id, instead of the callback returned from subscribe method</p>"
+          }
+        ],
+        "unsubscribe": [
+          {
+            "group": "unsubscribe",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the subscriber to unsubscribe</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/registry.js",
+    "groupTitle": "Reactium"
+  },
+  {
+    "type": "RegisteredComponent",
+    "url": "Zone",
+    "title": "Zone",
+    "version": "3.1.19",
+    "name": "Zone",
+    "description": "<p>Component used to identify a &quot;zone&quot; in your application where any arbitrary components will render. Plugin components registered for this zone will dynamically render in the zone. Plugins can be registered statically in Reactium by creating a <code>plugin.js</code> file that exports a component definition (<code>arcli plugin component</code> to generate boilerplate for one), or using the Reactium SDK <code>Reactium.Zone.addComponent()</code> call.</p> <p>See also the Zone SDK for filtering, sorting, or mapping over plugin components for a zone.</p> <p>To generate an exportable plugin module, use the <code>arcli plugin module</code> command.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>Identifier of the zone where plugin components will be rendered.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "passThrough",
+            "defaultValue": "false",
+            "description": "<p>When true, will provide a <code>components</code> property to children of Zone instead of rendering plugin components directly as siblings. This is useful when you wish to make plugin components available, but take more control over how they render.</p> <p>Example Passthrough Usage: Using the <code>jsx-parser</code> module, components could be provided to a JSXParser component, and the actual render of those components could be dictated by a string of JSX and data context provided by a CMS.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "...params",
+            "description": "<p>any number of arbitrary parameters (variadic) can be provided to the Zone, and will be passed automatically as props on your plugin components when they are rendered.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Registered_Component",
+    "examples": [
+      {
+        "title": "PageHeader.js",
+        "content": "import React from 'react';\nimport { useHookComponent } from 'reactium-core/sdk';\n\n// PageHeader is not hard-coded, but adaptable by plugins\nexport default props => {\n    const Zone = useHookComponent('Zone');\n    return (\n        <div class='page-header'>\n            <Zone zone={'page-header'} />\n        </div>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "src/app/components/plugin-src/MyHeaderPlugin/index.js",
+        "content": "import Reactium from 'reactium-core/sdk';\nimport MyHeaderWidget from './MyHeaderWidget';\n\nconst registerPlugin = async () => {\n    await Reactium.Plugin.register('MyHeaderPlugin');\n    Reactium.Zone.addComponent({\n        id: 'MyHeaderWidget',\n        zone: 'page-header',\n        component: MyHeaderWidget,\n    });\n};\nregisterPlugin();",
+        "type": "json"
+      },
+      {
+        "title": "src/app/components/plugin-src/MyHeaderPlugin/MyHeaderWidget.js",
+        "content": "import React from 'react';\n\nexport default props => {\n   return (\n       <div class='my-header-widget'>\n           I will end up in the header zone\n       </div>\n   );\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/Zone.js",
+    "groupTitle": "Registered_Component"
+  },
+  {
+    "type": "Function",
+    "url": "__(text)",
+    "title": "__()",
+    "description": "<p>Wrap this around string literals to make them translateable with gettext Poedit utility. Run <code>arcli i18n</code> to extract strings to <code>src/reactium-translations/template.pot</code> by default.</p>",
+    "name": "__",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "StringLiteral",
+            "optional": false,
+            "field": "text",
+            "description": "<p>the text to be translated. Important: this should not be a variable. It must be a string literal, or <code>arcli i18n</code> command will not be able to locate the string. This string may not be an ES6 template literal.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Translation",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React from 'react';\nimport { __ } = 'reactium-core/sdk';\n\nexport default () => {\n    return (\n        <div>{__('My Translatable string.')}</div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/i18n.js",
+    "groupTitle": "Translation"
+  },
+  {
+    "type": "Function",
+    "url": "_n(singular,plural,count)",
+    "title": "_n()",
+    "description": "<p>Wrap this around string literals to make them translateable with gettext Poedit utility. Run <code>arcli i18n</code> to extract strings to <code>src/reactium-translations/template.pot</code> by default.</p>",
+    "name": "_n",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "StringLiteral",
+            "optional": false,
+            "field": "singular",
+            "description": "<p>the singular form text to be translated. Important: this should not be a variable. It must be a string literal, or <code>arcli i18n</code> command will not be able to locate the string. This string may not be an ES6 template literal.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "StringLiteral",
+            "optional": false,
+            "field": "plural",
+            "description": "<p>the plural form text to be translated. Important: this should not be a variable. It must be a string literal, or <code>arcli i18n</code> command will not be able to locate the string. This string may not be an ES6 template literal.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": false,
+            "field": "count",
+            "description": "<p>the number related to singular or plural string</p>"
+          }
+        ]
+      }
+    },
+    "group": "Translation",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React from 'react';\nimport { _n } = 'reactium-core/sdk';\n\nexport default props => {\n    const count = props.count;\n    // singular / plural translation\n    const label = _n('%s thing', '%s things', count).replace('%s', count);\n    return (\n        <div>{label}</div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/i18n.js",
+    "groupTitle": "Translation"
+  }
+] });
diff --git a/docs/api_data.json b/docs/api_data.json
new file mode 100644
index 00000000..541aca98
--- /dev/null
+++ b/docs/api_data.json
@@ -0,0 +1,6055 @@
+[
+  {
+    "type": "Async",
+    "url": "Capability.User.get(userID,refresh)",
+    "title": "Capability.User.get()",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.User.get",
+    "description": "<p>Return an Array of capability names granted to the user.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "userID",
+            "description": "<p>The Reactium.User id. If empty the User.current id is used.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "refres",
+            "defaultValue": "false",
+            "description": "<p>Fetch capabilities from the server instead of cache.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "const canEditArticle = async userID => {\n    const caps = await Reactium.Capability.User.get(userID);\n    return caps.includes('content.article.update');\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Static",
+    "url": "Capability.autosync",
+    "title": "Capability.autosync",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.autosync",
+    "description": "<p>Time in milliseconds that controls when registered capabilities are propagated to the server. If set to <code>false</code>, manually push registered capabilities with <code>Capability.propagate()</code>. Default: <code>10000</code>.</p>",
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Static",
+    "url": "Capability.cache",
+    "title": "Capability.cache",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.cache",
+    "description": "<p>Time in milliseconds that controls how long to cache capability request results. Default: <code>60000</code>.</p>",
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Function",
+    "url": "Capability.clearCache()",
+    "title": "Capability.clearCache()",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.clearCache",
+    "description": "<p>Clear Capability related Cache keys.</p>",
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.propagate(force)",
+    "title": "Capability.propagate()",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.propagate",
+    "description": "<p>Propagate registered capabilities to an Actinium server.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "force",
+            "defaultValue": "false",
+            "description": "<p>Execute the propagation regardless of if a current propagation operation is under way. The resolution of the previous propagation operation will be cancelled. If <code>Capability.autosync</code> is <code>true</code>, this function will be called whenever the autosync is initiated.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "await Capability.propagate();",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Function",
+    "url": "Capability.register(id)",
+    "title": "Capability.register()",
+    "version": "3.1.2",
+    "group": "Capability",
+    "name": "Capability.register",
+    "description": "<p>Register a new capability.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>String value used when checking for the capability. This function is limited in scope and regularly shouldn't be used. Server-side capability registration is preferred.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "Capability.register('my-ui.view')",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Capability"
+  },
+  {
+    "type": "Hook",
+    "url": "Hooks",
+    "title": "Hooks",
+    "name": "Hooks",
+    "description": "<p>Here are the standard hooks that fire (in order) on the bootstrap of your Reactium application.</p> <table> <thead> <tr> <th style=\"text-align:left\">Hook</th> <th style=\"text-align:left\">Description</th> </tr> </thead> <tbody> <tr> <td style=\"text-align:left\">init</td> <td style=\"text-align:left\">Called before all other hooks on startup.</td> </tr> <tr> <td style=\"text-align:left\">dependencies-load</td> <td style=\"text-align:left\">Called while application dependencies are loaded.</td> </tr> <tr> <td style=\"text-align:left\">service-worker-init</td> <td style=\"text-align:left\">Called while service worker is loaded.</td> </tr> <tr> <td style=\"text-align:left\">zone-defaults</td> <td style=\"text-align:left\">Called while rendering zone default components are loaded.</td> </tr> <tr> <td style=\"text-align:left\">store-create</td> <td style=\"text-align:left\">Called while Redux store is being created.</td> </tr> <tr> <td style=\"text-align:left\">store-created</td> <td style=\"text-align:left\">Called after Redux store is created.</td> </tr> <tr> <td style=\"text-align:left\">plugin-dependencies</td> <td style=\"text-align:left\">Called before loading runtime plugins.</td> </tr> <tr> <td style=\"text-align:left\">plugin-init</td> <td style=\"text-align:left\">Called to initiate plugin registration.</td> </tr> <tr> <td style=\"text-align:left\">routes-init</td> <td style=\"text-align:left\">Called to initiaze React router</td> </tr> <tr> <td style=\"text-align:left\">register-route</td> <td style=\"text-align:left\">Called for each route that is registered</td> </tr> <tr> <td style=\"text-align:left\">data-loaded</td> <td style=\"text-align:left\">Called on route load to pre-load data</td> </tr> <tr> <td style=\"text-align:left\">plugin-ready</td> <td style=\"text-align:left\">Called after all plugins registration callbacks have completed</td> </tr> <tr> <td style=\"text-align:left\">component-bindings</td> <td style=\"text-align:left\">Called to sibling React components and their DOM element bindings</td> </tr> <tr> <td style=\"text-align:left\">app-bindpoint</td> <td style=\"text-align:left\">Called to define the main application bind point.</td> </tr> <tr> <td style=\"text-align:left\">app-context-provider</td> <td style=\"text-align:left\">Called to define React application-wrapping context providers, such as Redux / Theme, etc.</td> </tr> <tr> <td style=\"text-align:left\">app-router</td> <td style=\"text-align:left\">Called to provide the React router component</td> </tr> <tr> <td style=\"text-align:left\">app-boot-message</td> <td style=\"text-align:left\">Called to define the javascript console boot message</td> </tr> <tr> <td style=\"text-align:left\">app-ready</td> <td style=\"text-align:left\">Called when the application is being bound or hydrated by ReactDOM</td> </tr> </tbody> </table>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/reactium-hooks.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppBindings",
+    "title": "Server.AppBindings",
+    "name": "Server.AppBindings",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines React bind pointes in markup.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppBindings",
+            "description": "<p>Server app binding registry object.</p>"
+          }
+        ],
+        "binding": [
+          {
+            "group": "binding",
+            "type": "String",
+            "optional": true,
+            "field": "component",
+            "description": "<p>string name of component to bind directly if possible (must be in a webpack search context in reactium-config)</p>"
+          },
+          {
+            "group": "binding",
+            "type": "String",
+            "optional": true,
+            "field": "markup",
+            "description": "<p>ordinary markup that React will use to bind the app.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "ReactiumBoot.Hook.registerSync(\n    'Server.AppBindings',\n    (req, AppBindings) => {\n        // Find the registered component \"DevTools\" and bind it\n        AppBindings.register('DevTools', {\n            component: 'DevTools',\n        });\n\n        // Add ordinary markup for React to bind to\n        AppBindings.register('router', {\n            markup: '<div id=\"router\"></div>',\n        });\n    },\n    ReactiumBoot.Enums.priority.highest,\n    'SERVER-APP-BINDINGS-CORE',\n);",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppGlobals",
+    "title": "Server.AppGlobals",
+    "name": "Server.AppGlobals",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines window globals to be defined in template. Will also define global for nodejs (useful for Server-Side-Rendering).</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppGlobals",
+            "description": "<p>Server app globals registry object.</p>"
+          }
+        ],
+        "global": [
+          {
+            "group": "global",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>The property name that will be added to window (for browser) or global (for nodejs).</p>"
+          },
+          {
+            "group": "global",
+            "type": "Mixed",
+            "optional": false,
+            "field": "value",
+            "description": "<p>any javascript value that can be serialized for use in a script tag</p>"
+          },
+          {
+            "group": "global",
+            "type": "Mixed",
+            "optional": true,
+            "field": "serverValue",
+            "description": "<p>optional different value for the server global, useful when value should be used differently on the server code</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "// will result in window.environment = 'local' in browser and global.environment = 'local' on nodejs\nReactiumBoot.Hook.registerSync(\n    'Server.AppGlobals',\n    (req, AppGlobals) => {\n        // Find the registered component \"DevTools\" and bind it\n        AppGlobals.register('environment', {\n            name: 'environment',\n            value: 'local',\n        });\n    });",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppHeaders",
+    "title": "Server.AppHeaders",
+    "name": "Server.AppHeaders",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines html head tags (exluding stylesheet). Use this hook to register/unregister <head> tags as strings. Note: if using Server Side Render and react-helmet, this is often unnecessary to do.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppHeaders",
+            "description": "<p>Server app header registry object.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "ReactiumBoot.Hook.register('Server.AppHeaders', async (req, AppHeaders) => {\n   // given some data was added to req by express middleware\n   const seo = req.seo;\n   if (seo) {\n       if (seo.canonicalURL) {\n           AppHeaders.register('canonical-url', {\n               header: `<link rel=\"canonical\" href=\"${seo.canonicalURL}\" />`\n           });\n       }\n       if (seo.description) {\n           AppHeaders.register('meta-description', {\n               header: `<meta name=\"description\" content=\"${seo.description}\"/>`\n           });\n       }\n   }\n});",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppScripts",
+    "title": "Server.AppScripts",
+    "name": "Server.AppScripts",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines javascript files to be loaded.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppScripts",
+            "description": "<p>Server app scripts registry object.</p>"
+          }
+        ],
+        "script": [
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "footer",
+            "defaultValue": "true",
+            "description": "<p>Place the script tag in the footer if true</p>"
+          },
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "header",
+            "defaultValue": "false",
+            "description": "<p>Place the script tag above the body if true</p>"
+          },
+          {
+            "group": "script",
+            "type": "String",
+            "optional": true,
+            "field": "path",
+            "description": "<p>the src of the javascript</p>"
+          },
+          {
+            "group": "script",
+            "type": "String",
+            "optional": true,
+            "field": "charset",
+            "defaultValue": "UTF-8",
+            "description": "<p>charset attribute</p>"
+          },
+          {
+            "group": "script",
+            "type": "String",
+            "optional": true,
+            "field": "type",
+            "description": "<p>type attribute</p>"
+          },
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "defer",
+            "defaultValue": "false",
+            "description": "<p>Add defer attribute</p>"
+          },
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "async",
+            "defaultValue": "false",
+            "description": "<p>Add async attribute</p>"
+          },
+          {
+            "group": "script",
+            "type": "Boolean",
+            "optional": true,
+            "field": "content",
+            "description": "<p>script content</p>"
+          },
+          {
+            "group": "script",
+            "type": "Number",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "0",
+            "description": "<p>loading order of script</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "ReactiumBoot.Hook.register('Server.AppScripts', async (req, AppScripts) => {\n    AppScripts.register('my-onsite-script', {\n        path: '/assets/js/some-additional.js'\n        footer: true, // load in footer (optional)\n        header: false, // don't load in header (optional)\n        order: 1, // scripts will be ordered by this\n    });\n\n    AppScripts.register('my-csn-script', {\n        path: 'https://cdn.example.com/cdn.loaded.js'\n        header: true, // maybe for an external\n        order: 1, // scripts will be ordered by this\n    });\n});",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppSnippets",
+    "title": "Server.AppSnippets",
+    "name": "Server.AppSnippets",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines snippets of code to be added to document in their entirety.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppSnippets",
+            "description": "<p>Server app snippets registry object.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "     ReactiumBoot.Hook.register('Server.AppSnippets', async (req, AppSnippets) => {\n        AppSnippets.register('ga-tracking', {\n            snippet: `<script>\n(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\nm=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n\nga('create', '', 'auto');\nga('send', 'pageview');\n</script>`,\n          order: 1,\n        })\n     });",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.AppStyleSheets",
+    "title": "Server.AppStyleSheets",
+    "name": "Server.AppStyleSheets",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Defines css files to be loaded.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "AppStyleSheets",
+            "description": "<p>Server app styles registry object.</p>"
+          }
+        ],
+        "stylesheet": [
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "href",
+            "description": "<p>the src of the stylesheet or resource</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "Number",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "0",
+            "description": "<p>loading order of stylesheet or resource</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "rel",
+            "defaultValue": "stylesheet",
+            "description": "<p>the rel attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "crossorigin",
+            "description": "<p>the crossorigin attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "referrerpolicy",
+            "description": "<p>the referrerpolicy attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "hrefLang",
+            "description": "<p>the hreflang attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "sizes",
+            "description": "<p>the sizes attribute if rel=icon</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "String",
+            "optional": true,
+            "field": "type",
+            "description": "<p>the type attribute</p>"
+          },
+          {
+            "group": "stylesheet",
+            "type": "Function",
+            "optional": true,
+            "field": "when",
+            "description": "<p>callback passed the request object, and returns true or false if the css should be included</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "ReactiumBoot.Hook.register('Server.AppStyleSheets', async (req, AppStyleSheets) => {\n    AppStyleSheets.register('my-stylesheet', {\n        href: '/assets/css/some-additional.css'\n    });\n\n    AppStyleSheets.register('my-csn-script', {\n        href: 'https://cdn.example.com/cdn.loaded.css'\n        order: 1, // scripts will be ordered by this\n    });\n});",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.Middleware",
+    "title": "Server.Middleware",
+    "name": "Server.Middleware",
+    "description": "<p>Used to register or unregister express middleware.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "Middleware",
+            "description": "<p>Server express middleware registry object.</p>"
+          }
+        ],
+        "middleware": [
+          {
+            "group": "middleware",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>Name of the middleware.</p>"
+          }
+        ],
+        "middlware": [
+          {
+            "group": "middlware",
+            "type": "Function",
+            "optional": false,
+            "field": "use",
+            "description": "<p>the express middleware function.</p>"
+          },
+          {
+            "group": "middlware",
+            "type": "Number",
+            "optional": false,
+            "field": "order",
+            "description": "<p>the loading order of the middleware</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-boot.js",
+        "content": "const express = require('express');\nconst router = express.Router();\nconst axios = require('axios');\n\n// register a new backend route /foo with express\nrouter.get('/', (req, res) => {\n   res.send('Foo!!')\n});\n\nReactiumBoot.Hook.registerSync('Server.Middleware', Middleware => {\n   Middleware.register('foo-page', {\n       name: 'foo-page',\n       use: router,\n       order: ReactiumBoot.Enums.priority.highest,\n   })\n});\n\nReactiumBoot.Hook.registerSync('Server.Middleware', Middleware => {\n   const intercept = express.Router();\n   intercept.post('/api*', (req, res) => {\n       res.json({\n           foo: 'bar'\n       });\n   });\n\n   // check api health every 90 seconds and intercept api if it goes down\n   Middleware.register('downapi', {\n       name: 'downapi',\n       use: async (res, req, next) => {\n           try {\n               let healthy = ReactiumBoot.Cache.get('health-check');\n               if (healthy === undefined) {\n                   const response = await axios.get(process.env.REST_API_URI + '/healthcheck');\n                   healthy = response.data;\n                   ReactiumBoot.Cache.set('health-check', healthy, 1000 * 90);\n               }\n           } catch (error) {\n               console.error(error);\n               ReactiumBoot.Cache.set('health-check', false, 1000 * 90);\n               healthy = false;\n           }\n\n           if (healthy === true) next();\n           return intercept(req, req, next);\n       },\n       order: ReactiumBoot.Enums.priority.highest,\n   })\n});",
+        "type": "json"
+      }
+    ],
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.ResponseHeaders",
+    "title": "Server.ResponseHeaders",
+    "name": "Server.ResponseHeaders",
+    "description": "<p>On html template responses on server, this hook is called when HTTP headers are added to the response. Both sync and async hook is called.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "responseHeaders",
+            "description": "<p>object with key pairs (header name =&gt; header value)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>Node/Express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "res",
+            "description": "<p>Node/Express response object</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/router.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.ServiceWorkerAllowed",
+    "title": "Server.ServiceWorkerAllowed",
+    "description": "<p>Called on server-side during service-worker-allowed middleware. Used to define the HTTP response header &quot;Service-Worker-Allowed&quot;. By default, this header will allow the document root, &quot;/&quot;. Both sync and async version called.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "responseHeader",
+            "description": "<p>with property 'Service-Worker-Allowed' (case sensitive) and its value.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>Node/Express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "res",
+            "description": "<p>Node/Express response object</p>"
+          }
+        ]
+      }
+    },
+    "name": "Server.ServiceWorkerAllowed",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.afterApp",
+    "title": "Server.afterApp",
+    "name": "Server.afterApp",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Called after other Server hooks.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "Server",
+            "description": "<p>ReactiumBoot Server object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "Server.beforeApp",
+    "title": "Server.beforeApp",
+    "name": "Server.beforeApp",
+    "description": "<p>Before index.html template render for SPA template (both Front-end and Server-Side Render). Called before other Server hooks.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "req",
+            "description": "<p>express request object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "Server",
+            "description": "<p>ReactiumBoot Server object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/server/renderer/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-bindpoint",
+    "title": "app-bindpoint",
+    "name": "app-bindpoint",
+    "description": "<p>Called after plugin and routing initialization to define the DOM element used for mounting the Single-Page application (SPA). By default, the application will bind to <code>document.getElementById('router')</code>, but this can be changed with this hook. This is related to the HTML template artifacts left by the server-side <code>Server.AppBindings</code> hook. async only - used in front-end application only</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>context.appElement MUST be an HTMLElement where your React appliation will bind to the DOM.</p>"
+          }
+        ],
+        "appElement": [
+          {
+            "group": "appElement",
+            "type": "HTMLElement",
+            "optional": false,
+            "field": "the",
+            "description": "<p>DOM element to bind to - by default <code>document.getElementById('router')</code>.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-boot-message",
+    "title": "app-boot-message",
+    "name": "app-boot-message",
+    "description": "<p>Called during application binding, this minor hook will allow you to change the format of the of the front-end Javascript console message indicating application start. async only - used in front-end application only</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-context-provider",
+    "title": "app-context-provider",
+    "name": "app-context-provider",
+    "description": "<p>Called after app-bindpoint to define any React context providers, using the <a href=\"#api-Reactium-Reactium.AppContext\">Reactium.AppContext</a> registry.</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-ready",
+    "title": "app-ready",
+    "description": "<p>The final hook run after the front-end application has bee bound or hydrated. After this point, the all hooks are runtime hooks.</p>",
+    "name": "app-ready",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "app-router",
+    "title": "app-router",
+    "name": "app-router",
+    "description": "<p>Called after app-context-provider to define the registered Router component (i.e. <code>Reactium.Component.register('Router'...)</code>). After this hook, the ReactDOM bindings will actually take place. async only - used in front-end application only</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "component-bindings",
+    "title": "component-bindings",
+    "name": "component-bindings",
+    "description": "<p>Called after plugin and routing initialization to define element and dynamic component for one-off component bindings to the DOM. e.g. In development mode, used to render Redux Dev tools. async only - used in front-end application only</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>context.bindPoints MUST be an array of binding objects after this hook is called</p>"
+          }
+        ],
+        "binding": [
+          {
+            "group": "binding",
+            "type": "HTMLElement",
+            "optional": false,
+            "field": "the",
+            "description": "<p>DOM element to bind to (e.g. document.getElementById('my-element'))</p>"
+          },
+          {
+            "group": "binding",
+            "type": "String",
+            "optional": false,
+            "field": "string",
+            "description": "<p>matching a React component module in one of the Reactium built-in webpack contexts (src/app/components or src/app/components/common-ui) e.g. 'DevTools' maps to src/app/components/DevTools</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "dependencies-load",
+    "title": "dependencies-load",
+    "name": "dependencies-load",
+    "description": "<p>Called after init to give an application a change to load async dependencies. Many Domain Driven Design (DDD) artifacts from generated src/manifest.js are loaded on this hook async only - used in front-end</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "dependencies-load",
+    "title": "dependencies-load",
+    "name": "dependencies-load",
+    "description": "<p>Called after init to give an application a change to load async dependencies. Many Domain Driven Design (DDD) artifacts from generated src/manifest.js are loaded on this hook async only - used in front-end</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/reactium-hooks.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "init",
+    "title": "init",
+    "name": "init",
+    "description": "<p>Called before all other hooks on Reactium application startup. async only - used in front-end</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "plugin-dependencies",
+    "title": "plugin-dependencies",
+    "name": "plugin-dependencies",
+    "description": "<p>Called to indicate all bootstrap dependencies should now be loaded, but before application routes have been initialized. There are 2 default registered callback in Reactium core on this hook. 1. (Highest Priority): The generated src/manifest.js dependencies are attached to this hook context (as context.deps). 2. (High Priority): <code>plugin-init</code> hook will be invoked, at which point all Reactium.Plugin registrations will be called.</p> <pre><code> Any hooks that registered after Reactium.Plugin will only be useful if they happen to be invoked during the normal runtime operations of the application.  An important exception to this is `routes-init`, which is deferred until after plugins initialize so they may dynamically add routes before Reactium hands off  control to the Router.  async only - used in front-end</code></pre>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>Core attaches generated manifest loaded dependencies to context.deps</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "plugin-ready",
+    "title": "plugin-ready",
+    "name": "plugin-ready",
+    "description": "<p>Called after all plugin registration callbacks have completed and routes have loaded.</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "register-route",
+    "title": "register-route",
+    "name": "register-route",
+    "description": "<p>Called on boot after routes-init, and during runtime operation of the front-end application, whenever a new route is registered. Can be used to augment a router object before it is registered to the router. async only - used in front-end</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "route",
+            "description": "<p>the new or updated route, indentified by unique id (route.id)</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "routes-init",
+    "title": "routes-init",
+    "name": "routes-init",
+    "description": "<p>Called after plugin-init, to add React Router routes to Reactium.Routing register before the Router component is initialized and finally the application is bound to the DOM. async only - used in front-end</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "sdk-init",
+    "title": "sdk-init",
+    "name": "sdk-init",
+    "description": "<p>Called after reactium-hooks.js DDD artifacts are loaded, to allow the Reactium SDK singleton to be extended before the init hook.</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "service-worker-init",
+    "title": "service-worker-init",
+    "name": "service-worker-init",
+    "description": "<p>Called after dependencies-load in Reactium.ServiceWorker to register any webapp service worker code for the app. By default, this hook is implemented to register the customizable Google Workbox implementation that will be compiled (to /assets/js/sw/sw.js). Also, async loads and instantiates a a google workbox-window Workbox object on Reactium.ServiceWorker.worker. async only - used in front-end webapp only</p>",
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-service-worker/sdk/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "Hook",
+    "url": "zone-defaults",
+    "title": "zone-defaults",
+    "name": "zone-defaults",
+    "description": "<p>Called after dependencies-load by Reactium.Zone.init() for loading default component rendering Zone controls and components. async only - used in front-end</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>used to create initial controls and components. controls.filter for default filtering, controls.sort for default sorting, controls.mapper for default mapping and controls.components for initial registered components. zone.js Domain Driven Design (DDD) artifacts from generated src/manifest.js are registered with Reactium.Zone at this time. See Reactium.Zone SDK for runtime operations.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Hooks",
+    "version": "0.0.0",
+    "filename": ".core/app/index.js",
+    "groupTitle": "Hooks"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useAsyncEffect(cb,dependencies)",
+    "title": "useAsyncEffect()",
+    "description": "<p>Just like React's built-in <code>useEffect</code>, but can use async/await. If the return is a promise for a function, the function will be used as the unmount callback.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>Just like callback provided as first argument of <code>useEffect</code>, but takes as its own first argument a method to see if the component is mounted. This is useful for deciding if your async response (i.e. one that would attempt to change state) should happen.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": true,
+            "field": "deps",
+            "description": "<p>Deps list passed to <code>useEffect</code></p>"
+          }
+        ]
+      }
+    },
+    "name": "useAsyncEffect",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Reactium Usage",
+        "content": "import React, { useState } from 'react';\nimport { useAsyncEffect } from 'reactium-core/sdk';\n\nconst MyComponent = props => {\n    const [show, setShow] = useState(false);\n\n    // change state allowing value to show\n    // asynchrounously, but only if component is still mounted\n    useAsyncEffect(async isMounted => {\n        setShow(false);\n        await new Promise(resolve => setTimeout(resolve, 3000));\n        if (isMounted()) setShow(true);\n\n        // unmount callback\n        return () => {};\n    }, [ props.value ]);\n\n    return (\n        {show && <div>{props.value}</div>}\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "StandAlone Import",
+        "content": "import { useAsyncEffect } from '@atomic-reactor/reactium-sdk-core';",
+        "type": "json"
+      },
+      {
+        "title": "Wrong Usage",
+        "content": "import React, { useState } from 'react';\nimport { useAsyncEffect } from 'reactium-core/sdk';\n\nconst MyComponent = props => {\n    const [show, setShow] = useState(false);\n\n    // change state allowing value to show\n    // asynchrounously, but only if component is still mounted\n    useAsyncEffect(async isMounted => {\n        // Warning: don't do this, wait until promise resolves to check isMounted()!!\n        if (isMounted()) { // this may be true *before* promise resolves and false *after*\n            setShow(false);\n            await new Promise(resolve => setTimeout(resolve, 3000));\n            setShow(true);\n        }\n\n        // unmount callback\n        return () => {};\n    }, [ props.value ]);\n\n    return (\n        {show && <div>{props.value}</div>}\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/async-effect.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useBreakpoint(width)",
+    "title": "useBreakpoint()",
+    "description": "<p>Returns string representing the breakpoint size for a given width.</p> <p>When using the out of the box scss styles in Reactium, a grid system is in place, and is defined by an overridable sass map <code>$breakpoints-max</code>, defined by default as:</p> <pre class=\"prettyprint\">$breakpoints-max: ('xs': 640, 'sm': 990, 'md': 1280, 'lg': 1440,'xl': 1600) !default; </code></pre>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": false,
+            "field": "width",
+            "description": "<p>the width to check the breakpoint for. Example for the default <code>$breakpoints-max</code> providing a width of 640 or less will return <code>xs</code>, 990 or less will return <code>sm</code> and so on.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useBreakpoint",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useBreakpoints()",
+    "title": "useBreakpoints()",
+    "description": "<p>Provides an object describing the maximum width for each breakpoint used in the Reactium grid styles. When using the out of the box scss styles in Reactium, a grid system is in place, and is defined by an overridable sass map <code>$breakpoints-max</code>, defined by default as:</p> <pre class=\"prettyprint\">$breakpoints-max: ('xs': 640, 'sm': 990, 'md': 1280, 'lg': 1440,'xl': 1600) !default; </code></pre> <p>These breakpoint maximums are automatically encoded and added to the stylesheet as <code>:after</code> psuedo-element <code>content</code> property, which can be loaded in the browser and used for in browser responsive behavior. Potentially, this can mean only having to manage your responsive breakpoints in one place (the stylesheet).</p>",
+    "name": "useBreakpoints",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useCapability(capability)",
+    "title": "useCapability()",
+    "description": "<p>React hook to get capability object.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "capability",
+            "description": "<p>the name/tag of the capability</p>"
+          }
+        ]
+      }
+    },
+    "name": "useCapability",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/capability.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useCapabilityCheck(capabilities,strict)",
+    "title": "useCapabilityCheck()",
+    "description": "<p>React hook to check a list of capabilities. Uses Reactium.Capability.check().</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "capabilities",
+            "description": "<p>array of 1 or more capabilities</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "strict",
+            "defaultValue": "true",
+            "description": "<p>when true all capabilities must be allowed for current user</p>"
+          }
+        ]
+      }
+    },
+    "name": "useCapabilityCheck",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/capability.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useDerivedState(props,subscriptions,updateAll)",
+    "title": "useDerivedState()",
+    "description": "<p>Sometimes you would like to derive state from your component props, and also allow either a prop change, or an internal state change either to take effect. This hook will allow you to create a state object from your component props, and subscribe (by array of object-paths) only to those prop changes you would like to see reflected in a rendering updates to your component state. This hook returns an array similar in nature to the return of React's built-in <code>useState()</code> hook (<code>[state,setState]</code>), with some differences.</p> <ol> <li>The initial value coming from props (on first render) will contain all that was present in the props object passed to it. Note that any values that are not present in your component props on first render, or that which are explicitly subscribed to, will not exist in the returned state element.</li> <li>The setState callback can receive whole or partial state objects, and will be merged with the existing state.</li> <li>There is a third element function <code>forceRefresh</code></li> </ol>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "props",
+            "description": "<p>the component props</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": true,
+            "field": "subscriptions",
+            "description": "<p>Array of string object-paths in your component props you would like to update your component state for. By default, this is empty, and if left empty you will get only the initial props, and no updates. Each selected property is shallow compared with the previous version of that prop (not the current state). Only a change of prop will trigger a prop-based update and rerender.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "updateAll",
+            "defaultValue": "false",
+            "description": "<p>When true, an update to any subscribed object-path on your props will cause <em>all</em> the props to imprint on your component state.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.14",
+    "name": "useDerivedState",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Returns",
+        "content": "// The hook returns an array containing [state, setState, forceRefresh]\nconst [state, setState, forceRefresh] = useDerivedState(props, ['path.to.value1', 'path.to.value2']);",
+        "type": "json"
+      },
+      {
+        "title": "Usage",
+        "content": "import React from 'react';\nimport { useDerivedState } from 'reactium-core/sdk';\nimport op from 'object-path';\n\nconst MyComponent = props => {\n    const [state, setState] = useDerivedState(props, ['path.to.value1', 'path.to.value2']);\n    const value1 = op.get(state, 'path.to.value1', 'Default value 1');\n    const value2 = op.get(state, 'path.to.value2', 'Default value 2');\n\n    // setState merges this object with previous state\n    const updateValue1 = () => setState({\n        path: {\n            to: {\n                value1: 'foo',\n            }\n        }\n    });\n\n    return (<div>\n        <div>Value 1: {value1}</div>\n        <div>Value 2: {value2}</div>\n        <button onClick={updateValue1}>Update Value 1</button>\n    </div>);\n}\n\nexport default MyComponent;",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/derived-state.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useDocument()",
+    "title": "useDocument()",
+    "description": "<p>Serves same use-case as <code>useWindow()</code>, but provides context aware <code>document</code> object or <code>undefined</code>, that can be used normally as well as in the <code>react-frame-component</code> within the toolkit.</p>",
+    "name": "useDocument",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useEventEffect(eventTarget,eventCallbacks,deps)",
+    "title": "useEventEffect()",
+    "version": "1.0.7",
+    "description": "<p>React hook to short hand for addEventListener and removeEventLister for one or more callbacks.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "eventTarget",
+            "description": "<p>Some event target object (implementing addEventListener and removeEventLister)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "eventCallbacks",
+            "description": "<p>Object keys are event names, and Object values are callbacks to be subscribed/unsubscribed.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "useEffectDeps",
+            "optional": false,
+            "field": "deps",
+            "description": "<p>consistent with React useEffect deps list.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useEventEffect",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "EventEffectComponent.js",
+        "content": "import React, { useState } from 'react';\nimport { useEventEffect } from 'reactium-core/sdk';\n\nconst EventEffectComponent = () => {\n    const [size, setSize] = useState({\n        width: window.innerWidth,\n        height: window.innerHeight,\n    });\n\n    const [online, setOnline] = useState(window.onLine);\n\n    const onResize = e => {\n        setSize({\n            width: window.innerWidth,\n            height: window.innerHeight,\n        });\n    };\n\n    const onNetworkChange = e => {\n        setOnline(window.onLine);\n    };\n\n    useEventEffect(\n        window,\n        {\n            resize: onResize,\n            online: onNetworkChange,\n            offline: onNetworkChange,\n        },\n        [],\n    );\n\n    return (\n        <div className='status'>\n            <span className='status-width'>width: {size.width}</span>\n            <span className='status-height'>height: {size.height}</span>\n            <span className={`status-${online ? 'online' : 'offline'}`}></span>\n        </div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/event-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useEventHandle(handle)",
+    "title": "useEventHandle()",
+    "description": "<p>React hook to create an imperative handle that is also an implementation of EventTarget. Can be used in conjunction with useImperativeHandle (React built-in) or useRegisterHandle/useHandle (Reactium SDK hooks).</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "handle",
+            "description": "<p>Interface for interacting with your component.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useEventHandle",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "EventHandleComponent.js",
+        "content": "import React, { useEffect } from 'react';\nimport { useRegisterHandle, useEventHandle } from 'reactium-core/sdk';\n\nconst EventHandleComponent = () => {\n     const [ value, setValue ] = useState(1);\n     const createHandle = () => ({\n         value, setValue,\n     });\n\n     const [ handle, setHandle ] = useEventHandle(createHandle());\n\n     useEffect(() => {\n         setHandle(createHandle());\n     }, [value]);\n\n     useRegisterHandle('EventHandleComponent', () => handle);\n\n     const onClick = () => {\n         if (handle) {\n            setValue(value + 1);\n            handle.dispatchEvent(new CustomEvent('do-something'));\n         }\n     }\n\n     return (<button onClick={onClick}>Click Me ({value})</button>);\n };\n\n export default EventHandleComponent;",
+        "type": "json"
+      },
+      {
+        "title": "EventHandleConsumer.js",
+        "content": "import React, { useEffect, useState } from 'react';\nimport { useHandle } from 'reactium-core/sdk';\n\nconst EventHandleConsumer = props => {\n    const [state, setState] = useState();\n    const handleEventTarget = useHandle('EventHandleComponent');\n\n    // when 'do-something' event occurs on\n    // EventHandleComponent, this component can react\n    const onDoSomething = e => {\n        setState(e.target.value);\n    };\n\n    useEffect(() => {\n        if (handleEventTarget) {\n            handleEventTarget.addEventListener('do-something', onDoSomething);\n        }\n        return () => handleEventTarget.removeEventListener('do-something', onDoSomething);\n    }, [handleEventTarget]);\n\n    return (\n        <div>\n            value: {state}\n        </div>\n    );\n};\n\nexport default EventHandleConsumer;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/event-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useEventRefs()",
+    "title": "useEventRefs()",
+    "version": "1.0.7",
+    "group": "ReactHook",
+    "name": "useEventRefs",
+    "description": "<p>Like useRefs, creates a single reference object that can be managed using the <code>get</code>/<code>set</code>/<code>del</code>/<code>clear</code> functions, however also an EventTarget object. <code>set</code>/<code>del</code>/<code>clear</code> methods dispatch <code>before-set</code>/<code>set</code>, <code>before-del</code>/<code>del</code>, and <code>before-clear</code>/<code>clear</code> events respectively.</p>",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React, { useState } from 'react';\nimport { useRefs } from '@atomic-reactor/reactium-sdk-core';\n\nconst MyComponent = () => {\n    const refs = useEventRefs();\n    const [ready, setReady] = useState(false);\n\n    const onChildRefReady = e => {\n        if (e.key === 'my.component') {\n            setReady(refs.get(e.key) !== undefined);\n        }\n    };\n\n    useEffect(() => {\n        refs.addEventListener('set', onChildRefReady);\n        return () => refs.removeEventListener('set', onChildRefReady);\n    }, []);\n\n    return (\n        <MyForwardRefComponent ref={cmp => refs.set('my.component', cmp)} />\n        {ready && <Controller control={refs.get('my.component')} />}\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useRefs.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useFocusEffect(container,dependencies)",
+    "title": "useFocusEffect()",
+    "group": "ReactHook",
+    "name": "useFocusEffect",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Element",
+            "optional": false,
+            "field": "container",
+            "description": "<p>The DOM element to search for the 'data-focus' element.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": true,
+            "field": "dependencies",
+            "description": "<p>Dependencies list passed to <code>useEffect</code>.</p>"
+          }
+        ],
+        "Returns": [
+          {
+            "group": "Returns",
+            "type": "Boolean",
+            "optional": false,
+            "field": "focused",
+            "description": "<p>If the 'data-focus' element was found.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Reactium Usage",
+        "content": "import cn from 'classnames';\nimport React, { useRef } from 'react';\nimport { useFocusEffect } from 'reactium-core/sdk';\n\nconst MyComponent = props => {\n    const containerRef = useRef();\n\n    const [focused] = useFocusEffect(containerRef.current);\n\n    return (\n        <form ref={containerRef}>\n            <input className={cn({ focused })} type='text' data-focus />\n            <button type='submit'>Submit</button>\n        </form>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "Returns",
+        "content": "{Array} [focused:Element, setFocused:Function]",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/focus-effect.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useFulfilledObject(object,keys)",
+    "title": "useFulfilledObject()",
+    "name": "useFulfilledObject",
+    "group": "ReactHook",
+    "description": "<p>Asyncronous React hook that determines if the supplied object has values for the supplied keys. Useful when you have many <code>useEffect</code> calls and need to know if multiple pieces of the state are set and ready for rendering.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "object",
+            "description": "<p>The object to check.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": false,
+            "field": "keys",
+            "description": "<p>List of object paths to validate.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "\nimport React, { useEffect, useState } from 'react';\nimport { useFulfilledObject } from 'reactium-core/sdk';\n\nconst MyComponent = () => {\n\n    const [state, setNewState] = useState({});\n    const [updatedState, ready, attempts] = useFulfilledObject(state, ['msg', 'timestamp']);\n\n    const setState = newState => {\n        newState = { ...state, ...newState };\n        setNewState(newState);\n    };\n\n    useEffect(() => {\n        if (!state.msg) {\n            setState({ msg: 'ok'});\n        }\n    }, [state]);\n\n    useEffect(() => {\n        if (!state.timestamp) {\n            setState({ timestamp: Date.now() });\n        }\n    }, [state]);\n\n    const render = () => {\n        return ready !== true ? null : <div>I'm READY!!</div>;\n    };\n\n    return render();\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/fulfilled-object.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useHandle(id,defaultValue)",
+    "title": "useHandle()",
+    "description": "<p>React hook to subscribe to a specific imperative handle reference. Useful for having one functional component control another.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": true,
+            "field": "defaultValue",
+            "description": "<p>the value to use for the handle if it does not exist.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useHandle",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Counter.js",
+        "content": "import React, { useState } from 'react';\nimport { useRegisterHandle } from 'reactium-core/sdk';\n\nconst Counter = ({id = 1}) => {\n    const [count, setCount] = useState(Number(id));\n\n    // id 'counter.1' by default\n    useRegisterHandle(['counter', id], () => ({\n        increment: () => setCount(count + 1),\n    }), [count]);\n\n    return (\n        <div>\n            <h1>Counter {id}</h1>\n            Count: {count}\n        </div>\n    );\n};\n\nexport default Counter;",
+        "type": "json"
+      },
+      {
+        "title": "CounterControl.js",
+        "content": "import React from 'react';\nimport { useHandle } from 'reactium-core/sdk';\n\nconst noop = () => {};\nconst CounterControl = () => {\n    // Get increment control on handle identified at path 'counter.1'\n    const { increment } = useHandle('counter.1', { increment: noop }});\n\n    return (\n        <div>\n            <h1>CounterControl</h1>\n            <button onClick={increment}>Increment Counter</button>\n        </div>\n    );\n};\n\nexport default CounterControl;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useHookComponent(hookName,defaultComponent,...params)",
+    "title": "useHookComponent()",
+    "description": "<p>A React hook used to define React component(s) that can be overrided by Reactium plugins, using the <code>Reactium.Component.register()</code> function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "hookName",
+            "description": "<p>the unique string used to register component(s).</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Component",
+            "optional": false,
+            "field": "defaultComponent",
+            "description": "<p>the default React component(s) to be returned by the hook.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "params",
+            "description": "<p>variadic list of parameters to be passed to the Reactium hook specified by hookName.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useHookComponent",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "parent.js",
+        "content": "import React from 'react';\nimport { useHookComponent } from 'reactium-core/sdk';\n\n// component to be used unless overriden by Reactium.Component.register()\nconst DefaultComponent = () => <div>Default or Placeholder component</div>\n\nexport props => {\n    const MyComponent = useHookComponent('my-component', DefaultComponent);\n    return (\n        <div>\n            <MyComponent {...props} />\n        </div>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "reactium-hooks.js",
+        "content": "import React from 'react';\nimport Reactium from 'reactium-core/sdk';\n\n// component to be used unless overriden by Reactium.Component.register()\nconst ReplacementComponent = () => <div>My Plugin's Component</div>\n\nReactium.Component.register('my-component', ReplacementComponent);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/component.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useIsContainer(element,container)",
+    "title": "useIsContainer()",
+    "name": "useIsContainer",
+    "group": "ReactHook",
+    "description": "<p>React hook that determines if the element is a child of the container. Useful for traversing the DOM to find out if an event or action happened within the specified container.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Node",
+            "optional": false,
+            "field": "element",
+            "description": "<p>The inner most element. Consider this the starting point.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Node",
+            "optional": false,
+            "field": "container",
+            "description": "<p>The outer most element. Consider this the destination.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import { useIsContainer } from 'reactium-core/sdk';\nimport React, { useEffect, useRef, useState } from 'react';\n\nexport const Dropdown = props => {\n    const container = useRef();\n\n    const [expanded, setExpanded] = useState(props.expanded || false);\n\n    const isContainer = useIsContainer();\n\n    const dismiss = e => {\n        // already dismissed? -> do nothing!\n        if (!expanded) return;\n\n        // e.target is inside container.current? -> do nothing!\n        if (isContainer(e.target, container.current)) return;\n\n        // e.target is outside container.current? -> collapse the menu\n        setExpanded(false);\n    };\n\n    const toggle = () => setExpanded(!expanded);\n\n    useEffect(() => {\n        if (!container.current || typeof window === 'undefined') return;\n\n        window.addEventListener('mousedown', dismiss);\n        window.addEventListener('touchstart', dismiss);\n\n        return () => {\n            window.removeEventListener('mousedown', dismiss);\n            window.removeEventListener('touchstart', dismiss);\n        }\n\n    }, [container.current]);\n\n    return (\n        <div ref={container}>\n            <button onClick={toggle}>Toggle Dropdown</button>\n            {expanded && (\n                <ul>\n                    <li><a href='#item-1' onClick={toggle}>Item 1</a></li>\n                    <li><a href='#item-2' onClick={toggle}>Item 2</a></li>\n                    <li><a href='#item-3' onClick={toggle}>Item 3</a></li>\n                </ul>\n            )}\n        </div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/is-container.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useRefs()",
+    "title": "useRefs()",
+    "group": "ReactHook",
+    "name": "useRefs",
+    "description": "<p>Creates a single reference object that can be managed using the <code>get</code>/<code>set</code>/<code>del</code>/<code>clear</code> functions.</p>",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React, { useEffect, useState } from 'react';\nimport { useRefs } from '@atomic-reactor/reactium-sdk-core';\n\nconst MyComponent = () => {\n    const refs = useRefs();\n    const [state, setState] = useState({ input: null });\n\n    const onClick = () => {\n        const inputElm = refs.get('input');\n        setState({ ...state, input: inputElm.value });\n        inputElm.value = '';\n    };\n\n    return (\n        <div ref={elm => refs.set('container', elm)}>\n            {state.input && <div>{state.input}</div>}\n            <input type='text' ref={elm => refs.set('input', elm)} />\n            <button onClick={onClick}>Update</button>\n        </div>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "Proxy Reference Usage",
+        "content": "// sometimes you need a forwarded ref to be a ref object from useRef() or React.createRef()\n// You can create proxy factory for the refs to achieve this.\nimport React, { useEffect, useState } from 'react';\nimport { EventForm } from '@atomic-reactor/reactium-ui';\nimport { useRefs } from '@atomic-reactor/reactium-sdk-core';\n\nconst MyComponent = () => {\n   const refs = useRefs();\n   // creates a factory for React.createRef() object to your refs\n   const refProxy = refs.createProxy('form');\n\n   const [state, setState] = useState({});\n\n   const onSubmit = e => {\n       const formRef = refs.get('form');\n       setState({ ...formRef.getValue() });\n   };\n\n   // EventForm expects a reference object, not a callback function\n   // When EventForm references ref.current, it will actually get refs.get('form').\n   // When EventForm sets the ref.current value, it will actually perform refs.set('form', value);\n   return (\n       <EventForm ref={refProxy} onSubmit={onSubmit}>\n           <input type='text' name=\"foo\" />\n           <button type=\"submit\">Submit the Form</button>\n       </EventForm>\n   );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useRefs.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useRegisterHandle(id,cb,deps)",
+    "title": "useRegisterHandle()",
+    "description": "<p>React hook to create a new imperative handle reference, similar to <code>useImperativeHandle()</code> except that instead of using <code>React.forwardRef()</code> to attach the handle to a parent compenent ref. A ref is generated for you and is assigned the current value of the callback <code>cb</code>, is registered with <code>Reactium.Handle</code>, and made available to all other components at the object path <code>id</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>Function that returns value to be assigned to the imperative handle reference.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": false,
+            "field": "deps",
+            "description": "<p>Array of values to watch for changes. When changed, your reference will be updated by calling <code>cb</code> again. All <code>Reactium.Handle.subscribe()</code> subscribers will be called on updates, and relevant <code>useHandle()</code> hooks will trigger rerenders.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useRegisterHandle",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useRegisterSyncHandle(id,cb,deps)",
+    "title": "useRegisterSyncHandle()",
+    "description": "<p>React hook to create a new imperative handle reference, similar to <code>useRegisterHandle()</code> except that it returns a sync state object (see useSyncState) and will cause rerenders in the controlled component.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "initial",
+            "description": "<p>value of the state handle.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useRegisterSyncHandle",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Counter.js",
+        "content": "import React, { useState } from 'react';\nimport { useRegisterSyncHandle } from 'reactium-core/sdk';\n\nconst Counter = ({id = 1}) => {\n    const state = useRegisterSyncHandle('counter', {\n        foo: {\n            count: Number(id)\n        },\n    });\n\n    state.extend('incrementCount', () => {\n        state.set('foo.count', state.get('foo.count', id) + 1);\n    });\n\n    return (\n        <div>\n            <h1>Counter {id}</h1>\n            Count: {state.get('foo.count', id)}\n        </div>\n    );\n};\n\nexport default Counter;",
+        "type": "json"
+      },
+      {
+        "title": "CounterControl.js",
+        "content": "import React from 'react';\nimport { useSelectHandle } from 'reactium-core/sdk';\n\nconst noop = () => {};\nconst CounterControl = () => {\n    const { handle, count } = useSelectHandle('counter', 'foo.count', 1);\n\n    // set state for Counter, as well as cause this component to rerender\n\n    return (\n        <div>\n            <h1>CounterControl</h1>\n            <button onClick={handle.incrementCount}>\n              Increment Counter ({count})\n            </button>\n        </div>\n    );\n};\n\nexport default CounterControl;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/sync-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useRoles(search)",
+    "title": "useRoles()",
+    "description": "<p>React hook to get roles object. If search is provided, will retrieve a specific role.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "search",
+            "description": "<p>Name, level or object id of the roles to retrieve. If not provide, an object will all roles will be returned.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useRoles",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/roles.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useScrollToggle()",
+    "title": "useScrollToggle()",
+    "description": "<p>React hook to that returns a control allowing you to <code>enable</code>, <code>disable</code>, or <code>toggle</code> scroll locking on the body element. Also registers the returned handle as <code>BodyScroll</code>. To use the BodyScroll handle, you need only apply useSelectHandle() in one global component. See useSelectHandle() for information on using registered handles.</p>",
+    "name": "useScrollToggle",
+    "group": "ReactHook",
+    "version": "1.2.7",
+    "examples": [
+      {
+        "title": "NPM Usage",
+        "content": "import { useScrollToggle } from '@atomic-reactor/reactium-sdk-core';",
+        "type": "json"
+      },
+      {
+        "title": "Reactium Usage",
+        "content": "import { useScrollToggle } from 'reactium-core/sdk';",
+        "type": "json"
+      },
+      {
+        "title": "Modal.js",
+        "content": "import React, { useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n    cxFactory,\n    useScrollToggle,\n    useIsContainer,\n    useEventEffect,\n    useRegister\n    HookComponent,\n} from '@atomic-reactor/reactium-sdk-core';\n\n const Modal = () => {\n    const bodyScroll = useScrollToggle();\n    const handle = useRegisterSyncHandle('Modal', {\n        open: false,\n        Contents: {\n            Component: () => null,\n        },\n    });\n\n    // Close modal and disable scroll lock on body\n    handle.extend('close', () => {\n        handle.set('open', false);\n        bodyScroll.enable();\n    });\n\n    // Open modal, showing component, and stop scroll on body\n    handle.extend('open', Component => {\n        handle.set('Contents', { Component });\n        handle.set('open', true);\n        bodyScroll.disable();\n    });\n\n    const isContainer = useIsContainer();\n    const container = useRef();\n    const content = useRef();\n    const dismiss = e => {\n        if (\n            isContainer(e.target, container.current) &&\n            !isContainer(e.target, content.current)\n        ) {\n            handle.close();\n        }\n    };\n\n    useEventEffect(\n        window,\n        {\n            mousedown: dismiss,\n            touchstart: dismiss,\n        },\n        [container.current],\n    );\n\n    const cn = cxFactory('modal');\n    const Component = handle.get('Contents.Component', () => null);\n\n    return ReactDOM.createPortal(\n        <div\n            ref={container}\n            className={`${cn()} ${cn({ open: handle.get('open', false) })}`}>\n            <div ref={content} className={cn('contents')}>\n                <Component modal={handle} />\n            </div>\n        </div>,\n        document.querySelector('body'),\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "LockToggle.js",
+        "content": "import React from 'react';\nimport {\n    useSelectHandle,\n} from '@atomic-reactor/reactium-sdk-core';\n\n// Somewhere else in the app, useScrollToggle() has been invoked.\nconst LockToggle = () => {\n    const { handle: BodyScroll } = useSelectHandle('BodyScroll');\n    return (\n        <button onClick={BodyScroll.toggle}>\n        {\n            BodyScroll.get('enabled') ? 'Lock Scrolling' : 'Unlock Scrolling'\n        }\n        </button>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useScrollToggle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useSelectHandle(id,cb,deps)",
+    "title": "useSelectHandle()",
+    "description": "<p>React hook to subscribe to updates to state on an imperative handle created by useRegisterSyncHandle. See useRegisterSyncHandle for full example.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String|Array|Function",
+            "optional": false,
+            "field": "selector",
+            "description": "<p>object path string or array, or selector function passed the sync state object (see useSyncState); returns seleted state</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": true,
+            "field": "default",
+            "description": "<p>default selected value (if selector is String or Array)</p>"
+          }
+        ]
+      }
+    },
+    "name": "useSelectHandle",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/sync-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useSettingGroup(group)",
+    "title": "useSettingGroup()",
+    "version": "3.2.1",
+    "description": "<p>Get and set a group of Actinium settings.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "group",
+            "description": "<p>the setting group id</p>"
+          }
+        ]
+      }
+    },
+    "name": "useSettingGroup",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React from 'react';\nimport { useSettingGroup } from 'reactium-core/sdk';\nimport op from 'object-path';\n\nexport default () => {\n    const { canGet, canSet, settingGroup, setSettingGroup } = useSettingGroup('MySettings');\n\n    // Set MySetting.foo = 'bar' on click\n    return (\n        <div>\n            {canGet && <span>Foo Setting: {op.get(settingGroup, 'foo')}</span>}\n\n            <button disabled={!canSet} onClick={() => setSettingGroup({\n                ...settingGroup,\n                foo: 'bar',\n            })}>Update Setting</button>\n        </div>\n    )\n}",
+        "type": "json"
+      },
+      {
+        "title": "Returns",
+        "content": "{\n    canGet, // Boolean, if current user is allowed to get this setting group\n    canSet, // Boolean, if current user is allowed to set this setting group\n    settingGroup, // setting group object\n    setSettingGroup, // wrapper around Reactium.Setting.set(), will trigger optimistic update and rerender on response\n}",
+        "type": "json"
+      }
+    ],
+    "filename": ".core/sdk/named-exports/setting.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useStatus(initialStatus)",
+    "title": "useStatus()",
+    "group": "ReactHook",
+    "name": "useStatus",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "initialStatus",
+            "defaultValue": "pending",
+            "description": "<p>The initial status of the hook.</p>"
+          }
+        ]
+      }
+    },
+    "description": "<p>Synchronously set a status value that can be checked within a function scope without updating the state of the component. Useful when doing asynchronous activities and the next activity depends on a status of some sort from the previous activity.</p> <p>Returns [status:String, setStatus:Function, isStatus:Function, getStatus:Function]</p> <h3>status</h3> <p>The current asynchronous status value. (is accurate once per render)</p> <h3>setStatus(status:String, forceRender:Boolean = false)</h3> <p>Set the status value. If forceRender is true, a rerender will be triggered. <em><strong>Beware:</strong></em> forceRender may have unintended consequence and should be used in last status before re-rendering situations only.</p> <h3>isStatus(statuses:Array)</h3> <p>Check if the current status matches the statuses passed.</p> <h3>getStatus()</h3> <p>Get the synchrounous value of the status. This can matter if you need to set and check the value in the same render cycle.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useStatus.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useSyncHandle(id,updateEvent)",
+    "title": "useSyncHandle()",
+    "description": "<p>React hook to subscribe to updates for a registered sync handle.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'. Identifies the full path to an imperative handle.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "updateEvent",
+            "defaultValue": "set",
+            "description": "<p>Trigger update of the consuming component when EventTarget event of this type is dispatched. Defaults tot 'set'.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useSyncHandle",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/sync-handle.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useSyncState(initialState,updateEvent)",
+    "title": "useSyncState()",
+    "name": "useSyncState",
+    "group": "ReactHook",
+    "description": "<p>Intended to provide an object to get and set state synchrounously, while providing a <code>EventTarget</code> object that can dispatch a <code>set</code> event whenever the state is changed. The hook will also dispatch a <code>change</code> event whenever the synced state changes. The hook can also listen for a specified event on the <code>EventTarget</code> object, and update the synced state with the <code>event.detail</code> property when the event is dispatched.</p> <p>The hook uses the <code>ReactiumSyncState</code> class to implement the synced state and <code>EventTarget</code> behavior. The class uses the <a href=\"https://github.com/mariocasciaro/object-path\"><code>object-path</code></a> module to manipulate the state object, and provides the following methods:</p> <ul> <li><code>get(path, defaultValue)</code>: Gets the value at the specified path in the synced state, or the entire synced state if no path is provided. If the value at the specified path is <code>undefined</code>, returns the provided default value instead.</li> <li><code>set(path, value)</code>: Sets the value at the specified path in the synced state, or replaces the entire synced state if no path is provided. The <code>path</code> parameter can be a string or array, representing a path in the object, or <code>undefined</code> to replace the entire object. Dispatches a <code>set</code> event. If the new value is different from the previous value, also dispatches a <code>change</code> event.</li> <li><code>set(path, value, update)</code>: Sets the value at the specified path in the synced state, or replaces the entire synced state if no path is provided. If <code>update</code> is <code>true</code>, dispatches a <code>set</code> event. If the new value is different from the previous value and <code>update</code> is <code>true</code>, also dispatches a <code>change</code> event. The <code>path</code> parameter can be a string or array, representing a path in the object, or <code>undefined</code> to replace the entire object.</li> <li><code>extend(prop, method)</code>: Extends the <code>ReactiumSyncState</code> instance with the provided method, bound to the instance.</li> </ul>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "initialState",
+            "description": "<p>The initial state of the synced state.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "string",
+            "optional": true,
+            "field": "updateEvent",
+            "defaultValue": "set",
+            "description": "<p>The event name to listen for on the <code>EventTarget</code> object. When the event is dispatched, the hook will update the synced state with the <code>event.detail</code> property, and trigger a rerender of the React component.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Simple",
+        "content": "import React from 'react';\nimport { useSyncState } from 'reactium-sdk-core';\n\nconst ExampleComponent = () => {\n    const [syncState, setSyncState] = useSyncState({ count: 0 });\n\n    return (\n        <>\n            <div>Count: {syncState.get('count')}</div>\n            <button onClick={() => setSyncState({ count: syncState.get('count') + 1 })}>\n                Increment\n            </button>\n        </>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "get and set",
+        "content": "import { useSyncState } from 'reactium-sdk-core';\n\nfunction MyComponent() {\n  const syncState = useSyncState({ foo: 'bar' });\n\n  const handleClick = () => {\n    // Get the entire synced state\n    console.log(syncState.get()); // { foo: 'bar' }\n\n    // Get a property of the synced state\n    console.log(syncState.get('foo')); // 'bar'\n\n    // Update a property of the synced state\n    syncState.set('foo', 'baz');\n    console.log(syncState.get('foo')); // 'baz'\n\n    // Replace the entire synced state\n    syncState.set({ foo: 'bar', baz: 'qux' });\n    console.log(syncState.get()); // { foo: 'bar', baz: 'qux' }\n  };\n\n  return <button onClick={handleClick}>Update State</button>;\n}",
+        "type": "json"
+      },
+      {
+        "title": "Form Usage",
+        "content": "import { useSyncState } from 'reactium-sdk-core';\n\nfunction MyForm() {\n  const syncState = useSyncState({\n    user: {\n      name: 'John Doe',\n      age: 30,\n      address: {\n        street: '123 Main St',\n        city: 'New York',\n        state: 'NY',\n      },\n    },\n  });\n\n  const handleChange = (event) => {\n    const { name, value } = event.target;\n    syncState.set(name, value);\n  };\n\n  return (\n    <form>\n      <label htmlFor=\"name\">Name:</label>\n      <input\n        type=\"text\"\n        id=\"name\"\n        name=\"user.name\"\n        value={syncState.get('user.name')}\n        onChange={handleChange}\n      />\n      <br />\n      <label htmlFor=\"age\">Age:</label>\n      <input\n        type=\"number\"\n        id=\"age\"\n        name=\"user.age\"\n        value={syncState.get('user.age')}\n        onChange={handleChange}\n      />\n      <br />\n      <label htmlFor=\"street\">Street:</label>\n      <input\n        type=\"text\"\n        id=\"street\"\n        name=\"user.address.street\"\n        value={syncState.get('user.address.street')}\n        onChange={handleChange}\n      />\n      <br />\n      <label htmlFor=\"city\">City:</label>\n      <input\n        type=\"text\"\n        id=\"city\"\n        name=\"user.address.city\"\n        value={syncState.get('user.address.city')}\n        onChange={handleChange}\n      />\n      <br />\n      <label htmlFor=\"state\">State:</label>\n      <input\n        type=\"text\"\n        id=\"state\"\n        name=\"user.address.state\"\n        value={syncState.get('user.address.state')}\n        onChange={handleChange}\n      />\n      <br />\n    </form>\n  );\n}",
+        "type": "json"
+      }
+    ],
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "ReactiumSyncState",
+            "optional": false,
+            "field": "syncState",
+            "description": "<p>The <code>ReactiumSyncState</code> instance returned by the hook.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/useSyncState.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useWindow()",
+    "title": "useWindow()",
+    "description": "<p>React hook which resolves to the browser or electron window when run in normal context or in the Reactium toolkit. Otherwise will return <code>undefined</code>. This is important particularly when you need to inspect the window inside the <code>react-frame-component</code> (<code>FrameContextConsumer</code>) which sandboxes your component withing the toolkit. Your component will automatically be rendered inside the WindowProvider, which will provide the correct <code>window</code> and <code>document</code> objects. See <code>useWindowSize()</code> for the most important use case.</p>",
+    "examples": [
+      {
+        "title": "BrowserComponent.js",
+        "content": "import Reactium, { useWindow } from 'reactium-core/sdk';\nimport React, { useEffect } from 'react';\nimport op from 'object-path';\n\nexport default () => {\n    const window = useWindow();\n    const [width, setWidth] = op.get(window, 'innerWidth', 1);\n\n    useEffect(() => {\n        const isBrowser = Reactium.Utils.isWindow(window);\n        const updateWidth = () => setWidth(window.innerWidth);\n\n        // safe for server-side rendering, which has no window\n        // when used in toolkit Frame, will use correct window object\n        if (isBrowser) {\n            window.addEventListener('resize', updateWidth)\n            return () => window.removeEventListener('resize', updateWidth);\n        }\n    }, []);\n};\n\n // import WindowProvider from 'reactium-core/components/WindowProvider';",
+        "type": "json"
+      }
+    ],
+    "name": "useWindow",
+    "group": "ReactHook",
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useWindowSize(params)",
+    "title": "useWindowSize()",
+    "description": "<p>Returns window <code>innerWidth</code> number, <code>innerHeight</code> number, and current <code>breakpoint</code>, and updates on window resizes. When using the out of the box scss styles in Reactium, a grid system is in place, and is defined by an overridable sass map <code>$breakpoints-max</code>, defined by default as:</p> <pre class=\"prettyprint\">$breakpoints-max: ('xs': 640, 'sm': 990, 'md': 1280, 'lg': 1440,'xl': 1600) !default; </code></pre>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": true,
+            "field": "params",
+            "description": "<p><code>defaultWidth</code>, <code>defaultHeight</code>, and debounce <code>delay</code> properties.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "params.defaultWidth",
+            "defaultValue": "1",
+            "description": "<p>Default width returned by the hook when window object is <code>undefined</code>.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "params.defaultHeight",
+            "defaultValue": "1",
+            "description": "<p>Default height returned by the hook when window object is <code>undefined</code>.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "params.delay",
+            "defaultValue": "0",
+            "description": "<p>Debounce delay to throttle many window resize events, to prevent unnecessary rerenders of your component using this hook.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useWindowSize",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "ResponsiveComponent.js",
+        "content": "import React from 'react';\nimport { useWindowSize } from 'reactium-core/sdk';\n\nconst Mobile = () => {\n   return (\n       <div>I'm a mobile component</div>\n   );\n}\n\nconst Tablet = () => {\n   return (\n       <div>I'm a tablet component</div>\n   );\n}\n\nconst Desktop = () => {\n   return (\n       <div>I'm a desktop component</div>\n   );\n}\n\nexport () => {\n   const { breakpoint } = useWindowSize();\n\n   switch(breakpoint) {\n       case 'xl':\n       case 'lg':\n       return <Desktop />;\n\n       case 'md':\n       return <Tablet />;\n\n       case 'xs':\n       case 'sm':\n       default:\n       return <Mobile />;\n   }\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/window.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "ReactHook",
+    "url": "useZoneComponents(zone)",
+    "title": "useZoneComponents()",
+    "description": "<p>A React hook used in the <code>Zone</code> component to determine what components should currently be rendered. Useful to observe a zone in another component. If you want to observe to the zone components without necessarily causing a rerender in your component, use <code>Reactium.Zone.getZoneComponents()</code> (to get a list of components in the zone), alone or in combination with <code>Reactium.Zone.subscribe()</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone id.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": false,
+            "field": "dereference",
+            "defaultValue": "true",
+            "description": "<p>If true, returns the current value of the components in the zone, separate from the reference. Otherwise, returns the ReactiumSyncState object. This can be useful if you wish to use the components value with a non-memoized value.</p>"
+          }
+        ]
+      }
+    },
+    "name": "useZoneComponents",
+    "group": "ReactHook",
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import React from 'react';\nimport { useZoneComponents } from 'reactium-core/sdk';\n\nexport props => {\n    const zoneComponents = useZoneComponents('my-zone');\n\n    return (\n        <div>\n            Components in Zone: {zoneComponents.length}\n        </div>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "NoDereference",
+        "content": "import React from 'react';\nimport { useZoneComponents } from 'reactium-core/sdk';\n\n// Use this method when the zone components are not refreshing smoothly on\n// rendering.\nexport props => {\n    const zoneComponents = useZoneComponents('my-zone', false);\n\n    return (\n        <div>\n            Components in Zone: {zoneComponents.get().length}\n        </div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/Zone.js",
+    "groupTitle": "ReactHook"
+  },
+  {
+    "type": "Object",
+    "url": "Cache",
+    "title": "Cache",
+    "version": "3.0.3",
+    "name": "Cache",
+    "group": "Reactium.Cache",
+    "description": "<p>Cache allows you to easily store application data in memory.</p>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.clear()",
+    "title": "Cache.clear()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.clear",
+    "description": "<p>Delete all cached values.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The key to delete. If the value is an <code>{Object}</code> you can use an object path to delete a specific part of the value. The updated value is then returned.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Cache.clear();",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.del(key)",
+    "title": "Cache.del()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.del",
+    "description": "<p>Delete the value for a given key. Returns <code>{Boolean}</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The key to delete. If the value is an <code>{Object}</code> you can use an object path to delete a specific part of the value. The updated value is then returned.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "// Given the cached value: { foo: { bar: 123, blah: 'hahaha' } }\nReactium.Cache.del('foo.bar'); // returns: { blah: 'hahaha' }\nReactium.Cache.del('foo');     // returns: true",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.get(key)",
+    "title": "Cache.get()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.get",
+    "description": "<p>Retrieves the value for a given key. If the value is not cached <code>null</code> is returned.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "key",
+            "description": "<p>The key to retrieve. If the value is an <code>{Object}</code> you can use an object path for the key. If no key is specified the entire cache is returned.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": true,
+            "field": "default",
+            "description": "<p>The default value to return if key is not found.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "// Given the cached value: { foo: { bar: 123 } }\nReactium.Cache.get('foo.bar'); // returns: 123;\nReactium.Cache.get('foo');     // returns: { bar: 123 }",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.keys()",
+    "title": "Cache.keys()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.keys",
+    "description": "<p>Returns an array of the cached keys.</p>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.memsize()",
+    "title": "Cache.memsize()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.memsize",
+    "description": "<p>Returns the number of entries taking up space in the cache.</p>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.merge(values)",
+    "title": "Cache.merge()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.merge",
+    "description": "<p>Merges the supplied values object with the current cache. Any existing entries will remain in cache. Duplicates will be overwritten unless <code>option.skipDuplicates</code> is <code>true</code>. Entries that would have exipired since being merged will expire upon merge but their timeoutCallback will not be invoked. Returns the new size of the cache.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "values",
+            "description": "<p>Key value pairs to merge into the cache.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "// Give the existing cache: { foo: 'bar' }\n\nReactium.Cache.merge({\n    test: {\n        value: 123,\n        expire: 5000,\n    },\n});\n\nReactium.Cache.get()\n// returns: { foo: 'bar', test: 123 }",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.set(key,value,timeout,timeoutCallback)",
+    "title": "Cache.set()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.set",
+    "description": "<p>Sets the value for a given key. If the value is an <code>{Object}</code> and is already cached, you can use an object path to update a specific part of the value. Returns the cached value.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The key to set. If the key is an object path and the key does not exist, it will be created.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "value",
+            "description": "<p>The value to cache.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "timeout",
+            "description": "<p>Remove the value in the specified time in milliseconds. If no timeout value specified, the value will remain indefinitely.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": true,
+            "field": "timeoutCallback",
+            "description": "<p>Function called when the timeout has expired. The timeoutCallback will be passed the key and value as arguments.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "// The following are equivalent\nReactium.Cache.set('foo', { bar: 123 });\nReactium.Cache.set('foo.bar', 123);\n\n// Set to expire in 5 seconds\nReactium.Cache.set('error', 'Ivnalid username or password', 5000);\n\n// Set to expire in 5 seconds and use a timeoutCallback\nReactium.Cache.set('foo', { bar: 456 }, 5000, (key, value) => console.log(key, value));",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.size()",
+    "title": "Cache.size()",
+    "version": "3.0.3",
+    "group": "Reactium.Cache",
+    "name": "Cache.size",
+    "description": "<p>Returns the current number of entries in the cache.</p>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Function",
+    "url": "Cache.subscribe(key,cb)",
+    "title": "Cache.subscribe()",
+    "group": "Reactium.Cache",
+    "name": "Cache.subscribe",
+    "description": "<p>Subscribe to cache changes that impact a particular key. Returns an unsubscribe function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "key",
+            "description": "<p>object path of the cache value (array or string)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>The callback function to call when impacting changes have been made to the subscribed cache. Changes include any set/put, delete, clear, merge, or expiration that <em>may</em> impact the value you care about.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "const foo = Reactium.Cache.get('values.foo');\nReactium.Cache.subscribe('values.foo', ({op, ...params}) => {\nswitch(op) {\n    case 'set': {\n        const { key, value } = params;\n        // do something with new value if applicable\n        // you can see the key that impacted the cache value\n        break;\n    }\n     case 'del': {\n        // the key that was deleted\n        const { key } = params;\n        // do something about the deletion\n        break;\n    }\n     case 'expire': {\n        // do something about expiration (which will have impacted your value for sure)\n        // this will never be called if your value doesn't expire\n        break;\n    }\n     case 'merge': {\n        // complete cache object after merge\n        // may impact you, you'll have to check\n        const { obj } = params;\n        if (op.get(obj, 'values.foo') !== foo) {\n            // do something\n        }\n        break;\n    }\n     default:\n    break;\n}\n});",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/cache/index.js",
+    "groupTitle": "Reactium.Cache"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.check(capabilities,strict)",
+    "title": "Capability.check",
+    "version": "3.2.1",
+    "name": "Capability.check",
+    "group": "Reactium.Capability",
+    "description": "<p>Check a list of capabilities on the current user.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": false,
+            "field": "capabilities",
+            "description": "<p>list of string capabilities to check, returns true if current user is allowed, false if not allowed</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "strict",
+            "defaultValue": "true",
+            "description": "<p>When true all capabilities must be allowed for user for check to return true, otherwise only one capability is required to get a true value.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "userID",
+            "description": "<p>The Reactium.User id to check.</p>"
+          }
+        ]
+      }
+    },
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.check(capabilities,strict)",
+    "title": "Capability.check",
+    "version": "3.2.1",
+    "description": "<p>Retrieve an enumerated list of capabilities for the specified user.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": false,
+            "field": "capabilities",
+            "description": "<p>list of string capabilities to check, returns true if current user is allowed, false if not allowed.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "userID",
+            "description": "<p>The Actinium.User id value. If empty the current user is used.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Capability.check",
+    "group": "Reactium.Capability",
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.get(capability)",
+    "title": "Capability.get()",
+    "version": "3.2.1",
+    "description": "<p>Get allowed and excluded roles for a capability.</p>",
+    "name": "Capability.get",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nCapability.get('do-something').then(({allowed = [], excluded = []}) => {\n    if (allowed.includes('contributor')) console.log('Contributor allowed to do something');\n})",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.grant(capability,role)",
+    "title": "Capability.grant()",
+    "version": "3.2.1",
+    "description": "<p>Add role(s) to the capability allowed list.</p>",
+    "name": "Capability.grant",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "Capability.grant('taxonomy.update', 'moderator');\nCapability.grant('taxonomy.update', ['moderator']);",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.restrict(capability,role)",
+    "title": "Capability.restrict()",
+    "version": "3.2.1",
+    "description": "<p>Add role(s) to the capability excluded list.</p>",
+    "name": "Capability.restrict",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "Capability.restrict('taxonomy.update', 'moderator');\nCapability.restrict('taxonomy.update', ['moderator']);",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.revoke(capability,role)",
+    "title": "Capability.revoke()",
+    "version": "3.2.1",
+    "description": "<p>Remove role(s) from the capability allowed list.</p>",
+    "name": "Capability.revoke",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "Capability.revoke('taxonomy.update', 'moderator');\nCapability.revoke('taxonomy.update', ['moderator']);",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Async",
+    "url": "Capability.unrestrict(capability,role)",
+    "title": "Capability.unrestrict()",
+    "version": "3.2.1",
+    "description": "<p>Remove role(s) from the capability excluded list.</p>",
+    "name": "Capability.unrestrict",
+    "group": "Reactium.Capability",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "Capability.unrestrict('taxonomy.update', 'moderator');\nCapability.unrestrict('taxonomy.update', ['moderator']);",
+        "type": "json"
+      }
+    ],
+    "filename": "reactium_modules/@atomic-reactor/reactium-capability/sdk/index.js",
+    "groupTitle": "Reactium.Capability"
+  },
+  {
+    "type": "Function",
+    "url": "Component.register(hook,component,order)",
+    "title": "Component.register()",
+    "group": "Reactium.Component",
+    "name": "Component.register",
+    "description": "<p>Register a React component to be used with a specific useHookComponent React hook. This must be called before the useHookComponent that defines the hook.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "hook",
+            "description": "<p>The hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "component",
+            "description": "<p>component(s) to be output by useHookComponent</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": false,
+            "field": "order",
+            "description": "<p>precedent of this if Component.register is called multiple times (e.g. if you are trying to override core or another plugin)</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-hooks.js",
+        "content": "import React from 'react';\nimport Reactium from 'reactium-core/sdk';\n\n// component to be used unless overriden by Reactium.Component.register()\nconst ReplacementComponentA = () => <div>My Plugin's Component</div>\nconst ReplacementComponentB = () => <div>My Alternative Component</div>\n\n// Simple Version\nReactium.Component.register('my-component', ReplacementComponentA);\n\n// Advanced Form using Reactium.Hook SDK\nReactium.Hook.register('my-component', async (...params) => {\n    const context = params.pop(); // context is last argument\n    const [param] = params;\n    if (param === 'test') {\n        context.component = ReplacementComponentA;\n    } else {\n        context.component = ReplacementComponentB;\n    }\n}\n})",
+        "type": "json"
+      },
+      {
+        "title": "parent.js",
+        "content": "import React from 'react';\nimport { useHookComponent } from 'reactium-core/sdk';\n\n// component to be used unless overriden by Reactium.Component.register()\nconst DefaultComponent = () => <div>Default or Placeholder component</div>\n\nexport props => {\n    const MyComponent = useHookComponent('my-component', DefaultComponent, 'test');\n    return (\n        <div>\n            <MyComponent {...props} />\n        </div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/component/index.js",
+    "groupTitle": "Reactium.Component"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.get(id)",
+    "title": "Handle.get()",
+    "description": "<p>Get a specific imperative handle reference, by object path (id). If id is full object path to the handle, returns a React reference if it exists, otherwise <code>undefined</code>. If id is partial object path, returns object containing one or more references if the path exists, otherwise 'undefined'.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'</p>"
+          }
+        ]
+      }
+    },
+    "name": "Handle.get",
+    "group": "Reactium.Handle",
+    "examples": [
+      {
+        "title": "CountList.js",
+        "content": "import React from 'react';\nimport Counter from './Counter';\nimport CounterControl from './CounterControl';\n const CountList = props => {\n    return (\n        <>\n            <Counter id='1'/>\n            <Counter id='2'/>\n            <CounterControl />\n        </>\n    );\n};\n export default CountList;",
+        "type": "json"
+      },
+      {
+        "title": "Counter.js",
+        "content": "import React, { useState } from 'react';\nimport { useRegisterHandle } from 'reactium-core/sdk';\n const Counter = ({id = 1}) => {\n    const [count, setCount] = useState(Number(id));\n     // hook form of Handle.register and Handle.unregister\n    // handles ref creation for you\n    useRegisterHandle(['counter', id], () => ({\n        increment: () => setCount(count + 1),\n    }), [count]);\n     return (\n        <div>\n            <h1>Counter {id}</h1>\n            Count: {count}\n        </div>\n    );\n};\n export default Counter;",
+        "type": "json"
+      },
+      {
+        "title": "CounterControl.js",
+        "content": "import React from 'react';\nimport Reactium from 'reactium-core/sdk';\n const CounterControl = () => {\n   // get object with all handles in the \"counter\" partial path\n    const handles = Reactium.Handle.get('counter');\n     const click = () => {\n       // equivalent to getting handle 'counter.1' and `counter.2` separately\n       // loop through all counters and call increment on click\n        Object.values(handles).forEach(({current}) => current.increment())\n    };\n     return (\n        <div>\n            <h1>CounterControl</h1>\n            <button onClick={click}>Increment All Counters</button>\n        </div>\n    );\n};\n export default CounterControl;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.list()",
+    "title": "Handle.list()",
+    "description": "<p>Get full object containing all current reference handles.</p>",
+    "name": "Handle.list",
+    "group": "Reactium.Handle",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.register(id,ref)",
+    "title": "Handle.register()",
+    "description": "<p>Register an imperative handle reference. See <code>useRegisterHandle()</code> React hook for easier pattern for functional components.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Ref",
+            "optional": false,
+            "field": "ref",
+            "description": "<p>React reference created with <code>React.createRef()`` or </code>React.useRef()`.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "update",
+            "defaultValue": "true",
+            "description": "<p>Update <code>useHandle</code> subscribers of this handle id.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Handle.register",
+    "group": "Reactium.Handle",
+    "examples": [
+      {
+        "title": "MyControllableComponent.js",
+        "content": "import React, {useEffect, useState, useRef} from 'react';\nimport Reactium from 'reactium-core/sdk';\n// This component is externally controllable on registered handle\n// with id: 'controlled.handle' or ['controlled', 'handle']\nexport default () => {\nconst [count, setCount] = useState(1);\nconst increment = () => setCount(count + 1);\nconst ref = useRef({\n    increment,\n});\n useEffect(() => {\n    Reactium.register('controlled.handle', ref);\n    return () => Reactium.unregister('controlled.handle');\n}, [count]);\n return (<div>Count is {count}</div>);\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.subscribe(cb)",
+    "title": "Handle.subscribe()",
+    "description": "<p>Subscribe to changes in imperative handle references (registrations and unregistrations). Returns unsubscribe function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>callback to be called when a handle is registered or unregistered</p>"
+          }
+        ]
+      }
+    },
+    "name": "Handle.subscribe",
+    "group": "Reactium.Handle",
+    "examples": [
+      {
+        "title": "MyComponent.js",
+        "content": "import React, {useState, useEffect} from 'react';\nimport Reactium from 'reactium-core/sdk';\nimport op from 'object-path'\nexport default () => {\nconst [handle, updateHandle] = useState(Reactium.Handle.get('path.to.handle'));\nuseEffect(() => Reactium.Handle.subscribe(() => {\n    const h = Reactium.Handle.get('path.to.handle');\n    if (handle.current !== h.current) updateHandle(h);\n}), []);\n const doSomething = () => {\n    if (op.has(handle, 'current.action')) handle.current.action;\n};\n return (<button onClick={doSomething}>Some Action</button>);\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Handle.unregister(id)",
+    "title": "Handle.unregister()",
+    "description": "<p>Unregister an imperative handle reference. See <code>Handle.register()</code> for example usage.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "id",
+            "description": "<p>Array of properties, or <code>.</code> separated object path. e.g. ['path','to','handle'] or 'path.to.handle'</p>"
+          }
+        ]
+      }
+    },
+    "name": "Handle.unregister",
+    "group": "Reactium.Handle",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Objectt",
+    "url": "Reactium.Handle",
+    "title": "Handle",
+    "name": "Reactium.Handle",
+    "description": "<p>Similar concept to an imperative handle created when using <code>React.forwardRef()</code> and the <code>useImperativeHandle()</code> React hook. Reactium provides the <code>Reactium.Handle</code> object to manage references created in your components to allow imperative control of your component from outside the component. This is used when you wish to change the internal state of your component from outside using a technique other than changing the component <code>props</code> (i.e. declarative control).</p> <p>This technique makes use of references created with <code>React.createRef()</code> or the <code>useRef()</code> hook for functional components. The developer can then assign the <code>current</code> property of this reference to be an object containing methods or callbacks (i.e. methods that can invoke <code>this.setState()</code> or the update callback returned by <code>useState()</code> hook) that will cause the state of the component to change (and rerender).</p> <p>By registering this &quot;handle reference&quot; on the <code>Reactium.Handle</code> singleton, other distant components can exercise imperative control over your component.</p> <p>For developers that prefer the use of React hooks, Reactium provides two hooks for your use: <code>useRegisterHandle()</code> and <code>useHandle()</code> to register and use these handles respectively.</p>",
+    "group": "Reactium.Handle",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/handle/index.js",
+    "groupTitle": "Reactium.Handle"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.flush(name)",
+    "title": "Hook.flush()",
+    "name": "Hook.flush",
+    "description": "<p>Clear all registered callbacks for a hook.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "type",
+            "defaultValue": "async",
+            "description": "<p>'async' or 'sync' hooks</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.list()",
+    "title": "Hook.list()",
+    "name": "Hook.list",
+    "description": "<p>Register a hook callback.</p>",
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.register(name,callback,order,id)",
+    "title": "Hook.register()",
+    "name": "Hook.register",
+    "description": "<p>Register a hook callback.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "callback",
+            "description": "<p>async function (or returning promise) that will be called when the hook is run. The hook callback will receive any parameters provided to Hook.run, followed by a context object (passed by reference to each callback).</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Integer",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>order of which the callback will be called when this hook is run.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "id",
+            "description": "<p>the unique id. If not provided, a uuid will be generated</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Hook.register('plugin-init', async context => {\n// mutate context object asynchrounously here\n    console.log('Plugins initialized!');\n}, Enums.priority.highest);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.registerSync(name,callback,order,id)",
+    "title": "Hook.registerSync()",
+    "name": "Hook.registerSync",
+    "description": "<p>Register a sync hook callback.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "callback",
+            "description": "<p>function returning promise that will be called when the hook is run. The hook callback will receive any parameters provided to Hook.run, followed by a context object (passed by reference to each callback).</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Integer",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>order of which the callback will be called when this hook is run.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "id",
+            "description": "<p>the unique id. If not provided, a uuid will be generated</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Hook.registerSync('my-sync-hook', context => {\n    // mutate context object synchrounously here\n    console.log('my-sync-hook run!');\n}, Enums.priority.highest);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.run(name,...params)",
+    "title": "Hook.run()",
+    "name": "Hook.run",
+    "description": "<p>Run hook callbacks.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "...params",
+            "description": "<p>any number of arbitrary parameters (variadic)</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>context object passed to each callback (after other variadic parameters)</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.runSync(name,...params)",
+    "title": "Hook.runSync()",
+    "name": "Hook.runSync",
+    "description": "<p>Run hook callbacks sychronously.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "name",
+            "description": "<p>the hook name</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "...params",
+            "description": "<p>any number of arbitrary parameters (variadic)</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Object",
+            "optional": false,
+            "field": "context",
+            "description": "<p>context object passed to each callback (after other variadic parameters)</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Hook.unregister(id)",
+    "title": "Hook.unregister()",
+    "name": "Hook.unregister",
+    "description": "<p>Unregister a registered hook callback by id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the unique id provided by Hook.register() or Hook.list()</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Hook",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/hook/index.js",
+    "groupTitle": "Reactium.Hook"
+  },
+  {
+    "type": "Function",
+    "url": "Plugin.isActive(ID)",
+    "title": "Plugin.isActive()",
+    "group": "Reactium.Plugin",
+    "name": "Plugin.isActive",
+    "description": "<p>Determine if a plugin ID is active.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the plugin id.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Plugin.isActive('Media');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/plugin/index.js",
+    "groupTitle": "Reactium.Plugin"
+  },
+  {
+    "type": "Function",
+    "url": "Plugin.list()",
+    "title": "Plugin.list()",
+    "group": "Reactium.Plugin",
+    "name": "Plugin.list",
+    "description": "<p>Return the list of registered plugins.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/plugin/index.js",
+    "groupTitle": "Reactium.Plugin"
+  },
+  {
+    "type": "Function",
+    "url": "Plugin.register(ID,order)",
+    "title": "Plugin.register()",
+    "name": "Plugin.register",
+    "description": "<p>Register a Reactium plugin.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the plugin id</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Integer",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>Priority of the plugin initialization respective to other existing plugins.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Plugin",
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nconst newReducer = (state = { active: false }, action) => {\n    if (action.type === 'ACTIVATE') {\n        return {\n            ...state,\n            active: true,\n        };\n    }\n    return state;\n};\n\nconst register = async () => {\n    await Reactium.Plugin.register('myPlugin');\n    Reactium.Reducer.register('myPlugin', newReducer);\n};\n\nregister();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/plugin/index.js",
+    "groupTitle": "Reactium.Plugin"
+  },
+  {
+    "type": "Function",
+    "url": "Plugin.unregister(ID)",
+    "title": "Plugin.unregister()",
+    "name": "Plugin.unregister",
+    "description": "<p>Unregister a Reactium plugin by unique id. This can only be called prior to the <code>plugin-dependencies</code> hook, or <code>Reactium.Plugin.ready === true</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the plugin id</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Plugin",
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import Reactium from 'reactium-core/sdk';\n\n// Before Reactium.Plugin.ready\nReactium.Hook.register('plugin-dependencies', () => {\n    // Prevent myPlugin registration callback from occurring\n    Reactium.Plugin.unregister('myPlugin');\n    return Promise.resolve();\n}, Enums.priority.highest)",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/plugin/index.js",
+    "groupTitle": "Reactium.Plugin"
+  },
+  {
+    "type": "Function",
+    "url": "Prefs.clear(key)",
+    "title": "Prefs.clear()",
+    "version": "0.0.17",
+    "description": "<p>Clear one or more preferences.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "key",
+            "description": "<p>If specified as an object-path, will unset a specific preference path. Otherwise, all preferences will be cleared.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Prefs.clear",
+    "group": "Reactium.Prefs",
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nReactium.Prefs.clear();",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/prefs/index.js",
+    "groupTitle": "Reactium.Prefs"
+  },
+  {
+    "type": "Function",
+    "url": "Prefs.get(key,defaultValue)",
+    "title": "Prefs.get()",
+    "version": "0.0.17",
+    "description": "<p>Get one or more preferences by object path.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "key",
+            "description": "<p>If specified as an object-path, will get a specific preference by this path. Otherwise, all preferences will be returned.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "defaultValue",
+            "description": "<p>The value to return if the preference has not been set.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Prefs.get",
+    "group": "Reactium.Prefs",
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nconst myPref = Reactium.Prefs.get('my.object.path', { someDefault: 'foo' });",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/prefs/index.js",
+    "groupTitle": "Reactium.Prefs"
+  },
+  {
+    "type": "Function",
+    "url": "Prefs.set(key,value)",
+    "title": "Prefs.set()",
+    "version": "0.0.17",
+    "description": "<p>Get one or more preferences by object path.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The object-path to use to set the value.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "value",
+            "description": "<p>The value to set to the key.</p>"
+          }
+        ]
+      }
+    },
+    "name": "Prefs.set",
+    "group": "Reactium.Prefs",
+    "examples": [
+      {
+        "title": "Example",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nReactium.Prefs.set('my.object.path', { value: 'foo' });",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/prefs/index.js",
+    "groupTitle": "Reactium.Prefs"
+  },
+  {
+    "type": "Object",
+    "url": "Reactium.Pulse.Task",
+    "title": "Pulse.Task",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task",
+    "description": "<p>Pulse Task object that performs the heavy lifting for the Pulse API.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.ID",
+    "title": "Pulse.Task.ID",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.ID",
+    "description": "<p>[read-only] The unique ID of the task. Returns: <code>String</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.attempt",
+    "title": "Pulse.Task.attempt",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.attempt",
+    "description": "<p>[read-only] The current attempt for the active task. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.delay",
+    "title": "Pulse.Task.delay",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.attempt",
+    "description": "<p>The current attempt for the active task. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.attempts",
+    "title": "Pulse.Task.attempts",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.attempts",
+    "description": "<p>The number of times a task will retry before it fails. Default: <code>-1</code>. You can set this value after the task has started.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.autostart",
+    "title": "Pulse.Task.autostart",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.autostart",
+    "description": "<p>[read-only] If the task autastarted upon creation. Default: <code>true</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.complete",
+    "title": "Pulse.Task.complete",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.complete",
+    "description": "<p>[read-only] Relevant only when the <code>repeat</code> property is higher than 1. Returns: <code>Boolean</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.count",
+    "title": "Pulse.Task.count",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.count",
+    "description": "<p>[read-only] The current number of times the task has succeeded. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.error",
+    "title": "Pulse.Task.error",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.error",
+    "description": "<p>[read-only] The current error message if applicable. Returns: <code>string</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.failed",
+    "title": "Pulse.Task.failed",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.failed",
+    "description": "<p>[read-only] Expresses if the current task has reached the maximum attempts. Returns: <code>Boolean</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.now()",
+    "title": "Pulse.Task.now()",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.now",
+    "description": "<p>Force run the task without waiting for it's delay. If the task is running this is a <code>noop</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.progress",
+    "title": "Pulse.Task.progress",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.progress",
+    "description": "<p>[read-only] The current amount of the repeat that has been completed. Relevant only when <code>repeat</code> is higher than 1. Returns: <code>0-1</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.repeat",
+    "title": "Pulse.Task.repeat",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.repeat",
+    "description": "<p>The current number of times to run the task. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.retry()",
+    "title": "Pulse.Task.retry()",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.retry",
+    "description": "<p>Force a retry of the task. Useful for when you want to manually handle retries within your callback function.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.start()",
+    "title": "Pulse.Task.start()",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.start",
+    "description": "<p>Start the task. Useful for when you want manually start a task in your callback function.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.status",
+    "title": "Pulse.Task.status",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.status",
+    "description": "<p>[read-only] The current status of the task. For comparing the status use the Pulse.ENUMS.STATUS values</p>",
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "const task = Pulse.get('MyTask');\nif (task.status === Pulse.ENUMS.STATUS.STOPPED) {\ntask.start();\n}",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.stop()",
+    "title": "Pulse.Task.stop()",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.stop",
+    "description": "<p>Stop the task</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.timer",
+    "title": "Pulse.Task.timer",
+    "group": "Reactium.Pulse.Task",
+    "name": "Reactium.Pulse.Task.timer",
+    "description": "<p>[read-only] The reference to the current setTimeout. This value will change for each task run. Returns: <code>Number</code>.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse.Task"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.get(ID)",
+    "title": "Pulse.get()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.get",
+    "description": "<p>Retrieve a registered task. Returns a <code>Pulse.Task</code> object.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The ID of the task.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "const task = Reactium.Pulse.get('MyTask');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.register(ID,callback,options,params)",
+    "title": "Pulse.register()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.register",
+    "description": "<p>Register a new task. The callback function can be any function and supports returning a <code>Promise</code> from the function. If a <code>Promise</code> is rejected, or the callback function returns an <code>Error</code> object or <code>false</code>, a retry will be triggered if possible. In cases where no more retries can be executed, the task will fail.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The unique ID of the task.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "callback",
+            "description": "<p>The function to execute when the task is run. The first parameter passed to the callback function will be a reference to the current task object.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": true,
+            "field": "options",
+            "description": "<p>The <code>Pulse.Task</code> configuration object.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "..attempts",
+            "defaultValue": "-1",
+            "description": "<p>Number of times to retry a task. By default the task will retry indefinitely.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "..autostart",
+            "defaultValue": "true",
+            "description": "<p>Start the task when it is registered.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "..delay",
+            "defaultValue": "1000",
+            "description": "<p>Time in milliseconds before the task is run again. The task will not run again until after it's callback has been executed.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "..repeat",
+            "defaultValue": "-1",
+            "description": "<p>Number of times to repeat the task. Used in determining if the task is complete. A task with -1 as the value will never complete.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Arguments",
+            "optional": true,
+            "field": "params",
+            "description": "<p>Additional parameters to pass to the callback function.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "import React, { useEffect } from 'react';\nimport Reactium from 'reactium-core/sdk';\n\nconst MyComponent = () => {\n  const myFunction = (task, ...params) => {\n      // Do something here\n      const result = 1 === 2;\n\n      if (task.failed) { // Attempted the task 5 times\n          console.log('myFunction FAILED after', task.attempts, 'attempts with the following parameters:', ...params);\n      }\n\n      if (task.complete) { // Succeeded 5 times\n          console.log('myFunction COMPLETED after', task.attempts, 'attempts with the following parameters:', ...params);\n      }\n\n      // Trigger a retry because we're returning `false`\n      return result;\n  };\n\n  useEffect(() => {\n      // Register myFunction as a task\n      Reactium.Pulse.register('MyComponent', myFunction, {\n          attempts: 5,\n          delay: 1000,\n          repeat: 5\n      }, 'param 1', 'param 2', 'param 3');\n\n      // Unregister task when the component unmounts\n      return () => Reactium.Pulse.unregister('MyComponent');\n  }, [Reactium.Pulse]);\n\n  return <div>MyComponent</div>;\n};\n\nexport default MyComponent;",
+        "type": "json"
+      },
+      {
+        "title": "Persist",
+        "content": "// For cases where you want the task to persist even after the component has\n// been unmounted or the route has changed causing a rerender:\n\n\nimport React, { useEffect } from 'react';\nimport Reactium from 'reactium-core/sdk';\n\nconst MyComponent = () => {\n\n  useEffect(() => {\n      Reactium.Pulse.register('MyComponent', MyComponent.staticTask);\n  }, [Reactium.Pulse]);\n\n  return <div>MyComponent</div>\n};\n\nMyComponent.staticTask = (task, ...params) => new Promise((resolve, reject) => {\n  // Perform an async task\n  setTimeout(() => resolve('this is awkward...'), 10000);\n});\n\nexport default MyComponent;",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.start(ID)",
+    "title": "Pulse.start()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.start",
+    "description": "<p>Start a registered task if it is stopped.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The task unique ID.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "Reactium.Pulse.start('MyTask');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.startAll()",
+    "title": "Pulse.startAll()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.startAll",
+    "description": "<p>Start all stopped tasks.</p>",
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "Reactium.Pulse.startAll();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.stop(ID)",
+    "title": "Pulse.stop()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.stop",
+    "description": "<p>Stop a registered task if it is running.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The task unique ID.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "Reactium.Pulse.stop('MyTask');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.stopAll()",
+    "title": "Pulse.stopAll()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.stopAll",
+    "description": "<p>Stop all running registered tasks.</p>",
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "Reactium.Pulse.stopAll();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Pulse.unregister(ID)",
+    "title": "Pulse.unregister()",
+    "group": "Reactium.Pulse",
+    "name": "Pulse.unregister",
+    "description": "<p>Stop and unregister a task. If the task is running, it's current attempt will resolve before the task is removed.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>The task unique ID.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example usage:",
+        "content": "useEffect(() => {\n   // Register myFunction as a task\n   Reactium.Pulse.register('MyComponent', myFunction, {\n       attempts: 5,\n       delay: 1000,\n       repeat: 5\n   }, 'param 1', 'param 2', 'param 3');\n\n   // Unregister task when the component unmounts\n   return () => Reactium.Pulse.unregister('MyComponent');\n}, [Reactium.Pulse]);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Object",
+    "url": "Reactium.Pulse",
+    "title": "Pulse",
+    "group": "Reactium.Pulse",
+    "name": "Reactium.Pulse",
+    "description": "<p>Simple interface for creating long or short polls.</p> <h3>Motivation</h3> <p>Often is the case where you find yourself sprinkling <code>setTimeout</code> or <code>setInterval</code> all over your code and before you know it, you have so many or rewrite the same structures over and over with a slight twist here and there. The Pulse API is designed to lighten the load on those situations and give a clean interface to easily create and manage polls.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Property",
+    "url": "Reactium.Pulse.Task.reset()",
+    "title": "Pulse.Task.reset()",
+    "group": "Reactium.Pulse",
+    "name": "Reactium.Pulse.Task.reset",
+    "description": "<p>Resets the task's attempt count and run count. Useful for catastrophic failures in your callback function.</p>",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/pulse/index.js",
+    "groupTitle": "Reactium.Pulse"
+  },
+  {
+    "type": "Function",
+    "url": "Routing.get()",
+    "title": "Routing.get()",
+    "name": "Routing.get",
+    "description": "<p>Get sorted array of all route objects.</p>",
+    "group": "Reactium.Routing",
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Reactium.Routing"
+  },
+  {
+    "type": "Function",
+    "url": "Routing.register(route)",
+    "title": "Routing.register()",
+    "description": "<p>Dynamically register a new React router route.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "route",
+            "description": "<p>object to be used as properties of React Router <code>&lt;Route /&gt;</code> component, including:</p> <ol> <li>path - the routing pattern</li> <li>exact - true/false if the pattern should be matched exactly</li> <li>component - the React component to render on this route</li> <li>order - (special) the priority of this route in the list of routes (which route will resolve first)</li> <li>load - (special) high-order Redux action function (thunk) to run when this route is resolved (should return a promise)</li> <li>... any other property <code>&lt;Route /&gt;</code> component accepts</li> </ol> <h2>Important Note</h2> <p>The browser will still render the route correctly (will not break the page), however the server will deliver a 404 status code on cold loads of the page (i.e. hard-refresh of the browser).</p>"
+          }
+        ]
+      }
+    },
+    "name": "Routing.register",
+    "group": "Reactium.Routing",
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "String",
+            "optional": false,
+            "field": "uuid",
+            "description": "<p>unique id of the route</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import React from 'react';\nimport op from 'object-path';\nimport Reactium, { useSelect } from 'reactium-core/sdk';\n\n// A new component subscribing to Redux state.myPlugin.name\nconst HelloYou = () => {\n    const name = useSelect(state => op.get(state, 'myPlugin.name', 'unknown'));\n    return {\n        <div>Hello {name}</div>\n    };\n};\n\n// A Redux-Thunk high-order action function (useful for async actions)\nconst loadAction = (params, search) => (dispatch, getState) => {\n    dispatch({\n        type: 'MY_NAME',\n        name: op.get(params, 'name', 'unknown'),\n    });\n\n    return Promise.resolve();\n};\n\n// Register new routing pattern '/hello-world/:name'\nconst routeId = Reactium.Routing.register({\n    path: '/hello-world/:name',\n    exact: true,\n    component: HelloYou,\n    load: loadAction,\n});\n\n// Register reducer to handle 'MY_NAME' action\nconst myReducer = (state = {name: 'unknown'}, action) => {\n    if (action.type === 'MY_NAME') return {\n        ...state,\n        name: action.name,\n    };\n    return state;\n};\nReactium.Plugin.register('myPlugin').then(() => {\n    Reactium.Reducer.register('myPlugin', myReducer);\n})",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Reactium.Routing"
+  },
+  {
+    "type": "Function",
+    "url": "Routing.unregister(id)",
+    "title": "Routing.unregister()",
+    "name": "Routing.unregister",
+    "description": "<p>Unregister an existing route, by id. Note: You can not unregister the 'NotFound' component. You can only replace it using the registering a NotFound component with Reactium.Component.register().</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the route id</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "update",
+            "defaultValue": "true",
+            "description": "<p>update subscribers</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Routing",
+    "version": "0.0.0",
+    "filename": ".core/sdk/routing/index.js",
+    "groupTitle": "Reactium.Routing"
+  },
+  {
+    "type": "Function",
+    "url": "Setting.get(key,defaultValue,refresh)",
+    "title": "Setting.get()",
+    "group": "Reactium.Setting",
+    "name": "Setting.get",
+    "description": "<p>Get a setting value.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The unique setting key.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "defaultValue",
+            "description": "<p>The default value if the setting doesn't exist.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": false,
+            "field": "refresh",
+            "description": "<p>if true, get a fresh value, even if already cached.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Setting.get('site.hostname');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-setting/sdk/index.js",
+    "groupTitle": "Reactium.Setting"
+  },
+  {
+    "type": "Function",
+    "url": "Setting.load(autoRefresh)",
+    "title": "Setting.load()",
+    "name": "Setting.load",
+    "group": "Reactium.Setting",
+    "description": "<p>Load all settings, with cache. When called multiple times in the cache period, the result will come from memory cache.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "autoRefresh",
+            "defaultValue": "true",
+            "description": "<p>when true, settings will be automatically loaded again every <code>Enums.cache.settings</code> milliseconds. When false, auto reload of settings will not happen.</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Object",
+            "optional": false,
+            "field": "settings",
+            "description": "<p>an object with setting the current user has access to.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-setting/sdk/index.js",
+    "groupTitle": "Reactium.Setting"
+  },
+  {
+    "type": "Function",
+    "url": "Setting.set(key,value)",
+    "title": "Setting.set()",
+    "group": "Reactium.Setting",
+    "name": "Setting.set",
+    "description": "<p>Create or update a setting value. Returns a <code>{Promise}</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The unique setting key.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": true,
+            "field": "value",
+            "description": "<p>The setting value.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "public",
+            "defaultValue": "false",
+            "description": "<p>When true, this settings will be readable by anonymous. Useful for global insensitive application settings, such as &quot;site name&quot;.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Setting.set('site', { title: 'My Awesome Site', hostname: 'mysite.com' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-setting/sdk/index.js",
+    "groupTitle": "Reactium.Setting"
+  },
+  {
+    "type": "Function",
+    "url": "Setting.unset(key)",
+    "title": "Setting.unset()",
+    "group": "Reactium.Setting",
+    "name": "Setting.unset",
+    "description": "<p>Unset a setting value. Returns a <code>{Promise}</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "key",
+            "description": "<p>The unique setting key.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Setting.unset('site.title');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-setting/sdk/index.js",
+    "groupTitle": "Reactium.Setting"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.Meta.delete(params)",
+    "title": "User.Meta.delete()",
+    "group": "Reactium.User",
+    "name": "User.Meta.delete",
+    "description": "<p>Mutate the <code>Actinium.User.meta</code> object by deleting a key value pair. Calls the <code>user-meta-delete</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for retrieving a user and the key value pair to apply to the user meta object.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Look up the user object by the objectId field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Look up the user object by the username field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Look up the user object by the email field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-meta-delete",
+            "description": "<p>Triggered before the <code>user-meta-delete</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-meta-delete-response",
+            "description": "<p>Triggered after the <code>user-meta-delete</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.user, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.Meta.update(params)",
+    "title": "User.Meta.update()",
+    "group": "Reactium.User",
+    "name": "User.Meta.update",
+    "description": "<p>Mutate the <code>Actinium.User.meta</code> object. Calls the <code>user-meta-update</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for retrieving a user and the key value pair to apply to the user meta object.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Look up the user object by the objectId field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Look up the user object by the username field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Look up the user object by the email field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-meta-update",
+            "description": "<p>Triggered before the <code>user-meta-update</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-meta-update-response",
+            "description": "<p>Triggered after the <code>user-meta-update</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.user, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "const updatedUser = await User.Meta.update({ objectId: 'slertjt5wzb', random: 'meta value' });",
+        "content": "const updatedUser = await User.Meta.update({ objectId: 'slertjt5wzb', random: 'meta value' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.Pref.delete(params)",
+    "title": "User.Pref.delete()",
+    "group": "Reactium.User",
+    "name": "User.Pref.delete",
+    "description": "<p>Mutate the <code>Actinium.User.pref</code> object by deleting a key value pair. Calls the <code>user-pref-delete</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for retrieving a user and the key value pair to apply to the user pref object.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Look up the user object by the objectId field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Look up the user object by the username field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Look up the user object by the email field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-pref-delete",
+            "description": "<p>Triggered before the <code>user-pref-delete</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-pref-delete-response",
+            "description": "<p>Triggered after the <code>user-pref-delete</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.user, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.Pref.update(params)",
+    "title": "User.Pref.update()",
+    "group": "Reactium.User",
+    "name": "User.Pref.update",
+    "description": "<p>Mutate the <code>Actinium.User.pref</code> object. Calls the <code>user-pref-update</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for retrieving a user and the key value pair to apply to the user pref object.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Look up the user object by the objectId field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Look up the user object by the username field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Look up the user object by the email field. See <a href=\"#api-Reactium.User-User.retrieve\">User.retrieve()</a>.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-pref-update",
+            "description": "<p>Triggered before the <code>user-pref-update</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-pref-update-response",
+            "description": "<p>Triggered after the <code>user-pref-update</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.user, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "const updatedUser = await User.Pref.update({ objectId: 'slertjt5wzb', random: 'pref value' });",
+        "content": "const updatedUser = await User.Pref.update({ objectId: 'slertjt5wzb', random: 'pref value' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.Role.add(role,objectId)",
+    "title": "User.Role.add()",
+    "description": "<p>Asyncronously add a user to a role.</p>",
+    "name": "User.Role.add",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "role",
+            "description": "<p>The role name. Example: 'super-admin'.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>The objectId of the user. If empty the current user is used.</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Promise",
+            "optional": false,
+            "field": "user",
+            "description": "<p>The updated user object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.Role.remove(role,objectId)",
+    "title": "User.Role.remove()",
+    "description": "<p>Asyncronously remove a user to a role.</p>",
+    "name": "User.Role.remove",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "role",
+            "description": "<p>The role name. Example: 'super-admin'.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>The objectId of the user. If empty the current user is used.</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Promise",
+            "optional": false,
+            "field": "user",
+            "description": "<p>The updated user object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.auth(username,password)",
+    "title": "User.auth()",
+    "description": "<p>Authenticate with the Actinium server.</p>",
+    "name": "User.auth",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "username",
+            "description": ""
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "password",
+            "description": ""
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.can(capabilities,strict)",
+    "title": "User.can()",
+    "description": "<p>Asyncronously find out if a user has a set of capabilities.</p>",
+    "name": "User.can",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "capabilities",
+            "description": "<p>The capability(s) to check for (string or array)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "strict",
+            "defaultValue": "true",
+            "description": "<p>Compare capabilities where the user must have all capabilities <code>[true]</code>, or at least 1 <code>[false]</code>.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.current(parseObject)",
+    "title": "User.current()",
+    "group": "Reactium.User",
+    "name": "User.current",
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Object",
+            "optional": false,
+            "field": "user",
+            "description": "<p>the current user</p>"
+          }
+        ]
+      }
+    },
+    "description": "<p>Retrieve the current authenticated user.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "parseObject",
+            "defaultValue": "false",
+            "description": "<p>By default the return value is an object. If you need the Actinium.User object instead pass <code>true</code>.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.forgot()",
+    "title": "User.forgot()",
+    "group": "Reactium.User",
+    "name": "User.forgot",
+    "description": "<p>Intiates the forgot password routine.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "email",
+            "description": "<p>The email address associated with a user object.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "User.forgot('someone@email.com').then(response => {\n    console.log(response);\n});",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.getSessionToken()",
+    "title": "User.getSessionToken()",
+    "description": "<p>If the user is logged in, get the current session token.</p>",
+    "name": "User.getSessionToken",
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.hasValidSession()",
+    "title": "User.hasValidSession()",
+    "description": "<p>Check to make sure the current user and associated session are valid.</p>",
+    "name": "User.hasValidSession",
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.isCurrent(user)",
+    "title": "User.isCurrent()",
+    "group": "Reactium.User",
+    "name": "User.isCurrent",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "The",
+            "description": "<p>User object to check.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "// if signed in as steveMcQu33n this will return true.\nconst isMe = User.isCurrent({ username: 'steveMcQu33n' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.isRole(role,objectId)",
+    "title": "User.isRole()",
+    "description": "<p>Asyncronously find out if a user is a member of a specific role.</p>",
+    "name": "User.isRole",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "role",
+            "description": "<p>The role to check for.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "userID",
+            "description": "<p>The Actinium.User id. If empty, the User.current() id is used.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.list(params)",
+    "title": "User.list()",
+    "group": "Reactium.User",
+    "name": "User.list",
+    "description": "<p>Retrieve a list of <code>Actinium.User</code> objects. Calls the <code>user-list</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "role",
+            "description": "<p>Filter the results to the specified <code>Actinium.Role</code> name.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "search",
+            "description": "<p>Search using logical <code>or</code>. The query will RegExp compare to the default fields: <code>username</code>, <code>email</code>, <code>fname</code>, <code>lname</code>.</p> <p><em>Note:</em> You can add or remove fields via the <code>user-search-fields</code> hook.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Mixed",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p><code>{String|Array}</code> Search for a specific objectId or array of objectIds.</p> <p><em>Note:</em> If <code>search</code> is specified, this value is ignored.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Mixed",
+            "optional": true,
+            "field": "email",
+            "description": "<p><code>{String|Array}</code> Search for a specific email address or array of email addresses.</p> <p><em>Note:</em> If <code>search</code> is specified, this value is ignored.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Mixed",
+            "optional": true,
+            "field": "username",
+            "description": "<p><code>{String|Array}</code> Search for a specific username or array of usernames.</p> <p><em>Note:</em> If <code>search</code> is specified, this value is ignored.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Boolean",
+            "optional": true,
+            "field": "optimize",
+            "defaultValue": "false",
+            "description": "<p>If the count of the results is less than or equal to 1000, all objects will be returned. The page number will be set to 1 and the number of pages will also be 1.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Boolean",
+            "optional": true,
+            "field": "refresh",
+            "defaultValue": "false",
+            "description": "<p>By default the results are cached for 90 seconds. You can flush the cache with this parameter.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "indexBy",
+            "description": "<p>Index the results by the specified field and return them as an Object.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "order",
+            "description": "<p>Order the results <code>ascending</code> or <code>descending</code>.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "orderBy",
+            "defaultValue": "username",
+            "description": "<p>Order the results by the specified field.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Number",
+            "optional": true,
+            "field": "page",
+            "defaultValue": "1",
+            "description": "<p>The page number of results to return.</p>"
+          },
+          {
+            "group": "params",
+            "type": "Number",
+            "optional": true,
+            "field": "limit",
+            "defaultValue": "20",
+            "description": "<p>The number of results to return per page.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-list",
+            "description": "<p>Triggered before the user-list Cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-list-response",
+            "description": "<p>Triggered after the user-list Cloud function is called.</p> <pre class=\"prettyprint\">Arguments: response:Object, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "const superAdmins = await User.list({ role: 'super-admin', refresh: true });\n\nconst user = await User.list({ objectId: 'tlakQ34VOI' });\n\nconst search = await User.list({ search: 'jeff' });",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.logOut()",
+    "title": "User.logOut()",
+    "description": "<p>Invalidate the current user.</p>",
+    "name": "User.logOut",
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.login(username,password)",
+    "title": "User.login()",
+    "description": "<p>Alias of User.auth()</p>",
+    "name": "User.login",
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.register(params)",
+    "title": "User.register()",
+    "description": "<p>Asyncronously create a new user.</p>",
+    "name": "User.register",
+    "parameter": {
+      "fields": {
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "username",
+            "description": "<p>Unique username used when authenticating.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "password",
+            "description": "<p>Password used when authenticating.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "confirm",
+            "description": "<p>Password confirmation.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "email",
+            "description": "<p>Email address used when resetting password and for system messaging.</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "Success 200": [
+          {
+            "group": "Success 200",
+            "type": "Promise",
+            "optional": false,
+            "field": "user",
+            "description": "<p>The new user object.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.User",
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.reset()",
+    "title": "User.reset()",
+    "group": "Reactium.User",
+    "name": "User.reset",
+    "description": "<p>Reset the user password.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "token",
+            "description": "<p>The token received from the <code>User.forgot()</code> email message.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "password",
+            "description": "<p>The new password.</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.retrieve(params,options)",
+    "title": "User.retrieve()",
+    "group": "Reactium.User",
+    "name": "User.retrieve",
+    "description": "<p>Retrieve a single <code>Actinium.User</code> object. Calls the <code>user-retrieve</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Query parameters. See <a href=\"#api-Reactium.User-User.list\">User.list()</a> for more details.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "objectId",
+            "description": "<p>Retrieve by the objectId field.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "username",
+            "description": "<p>Retrieve by the username field.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "email",
+            "description": "<p>Retrieve by the email address field.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-retrieve",
+            "description": "<p>Triggered before the <code>user-retrieve</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: params:Object </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-retrieve",
+            "description": "<p>Triggered after the <code>user-retrieve</code> cloud function is called.</p> <pre class=\"prettyprint\">Arguments: user:Object, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.save(params)",
+    "title": "User.save()",
+    "group": "Reactium.User",
+    "name": "User.save",
+    "description": "<p>Save a <code>Actinium.User</code> object.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Key value pairs to apply to the <code>Actinium.User</code> object. Calls the <code>user-save</code> cloud function.</p> <p><em>Note:</em> Any additional key value pairs will be added to the user object as a new column.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "username",
+            "description": "<p>The unique username used when signing in.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "email",
+            "description": "<p>The email address to associate with the user account.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "password",
+            "description": "<p>The password used when signing in.</p>"
+          },
+          {
+            "group": "params",
+            "type": "String",
+            "optional": true,
+            "field": "role",
+            "description": "<p>The <code>Actinium.Role</code> name to add the user to.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-save",
+            "description": "<p>Mutate the <code>Actinium.User</code> object before save is complete.</p> <pre class=\"prettyprint\">Arguments:  req:Object:Actinium.User </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-save-response",
+            "description": "<p>Take action after the <code>Actinium.User</code> object has been saved.</p> <pre class=\"prettyprint\">Arguments: req:Object:Actinium.User </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-save-error",
+            "description": "<p>Take action after the <code>Actinium.User</code> returns an error.</p> <pre class=\"prettyprint\">Arguments: error:Object, params:Object </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Function",
+    "url": "User.serialize(user)",
+    "title": "User.serialize()",
+    "group": "Reactium.User",
+    "name": "User.serialize",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "Convert",
+            "description": "<p>a <code>Actinium.User</code> object into a JSON object. If the object is already serialized it is returned.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "const u = User.serialize(user);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Asyncronous",
+    "url": "User.trash(params)",
+    "title": "User.trash()",
+    "group": "Reactium.User",
+    "name": "User.trash",
+    "description": "<p>Send a single <code>Actinium.User</code> object to the recycle bin. Calls <code>user-trash</code> cloud function.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "params",
+            "description": "<p>Object containing parameters for deleting a user.</p>"
+          }
+        ],
+        "params": [
+          {
+            "group": "params",
+            "type": "String",
+            "optional": false,
+            "field": "objectId",
+            "description": "<p>The Actinium.User objectId.</p>"
+          }
+        ],
+        "hooks": [
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "before-user-trash",
+            "description": "<p>Triggered before the <code>user-trash</code> cloud function is run.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.User </code></pre>"
+          },
+          {
+            "group": "hooks",
+            "type": "Hook",
+            "optional": false,
+            "field": "user-trash",
+            "description": "<p>Triggered after the <code>user-trash</code> cloud function is run.</p> <pre class=\"prettyprint\">Arguments: user:Actinium.User </code></pre>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "reactium_modules/@atomic-reactor/reactium-user/sdk/index.js",
+    "groupTitle": "Reactium.User"
+  },
+  {
+    "type": "Class",
+    "url": "Fullscreen",
+    "title": "Fullscreen",
+    "group": "Reactium.Utilities",
+    "name": "Fullscreen",
+    "description": "<p>Cross browser utility for toggling fullscreen mode.</p>",
+    "parameter": {
+      "fields": {
+        "Event": [
+          {
+            "group": "Event",
+            "type": "Event",
+            "optional": false,
+            "field": "fullscreenchange",
+            "description": "<p>Triggered when the browser's fullscreen state changes.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": " // isExpanded()\n Reactium.Utils.Fullscreen.isExpanded();\n\n // isCollapsed()\n Reactium.Utils.Fullscreen.isCollapsed();\n\n // collapse()\n Reactium.Utils.Fullscreen.collapse();\n\n // expand()\n Reactium.Utils.Fullscreen.expand();\n\n // toggle()\n Reactium.Utils.Fullscreen.toggle();\n\n // Event: fullscreenchange\nimport React, { useEffect, useState } from 'react';\nimport Reactium from 'reactium-core/sdk';\n\nconst MyComponent = () => {\n    const [state, setState] = useState(Reactium.Utils.Fullscreen.isExpanded());\n\n    const update = () => {\n        setState(Reactium.Utils.Fullscreen.isExpanded());\n    }\n\n    useEffect(() => {\n        // ssr safety\n        if (typeof document === 'undefined') return;\n\n        // listen for fullscreenchange\n        document.addEventListener('fullscreenchange', update);\n\n        // prevent memory leak\n        return () => {\n            document.removeEventListener('fullscreenchange', update);\n        };\n    });\n\n    return (<div>{state}</div>);\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/fullscreen.js",
+    "groupTitle": "Reactium.Utilities"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.abbreviatedNumber(number)",
+    "title": "Utils.abbreviatedNumber()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "Utils.abbreviatedNumber",
+    "description": "<p>Abbreviate a long number to a string.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": false,
+            "field": "number",
+            "description": "<p>The number to abbreviate.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Utils.abbreviatedNumber(5000);\n// Returns: 5k\n\nReactium.Utils.abbreviatedNumber(500000);\n// Returns .5m",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.breakpoint(width)",
+    "title": "Utils.breakpoint()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "Utils.breakpoint",
+    "description": "<p>Get the breakpoint of a window width.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": true,
+            "field": "width",
+            "defaultValue": "window.innerWidth",
+            "description": "<p>Custom width to check. Useful if you have a resize event and want to skip the function from looking up the value again. Reactium.Utils.breakpoint(); // Returns: the current window.innerWidth breakpoint.</p> <p>Reactium.Utils.breakpoint(1024); // Returns: sm</p>"
+          }
+        ]
+      }
+    },
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.breakpoints()",
+    "title": "Utils.breakpoints",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "Utils.breakpoints",
+    "description": "<p>Get breakpoints from browser body:after psuedo element or <code>Utils.BREAKPOINTS_DEFAULT</code> if unset or node.</p> <table> <thead> <tr> <th>Breakpoint</th> <th>Range</th> </tr> </thead> <tbody> <tr> <td>xs</td> <td>0 - 640</td> </tr> <tr> <td>sm</td> <td>641 - 990</td> </tr> <tr> <td>md</td> <td>991 - 1280</td> </tr> <tr> <td>lg</td> <td>1281 - 1440</td> </tr> <tr> <td>xl</td> <td>1600+</td> </tr> </tbody> </table>",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Utils.cxFactory",
+    "url": "Utils.cxFactory",
+    "title": "Utils.cxFactory",
+    "description": "<p>Create a CSS classname namespace (prefix) to use on one or more sub-class. Uses the same syntax as the <code>classnames</code> library.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "namespace",
+            "description": "<p>the CSS class prefix</p>"
+          }
+        ]
+      }
+    },
+    "name": "Utils.cxFactory",
+    "group": "Reactium.Utils",
+    "examples": [
+      {
+        "title": "Usage:",
+        "content": "import Reactium from 'reactium-core/sdk';\nimport React from 'react';\n\nconst MyComponent = props => {\n    const cx = Reactium.Utils.cxFactory('my-component');\n    const { foo } = props;\n\n    return (\n        <div className={cx()}>\n            <div className={cx('sub-1')}>\n                Classes:\n                .my-component-sub-1\n            </div>\n            <div className={cx('sub-2', { bar: foo === 'bar' })}>\n                Classes:\n                .my-component-sub-2\n                .my-component-foo\n            </div>\n        </div>\n    );\n};\n\nMyComponent.defaultProps = {\n    foo: 'bar',\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.isWindow(iframeWindow)",
+    "title": "Utils.isWindow()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "Utils.isWindow",
+    "description": "<p>Determine if the window object has been set. Useful when developing for server side rendering.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Window",
+            "optional": true,
+            "field": "iframeWindow",
+            "description": "<p>iframe window reference.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "Reactium.Utils.isWindow();\n// Returns: true if executed in a browser.\n// Returns: false if executed in node (server side rendering).",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Utils.registryFactory(name,idField)",
+    "title": "Utils.registryFactory()",
+    "description": "<p>Creates a new instance of a simple registry object. Useful for creating an SDK registry for allowing plugins to register &quot;things&quot;. e.g. components that will render inside a component, callbacks that will run.</p> <p>More documentation needed:</p> <ul> <li>register method: used to register an object on registry</li> <li>unregister method: used to unregister an object on registry</li> <li>list property: getter for list of registered objects</li> <li>protect method: called to prevent overwriting an id on registry</li> <li>unprotect method: called to again allow overwriting on id</li> </ul>",
+    "name": "Utils.registryFactory",
+    "group": "Reactium.Utils",
+    "examples": [
+      {
+        "title": "Basic Reactium Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\n\n// trivial example of creation of new registry\nconst myRegistryPlugin = async () => {\n    await Reactium.Plugin.register('MyRegistryPlugin', Reactium.Enums.priority.highest);\n\n    // Using Plugin API to extend the SDK\n    // Adds a new registry to the SDK called `MyRegistry`\n    Reactium.MyRegistry = Reactium.Utils.registryFactory('MyRegistry');\n};\nmyRegistryPlugin();\n\n// trivial example of registry usage\nconst anotherPlugin = async () => {\n    await Reactium.Plugin.register('AnotherPlugin');\n\n    // register object with id 'anotherId' on registry\n    Reactium.MyRegistry.register('anotherId', {\n        foo: 'bar',\n    });\n\n    // iterate through registered items\n    Reactium.MyRegistry.list.forEach(item => console.log(item));\n\n    // unregister object with id 'anotherId'\n    Reactium.MyRegistry.unregister('anotherId');\n};\nanotherPlugin();",
+        "type": "json"
+      },
+      {
+        "title": "Basic Core Usage",
+        "content": "import SDK from '@atomic-reactor/reactium-sdk-core';\nexport default SDK.Utils.registryFactory('MyRegistry');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "function",
+    "url": "Utils.splitParts",
+    "title": "splitParts",
+    "name": "Utils.splitParts",
+    "group": "Reactium.Utils",
+    "description": "<p>splitParts is a utility function that allows you to easily interpolate React components into a string. It works by tokenizing the string, allowing you to identify specific parts that you want to replace with a React component. You can then use the replace method to specify the values for these tokens, and the value method to get an array of the parts, which you can map over and return the appropriate React components for each part. This can be useful for situations where you want to dynamically render a string that includes both plain text and React components.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "strVal",
+            "description": "<p>The input string to tokenize</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "import React from 'react';",
+        "content": "\nimport React from 'react';\nimport Reactium, { __ } from 'reactium-core/sdk';\nimport moment from 'moment';\nimport md5 from 'md5';\n\nconst Gravatar = props => {\n    const { email } = props;\n    return (\n        <img\n            className='gravatar'\n            src={`https://www.gravatar.com/avatar/${md5(\n                email.toLowerCase(),\n            )}?size=50`}\n            alt={email}\n        />\n    );\n};\n\nexport default props => {\n    const description = __('%email% updated post %slug% at %time%');\n    const parts = Reactium.Utils.splitParts(description);\n    Object.entries(props).forEach(([key, value]) => {\n        parts.replace(key, value);\n    });\n\n    return (\n        <span className='by-line'>\n            {parts.value().map(part => {\n                // arbitrary React component possible\n                const { key, value } = part;\n\n                switch (key) {\n                    case 'email': {\n                        return <Gravatar key={key} email={value} />;\n                    }\n                    case 'time': {\n                        return (\n                            <span key={key} className='time'>\n                                {moment(value).fromNow()}\n                            </span>\n                        );\n                    }\n                    default: {\n                        // plain string part\n                        return <span key={key}>{value}</span>;\n                    }\n                }\n            })}\n        </span>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.isBrowserWindow(iframeWindow)",
+    "title": "Utils.isBrowserWindow()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "isBrowserWindow",
+    "description": "<p>If global window object exists, and does not have boolean isJSDOM flag, this context may be browser or electron. Use isElectronWindow() to know the latter.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Window",
+            "optional": true,
+            "field": "iframeWindow",
+            "description": "<p>iframe window reference.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import { isBrowserWindow } from 'reactium-core/sdk';\nisBrowserWindow();\n// Returns: true if executed in browser or electron.\n// Returns: false if executed on server.",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.isElectronWindow(iframeWindow)",
+    "title": "Utils.isElectronWindow()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "isElectronWindow",
+    "description": "<p>Determine if window is an electron window. Useful for detecting electron usage.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Window",
+            "optional": true,
+            "field": "iframeWindow",
+            "description": "<p>iframe window reference.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import { isElectronWindow } from 'reactium-core/sdk';\nisElectronWindow();\n// Returns: true if executed in electron.\n// Returns: false if executed in node or browser.",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Reactium.Utils.isServerWindow(iframeWindow)",
+    "title": "Utils.isServerWindow()",
+    "version": "3.1.14",
+    "group": "Reactium.Utils",
+    "name": "isServerWindow",
+    "description": "<p>If global window object exists, and has boolean isJSDOM flag, this context is a JSON window object (not in the browser or electron)</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Window",
+            "optional": true,
+            "field": "iframeWindow",
+            "description": "<p>iframe window reference.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "Example Usage:",
+        "content": "import { isServerWindow } from 'reactium-core/sdk';\nisServerWindow();\n// Returns: true if executed in server SSR context.\n// Returns: false if executed in browser or electron.",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/index.js",
+    "groupTitle": "Reactium.Utils"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.addComponent(component,capabilities,strict)",
+    "title": "Zone.addComponent()",
+    "name": "Zone.addComponent",
+    "description": "<p>Register a component to a component zone.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>component object, determines what component renders in a zone, what order and additional properties to pass to the component.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Array",
+            "optional": true,
+            "field": "capabilities",
+            "description": "<p>list of capabilities to check before adding component to zone. Can also be added as property of zone component object.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "strict",
+            "defaultValue": "true",
+            "description": "<p>true to only add component if all capabilities are allowed, otherwise only one capability is necessary</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "plugin-example.js",
+        "content": "import SomeComponent from './path/to/SomeComponent';\nimport Reactium from 'reactium-core/sdk';\n\nReactium.Plugin.register('myPlugin').then(() => {\n    // When the component is initialized, `<SomeComponent>` will render in\n    // `\"zone-1\"`\n    Reactium.Zone.addComponent({\n        // Required - Component to render. May also be a string, if the component\n        // has been registered with Reactium.Component.register().\n        // @type {Component|String}\n        component: SomeComponent,\n\n        // Required - One or more zones this component should render.\n        // @type {String|Array}\n        zone: ['zone-1'],\n\n        // By default components in zone are rendering in ascending order.\n        // @type {Number}\n        order: {{order}},\n\n        // [Optional] - additional search subpaths to use to find the component,\n        // if String provided for component property.\n        // @type {[type]}\n        //\n        // e.g. If component is a string 'TextInput', uncommenting the line below would\n        // look in components/common-ui/form/inputs and components/general to find\n        // the component 'TextInput'\n        // paths: ['common-ui/form/inputs', 'general']\n\n        // [Optional] - Additional params:\n        //\n        // Any arbitrary free-form additional properties you provide below, will be provided as params\n        // to the component when rendered.\n        //\n        // e.g. Below will be provided to the MyComponent, <MyComponent pageType={'home'} />\n        // These can also be used to help sort or filter components, or however you have your\n        // component use params.\n        // @type {Mixed}\n        // pageType: 'home',\n    })\n})",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.addFilter(zone,filter,order)",
+    "title": "Zone.addFilter()",
+    "name": "Zone.addFilter",
+    "description": "<p>Add a component zone filter function, used to filter which components will appear in <code>&lt;Zone /&gt;</code> Returns unique id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone this filter will apply to</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "filter",
+            "description": "<p>the filter function that will be passed each zone component object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>the priority your filter will take in list of filters in this zone</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "reactium-hooks.js",
+        "content": "import Reactium from 'reactium-core/sdk';\n\nconst registerPlugin = async () => {\n    await Reactium.Plugin.register('MyVIPView');\n    const permitted = await Reactium.User.can(['vip.view']);\n\n    // Hide this component if current user shouldn't see vip components\n    const filter = component => {\n      return component.type !== 'vip' || !permitted\n    };\n\n    const id = Reactium.Zone.addFilter('zone-1', filter)\n}\nregisterPlugin();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.addMapper(zone,mapper,order)",
+    "title": "Zone.addMapper()",
+    "name": "Zone.addMapper",
+    "description": "<p>Add a component zone mapping function, used to augment the zone component object before passed to <code>&lt;Zone /&gt;</code>. Returns unique id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone this mapper will apply to</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "mapper",
+            "description": "<p>the mapper function that will be passed each component object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>the priority your mapper will take in list of mappers in this zone</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nimport React from 'react';\nimport VIPBadge from './some/path/Vip';\n// for this zone, if component is of type \"vip\", add a VIPBage component to the component\n// components children property\nconst mapper = (component) => {\n    if (component.type === 'vip')\n    component.children = [\n        <VIPBadge />\n    ];\n    return component;\n};\nconst id = Reactium.Zone.addMapper('zone-1', mapper)",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.addSort(zone,sortBy,reverse,order)",
+    "title": "Zone.addSort()",
+    "name": "Zone.addSort",
+    "description": "<p>Add a component zone sort critera, used to augment the zone component object before passed to <code>&lt;Zone /&gt;</code></p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone this sort will apply to</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "sortBy",
+            "defaultValue": "order",
+            "description": "<p>zone component object property to sort the list of components by</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "reverse",
+            "defaultValue": "false",
+            "description": "<p>reverse sort order</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": true,
+            "field": "order",
+            "defaultValue": "Enums.priority.neutral",
+            "description": "<p>the priority your sort will take in list of sorts in this zone</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\n\n// sort by zone component.type property\nReactium.Zone.addSort('zone-1', 'type')",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.getZoneComponent(zone,id)",
+    "title": "Zone.getZoneComponent()",
+    "name": "Zone.getZoneComponent",
+    "description": "<p>Get the component from a zone by its id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone name to get components from</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the registered component, specified in the object passed to Zone.addComponent() or returned by it.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.getZoneComponents(zone,raw)",
+    "title": "Zone.getZoneComponents()",
+    "name": "Zone.getZoneComponents",
+    "description": "<p>Get existing registrations for a zone, by default goes through mapping, sorting, filtering. Add raw=true to get unadulterated list, even if they may not be renderable in the Zone. Returns the object used in Zone.addComponent()</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone name to get components from</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "raw",
+            "defaultValue": "false",
+            "description": "<p>Set to true to get all components, whether or not they are currently filtered, and without mapping or extra sorting.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.hasZoneComponent(zone,id)",
+    "title": "Zone.hasZoneComponent()",
+    "name": "Zone.hasZoneComponent",
+    "description": "<p>Returns true if component with id is present in the zone.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone name to get components from</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the registered component, specified in the object passed to Zone.addComponent() or returned by it.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.removeComponent(ID)",
+    "title": "Zone.removeComponent()",
+    "name": "Zone.removeComponent",
+    "description": "<p>Removes a component added by <code>Zone.addComponent()</code> from a component zone by id.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the unique component object id.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.removeFilter(id)",
+    "title": "Zone.removeFilter()",
+    "name": "Zone.removeFilter",
+    "description": "<p>Remove filter functions for a component zone for this component.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the filter to remove</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Zone.removeFilter(filterId);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.removeMapper(id)",
+    "title": "Zone.removeMapper()",
+    "name": "Zone.removeMapper",
+    "description": "<p>Remove mapping functions for a zone..</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the mapper to remove from the zone</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Zone.removeMapper(mapperId);",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.removeSort(componentName,zone)",
+    "title": "Zone.removeSort()",
+    "name": "Zone.removeSort",
+    "description": "<p>Remove sort critera for a component zone for this component. This should be called only: //   * @apiParam {String} zone the zone to remove this sort from</p>",
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "Example Usage",
+        "content": "import Reactium from 'reactium-core/sdk';\nReactium.Zone.removeSort('myPlugin', 'zone-1');",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.subscribe(zone,cb)",
+    "title": "Zone.subscribe()",
+    "name": "Zone.subscribe",
+    "description": "<p>Subscribe to components added, removed, or updated in a particular rendering zone. Returns an unsubscribe function. Call this function to unsubscribe from changes.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>the zone to subscribe to</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Function",
+            "optional": false,
+            "field": "callback",
+            "description": "<p>a function that will be called when a change occurs to zone.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "examples": [
+      {
+        "title": "useZoneComponents.js",
+        "content": "import Reactium from 'reactium-core/sdk';\nimport { useState, useEffect } from 'react';\n\nexport const useZoneComponents = zone => {\n    const [components, updateComponents] = useState(Reactium.Zone.getZoneComponents(zone));\n\n    useEffect(() => Reactium.Zone.subscribe(zone, zoneComponents => {\n        updateComponents(zoneComponents)\n    }), [zone]);\n\n    return components;\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Function",
+    "url": "Zone.updateComponent(id,updatedComponent)",
+    "title": "Zone.updateComponent()",
+    "name": "Zone.updateComponent",
+    "description": "<p>Register a component to a component zone.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "ID",
+            "description": "<p>the unique component object id.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Object",
+            "optional": false,
+            "field": "updatedComponent",
+            "description": "<p>updated zone component object, will be merged with existing.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Reactium.Zone",
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/zone/index.js",
+    "groupTitle": "Reactium.Zone"
+  },
+  {
+    "type": "Object",
+    "url": "Reactium.AppContext",
+    "title": "Reactium.AppContext",
+    "group": "Reactium",
+    "name": "Reactium.AppContext",
+    "description": "<p>A Registry used for top-level React wrapping context provider, such as Redux or Theme. See <a href=\"#api-Reactium-Registry\">Registry</a> for full details on Registry methods / properties. Use this to register a React context provider, as well as any properties that are passed to the context.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "list",
+            "description": "<p>get list of most recent (or highest order) registered objects, filtering out unregistered or banned objects.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "register",
+            "description": "<p><code>reg.register(id,data)</code> pass an identifier and a data object to register the object. The identifier will be added if it is not already registered (but protected) and not banned.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unregister",
+            "description": "<p><code>reg.unregister(id)</code> pass an identifier to unregister an object. When in HISTORY mode (default), previous registration will be retained, but the object will not be listed. In CLEAN mode, the previous registrations will be removed, unless protected.</p>"
+          }
+        ],
+        "register": [
+          {
+            "group": "register",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the data object to be registered</p>"
+          },
+          {
+            "group": "register",
+            "type": "Provider",
+            "optional": false,
+            "field": "data",
+            "description": "<p>the object to be registered</p>"
+          }
+        ],
+        "Provider": [
+          {
+            "group": "Provider",
+            "type": "ContextProvider",
+            "optional": false,
+            "field": "provider",
+            "description": "<p>the context provider. This provider must be a React component that will render children.</p>"
+          }
+        ]
+      }
+    },
+    "examples": [
+      {
+        "title": "reactium-hooks.js",
+        "content": "// Example of Registering Material UI Theme\nimport Reactium from 'reactium-core/sdk';\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\nimport { purple } from '@mui/material/colors';\n\n(async () => {\n    await Reactium.Plugin.register('MUI-Theme');\n\n    await Reactium.Hook.register('app-context-provider', async () => {\n        const theme = createTheme({\n            palette: {\n                primary: {\n                    // Purple and green play nicely together.\n                    main: purple[500],\n                },\n                secondary: {\n                    // This is green.A700 as hex.\n                    main: '#11cb5f',\n                },\n            },\n        });\n\n        Reactium.AppContext.register('ThemeProvider', {\n            // provider required\n            provider: ThemeProvider,\n\n            // remainder are optional props passed to your provider, in this case the theme\n            theme,\n        });\n    })\n})();",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/app-context.js",
+    "groupTitle": "Reactium"
+  },
+  {
+    "type": "Object",
+    "url": "Registry",
+    "title": "Registry",
+    "group": "Reactium",
+    "name": "Registry",
+    "description": "<p>Reactium uses a number of registry objects used to registering all sorts of objects that will be used elsewhere in the framework. New registry objects are generally instanciated as singletons on the overall SDK.</p> <p>There are many registry objects attached by default to the SDK, and developers can create new ones using <code>Utils.registryFactory()</code>.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "listById",
+            "description": "<p>get Object keyed by id of most recent (or highest order) registered objects, filtering out unregistered or banned objects.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "list",
+            "description": "<p>get list of most recent (or highest order) registered objects, filtering out unregistered or banned objects.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "registered",
+            "description": "<p>get list of all historically registrated objects, even duplicates, ordered by order property of object (defaults to 100).</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "protected",
+            "description": "<p>get list of protected registrations ids</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "unregistered",
+            "description": "<p>get list of all existing registered objects ids that have been subsequently unregistered.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "banned",
+            "description": "<p>get list of all banned objects ids.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Getter",
+            "optional": false,
+            "field": "mode",
+            "description": "<p>get current mode (Default Utils.Registry.MODES.HISTORY)</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "get",
+            "description": "<p><code>reg.get(id,defaultValue)</code> pass the identifier of an object get that object from the registry. Optionally provide a default value if the id doesn't exist in the registry.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "isProtected",
+            "description": "<p>pass the identifier of an object to see if it has been protected</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "isRegistered",
+            "description": "<p>pass the identifier of an object to see if it has been registered</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "isUnRegistered",
+            "description": "<p>pass the identifier of an object to see is NOT registered.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "isBanned",
+            "description": "<p>pass the identifier of an object to see if it has been banned</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "ban",
+            "description": "<p><code>reg.ban(id)</code> pass the identifier of an object to ban. Banned objects can not be registered and will not be show in list. Useful when you have code that needs to preempt the registration of an object from code you do not control. E.g. a plugin is introducing undesireable or disabled functionality</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "cleanup",
+            "description": "<p><code>reg.cleanup(id)</code> pass the identifier of an object to be purged from historical registrations (i.e. free up memory) Automatically performed in mode Utils.Registry.CLEAN</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "protect",
+            "description": "<p><code>reg.protect(id)</code> pass the identifier of an object to protect. Protected objects can not be overridden or cleaned up.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "register",
+            "description": "<p><code>reg.register(id,data)</code> pass an identifier and a data object to register the object. The identifier will be added if it is not already registered (but protected) and not banned.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unprotect",
+            "description": "<p><code>reg.unprotect(id)</code> pass an identifier to unprotect an object</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unregister",
+            "description": "<p><code>reg.unregister(id)</code> pass an identifier to unregister an object. When in HISTORY mode (default), previous registration will be retained, but the object will not be listed. In CLEAN mode, the previous registrations will be removed, unless protected.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "flush",
+            "description": "<p><code>reg.flush()</code> clear all registrations. Resets registry to newly constructed state.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "subscribe",
+            "description": "<p><code>reg.subscribe(cb,id)</code> Adds a callback to indicate changes to the registry. Callback is called on register, unregister, protect, unprotect, ban, cleanup, and flush. Returns unsubscribe function.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unsubscribe",
+            "description": "<p><code>reg.unsubscribe(id)</code> unsubscribe a subscriber by id</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Method",
+            "optional": false,
+            "field": "unsubscribeAll",
+            "description": "<p><code>reg.unsubscribeAll()</code> unsubscribe all subscribers to changes made on the registry</p>"
+          }
+        ],
+        "register": [
+          {
+            "group": "register",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the data object to be registered</p>"
+          },
+          {
+            "group": "register",
+            "type": "Object",
+            "optional": false,
+            "field": "data",
+            "description": "<p>the object to be registered</p>"
+          }
+        ],
+        "subscribe": [
+          {
+            "group": "subscribe",
+            "type": "Function",
+            "optional": false,
+            "field": "cb",
+            "description": "<p>Callback to be invoked on changes to the registry.</p>"
+          },
+          {
+            "group": "subscribe",
+            "type": "String",
+            "optional": true,
+            "field": "id",
+            "description": "<p>optional id of the callback, if you want to invoke unsubscribe manually by id, instead of the callback returned from subscribe method</p>"
+          }
+        ],
+        "unsubscribe": [
+          {
+            "group": "unsubscribe",
+            "type": "String",
+            "optional": false,
+            "field": "id",
+            "description": "<p>the id of the subscriber to unsubscribe</p>"
+          }
+        ]
+      }
+    },
+    "version": "0.0.0",
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/sdks/utils/registry.js",
+    "groupTitle": "Reactium"
+  },
+  {
+    "type": "RegisteredComponent",
+    "url": "Zone",
+    "title": "Zone",
+    "version": "3.1.19",
+    "name": "Zone",
+    "description": "<p>Component used to identify a &quot;zone&quot; in your application where any arbitrary components will render. Plugin components registered for this zone will dynamically render in the zone. Plugins can be registered statically in Reactium by creating a <code>plugin.js</code> file that exports a component definition (<code>arcli plugin component</code> to generate boilerplate for one), or using the Reactium SDK <code>Reactium.Zone.addComponent()</code> call.</p> <p>See also the Zone SDK for filtering, sorting, or mapping over plugin components for a zone.</p> <p>To generate an exportable plugin module, use the <code>arcli plugin module</code> command.</p>",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "String",
+            "optional": false,
+            "field": "zone",
+            "description": "<p>Identifier of the zone where plugin components will be rendered.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Boolean",
+            "optional": true,
+            "field": "passThrough",
+            "defaultValue": "false",
+            "description": "<p>When true, will provide a <code>components</code> property to children of Zone instead of rendering plugin components directly as siblings. This is useful when you wish to make plugin components available, but take more control over how they render.</p> <p>Example Passthrough Usage: Using the <code>jsx-parser</code> module, components could be provided to a JSXParser component, and the actual render of those components could be dictated by a string of JSX and data context provided by a CMS.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Mixed",
+            "optional": false,
+            "field": "...params",
+            "description": "<p>any number of arbitrary parameters (variadic) can be provided to the Zone, and will be passed automatically as props on your plugin components when they are rendered.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Registered_Component",
+    "examples": [
+      {
+        "title": "PageHeader.js",
+        "content": "import React from 'react';\nimport { useHookComponent } from 'reactium-core/sdk';\n\n// PageHeader is not hard-coded, but adaptable by plugins\nexport default props => {\n    const Zone = useHookComponent('Zone');\n    return (\n        <div class='page-header'>\n            <Zone zone={'page-header'} />\n        </div>\n    );\n};",
+        "type": "json"
+      },
+      {
+        "title": "src/app/components/plugin-src/MyHeaderPlugin/index.js",
+        "content": "import Reactium from 'reactium-core/sdk';\nimport MyHeaderWidget from './MyHeaderWidget';\n\nconst registerPlugin = async () => {\n    await Reactium.Plugin.register('MyHeaderPlugin');\n    Reactium.Zone.addComponent({\n        id: 'MyHeaderWidget',\n        zone: 'page-header',\n        component: MyHeaderWidget,\n    });\n};\nregisterPlugin();",
+        "type": "json"
+      },
+      {
+        "title": "src/app/components/plugin-src/MyHeaderPlugin/MyHeaderWidget.js",
+        "content": "import React from 'react';\n\nexport default props => {\n   return (\n       <div class='my-header-widget'>\n           I will end up in the header zone\n       </div>\n   );\n};",
+        "type": "json"
+      }
+    ],
+    "filename": "node_modules/@atomic-reactor/reactium-sdk-core/lib/named-exports/Zone.js",
+    "groupTitle": "Registered_Component"
+  },
+  {
+    "type": "Function",
+    "url": "__(text)",
+    "title": "__()",
+    "description": "<p>Wrap this around string literals to make them translateable with gettext Poedit utility. Run <code>arcli i18n</code> to extract strings to <code>src/reactium-translations/template.pot</code> by default.</p>",
+    "name": "__",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "StringLiteral",
+            "optional": false,
+            "field": "text",
+            "description": "<p>the text to be translated. Important: this should not be a variable. It must be a string literal, or <code>arcli i18n</code> command will not be able to locate the string. This string may not be an ES6 template literal.</p>"
+          }
+        ]
+      }
+    },
+    "group": "Translation",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React from 'react';\nimport { __ } = 'reactium-core/sdk';\n\nexport default () => {\n    return (\n        <div>{__('My Translatable string.')}</div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/i18n.js",
+    "groupTitle": "Translation"
+  },
+  {
+    "type": "Function",
+    "url": "_n(singular,plural,count)",
+    "title": "_n()",
+    "description": "<p>Wrap this around string literals to make them translateable with gettext Poedit utility. Run <code>arcli i18n</code> to extract strings to <code>src/reactium-translations/template.pot</code> by default.</p>",
+    "name": "_n",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "StringLiteral",
+            "optional": false,
+            "field": "singular",
+            "description": "<p>the singular form text to be translated. Important: this should not be a variable. It must be a string literal, or <code>arcli i18n</code> command will not be able to locate the string. This string may not be an ES6 template literal.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "StringLiteral",
+            "optional": false,
+            "field": "plural",
+            "description": "<p>the plural form text to be translated. Important: this should not be a variable. It must be a string literal, or <code>arcli i18n</code> command will not be able to locate the string. This string may not be an ES6 template literal.</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "Number",
+            "optional": false,
+            "field": "count",
+            "description": "<p>the number related to singular or plural string</p>"
+          }
+        ]
+      }
+    },
+    "group": "Translation",
+    "examples": [
+      {
+        "title": "Usage",
+        "content": "import React from 'react';\nimport { _n } = 'reactium-core/sdk';\n\nexport default props => {\n    const count = props.count;\n    // singular / plural translation\n    const label = _n('%s thing', '%s things', count).replace('%s', count);\n    return (\n        <div>{label}</div>\n    );\n};",
+        "type": "json"
+      }
+    ],
+    "version": "0.0.0",
+    "filename": ".core/sdk/named-exports/i18n.js",
+    "groupTitle": "Translation"
+  }
+]
diff --git a/docs/api_definition.js b/docs/api_definition.js
new file mode 100644
index 00000000..47b3bdcf
--- /dev/null
+++ b/docs/api_definition.js
@@ -0,0 +1 @@
+define({ "api": undefined });
diff --git a/docs/api_definition.json b/docs/api_definition.json
new file mode 100644
index 00000000..417b7b53
--- /dev/null
+++ b/docs/api_definition.json
@@ -0,0 +1 @@
+undefined
diff --git a/docs/api_project.js b/docs/api_project.js
new file mode 100644
index 00000000..cc667340
--- /dev/null
+++ b/docs/api_project.js
@@ -0,0 +1,15 @@
+define({
+  "name": "reactium",
+  "version": "4.1.6",
+  "description": "Reactium SDK",
+  "title": "Reactium SDK",
+  "sampleUrl": false,
+  "defaultVersion": "0.0.0",
+  "apidoc": "0.3.0",
+  "generator": {
+    "name": "apidoc",
+    "time": "2023-02-10T03:48:07.558Z",
+    "url": "https://apidocjs.com",
+    "version": "0.25.0"
+  }
+});
diff --git a/docs/api_project.json b/docs/api_project.json
new file mode 100644
index 00000000..53b23c44
--- /dev/null
+++ b/docs/api_project.json
@@ -0,0 +1,15 @@
+{
+  "name": "reactium",
+  "version": "4.1.6",
+  "description": "Reactium SDK",
+  "title": "Reactium SDK",
+  "sampleUrl": false,
+  "defaultVersion": "0.0.0",
+  "apidoc": "0.3.0",
+  "generator": {
+    "name": "apidoc",
+    "time": "2023-02-10T03:48:07.558Z",
+    "url": "https://apidocjs.com",
+    "version": "0.25.0"
+  }
+}
diff --git a/docs/css/style.css b/docs/css/style.css
new file mode 100644
index 00000000..3e8ff302
--- /dev/null
+++ b/docs/css/style.css
@@ -0,0 +1,526 @@
+/* ------------------------------------------------------------------------------------------
+ * Content
+ * ------------------------------------------------------------------------------------------ */
+body {
+  max-width: 1280px;
+}
+
+body, p, a, div, th, td {
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 400;
+  font-size: 16px;
+}
+
+@media (min-width: 1200px) {
+  body.container-fluid {
+    padding-right: 0px;
+    padding-left: 0px;
+    margin-right: 0px;
+    margin-left: 0px;
+  }
+}
+
+td.code {
+  font-size: 14px;
+  font-family: "Source Code Pro", monospace;
+  font-style: normal;
+  font-weight: 400;
+}
+
+#content {
+  padding-top: 16px;
+  z-Index: -1;
+  margin-left: 270px;
+}
+
+p {
+  color: #808080;
+}
+
+h1 {
+  font-family: "Source Sans Pro Semibold", sans-serif;
+  font-weight: normal;
+  font-size: 44px;
+  line-height: 50px;
+  margin: 0 0 10px 0;
+  padding: 0;
+}
+
+h2 {
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: normal;
+  font-size: 24px;
+  line-height: 40px;
+  margin: 0 0 20px 0;
+  padding: 0;
+}
+
+section {
+  border-top: 1px solid #ebebeb;
+  padding: 30px 0;
+}
+
+section h1 {
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 700;
+  font-size: 32px;
+  line-height: 40px;
+  padding-bottom: 14px;
+  margin: 0 0 20px 0;
+  padding: 0;
+}
+
+article {
+  padding: 14px 0 30px 0;
+}
+
+article h1 {
+  font-family: "Source Sans Pro Bold", sans-serif;
+  font-weight: 600;
+  font-size: 24px;
+  line-height: 26px;
+}
+
+article h2 {
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 600;
+  font-size: 18px;
+  line-height: 24px;
+  margin: 0 0 10px 0;
+}
+
+article h3 {
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 600;
+  font-size: 16px;
+  line-height: 18px;
+  margin: 0 0 10px 0;
+}
+
+article h4 {
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 600;
+  font-size: 14px;
+  line-height: 16px;
+  margin: 0 0 8px 0;
+}
+
+table {
+  border-collapse: collapse;
+  width: 100%;
+  margin: 0 0 20px 0;
+}
+
+th {
+  background-color: #f5f5f5;
+  text-align: left;
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 700;
+  padding: 4px 8px;
+  border: #e0e0e0 1px solid;
+}
+
+td {
+  vertical-align: top;
+  padding: 10px 8px 0 8px;
+  border: #e0e0e0 1px solid;
+}
+
+#generator .content {
+  color: #b0b0b0;
+  border-top: 1px solid #ebebeb;
+  padding: 10px 0;
+}
+
+.label-optional {
+  float: right;
+  background-color: grey;
+  margin-top: 4px;
+}
+
+.open-left {
+  right: 0;
+  left: auto;
+}
+
+/* ------------------------------------------------------------------------------------------
+ * apidoc - intro
+ * ------------------------------------------------------------------------------------------ */
+
+#apidoc .apidoc {
+  border-top: 1px solid #ebebeb;
+  padding: 30px 0;
+}
+
+#apidoc h1 {
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 700;
+  font-size: 32px;
+  line-height: 40px;
+  padding-bottom: 14px;
+  margin: 0 0 20px 0;
+  padding: 0;
+}
+
+#apidoc h2 {
+  font-family: "Source Sans Pro Bold", sans-serif;
+  font-weight: 600;
+  font-size: 22px;
+  line-height: 26px;
+  padding-top: 14px;
+}
+
+/* ------------------------------------------------------------------------------------------
+ * Request type
+ * ------------------------------------------------------------------------------------------ */
+.type {
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 600;
+  font-size: 15px;
+  display: inline-block;
+  margin: 0 0 5px 0;
+  padding: 4px 5px;
+  border-radius: 6px;
+  text-transform: uppercase;
+  background-color: #3387CC;
+  color: #ffffff;
+}
+
+.type__get {
+  background-color: green;
+}
+
+.type__put {
+  background-color: #e5c500;
+}
+
+.type__post {
+  background-color: #4070ec;
+}
+
+.type__delete {
+  background-color: #ed0039;
+}
+
+/* ------------------------------------------------------------------------------------------
+ * Sidenav
+ * ------------------------------------------------------------------------------------------ */
+.sidenav {
+  width: 228px;
+  margin: 0;
+  padding: 0 20px 20px 20px;
+  position: fixed;
+  top: 50px;
+  left: 0;
+  bottom: 0;
+  overflow-x: hidden;
+  overflow-y: auto;
+  background-color: #f5f5f5;
+  z-index: 10;
+}
+
+.sidenav > li > a {
+  display: block;
+  width: 192px;
+  margin: 0;
+  padding: 2px 11px;
+  border: 0;
+  border-left: transparent 4px solid;
+  border-right: transparent 4px solid;
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 400;
+  font-size: 14px;
+}
+
+.sidenav > li.nav-header {
+  margin-top: 8px;
+  margin-bottom: 8px;
+}
+
+.sidenav > li.nav-header > a {
+  padding: 5px 15px;
+  border: 1px solid #e5e5e5;
+  width: 190px;
+  font-family: "Source Sans Pro", sans-serif;
+  font-weight: 700;
+  font-size: 16px;
+  background-color: #ffffff;
+}
+
+.sidenav > li.active > a {
+    position: relative;
+    z-index: 2;
+    background-color: #0088cc;
+    color: #ffffff;
+}
+
+.sidenav > li.has-modifications a {
+  border-right: #60d060 4px solid;
+}
+
+.sidenav > li.is-new a {
+  border-left: #e5e5e5 4px solid;
+}
+
+/* ------------------------------------------------------------------------------------------
+ * Side nav search
+ * ------------------------------------------------------------------------------------------ */
+.sidenav-search {
+  width: 228px;
+  left: 0px;
+  position: fixed;
+  padding: 16px 20px 10px 20px;
+  background-color: #F5F5F5;
+  z-index: 11;
+}
+
+.sidenav-search .search {
+  height: 26px;
+}
+
+.search-reset {
+  position: absolute;
+  display: block;
+  cursor: pointer;
+  width: 20px;
+  height: 20px;
+  text-align: center;
+  right: 28px;
+  top: 17px;
+  background-color: #fff;
+}
+
+/* ------------------------------------------------------------------------------------------
+ * Compare
+ * ------------------------------------------------------------------------------------------ */
+
+ins {
+  background: #60d060;
+  text-decoration: none;
+  color: #000000;
+}
+
+del {
+  background: #f05050;
+  color: #000000;
+}
+
+.label-ins {
+  background-color: #60d060;
+}
+
+.label-del {
+  background-color: #f05050;
+  text-decoration: line-through;
+}
+
+pre.ins {
+  background-color: #60d060;
+}
+
+pre.del {
+  background-color: #f05050;
+  text-decoration: line-through;
+}
+
+table.ins th,
+table.ins td {
+  background-color: #60d060;
+}
+
+table.del th,
+table.del td {
+  background-color: #f05050;
+  text-decoration: line-through;
+}
+
+tr.ins td {
+  background-color: #60d060;
+}
+
+tr.del td {
+  background-color: #f05050;
+  text-decoration: line-through;
+}
+
+/* ------------------------------------------------------------------------------------------
+ * Spinner
+ * ------------------------------------------------------------------------------------------ */
+
+#loader {
+  position: absolute;
+  width: 100%;
+}
+
+#loader p {
+  padding-top: 80px;
+  margin-left: -4px;
+}
+
+.spinner {
+  margin: 200px auto;
+  width: 60px;
+  height: 60px;
+  position: relative;
+}
+
+.container1 > div, .container2 > div, .container3 > div {
+  width: 14px;
+  height: 14px;
+  background-color: #0088cc;
+
+  border-radius: 100%;
+  position: absolute;
+  -webkit-animation: bouncedelay 1.2s infinite ease-in-out;
+  animation: bouncedelay 1.2s infinite ease-in-out;
+  /* Prevent first frame from flickering when animation starts */
+  -webkit-animation-fill-mode: both;
+  animation-fill-mode: both;
+}
+
+.spinner .spinner-container {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+}
+
+.container2 {
+  -webkit-transform: rotateZ(45deg);
+  transform: rotateZ(45deg);
+}
+
+.container3 {
+  -webkit-transform: rotateZ(90deg);
+  transform: rotateZ(90deg);
+}
+
+.circle1 { top: 0; left: 0; }
+.circle2 { top: 0; right: 0; }
+.circle3 { right: 0; bottom: 0; }
+.circle4 { left: 0; bottom: 0; }
+
+.container2 .circle1 {
+  -webkit-animation-delay: -1.1s;
+  animation-delay: -1.1s;
+}
+
+.container3 .circle1 {
+  -webkit-animation-delay: -1.0s;
+  animation-delay: -1.0s;
+}
+
+.container1 .circle2 {
+  -webkit-animation-delay: -0.9s;
+  animation-delay: -0.9s;
+}
+
+.container2 .circle2 {
+  -webkit-animation-delay: -0.8s;
+  animation-delay: -0.8s;
+}
+
+.container3 .circle2 {
+  -webkit-animation-delay: -0.7s;
+  animation-delay: -0.7s;
+}
+
+.container1 .circle3 {
+  -webkit-animation-delay: -0.6s;
+  animation-delay: -0.6s;
+}
+
+.container2 .circle3 {
+  -webkit-animation-delay: -0.5s;
+  animation-delay: -0.5s;
+}
+
+.container3 .circle3 {
+  -webkit-animation-delay: -0.4s;
+  animation-delay: -0.4s;
+}
+
+.container1 .circle4 {
+  -webkit-animation-delay: -0.3s;
+  animation-delay: -0.3s;
+}
+
+.container2 .circle4 {
+  -webkit-animation-delay: -0.2s;
+  animation-delay: -0.2s;
+}
+
+.container3 .circle4 {
+  -webkit-animation-delay: -0.1s;
+  animation-delay: -0.1s;
+}
+
+@-webkit-keyframes bouncedelay {
+  0%, 80%, 100% { -webkit-transform: scale(0.0) }
+  40% { -webkit-transform: scale(1.0) }
+}
+
+@keyframes bouncedelay {
+  0%, 80%, 100% {
+    transform: scale(0.0);
+    -webkit-transform: scale(0.0);
+  } 40% {
+    transform: scale(1.0);
+    -webkit-transform: scale(1.0);
+  }
+}
+
+/* ------------------------------------------------------------------------------------------
+ * Tabs
+ * ------------------------------------------------------------------------------------------ */
+ul.nav-tabs {
+  margin: 0;
+}
+
+p.deprecated span{
+  color: #ff0000;
+  font-weight: bold;
+  text-decoration: underline;
+}
+
+/* ------------------------------------------------------------------------------------------
+ * Print
+ * ------------------------------------------------------------------------------------------ */
+
+@media print {
+
+  #sidenav,
+  #version,
+  #versions,
+  section .version,
+  section .versions {
+    display: none;
+  }
+
+  #content {
+    margin-left: 0;
+  }
+
+  a {
+    text-decoration: none;
+    color: inherit;
+  }
+
+  a:after {
+    content: " [" attr(href) "] ";
+  }
+
+  p {
+    color: #000000
+  }
+
+  pre {
+    background-color: #ffffff;
+    color: #000000;
+    padding: 10px;
+    border: #808080 1px solid;
+    border-radius: 6px;
+    position: relative;
+    margin: 10px 0 20px 0;
+  }
+
+} /* /@media print */
diff --git a/docs/fonts/glyphicons-halflings-regular.eot b/docs/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 00000000..b93a4953
Binary files /dev/null and b/docs/fonts/glyphicons-halflings-regular.eot differ
diff --git a/docs/fonts/glyphicons-halflings-regular.svg b/docs/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 00000000..94fb5490
--- /dev/null
+++ b/docs/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/docs/fonts/glyphicons-halflings-regular.ttf b/docs/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 00000000..1413fc60
Binary files /dev/null and b/docs/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/docs/fonts/glyphicons-halflings-regular.woff b/docs/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 00000000..9e612858
Binary files /dev/null and b/docs/fonts/glyphicons-halflings-regular.woff differ
diff --git a/docs/fonts/glyphicons-halflings-regular.woff2 b/docs/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 00000000..64539b54
Binary files /dev/null and b/docs/fonts/glyphicons-halflings-regular.woff2 differ
diff --git a/docs/img/favicon.ico b/docs/img/favicon.ico
new file mode 100644
index 00000000..c307a043
Binary files /dev/null and b/docs/img/favicon.ico differ
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 00000000..82ac4366
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,692 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+  <title>Loading...</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <link href="vendor/bootstrap.min.css" rel="stylesheet" media="screen">
+  <link href="vendor/prism.css" rel="stylesheet" />
+  <link href="css/style.css" rel="stylesheet" media="screen, print">
+  <link href="img/favicon.ico" rel="icon" type="image/x-icon">
+  <script src="vendor/polyfill.js"></script>
+</head>
+<body class="container-fluid">
+
+<script id="template-sidenav" type="text/x-handlebars-template">
+<nav id="scrollingNav">
+  <div class="sidenav-search">
+    <input class="form-control search" type="text" placeholder="{{__ "Filter..."}}">
+    <span class="search-reset">x</span>
+  </div>
+  <ul class="sidenav nav nav-list list">
+  {{#each nav}}
+    {{#if title}}
+      {{#if isHeader}}
+        {{#if isFixed}}
+          <li class="nav-fixed nav-header navbar-btn nav-list-item" data-group="{{group}}"><a href="#api-{{group}}" data-name="show-api-{{group}}" class="show-api api-{{group}}-init">{{underscoreToSpace title}}</a></li>
+        {{else}}
+          <li class="nav-header nav-list-item" data-group="{{group}}"><a href="#api-{{group}}" data-group="show-api-{{group}}" class="show-group api-{{group}}-init">{{underscoreToSpace title}}</a></li>
+        {{/if}}
+      {{else}}
+        <li class="{{#if hidden}}hide {{/if}}" data-group="{{group}}" data-name="{{name}}" data-version="{{version}}">
+          <a href="#api-{{group}}-{{name}}" title="{{url}}" data-group="show-api-{{group}}" data-name="show-api-{{group}}-{{name}}" class="nav-list-item show-api api-{{group}}-{{name}}-init">{{title}}<div class="nav-list-url-item hide">{{url}}</div></a>
+        </li>
+      {{/if}}
+    {{/if}}
+  {{/each}}
+  </ul>
+</nav>
+</script>
+
+<script id="template-project" type="text/x-handlebars-template">
+  <div class="pull-left">
+    <h1>{{name}}</h1>
+    {{#if description}}<h2>{{{nl2br description}}}</h2>{{/if}}
+  </div>
+  <div class="pull-right">
+    {{#if template.withCompare}}
+    <div class="btn-group">
+      <button id="version" class="btn btn-lg btn-default dropdown-toggle" data-toggle="dropdown">
+        <strong>{{version}}</strong>&nbsp;<span class="caret"></span>
+      </button>
+      <ul id="versions" class="dropdown-menu open-left">
+        <li><a id="compareAllWithPredecessor" href="#">{{__ "Compare all with predecessor"}}</a></li>
+        <li class="divider"></li>
+        <li class="disabled"><a href="#">{{__ "show up to version:"}}</a></li>
+      {{#each versions}}
+        <li class="version"><a href="#">{{this}}</a></li>
+      {{/each}}
+      </ul>
+    </div>
+    {{else}}
+    <div id="version" class="well well-sm">
+      <strong>{{version}}</strong>
+    </div>
+    {{/if}}
+  </div>
+  <div class="clearfix"></div>
+</script>
+
+<script id="template-header" type="text/x-handlebars-template">
+  {{#if content}}
+    <div id="api-_" class="show-api-article show-api-_-article">{{{content}}}</div>
+  {{/if}}
+</script>
+
+<script id="template-footer" type="text/x-handlebars-template">
+  {{#if content}}
+    <div id="api-_footer" class="show-api-article show-api-_-article">{{{content}}}</div>
+  {{/if}}
+</script>
+
+<script id="template-generator" type="text/x-handlebars-template">
+  {{#if template.withGenerator}}
+    {{#if generator}}
+      <div class="content">
+        {{__ "Generated with"}} <a href="{{{generator.url}}}">{{{generator.name}}}</a> {{{generator.version}}} - {{{generator.time}}}
+      </div>
+    {{/if}}
+  {{/if}}
+</script>
+
+<script id="template-sections" type="text/x-handlebars-template">
+  <section id="api-{{group}}" class="show-api-group show-api-{{group}}-group {{#if aloneDisplay}} hide{{/if}}">
+    <h1>{{underscoreToSpace title}}</h1>
+    {{#if description}}
+      <p>{{{nl2br description}}}</p>
+    {{/if}}
+    {{#each articles}}
+      <div id="api-{{group}}-{{name}}" class="show-api-article show-api-{{group}}-article show-api-{{group}}-{{name}}-article {{#if aloneDisplay}} hide{{/if}}">
+        {{{article}}}
+      </div>
+    {{/each}}
+  </section>
+</script>
+
+<script id="template-article" type="text/x-handlebars-template">
+  <article id="api-{{article.group}}-{{article.name}}-{{article.version}}" {{#if hidden}}class="hide"{{/if}} data-group="{{article.group}}" data-name="{{article.name}}" data-version="{{article.version}}">
+    <div class="pull-left">
+      <h1>{{underscoreToSpace article.groupTitle}}{{#if article.title}} - {{article.title}}{{/if}}</h1>
+    </div>
+    {{#if template.withCompare}}
+    <div class="pull-right">
+      <div class="btn-group">
+        <button class="version btn btn-default dropdown-toggle" data-toggle="dropdown">
+          <strong>{{article.version}}</strong>&nbsp;<span class="caret"></span>
+        </button>
+        <ul class="versions dropdown-menu open-left">
+          <li class="disabled"><a href="#">{{__ "compare changes to:"}}</a></li>
+        {{#each versions}}
+          <li class="version"><a href="#">{{this}}</a></li>
+        {{/each}}
+        </ul>
+      </div>
+    </div>
+    {{/if}}
+    <div class="clearfix"></div>
+
+    {{#if article.author}}<h4 class="muted">Authored by: {{article.author}}</h4>{{/if}}
+
+    {{#if article.deprecated}}
+      <p class="deprecated"><span>{{__ "DEPRECATED"}}</span>
+        {{{markdown article.deprecated.content}}}
+      </p>
+    {{/if}}
+
+    {{#if article.description}}
+      <p>{{{nl2br article.description}}}</p>
+    {{/if}}
+    <span class="type type__{{toLowerCase article.type}}">{{toLowerCase article.type}}</span>
+    <pre data-type="{{toLowerCase article.type}}"><code class="language-http">{{article.url}}</code></pre>
+
+    {{#if article.permission}}
+      <p>
+        {{__ "Permission:"}}
+        {{#each article.permission}}
+          {{name}}
+          {{#if title}}
+          <button type="button" class="btn btn-info btn-xs" data-title="{{title}}" data-content="{{nl2br description}}" data-html="true" data-toggle="popover" data-placement="right" data-trigger="hover">
+              <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
+          </button>
+          {{/if}}
+        {{/each}}
+      </p>
+    {{/if}}
+
+    {{!-- CODE EXAMPLES IN TABS --}}
+    {{#if_gt article.examples.length compare=0}}
+      <ul class="nav nav-tabs nav-tabs-examples">
+        {{#each article.examples}}
+          <li{{#if_eq @index compare=0}} class="active"{{/if_eq}}>
+            <a href="#examples-{{../id}}-{{@index}}">{{title}}</a>
+          </li>
+        {{/each}}
+      </ul>
+
+      <div class="tab-content">
+      {{#each article.examples}}
+        <div class="tab-pane{{#if_eq @index compare=0}} active{{/if_eq}}" id="examples-{{../id}}-{{@index}}">
+          <pre data-type="{{type}}"><code class="language-{{type}}">{{content}}</code></pre>
+        </div>
+      {{/each}}
+      </div>
+    {{/if_gt}}
+
+    {{subTemplate "article-param-block" params=article.header _hasType=_hasTypeInHeaderFields section="header"}}
+    {{subTemplate "article-param-block" params=article.parameter _hasType=_hasTypeInParameterFields section="parameter"}}
+    {{subTemplate "article-param-block" params=article.success _hasType=_hasTypeInSuccessFields section="success"}}
+    {{subTemplate "article-param-block" params=article.error _col1="Name" _hasType=_hasTypeInErrorFields section="error"}}
+
+    {{subTemplate "article-sample-request" article=article id=id}}
+  </article>
+</script>
+
+<script id="template-article-param-block" type="text/x-handlebars-template">
+  {{#if params}}
+    {{#each params.fields}}
+      <h2>{{__ @key}}</h2>
+      <table>
+        <thead>
+          <tr>
+          <th style="width: 30%">{{#if ../_col1}}{{__ ../_col1}}{{else}}{{__ "Field"}}{{/if}}</th>
+            {{#if ../_hasType}}<th style="width: 10%">{{__ "Type"}}</th>{{/if}}
+            <th style="width: {{#if ../_hasType}}60%{{else}}70%{{/if}}">{{__ "Description"}}</th>
+          </tr>
+        </thead>
+        <tbody>
+        {{#each this}}
+          <tr>
+            <td class="code">{{{splitFill field "." "&nbsp;&nbsp;"}}}{{#if optional}} <span class="label label-optional">{{__ "optional"}}</span>{{/if}}</td>
+            {{#if ../../_hasType}}
+              <td>
+                {{{type}}}
+              </td>
+            {{/if}}
+            <td>
+            {{{nl2br description}}}
+            {{#if defaultValue}}<p class="default-value">{{__ "Default value:"}} <code>{{{defaultValue}}}</code></p>{{/if}}
+            {{#if size}}<p class="type-size">{{__ "Size range:"}} <code>{{{size}}}</code></p>{{/if}}
+            {{#if allowedValues}}<p class="type-size">{{__ "Allowed values:"}}
+              {{#each allowedValues}}
+                <code>{{{this}}}</code>{{#unless @last}}, {{/unless}}
+              {{/each}}
+              </p>
+            {{/if}}
+            </td>
+          </tr>
+        {{/each}}
+        </tbody>
+      </table>
+    {{/each}}
+    {{#if_gt params.examples.length compare=0}}
+      <ul class="nav nav-tabs nav-tabs-examples">
+      {{#each params.examples}}
+        <li{{#if_eq @index compare=0}} class="active"{{/if_eq}}>
+          <a href="#{{../section}}-examples-{{../id}}-{{@index}}">{{title}}</a>
+        </li>
+      {{/each}}
+      </ul>
+
+      <div class="tab-content">
+      {{#each params.examples}}
+        <div class="tab-pane{{#if_eq @index compare=0}} active{{/if_eq}}" id="{{../section}}-examples-{{../id}}-{{@index}}">
+        <pre data-type="{{type}}"><code class="language-{{type}}">{{reformat content type}}</code></pre>
+        </div>
+      {{/each}}
+      </div>
+    {{/if_gt}}
+  {{/if}}
+</script>
+
+<script id="template-article-sample-request" type="text/x-handlebars-template">
+    {{#if article.sampleRequest}}
+      <h2>{{__ "Send a Sample Request"}}</h2>
+      <form class="form-horizontal">
+        <fieldset>
+            <div class="form-group">
+              <label class="col-md-3 control-label" for="{{../id}}-sample-request-url"></label>
+              <div class="input-group">
+                <input id="{{../id}}-sample-request-url" type="text" class="form-control sample-request-url" value="{{article.sampleRequest.0.url}}" />
+                <span class="input-group-addon">{{__ "url"}}</span>
+              </div>
+            </div>
+
+      {{#if article.header}}
+        {{#if article.header.fields}}
+          <h3>{{__ "Headers"}}</h3>
+          {{#each article.header.fields}}
+            <h4><input type="checkbox" data-sample-request-header-group-id="sample-request-header-{{@index}}" name="{{../id}}-sample-request-header" value="{{@index}}" class="sample-request-header sample-request-switch" checked />{{__ @key}}</h4>
+            <div class="{{../id}}-sample-request-header-fields">
+              {{#each this}}
+              <div class="form-group">
+                <label class="col-md-3 control-label" for="sample-request-header-field-{{field}}">{{field}}</label>
+                <div class="input-group">
+                  <input type="text" placeholder="{{field}}" value="{{defaultValue}}" id="sample-request-header-field-{{field}}" class="form-control sample-request-header" data-sample-request-header-name="{{field}}" data-sample-request-header-group="sample-request-header-{{@../index}}">
+                  <span class="input-group-addon">{{{type}}}</span>
+                </div>
+              </div>
+              {{/each}}
+            </div>
+          {{/each}}
+        {{/if}}
+      {{/if}}
+
+      {{#if article.parameter}}
+        {{#if article.parameter.fields}}
+          <h3>{{__ "Parameters"}}</h3>
+          {{#each article.parameter.fields}}
+            <h4><input type="checkbox" data-sample-request-param-group-id="sample-request-param-{{@index}}"  name="{{../id}}-sample-request-param" value="{{@index}}" class="sample-request-param sample-request-switch" checked/>{{__ @key}}
+              <select   name="{{../id}}-sample-header-content-type" class="{{../id}}-sample-request-param-select sample-header-content-type sample-header-content-type-switch">
+                <option value="undefined"  selected>ajax-auto</option>
+                <option value="body-json" >body/json</option>
+                <option value="body-form-data" >body/form-data</option>
+              </select>
+            </h4>
+            <div class="{{../id}}-sample-request-param-body {{../id}}-sample-header-content-type-body hide">
+              <div class="form-group">
+                <div class="input-group">
+                  <textarea id="sample-request-body-json" class="form-control sample-request-body" data-sample-request-body-group="sample-request-param-{{@./index}}" rows="6" style="OVERFLOW: visible" {{#if optional}}data-sample-request-param-optional="true"{{/if}}></textarea>
+                  <div class="input-group-addon">json</div>
+                </div>
+              </div>
+            </div>
+            <div class="{{../id}}-sample-request-param-fields {{../id}}-sample-header-content-type-fields">
+              {{#each this}}
+              <div class="form-group">
+                <label class="col-md-3 control-label" for="sample-request-param-field-{{field}}">{{field}}</label>
+                <div class="input-group">
+                  <input id="sample-request-param-field-{{field}}" type="{{setInputType type}}" placeholder="{{field}}" class="form-control sample-request-param" data-sample-request-param-name="{{field}}" data-sample-request-param-group="sample-request-param-{{@../index}}" {{#if optional}}data-sample-request-param-optional="true"{{/if}}>
+                  <div class="input-group-addon">{{{type}}}</div>
+                </div>
+              </div>
+              {{/each}}
+            </div>
+          {{/each}}
+        {{/if}}
+      {{/if}}
+
+          <div class="form-group">
+            <div class="controls pull-right">
+              <button class="btn btn-primary sample-request-send" data-sample-request-type="{{article.type}}">{{__ "Send"}}</button>
+            </div>
+          </div>
+          <div class="form-group sample-request-response" style="display: none;">
+            <h3>
+              {{__ "Response"}}
+              <button class="btn btn-default btn-xs pull-right sample-request-clear">X</button>
+            </h3>
+            <pre data-type="json"><code class="language-json sample-request-response-json"></code></pre>
+          </div>
+        </fieldset>
+      </form>
+    {{/if}}
+</script>
+
+<script id="template-compare-article" type="text/x-handlebars-template">
+  <article id="api-{{article.group}}-{{article.name}}-{{article.version}}" {{#if hidden}}class="hide"{{/if}} data-group="{{article.group}}" data-name="{{article.name}}" data-version="{{article.version}}" data-compare-version="{{compare.version}}">
+    <div class="pull-left">
+      <h1>{{underscoreToSpace article.group}} - {{{showDiff article.title compare.title}}}</h1>
+    </div>
+
+    <div class="pull-right">
+      <div class="btn-group">
+        <button class="btn btn-success" disabled>
+          <strong>{{article.version}}</strong> {{__ "compared to"}}
+        </button>
+        <button class="version btn btn-danger dropdown-toggle" data-toggle="dropdown">
+          <strong>{{compare.version}}</strong>&nbsp;<span class="caret"></span>
+        </button>
+        <ul class="versions dropdown-menu open-left">
+          <li class="disabled"><a href="#">{{__ "compare changes to:"}}</a></li>
+          <li class="divider"></li>
+        {{#each versions}}
+          <li class="version"><a href="#">{{this}}</a></li>
+        {{/each}}
+        </ul>
+      </div>
+    </div>
+    <div class="clearfix"></div>
+
+    {{#if article.description}}
+      <p>{{{showDiff article.description compare.description "nl2br"}}}</p>
+    {{else}}
+      {{#if compare.description}}
+      <p>{{{showDiff "" compare.description "nl2br"}}}</p>
+      {{/if}}
+    {{/if}}
+
+    <pre data-type="{{toLowerCase article.type}}"><code class="language-html">{{{showDiff article.url compare.url}}}</code></pre>
+
+    {{subTemplate "article-compare-permission" article=article compare=compare}}
+
+    <ul class="nav nav-tabs nav-tabs-examples">
+    {{#each_compare_title article.examples compare.examples}}
+      {{#if typeSame}}
+        <li{{#if_eq index compare=0}} class="active"{{/if_eq}}>
+          <a href="#compare-examples-{{../../article.id}}-{{index}}">{{{showDiff source.title compare.title}}}</a>
+        </li>
+      {{/if}}
+
+      {{#if typeIns}}
+        <li{{#if_eq index compare=0}} class="active"{{/if_eq}}>
+          <a href="#compare-examples-{{../../article.id}}-{{index}}"><ins>{{{source.title}}}</ins></a>
+        </li>
+      {{/if}}
+
+      {{#if typeDel}}
+        <li{{#if_eq index compare=0}} class="active"{{/if_eq}}>
+          <a href="#compare-examples-{{../../article.id}}-{{index}}"><del>{{{compare.title}}}</del></a>
+        </li>
+      {{/if}}
+    {{/each_compare_title}}
+    </ul>
+
+    <div class="tab-content">
+    {{#each_compare_title article.examples compare.examples}}
+
+      {{#if typeSame}}
+        <div class="tab-pane{{#if_eq index compare=0}} active{{/if_eq}}" id="compare-examples-{{../../article.id}}-{{index}}">
+          <pre data-type="{{source.type}}"><code class="language-{{source.type}}">{{{showDiff source.content compare.content}}}</code></pre>
+        </div>
+      {{/if}}
+
+      {{#if typeIns}}
+        <div class="tab-pane{{#if_eq index compare=0}} active{{/if_eq}}" id="compare-examples-{{../../article.id}}-{{index}}">
+          <pre data-type="{{source.type}}"><code class="language-{{source.type}}">{{{source.content}}}</code></pre>
+        </div>
+      {{/if}}
+
+      {{#if typeDel}}
+        <div class="tab-pane{{#if_eq index compare=0}} active{{/if_eq}}" id="compare-examples-{{../../article.id}}-{{index}}">
+          <pre data-type="{{compare.type}}"><code class="language-{{source.type}}">{{{compare.content}}}</code></pre>
+        </div>
+      {{/if}}
+
+    {{/each_compare_title}}
+    </div>
+
+    {{subTemplate "article-compare-param-block" source=article.parameter compare=compare.parameter _hasType=_hasTypeInParameterFields section="parameter"}}
+    {{subTemplate "article-compare-param-block" source=article.success compare=compare.success _hasType=_hasTypeInSuccessFields section="success"}}
+    {{subTemplate "article-compare-param-block" source=article.error compare=compare.error _col1="Name" _hasType=_hasTypeInErrorFields section="error"}}
+
+    {{subTemplate "article-sample-request" article=article id=id}}
+
+  </article>
+</script>
+
+<script id="template-article-compare-permission" type="text/x-handlebars-template">
+  <p>
+  {{__ "Permission:"}}
+  {{#each_compare_list_field article.permission compare.permission field="name"}}
+    {{#if source}}
+      {{#if typeSame}}
+        {{source.name}}
+        {{#if source.title}}
+          <button type="button" class="btn btn-info btn-xs" data-title="{{source.title}}" data-content="{{nl2br source.description}}" data-html="true" data-toggle="popover" data-placement="right" data-trigger="hover">
+            <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
+          </button>
+          {{#unless _last}}, {{/unless}}
+        {{/if}}
+      {{/if}}
+
+      {{#if typeIns}}
+        <ins>{{source.name}}</ins>
+        {{#if source.title}}
+          <button type="button" class="btn btn-info btn-xs" data-title="{{source.title}}" data-content="{{nl2br source.description}}" data-html="true" data-toggle="popover" data-placement="right" data-trigger="hover">
+            <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
+          </button>
+          {{#unless _last}}, {{/unless}}
+        {{/if}}
+      {{/if}}
+
+      {{#if typeDel}}
+        <del>{{source.name}}</del>
+        {{#if source.title}}
+          <button type="button" class="btn btn-info btn-xs" data-title="{{source.title}}" data-content="{{nl2br source.description}}" data-html="true" data-toggle="popover" data-placement="right" data-trigger="hover">
+            <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
+          </button>
+          {{#unless _last}}, {{/unless}}
+        {{/if}}
+      {{/if}}
+    {{else}}
+      {{#if typeSame}}
+        {{compare.name}}
+        {{#if compare.title}}
+          <button type="button" class="btn btn-info btn-xs" data-title="{{compare.title}}" data-content="{{nl2br compare.description}}" data-html="true" data-toggle="popover" data-placement="right" data-trigger="hover">
+            <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
+          </button>
+          {{#unless _last}}, {{/unless}}
+        {{/if}}
+      {{/if}}
+
+      {{#if typeIns}}
+        <ins>{{compare.name}}</ins>
+        {{#if compare.title}}
+          <button type="button" class="btn btn-info btn-xs" data-title="{{compare.title}}" data-content="{{nl2br compare.description}}" data-html="true" data-toggle="popover" data-placement="right" data-trigger="hover">
+            <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
+          </button>
+          {{#unless _last}}, {{/unless}}
+        {{/if}}
+      {{/if}}
+
+      {{#if typeDel}}
+        <del>{{compare.name}}</del>
+        {{#if compare.title}}
+          <button type="button" class="btn btn-info btn-xs" data-title="{{compare.title}}" data-content="{{nl2br compare.description}}" data-html="true" data-toggle="popover" data-placement="right" data-trigger="hover">
+            <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
+          </button>
+          {{#unless _last}}, {{/unless}}
+        {{/if}}
+      {{/if}}
+    {{/if}}
+  {{/each_compare_list_field}}
+  </p>
+</script>
+
+<script id="template-article-compare-param-block" type="text/x-handlebars-template">
+  {{#if source}}
+    {{#each_compare_keys source.fields compare.fields}}
+      {{#if typeSame}}
+        <h2>{{__ source.key}}</h2>
+        <table>
+        <thead>
+          <tr>
+            <th style="width: 30%">{{#if ../_col1}}{{__ ../_col1}}{{else}}{{__ "Field"}}{{/if}}</th>
+            {{#if ../_hasType}}<th style="width: 10%">{{__ "Type"}}</th>{{/if}}
+            <th style="width: {{#if ../_hasType}}60%{{else}}70%{{/if}}">{{__ "Description"}}</th>
+          </tr>
+        </thead>
+        {{subTemplate "article-compare-param-block-body" source=source.value compare=compare.value _hasType=../_hasType}}
+        </table>
+      {{/if}}
+
+      {{#if typeIns}}
+        <h2><ins>{{__ source.key}}</ins></h2>
+        <table class="ins">
+        <thead>
+          <tr>
+            <th style="width: 30%">{{#if ../_col1}}{{__ ../_col1}}{{else}}{{__ "Field"}}{{/if}}</th>
+            {{#if ../_hasType}}<th style="width: 10%">{{__ "Type"}}</th>{{/if}}
+            <th style="width: {{#if ../_hasType}}60%{{else}}70%{{/if}}">{{__ "Description"}}</th>
+          </tr>
+        </thead>
+        {{subTemplate "article-compare-param-block-body" source=source.value compare=source.value _hasType=../_hasType}}
+        </table>
+      {{/if}}
+
+      {{#if typeDel}}
+        <h2><del>{{__ compare.key}}</del></h2>
+        <table class="del">
+        <thead>
+          <tr>
+            <th style="width: 30%">{{#if ../_col1}}{{__ ../_col1}}{{else}}{{__ "Field"}}{{/if}}</th>
+            {{#if ../_hasType}}<th style="width: 10%">{{__ "Type"}}</th>{{/if}}
+            <th style="width: {{#if ../_hasType}}60%{{else}}70%{{/if}}">{{__ "Description"}}</th>
+          </tr>
+        </thead>
+        {{subTemplate "article-compare-param-block-body" source=compare.value compare=compare.value _hasType=../_hasType}}
+        </table>
+      {{/if}}
+    {{/each_compare_keys}}
+
+    {{#if source.examples}}
+    <ul class="nav nav-tabs nav-tabs-examples">
+    {{#each_compare_title source.examples compare.examples}}
+      {{#if typeSame}}
+        <li{{#if_eq index compare=0}} class="active"{{/if_eq}}>
+          <a href="#{{../../section}}-compare-examples-{{../../article.id}}-{{index}}">{{{showDiff source.title compare.title}}}</a>
+        </li>
+      {{/if}}
+
+      {{#if typeIns}}
+        <li{{#if_eq index compare=0}} class="active"{{/if_eq}}>
+          <a href="#{{../../section}}-compare-examples-{{../../article.id}}-{{index}}"><ins>{{{source.title}}}</ins></a>
+        </li>
+      {{/if}}
+
+      {{#if typeDel}}
+        <li{{#if_eq index compare=0}} class="active"{{/if_eq}}>
+          <a href="#{{../../section}}-compare-examples-{{../../article.id}}-{{index}}"><del>{{{compare.title}}}</del></a>
+        </li>
+      {{/if}}
+    {{/each_compare_title}}
+    </ul>
+
+    <div class="tab-content">
+    {{#each_compare_title source.examples compare.examples}}
+
+      {{#if typeSame}}
+        <div class="tab-pane{{#if_eq index compare=0}} active{{/if_eq}}" id="{{../../section}}-compare-examples-{{../../article.id}}-{{index}}">
+          <pre data-type="{{source.type}}"><code class="language-{{source.type}}">{{{showDiff source.content compare.content}}}</code></pre>
+        </div>
+      {{/if}}
+
+      {{#if typeIns}}
+        <div class="tab-pane{{#if_eq index compare=0}} active{{/if_eq}}" id="{{../../section}}-compare-examples-{{../../article.id}}-{{index}}">
+          <pre data-type="{{source.type}}"><code class="language-{{source.type}}">{{{source.content}}}</code></pre>
+        </div>
+      {{/if}}
+
+      {{#if typeDel}}
+        <div class="tab-pane{{#if_eq index compare=0}} active{{/if_eq}}" id="{{../../section}}-compare-examples-{{../../article.id}}-{{index}}">
+          <pre data-type="{{compare.type}}"><code class="language-{{source.type}}">{{{compare.content}}}</code></pre>
+        </div>
+      {{/if}}
+    {{/each_compare_title}}
+    </div>
+    {{/if}}
+  {{/if}}
+</script>
+
+<script id="template-article-compare-param-block-body" type="text/x-handlebars-template">
+  <tbody>
+    {{#each_compare_field source compare}}
+      {{#if typeSame}}
+        <tr>
+          <td class="code">
+            {{{splitFill source.field "." "&nbsp;&nbsp;"}}}
+            {{#if source.optional}}
+              {{#if compare.optional}} <span class="label label-optional">{{__ "optional"}}</span>
+              {{else}} <span class="label label-optional label-ins">{{__ "optional"}}</span>
+              {{/if}}
+            {{else}}
+              {{#if compare.optional}} <span class="label label-optional label-del">{{__ "optional"}}</span>{{/if}}
+            {{/if}}
+          </td>
+
+        {{#if source.type}}
+          {{#if compare.type}}
+          <td>{{{showDiff source.type compare.type}}}</td>
+          {{else}}
+          <td>{{{source.type}}}</td>
+          {{/if}}
+        {{else}}
+          {{#if compare.type}}
+          <td>{{{compare.type}}}</td>
+          {{else}}
+            {{#if ../../../../_hasType}}<td></td>{{/if}}
+          {{/if}}
+        {{/if}}
+          <td>
+            {{{showDiff source.description compare.description "nl2br"}}}
+            {{#if source.defaultValue}}<p class="default-value">{{__ "Default value:"}} <code>{{{showDiff source.defaultValue compare.defaultValue}}}</code><p>{{/if}}
+          </td>
+        </tr>
+      {{/if}}
+
+      {{#if typeIns}}
+        <tr class="ins">
+          <td class="code">
+            {{{splitFill source.field "." "&nbsp;&nbsp;"}}}
+            {{#if source.optional}} <span class="label label-optional label-ins">{{__ "optional"}}</span>{{/if}}
+          </td>
+
+        {{#if source.type}}
+          <td>{{{source.type}}}</td>
+        {{else}}
+          {{{typRowTd}}}
+        {{/if}}
+
+          <td>
+            {{{nl2br source.description}}}
+            {{#if source.defaultValue}}<p class="default-value">{{__ "Default value:"}} <code>{{{source.defaultValue}}}</code><p>{{/if}}
+          </td>
+        </tr>
+      {{/if}}
+
+      {{#if typeDel}}
+        <tr class="del">
+          <td class="code">
+            {{{splitFill compare.field "." "&nbsp;&nbsp;"}}}
+            {{#if compare.optional}} <span class="label label-optional label-del">{{__ "optional"}}</span>{{/if}}
+          </td>
+
+        {{#if compare.type}}
+          <td>{{{compare.type}}}</td>
+        {{else}}
+          {{{typRowTd}}}
+        {{/if}}
+
+          <td>
+            {{{nl2br compare.description}}}
+            {{#if compare.defaultValue}}<p class="default-value">{{__ "Default value:"}} <code>{{{compare.defaultValue}}}</code><p>{{/if}}
+          </td>
+        </tr>
+      {{/if}}
+
+    {{/each_compare_field}}
+  </tbody>
+</script>
+
+<div class="container-fluid">
+  <div class="row">
+    <div id="sidenav" class="span2"></div>
+    <div id="content">
+      <div id="project"></div>
+      <div id="header"></div>
+      <div id="sections"></div>
+      <div id="footer"></div>
+      <div id="generator"></div>
+    </div>
+  </div>
+</div>
+
+<div id="loader">
+  <div class="spinner">
+    <div class="spinner-container container1">
+      <div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div>
+    </div>
+    <div class="spinner-container container2">
+      <div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div>
+    </div>
+    <div class="spinner-container container3">
+      <div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div>
+    </div>
+    <p>Loading...</p>
+  </div>
+</div>
+
+<script data-main="main.js" src="vendor/require.min.js"></script>
+</body>
+</html>
diff --git a/docs/locales/ca.js b/docs/locales/ca.js
new file mode 100644
index 00000000..65af5df2
--- /dev/null
+++ b/docs/locales/ca.js
@@ -0,0 +1,25 @@
+define({
+    ca: {
+        'Allowed values:'             : 'Valors permesos:',
+        'Compare all with predecessor': 'Comparar tot amb versió anterior',
+        'compare changes to:'         : 'comparar canvis amb:',
+        'compared to'                 : 'comparat amb',
+        'Default value:'              : 'Valor per defecte:',
+        'Description'                 : 'Descripció',
+        'Field'                       : 'Camp',
+        'General'                     : 'General',
+        'Generated with'              : 'Generat amb',
+        'Name'                        : 'Nom',
+        'No response values.'         : 'Sense valors en la resposta.',
+        'optional'                    : 'opcional',
+        'Parameter'                   : 'Paràmetre',
+        'Permission:'                 : 'Permisos:',
+        'Response'                    : 'Resposta',
+        'Send'                        : 'Enviar',
+        'Send a Sample Request'       : 'Enviar una petició d\'exemple',
+        'show up to version:'         : 'mostrar versió:',
+        'Size range:'                 : 'Tamany de rang:',
+        'Type'                        : 'Tipus',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/cs.js b/docs/locales/cs.js
new file mode 100644
index 00000000..b7796d8f
--- /dev/null
+++ b/docs/locales/cs.js
@@ -0,0 +1,25 @@
+define({
+    cs: {
+        'Allowed values:'             : 'Povolené hodnoty:',
+        'Compare all with predecessor': 'Porovnat vše s předchozími verzemi',
+        'compare changes to:'         : 'porovnat změny s:',
+        'compared to'                 : 'porovnat s',
+        'Default value:'              : 'Výchozí hodnota:',
+        'Description'                 : 'Popis',
+        'Field'                       : 'Pole',
+        'General'                     : 'Obecné',
+        'Generated with'              : 'Vygenerováno pomocí',
+        'Name'                        : 'Název',
+        'No response values.'         : 'Nebyly vráceny žádné hodnoty.',
+        'optional'                    : 'volitelné',
+        'Parameter'                   : 'Parametr',
+        'Permission:'                 : 'Oprávnění:',
+        'Response'                    : 'Odpověď',
+        'Send'                        : 'Odeslat',
+        'Send a Sample Request'       : 'Odeslat ukázkový požadavek',
+        'show up to version:'         : 'zobrazit po verzi:',
+        'Size range:'                 : 'Rozsah velikosti:',
+        'Type'                        : 'Typ',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/de.js b/docs/locales/de.js
new file mode 100644
index 00000000..f66420d0
--- /dev/null
+++ b/docs/locales/de.js
@@ -0,0 +1,25 @@
+define({
+    de: {
+        'Allowed values:'             : 'Erlaubte Werte:',
+        'Compare all with predecessor': 'Vergleiche alle mit ihren Vorgängern',
+        'compare changes to:'         : 'vergleiche Änderungen mit:',
+        'compared to'                 : 'verglichen mit',
+        'Default value:'              : 'Standardwert:',
+        'Description'                 : 'Beschreibung',
+        'Field'                       : 'Feld',
+        'General'                     : 'Allgemein',
+        'Generated with'              : 'Erstellt mit',
+        'Name'                        : 'Name',
+        'No response values.'         : 'Keine Rückgabewerte.',
+        'optional'                    : 'optional',
+        'Parameter'                   : 'Parameter',
+        'Permission:'                 : 'Berechtigung:',
+        'Response'                    : 'Antwort',
+        'Send'                        : 'Senden',
+        'Send a Sample Request'       : 'Eine Beispielanfrage senden',
+        'show up to version:'         : 'zeige bis zur Version:',
+        'Size range:'                 : 'Größenbereich:',
+        'Type'                        : 'Typ',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/es.js b/docs/locales/es.js
new file mode 100644
index 00000000..3d47e800
--- /dev/null
+++ b/docs/locales/es.js
@@ -0,0 +1,25 @@
+define({
+    es: {
+        'Allowed values:'             : 'Valores permitidos:',
+        'Compare all with predecessor': 'Comparar todo con versión anterior',
+        'compare changes to:'         : 'comparar cambios con:',
+        'compared to'                 : 'comparado con',
+        'Default value:'              : 'Valor por defecto:',
+        'Description'                 : 'Descripción',
+        'Field'                       : 'Campo',
+        'General'                     : 'General',
+        'Generated with'              : 'Generado con',
+        'Name'                        : 'Nombre',
+        'No response values.'         : 'Sin valores en la respuesta.',
+        'optional'                    : 'opcional',
+        'Parameter'                   : 'Parámetro',
+        'Permission:'                 : 'Permisos:',
+        'Response'                    : 'Respuesta',
+        'Send'                        : 'Enviar',
+        'Send a Sample Request'       : 'Enviar una petición de ejemplo',
+        'show up to version:'         : 'mostrar a versión:',
+        'Size range:'                 : 'Tamaño de rango:',
+        'Type'                        : 'Tipo',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/fr.js b/docs/locales/fr.js
new file mode 100644
index 00000000..100a6429
--- /dev/null
+++ b/docs/locales/fr.js
@@ -0,0 +1,25 @@
+define({
+    fr: {
+        'Allowed values:'             : 'Valeurs autorisées :',
+        'Compare all with predecessor': 'Tout comparer avec ...',
+        'compare changes to:'         : 'comparer les changements à :',
+        'compared to'                 : 'comparer à',
+        'Default value:'              : 'Valeur par défaut :',
+        'Description'                 : 'Description',
+        'Field'                       : 'Champ',
+        'General'                     : 'Général',
+        'Generated with'              : 'Généré avec',
+        'Name'                        : 'Nom',
+        'No response values.'         : 'Aucune valeur de réponse.',
+        'optional'                    : 'optionnel',
+        'Parameter'                   : 'Paramètre',
+        'Permission:'                 : 'Permission :',
+        'Response'                    : 'Réponse',
+        'Send'                        : 'Envoyer',
+        'Send a Sample Request'       : 'Envoyer une requête représentative',
+        'show up to version:'         : 'Montrer à partir de la version :',
+        'Size range:'                 : 'Ordre de grandeur :',
+        'Type'                        : 'Type',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/it.js b/docs/locales/it.js
new file mode 100644
index 00000000..8117108c
--- /dev/null
+++ b/docs/locales/it.js
@@ -0,0 +1,25 @@
+define({
+    it: {
+        'Allowed values:'             : 'Valori permessi:',
+        'Compare all with predecessor': 'Confronta tutto con versioni precedenti',
+        'compare changes to:'         : 'confronta modifiche con:',
+        'compared to'                 : 'confrontato con',
+        'Default value:'              : 'Valore predefinito:',
+        'Description'                 : 'Descrizione',
+        'Field'                       : 'Campo',
+        'General'                     : 'Generale',
+        'Generated with'              : 'Creato con',
+        'Name'                        : 'Nome',
+        'No response values.'         : 'Nessun valore di risposta.',
+        'optional'                    : 'opzionale',
+        'Parameter'                   : 'Parametro',
+        'Permission:'                 : 'Permessi:',
+        'Response'                    : 'Risposta',
+        'Send'                        : 'Invia',
+        'Send a Sample Request'       : 'Invia una richiesta di esempio',
+        'show up to version:'         : 'mostra alla versione:',
+        'Size range:'                 : 'Intervallo dimensione:',
+        'Type'                        : 'Tipo',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/locale.js b/docs/locales/locale.js
new file mode 100644
index 00000000..3530705e
--- /dev/null
+++ b/docs/locales/locale.js
@@ -0,0 +1,51 @@
+define([
+    './locales/ca.js',
+    './locales/cs.js',
+    './locales/de.js',
+    './locales/es.js',
+    './locales/fr.js',
+    './locales/it.js',
+    './locales/nl.js',
+    './locales/pl.js',
+    './locales/pt_br.js',
+    './locales/ro.js',
+    './locales/ru.js',
+    './locales/tr.js',
+    './locales/vi.js',
+    './locales/zh.js',
+    './locales/zh_cn.js'
+], function() {
+    var langId = (navigator.language || navigator.userLanguage).toLowerCase().replace('-', '_');
+    var language = langId.substr(0, 2);
+    var locales = {};
+
+    for (index in arguments) {
+        for (property in arguments[index])
+            locales[property] = arguments[index][property];
+    }
+    if ( ! locales['en'])
+        locales['en'] = {};
+
+    if ( ! locales[langId] && ! locales[language])
+        language = 'en';
+
+    var locale = (locales[langId] ? locales[langId] : locales[language]);
+
+    function __(text) {
+        var index = locale[text];
+        if (index === undefined)
+            return text;
+        return index;
+    };
+
+    function setLanguage(language) {
+        locale = locales[language];
+    }
+
+    return {
+        __         : __,
+        locales    : locales,
+        locale     : locale,
+        setLanguage: setLanguage
+    };
+});
diff --git a/docs/locales/nl.js b/docs/locales/nl.js
new file mode 100644
index 00000000..bddfeeb1
--- /dev/null
+++ b/docs/locales/nl.js
@@ -0,0 +1,25 @@
+define({
+    nl: {
+        'Allowed values:'             : 'Toegestane waarden:',
+        'Compare all with predecessor': 'Vergelijk alle met voorgaande versie',
+        'compare changes to:'         : 'vergelijk veranderingen met:',
+        'compared to'                 : 'vergelijk met',
+        'Default value:'              : 'Standaard waarde:',
+        'Description'                 : 'Omschrijving',
+        'Field'                       : 'Veld',
+        'General'                     : 'Algemeen',
+        'Generated with'              : 'Gegenereerd met',
+        'Name'                        : 'Naam',
+        'No response values.'         : 'Geen response waardes.',
+        'optional'                    : 'optioneel',
+        'Parameter'                   : 'Parameter',
+        'Permission:'                 : 'Permissie:',
+        'Response'                    : 'Antwoorden',
+        'Send'                        : 'Sturen',
+        'Send a Sample Request'       : 'Stuur een sample aanvragen',
+        'show up to version:'         : 'toon tot en met versie:',
+        'Size range:'                 : 'Maatbereik:',
+        'Type'                        : 'Type',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/pl.js b/docs/locales/pl.js
new file mode 100644
index 00000000..db645ee1
--- /dev/null
+++ b/docs/locales/pl.js
@@ -0,0 +1,25 @@
+define({
+    pl: {
+        'Allowed values:'             : 'Dozwolone wartości:',
+        'Compare all with predecessor': 'Porównaj z poprzednimi wersjami',
+        'compare changes to:'         : 'porównaj zmiany do:',
+        'compared to'                 : 'porównaj do:',
+        'Default value:'              : 'Wartość domyślna:',
+        'Description'                 : 'Opis',
+        'Field'                       : 'Pole',
+        'General'                     : 'Generalnie',
+        'Generated with'              : 'Wygenerowano z',
+        'Name'                        : 'Nazwa',
+        'No response values.'         : 'Brak odpowiedzi.',
+        'optional'                    : 'opcjonalny',
+        'Parameter'                   : 'Parametr',
+        'Permission:'                 : 'Uprawnienia:',
+        'Response'                    : 'Odpowiedź',
+        'Send'                        : 'Wyślij',
+        'Send a Sample Request'       : 'Wyślij przykładowe żądanie',
+        'show up to version:'         : 'pokaż do wersji:',
+        'Size range:'                 : 'Zakres rozmiaru:',
+        'Type'                        : 'Typ',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/pt_br.js b/docs/locales/pt_br.js
new file mode 100644
index 00000000..2bd78b0d
--- /dev/null
+++ b/docs/locales/pt_br.js
@@ -0,0 +1,25 @@
+define({
+    'pt_br': {
+        'Allowed values:'             : 'Valores permitidos:',
+        'Compare all with predecessor': 'Compare todos com antecessores',
+        'compare changes to:'         : 'comparar alterações com:',
+        'compared to'                 : 'comparado com',
+        'Default value:'              : 'Valor padrão:',
+        'Description'                 : 'Descrição',
+        'Field'                       : 'Campo',
+        'General'                     : 'Geral',
+        'Generated with'              : 'Gerado com',
+        'Name'                        : 'Nome',
+        'No response values.'         : 'Sem valores de resposta.',
+        'optional'                    : 'opcional',
+        'Parameter'                   : 'Parâmetro',
+        'Permission:'                 : 'Permissão:',
+        'Response'                    : 'Resposta',
+        'Send'                        : 'Enviar',
+        'Send a Sample Request'       : 'Enviar um Exemplo de Pedido',
+        'show up to version:'         : 'aparecer para a versão:',
+        'Size range:'                 : 'Faixa de tamanho:',
+        'Type'                        : 'Tipo',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/ro.js b/docs/locales/ro.js
new file mode 100644
index 00000000..8d4e4ed8
--- /dev/null
+++ b/docs/locales/ro.js
@@ -0,0 +1,25 @@
+define({
+    ro: {
+        'Allowed values:'             : 'Valori permise:',
+        'Compare all with predecessor': 'Compară toate cu versiunea precedentă',
+        'compare changes to:'         : 'compară cu versiunea:',
+        'compared to'                 : 'comparat cu',
+        'Default value:'              : 'Valoare implicită:',
+        'Description'                 : 'Descriere',
+        'Field'                       : 'Câmp',
+        'General'                     : 'General',
+        'Generated with'              : 'Generat cu',
+        'Name'                        : 'Nume',
+        'No response values.'         : 'Nici o valoare returnată.',
+        'optional'                    : 'opțional',
+        'Parameter'                   : 'Parametru',
+        'Permission:'                 : 'Permisiune:',
+        'Response'                    : 'Răspuns',
+        'Send'                        : 'Trimite',
+        'Send a Sample Request'       : 'Trimite o cerere de probă',
+        'show up to version:'         : 'arată până la versiunea:',
+        'Size range:'                 : 'Interval permis:',
+        'Type'                        : 'Tip',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/ru.js b/docs/locales/ru.js
new file mode 100644
index 00000000..c5f33821
--- /dev/null
+++ b/docs/locales/ru.js
@@ -0,0 +1,25 @@
+define({
+    ru: {
+        'Allowed values:'             : 'Допустимые значения:',
+        'Compare all with predecessor': 'Сравнить с предыдущей версией',
+        'compare changes to:'         : 'сравнить с:',
+        'compared to'                 : 'в сравнении с',
+        'Default value:'              : 'По умолчанию:',
+        'Description'                 : 'Описание',
+        'Field'                       : 'Название',
+        'General'                     : 'Общая информация',
+        'Generated with'              : 'Сгенерировано с помощью',
+        'Name'                        : 'Название',
+        'No response values.'         : 'Нет значений для ответа.',
+        'optional'                    : 'необязательный',
+        'Parameter'                   : 'Параметр',
+        'Permission:'                 : 'Разрешено:',
+        'Response'                    : 'Ответ',
+        'Send'                        : 'Отправить',
+        'Send a Sample Request'       : 'Отправить тестовый запрос',
+        'show up to version:'         : 'показать версию:',
+        'Size range:'                 : 'Ограничения:',
+        'Type'                        : 'Тип',
+        'url'                         : 'URL'
+    }
+});
diff --git a/docs/locales/tr.js b/docs/locales/tr.js
new file mode 100644
index 00000000..5c64e52d
--- /dev/null
+++ b/docs/locales/tr.js
@@ -0,0 +1,25 @@
+define({
+    tr: {
+        'Allowed values:'             : 'İzin verilen değerler:',
+        'Compare all with predecessor': 'Tümünü öncekiler ile karşılaştır',
+        'compare changes to:'         : 'değişiklikleri karşılaştır:',
+        'compared to'                 : 'karşılaştır',
+        'Default value:'              : 'Varsayılan değer:',
+        'Description'                 : 'Açıklama',
+        'Field'                       : 'Alan',
+        'General'                     : 'Genel',
+        'Generated with'              : 'Oluşturan',
+        'Name'                        : 'İsim',
+        'No response values.'         : 'Dönüş verisi yok.',
+        'optional'                    : 'opsiyonel',
+        'Parameter'                   : 'Parametre',
+        'Permission:'                 : 'İzin:',
+        'Response'                    : 'Dönüş',
+        'Send'                        : 'Gönder',
+        'Send a Sample Request'       : 'Örnek istek gönder',
+        'show up to version:'         : 'bu versiyona kadar göster:',
+        'Size range:'                 : 'Boyut aralığı:',
+        'Type'                        : 'Tip',
+        'url'                         : 'url'
+    }
+});
diff --git a/docs/locales/vi.js b/docs/locales/vi.js
new file mode 100644
index 00000000..7ce77050
--- /dev/null
+++ b/docs/locales/vi.js
@@ -0,0 +1,25 @@
+define({
+    vi: {
+        'Allowed values:'             : 'Giá trị chấp nhận:',
+        'Compare all with predecessor': 'So sánh với tất cả phiên bản trước',
+        'compare changes to:'         : 'so sánh sự thay đổi với:',
+        'compared to'                 : 'so sánh với',
+        'Default value:'              : 'Giá trị mặc định:',
+        'Description'                 : 'Chú thích',
+        'Field'                       : 'Trường dữ liệu',
+        'General'                     : 'Tổng quan',
+        'Generated with'              : 'Được tạo bởi',
+        'Name'                        : 'Tên',
+        'No response values.'         : 'Không có kết quả trả về.',
+        'optional'                    : 'Tùy chọn',
+        'Parameter'                   : 'Tham số',
+        'Permission:'                 : 'Quyền hạn:',
+        'Response'                    : 'Kết quả',
+        'Send'                        : 'Gửi',
+        'Send a Sample Request'       : 'Gửi một yêu cầu mẫu',
+        'show up to version:'         : 'hiển thị phiên bản:',
+        'Size range:'                 : 'Kích cỡ:',
+        'Type'                        : 'Kiểu',
+        'url'                         : 'liên kết'
+    }
+});
diff --git a/docs/locales/zh.js b/docs/locales/zh.js
new file mode 100644
index 00000000..ca5042fe
--- /dev/null
+++ b/docs/locales/zh.js
@@ -0,0 +1,25 @@
+define({
+    zh: {
+        'Allowed values​​:'             : '允許值:',
+        'Compare all with predecessor': '預先比較所有',
+        'compare changes to:'         : '比較變更:',
+        'compared to'                 : '對比',
+        'Default value:'              : '預設值:',
+        'Description'                 : '描述',
+        'Field'                       : '欄位',
+        'General'                     : '概括',
+        'Generated with'              : '生成工具',
+        'Name'                        : '名稱',
+        'No response values​​.'         : '無對應資料.',
+        'optional'                    : '選填',
+        'Parameter'                   : '參數',
+        'Permission:'                 : '權限:',
+        'Response'                    : '回應',
+        'Send'                        : '發送',
+        'Send a Sample Request'       : '發送試用需求',
+        'show up to version:'         : '顯示到版本:',
+        'Size range:'                 : '區間:',
+        'Type'                        : '類型',
+        'url'                         : '網址'
+    }
+});
diff --git a/docs/locales/zh_cn.js b/docs/locales/zh_cn.js
new file mode 100644
index 00000000..50913e25
--- /dev/null
+++ b/docs/locales/zh_cn.js
@@ -0,0 +1,27 @@
+define({
+    'zh_cn': {
+        'Allowed values:'             : '允许值:',
+        'Compare all with predecessor': '与所有较早的比较',
+        'compare changes to:'         : '将当前版本与指定版本比较:',
+        'compared to'                 : '相比于',
+        'Default value:'              : '默认值:',
+        'Description'                 : '描述',
+        'Field'                       : '字段',
+        'General'                     : '概要',
+        'Generated with'              : '基于',
+        'Name'                        : '名称',
+        'No response values.'         : '无返回值.',
+        'optional'                    : '可选',
+        'Parameter'                   : '参数',
+        'Parameters'                  : '参数',
+        'Headers'                     : '头部参数',
+        'Permission:'                 : '权限:',
+        'Response'                    : '返回',
+        'Send'                        : '发送',
+        'Send a Sample Request'       : '发送示例请求',
+        'show up to version:'         : '显示到指定版本:',
+        'Size range:'                 : '取值范围:',
+        'Type'                        : '类型',
+        'url'                         : '网址'
+    }
+});
diff --git a/docs/main.js b/docs/main.js
new file mode 100644
index 00000000..51a856a0
--- /dev/null
+++ b/docs/main.js
@@ -0,0 +1,910 @@
+require.config({
+    paths: {
+        bootstrap: './vendor/bootstrap.min',
+        diffMatchPatch: './vendor/diff_match_patch.min',
+        handlebars: './vendor/handlebars.min',
+        handlebarsExtended: './utils/handlebars_helper',
+        jquery: './vendor/jquery.min',
+        locales: './locales/locale',
+        lodash: './vendor/lodash.custom.min',
+        pathToRegexp: './vendor/path-to-regexp/index',
+        prismjs: './vendor/prism',
+        semver: './vendor/semver.min',
+        utilsSampleRequest: './utils/send_sample_request',
+        webfontloader: './vendor/webfontloader',
+        list: './vendor/list.min',
+        apiData: './api_data',
+        apiProject: './api_project',
+    },
+    shim: {
+        bootstrap: {
+            deps: ['jquery']
+        },
+        diffMatchPatch: {
+            exports: 'diff_match_patch'
+        },
+        handlebars: {
+            exports: 'Handlebars'
+        },
+        handlebarsExtended: {
+            deps: ['jquery', 'handlebars'],
+            exports: 'Handlebars'
+        },
+        prismjs: {
+            exports: 'Prism'
+        },
+    },
+    urlArgs: 'v=' + (new Date()).getTime(),
+    waitSeconds: 150
+});
+
+require([
+    'jquery',
+    'lodash',
+    'locales',
+    'handlebarsExtended',
+    'apiProject',
+    'apiData',
+    'prismjs',
+    'utilsSampleRequest',
+    'semver',
+    'webfontloader',
+    'bootstrap',
+    'pathToRegexp',
+    'list'
+], function($, _, locale, Handlebars, apiProject, apiData, Prism, sampleRequest, semver, WebFont) {
+
+    // Load google web fonts.
+    WebFont.load({
+        active: function() {
+            // Only init after fonts are loaded.
+            init($, _, locale, Handlebars, apiProject, apiData, Prism, sampleRequest, semver);
+        },
+        inactive: function() {
+            // Run init, even if loading fonts fails
+            init($, _, locale, Handlebars, apiProject, apiData, Prism, sampleRequest, semver);
+        },
+        google: {
+            families: ['Source Code Pro', 'Source Sans Pro:n4,n6,n7']
+        }
+    });
+});
+
+function init($, _, locale, Handlebars, apiProject, apiData, Prism, sampleRequest, semver) {
+    var api = apiData.api;
+
+    //
+    // Templates
+    //
+    var templateHeader         = Handlebars.compile( $('#template-header').html() );
+    var templateFooter         = Handlebars.compile( $('#template-footer').html() );
+    var templateArticle        = Handlebars.compile( $('#template-article').html() );
+    var templateCompareArticle = Handlebars.compile( $('#template-compare-article').html() );
+    var templateGenerator      = Handlebars.compile( $('#template-generator').html() );
+    var templateProject        = Handlebars.compile( $('#template-project').html() );
+    var templateSections       = Handlebars.compile( $('#template-sections').html() );
+    var templateSidenav        = Handlebars.compile( $('#template-sidenav').html() );
+
+    //
+    // apiProject defaults
+    //
+    if ( ! apiProject.template)
+        apiProject.template = {};
+
+    if (apiProject.template.withCompare == null)
+        apiProject.template.withCompare = true;
+
+    if (apiProject.template.withGenerator == null)
+        apiProject.template.withGenerator = true;
+
+    if (apiProject.template.forceLanguage)
+        locale.setLanguage(apiProject.template.forceLanguage);
+
+    if (apiProject.template.aloneDisplay == null)
+        apiProject.template.aloneDisplay = false;
+
+    // Setup jQuery Ajax
+    $.ajaxSetup(apiProject.template.jQueryAjaxSetup);
+
+    //
+    // Data transform
+    //
+    // grouped by group
+    var apiByGroup = _.groupBy(api, function(entry) {
+        return entry.group;
+    });
+
+    // grouped by group and name
+    var apiByGroupAndName = {};
+    $.each(apiByGroup, function(index, entries) {
+        apiByGroupAndName[index] = _.groupBy(entries, function(entry) {
+            return entry.name;
+        });
+    });
+
+    //
+    // sort api within a group by title ASC and custom order
+    //
+    var newList = [];
+    var umlauts = { 'ä': 'ae', 'ü': 'ue', 'ö': 'oe', 'ß': 'ss' }; // TODO: remove in version 1.0
+    $.each (apiByGroupAndName, function(index, groupEntries) {
+        // get titles from the first entry of group[].name[] (name has versioning)
+        var titles = [];
+        $.each (groupEntries, function(titleName, entries) {
+            var title = entries[0].title;
+            if(title !== undefined) {
+                title.toLowerCase().replace(/[äöüß]/g, function($0) { return umlauts[$0]; });
+                titles.push(title + '#~#' + titleName); // '#~#' keep reference to titleName after sorting
+            }
+        });
+        // sort by name ASC
+        titles.sort();
+
+        // custom order
+        if (apiProject.order)
+            titles = sortByOrder(titles, apiProject.order, '#~#');
+
+        // add single elements to the new list
+        titles.forEach(function(name) {
+            var values = name.split('#~#');
+            var key = values[1];
+            groupEntries[key].forEach(function(entry) {
+                newList.push(entry);
+            });
+        });
+    });
+    // api overwrite with ordered list
+    api = newList;
+
+    //
+    // Group- and Versionlists
+    //
+    var apiGroups = {};
+    var apiGroupTitles = {};
+    var apiVersions = {};
+    apiVersions[apiProject.version] = 1;
+
+    $.each(api, function(index, entry) {
+        apiGroups[entry.group] = 1;
+        apiGroupTitles[entry.group] = entry.groupTitle || entry.group;
+        apiVersions[entry.version] = 1;
+    });
+
+    // sort groups
+    apiGroups = Object.keys(apiGroups);
+    apiGroups.sort();
+
+    // custom order
+    if (apiProject.order)
+        apiGroups = sortByOrder(apiGroups, apiProject.order);
+
+    // sort versions DESC
+    apiVersions = Object.keys(apiVersions);
+    apiVersions.sort(semver.compare);
+    apiVersions.reverse();
+
+    //
+    // create Navigationlist
+    //
+    var nav = [];
+    apiGroups.forEach(function(group) {
+        // Mainmenu entry
+        nav.push({
+            group: group,
+            isHeader: true,
+            title: apiGroupTitles[group]
+        });
+
+        // Submenu
+        var oldName = '';
+        api.forEach(function(entry) {
+            if (entry.group === group) {
+                if (oldName !== entry.name) {
+                    nav.push({
+                        title: entry.title,
+                        group: group,
+                        name: entry.name,
+                        type: entry.type,
+                        version: entry.version,
+                        url: entry.url
+                    });
+                } else {
+                    nav.push({
+                        title: entry.title,
+                        group: group,
+                        hidden: true,
+                        name: entry.name,
+                        type: entry.type,
+                        version: entry.version,
+                        url: entry.url
+                    });
+                }
+                oldName = entry.name;
+            }
+        });
+    });
+
+    /**
+     * Add navigation items by analyzing the HTML content and searching for h1 and h2 tags
+     * @param nav Object the navigation array
+     * @param content string the compiled HTML content
+     * @param index where to insert items
+     * @return boolean true if any good-looking (i.e. with a group identifier) <h1> tag was found
+     */
+    function add_nav(nav, content, index) {
+        var found_level1 = false;
+        if ( ! content) {
+          return found_level1;
+        }
+        var topics = content.match(/<h(1|2).*?>(.+?)<\/h(1|2)>/gi);
+        if ( topics ) {
+          topics.forEach(function(entry) {
+              var level = entry.substring(2,3);
+              var title = entry.replace(/<.+?>/g, '');    // Remove all HTML tags for the title
+              var entry_tags = entry.match(/id="api-([^\-]+)(?:-(.+))?"/);    // Find the group and name in the id property
+              var group = (entry_tags ? entry_tags[1] : null);
+              var name = (entry_tags ? entry_tags[2] : null);
+              if (level==1 && title && group)  {
+                  nav.splice(index, 0, {
+                      group: group,
+                      isHeader: true,
+                      title: title,
+                      isFixed: true
+                  });
+                  index++;
+                  found_level1 = true;
+              }
+              if (level==2 && title && group && name)    {
+                  nav.splice(index, 0, {
+                      group: group,
+                      name: name,
+                      isHeader: false,
+                      title: title,
+                      isFixed: false,
+                      version: '1.0'
+                  });
+                  index++;
+              }
+          });
+        }
+        return found_level1;
+    }
+
+    // Mainmenu Header entry
+    if (apiProject.header) {
+        var found_level1 = add_nav(nav, apiProject.header.content, 0); // Add level 1 and 2 titles
+        if (!found_level1) {    // If no Level 1 tags were found, make a title
+            nav.unshift({
+                group: '_',
+                isHeader: true,
+                title: (apiProject.header.title == null) ? locale.__('General') : apiProject.header.title,
+                isFixed: true
+            });
+        }
+    }
+
+    // Mainmenu Footer entry
+    if (apiProject.footer) {
+        var last_nav_index = nav.length;
+        var found_level1 = add_nav(nav, apiProject.footer.content, nav.length); // Add level 1 and 2 titles
+        if (!found_level1 && apiProject.footer.title != null) {    // If no Level 1 tags were found, make a title
+            nav.splice(last_nav_index, 0, {
+                group: '_footer',
+                isHeader: true,
+                title: apiProject.footer.title,
+                isFixed: true
+            });
+        }
+    }
+
+    // render pagetitle
+    var title = apiProject.title ? apiProject.title : 'apiDoc: ' + apiProject.name + ' - ' + apiProject.version;
+    $(document).attr('title', title);
+
+    // remove loader
+    $('#loader').remove();
+
+    // render sidenav
+    var fields = {
+        nav: nav
+    };
+    $('#sidenav').append( templateSidenav(fields) );
+
+    // render Generator
+    $('#generator').append( templateGenerator(apiProject) );
+
+    // render Project
+    _.extend(apiProject, { versions: apiVersions});
+    $('#project').append( templateProject(apiProject) );
+
+    // render apiDoc, header/footer documentation
+    if (apiProject.header)
+        $('#header').append( templateHeader(apiProject.header) );
+
+    if (apiProject.footer)
+        $('#footer').append( templateFooter(apiProject.footer) );
+
+    //
+    // Render Sections and Articles
+    //
+    var articleVersions = {};
+    var content = '';
+    apiGroups.forEach(function(groupEntry) {
+        var articles = [];
+        var oldName = '';
+        var fields = {};
+        var title = groupEntry;
+        var description = '';
+        articleVersions[groupEntry] = {};
+
+        // render all articles of a group
+        api.forEach(function(entry) {
+            if(groupEntry === entry.group) {
+                if (oldName !== entry.name) {
+                    // determine versions
+                    api.forEach(function(versionEntry) {
+                        if (groupEntry === versionEntry.group && entry.name === versionEntry.name) {
+                            if ( ! articleVersions[entry.group].hasOwnProperty(entry.name) ) {
+                                articleVersions[entry.group][entry.name] = [];
+                            }
+                            articleVersions[entry.group][entry.name].push(versionEntry.version);
+                        }
+                    });
+                    fields = {
+                        article: entry,
+                        versions: articleVersions[entry.group][entry.name]
+                    };
+                } else {
+                    fields = {
+                        article: entry,
+                        hidden: true,
+                        versions: articleVersions[entry.group][entry.name]
+                    };
+                }
+
+                // add prefix URL for endpoint unless it's already absolute
+                if (apiProject.url) {
+                    if (fields.article.url.substr(0, 4).toLowerCase() !== 'http') {
+                        fields.article.url = apiProject.url + fields.article.url;
+                    }
+                }
+
+                addArticleSettings(fields, entry);
+
+                if (entry.groupTitle)
+                    title = entry.groupTitle;
+
+                // TODO: make groupDescription compareable with older versions (not important for the moment)
+                if (entry.groupDescription)
+                    description = entry.groupDescription;
+
+                articles.push({
+                    article: templateArticle(fields),
+                    group: entry.group,
+                    name: entry.name,
+                    aloneDisplay: apiProject.template.aloneDisplay
+                });
+                oldName = entry.name;
+            }
+        });
+
+        // render Section with Articles
+        var fields = {
+            group: groupEntry,
+            title: title,
+            description: description,
+            articles: articles,
+            aloneDisplay: apiProject.template.aloneDisplay
+        };
+        content += templateSections(fields);
+    });
+    $('#sections').append( content );
+
+    // Bootstrap Scrollspy
+    $(this).scrollspy({ target: '#scrollingNav' });
+
+    // Content-Scroll on Navigation click.
+    $('.sidenav').find('a').on('click', function(e) {
+        e.preventDefault();
+        var id = $(this).attr('href');
+        if ($(id).length > 0)
+            $('html,body').animate({ scrollTop: parseInt($(id).offset().top) }, 400);
+        window.location.hash = $(this).attr('href');
+    });
+
+    /**
+     * Check if Parameter (sub) List has a type Field.
+     * Example: @apiSuccess          varname1 No type.
+     *          @apiSuccess {String} varname2 With type.
+     *
+     * @param {Object} fields
+     */
+    function _hasTypeInFields(fields) {
+        var result = false;
+        $.each(fields, function(name) {
+            result = result || _.some(fields[name], function(item) { return item.type; });
+        });
+        return result;
+    }
+
+    /**
+     * On Template changes, recall plugins.
+     */
+    function initDynamic() {
+        // Bootstrap popover
+        $('button[data-toggle="popover"]').popover().click(function(e) {
+            e.preventDefault();
+        });
+
+        var version = $('#version strong').html();
+        $('#sidenav li').removeClass('is-new');
+        if (apiProject.template.withCompare) {
+            $('#sidenav li[data-version=\'' + version + '\']').each(function(){
+                var group = $(this).data('group');
+                var name = $(this).data('name');
+                var length = $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\']').length;
+                var index  = $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\']').index($(this));
+                if (length === 1 || index === (length - 1))
+                    $(this).addClass('is-new');
+            });
+        }
+
+        // tabs
+        $('.nav-tabs-examples a').click(function (e) {
+            e.preventDefault();
+            $(this).tab('show');
+        });
+        $('.nav-tabs-examples').find('a:first').tab('show');
+
+        // sample header-content-type switch
+        $('.sample-header-content-type-switch').change(function () {
+            var paramName = '.' + $(this).attr('name') + '-fields';
+            var bodyName = '.' + $(this).attr('name') + '-body';
+            var selectName = 'select[name=' + $(this).attr('name') + ']';
+            if ($(this).val() == 'body-json') {
+                $(selectName).val('undefined');
+                $(this).val('body-json');
+                $(paramName).removeClass('hide');
+                $(this).parent().nextAll(paramName).first().addClass('hide');
+                $(bodyName).addClass('hide');
+                $(this).parent().nextAll(bodyName).first().removeClass('hide');
+            } else if ($(this).val() == "body-form-data") {
+                $(selectName).val('undefined');
+                $(this).val('body-form-data');
+                $(bodyName).addClass('hide');
+                $(paramName).removeClass('hide');
+            } else {
+                $(this).parent().nextAll(paramName).first().removeClass('hide')
+                $(this).parent().nextAll(bodyName).first().addClass('hide');
+            }
+            $(this).prev('.sample-request-switch').prop('checked', true);
+        });
+
+        // sample request switch
+        $('.sample-request-switch').click(function (e) {
+            var paramName = '.' + $(this).attr('name') + '-fields';
+            var bodyName = '.' + $(this).attr('name') + '-body';
+            var select = $(this).next('.' + $(this).attr('name') + '-select').val();
+            if($(this).prop("checked")){
+                if (select == 'body-json'){
+                    $(this).parent().nextAll(bodyName).first().removeClass('hide');
+                }else {
+                    $(this).parent().nextAll(paramName).first().removeClass('hide');
+                }
+            }else {
+                if (select == 'body-json'){
+                    $(this).parent().nextAll(bodyName).first().addClass('hide');
+                }else {
+                    $(this).parent().nextAll(paramName).first().addClass('hide');
+                }
+            }
+        });
+
+        if (apiProject.template.aloneDisplay){
+            //show group
+            $('.show-group').click(function () {
+                var apiGroup = '.' + $(this).attr('data-group') + '-group';
+                var apiGroupArticle = '.' + $(this).attr('data-group') + '-article';
+                $(".show-api-group").addClass('hide');
+                $(apiGroup).removeClass('hide');
+                $(".show-api-article").addClass('hide');
+                $(apiGroupArticle).removeClass('hide');
+            });
+
+            //show api
+            $('.show-api').click(function () {
+                var apiName = '.' + $(this).attr('data-name') + '-article';
+                var apiGroup = '.' + $(this).attr('data-group') + '-group';
+                $(".show-api-group").addClass('hide');
+                $(apiGroup).removeClass('hide');
+                $(".show-api-article").addClass('hide');
+                $(apiName).removeClass('hide');
+            });
+        }
+
+        // call scrollspy refresh method
+        $(window).scrollspy('refresh');
+
+        // init modules
+        sampleRequest.initDynamic();
+        Prism.highlightAll()
+    }
+    initDynamic();
+
+    if (apiProject.template.aloneDisplay) {
+        var hashVal = window.location.hash;
+        if (hashVal != null && hashVal.length !== 0) {
+            $("." + hashVal.slice(1) + "-init").click();
+        }
+    }
+
+    //
+    // HTML-Template specific jQuery-Functions
+    //
+    // Change Main Version
+    function setMainVersion(selectedVersion) {
+        if (typeof(selectedVersion) === 'undefined') {
+            selectedVersion = $('#version strong').html();
+        }
+        else {
+            $('#version strong').html(selectedVersion);
+        }
+
+        // hide all
+        $('article').addClass('hide');
+        $('#sidenav li:not(.nav-fixed)').addClass('hide');
+
+        // show 1st equal or lower Version of each entry
+        $('article[data-version]').each(function(index) {
+            var group = $(this).data('group');
+            var name = $(this).data('name');
+            var version = $(this).data('version');
+
+            if (semver.lte(version, selectedVersion)) {
+                if ($('article[data-group=\'' + group + '\'][data-name=\'' + name + '\']:visible').length === 0) {
+                    // enable Article
+                    $('article[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + version + '\']').removeClass('hide');
+                    // enable Navigation
+                    $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + version + '\']').removeClass('hide');
+                    $('#sidenav li.nav-header[data-group=\'' + group + '\']').removeClass('hide');
+                }
+            }
+        });
+
+        // show 1st equal or lower Version of each entry
+        $('article[data-version]').each(function(index) {
+            var group = $(this).data('group');
+            $('section#api-' + group).removeClass('hide');
+            if ($('section#api-' + group + ' article:visible').length === 0) {
+                $('section#api-' + group).addClass('hide');
+            } else {
+                $('section#api-' + group).removeClass('hide');
+            }
+        });
+
+        initDynamic();
+        return;
+    }
+    setMainVersion();
+
+    $('#versions li.version a').on('click', function(e) {
+        e.preventDefault();
+
+        setMainVersion($(this).html());
+    });
+
+    // compare all article with their predecessor
+    $('#compareAllWithPredecessor').on('click', changeAllVersionCompareTo);
+
+    // change version of an article
+    $('article .versions li.version a').on('click', changeVersionCompareTo);
+
+    // compare url-parameter
+    $.urlParam = function(name) {
+        var results = new RegExp('[\\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
+        return (results && results[1]) ? results[1] : null;
+    };
+
+    if ($.urlParam('compare')) {
+        // URL Paramter ?compare=1 is set
+        $('#compareAllWithPredecessor').trigger('click');
+    }
+
+    // Quick jump on page load to hash position.
+    // Should happen after setting the main version
+    // and after triggering the click on the compare button,
+    // as these actions modify the content
+    // and would make it jump to the wrong position or not jump at all.
+    if (window.location.hash) {
+        var id = decodeURI(window.location.hash);
+        if ($(id).length > 0)
+            $('html,body').animate({ scrollTop: parseInt($(id).offset().top) }, 0);
+    }
+
+    /**
+     * Initialize search
+     */
+    var options = {
+      valueNames: [ 'nav-list-item','nav-list-url-item']
+    };
+    var endpointsList = new List('scrollingNav', options);
+
+    /**
+     * Set initial focus to search input
+     */
+    $('#scrollingNav .sidenav-search input.search').focus();
+
+    /**
+     * Detect ESC key to reset search
+     */
+    $(document).keyup(function(e) {
+      if (e.keyCode === 27) $('span.search-reset').click();
+    });
+
+    /**
+     * Search reset
+     */
+    $('span.search-reset').on('click', function() {
+      $('#scrollingNav .sidenav-search input.search')
+        .val("")
+        .focus()
+      ;
+      endpointsList.search();
+    });
+
+    /**
+     * Change version of an article to compare it to an other version.
+     */
+    function changeVersionCompareTo(e) {
+        e.preventDefault();
+
+        var $root = $(this).parents('article');
+        var selectedVersion = $(this).html();
+        var $button = $root.find('.version');
+        var currentVersion = $button.find('strong').html();
+        $button.find('strong').html(selectedVersion);
+
+        var group = $root.data('group');
+        var name = $root.data('name');
+        var version = $root.data('version');
+
+        var compareVersion = $root.data('compare-version');
+
+        if (compareVersion === selectedVersion)
+            return;
+
+        if ( ! compareVersion && version == selectedVersion)
+            return;
+
+        if (compareVersion && articleVersions[group][name][0] === selectedVersion || version === selectedVersion) {
+            // the version of the entry is set to the highest version (reset)
+            resetArticle(group, name, version);
+        } else {
+            var $compareToArticle = $('article[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + selectedVersion + '\']');
+
+            var sourceEntry = {};
+            var compareEntry = {};
+            $.each(apiByGroupAndName[group][name], function(index, entry) {
+                if (entry.version === version)
+                    sourceEntry = entry;
+                if (entry.version === selectedVersion)
+                    compareEntry = entry;
+            });
+
+            var fields = {
+                article: sourceEntry,
+                compare: compareEntry,
+                versions: articleVersions[group][name]
+            };
+
+            // add unique id
+            // TODO: replace all group-name-version in template with id.
+            fields.article.id = fields.article.group + '-' + fields.article.name + '-' + fields.article.version;
+            fields.article.id = fields.article.id.replace(/\./g, '_');
+
+            fields.compare.id = fields.compare.group + '-' + fields.compare.name + '-' + fields.compare.version;
+            fields.compare.id = fields.compare.id.replace(/\./g, '_');
+
+            var entry = sourceEntry;
+            if (entry.parameter && entry.parameter.fields)
+                fields._hasTypeInParameterFields = _hasTypeInFields(entry.parameter.fields);
+
+            if (entry.error && entry.error.fields)
+                fields._hasTypeInErrorFields = _hasTypeInFields(entry.error.fields);
+
+            if (entry.success && entry.success.fields)
+                fields._hasTypeInSuccessFields = _hasTypeInFields(entry.success.fields);
+
+            if (entry.info && entry.info.fields)
+                fields._hasTypeInInfoFields = _hasTypeInFields(entry.info.fields);
+
+            var entry = compareEntry;
+            if (fields._hasTypeInParameterFields !== true && entry.parameter && entry.parameter.fields)
+                fields._hasTypeInParameterFields = _hasTypeInFields(entry.parameter.fields);
+
+            if (fields._hasTypeInErrorFields !== true && entry.error && entry.error.fields)
+                fields._hasTypeInErrorFields = _hasTypeInFields(entry.error.fields);
+
+            if (fields._hasTypeInSuccessFields !== true && entry.success && entry.success.fields)
+                fields._hasTypeInSuccessFields = _hasTypeInFields(entry.success.fields);
+
+            if (fields._hasTypeInInfoFields !== true && entry.info && entry.info.fields)
+                fields._hasTypeInInfoFields = _hasTypeInFields(entry.info.fields);
+
+            var content = templateCompareArticle(fields);
+            $root.after(content);
+            var $content = $root.next();
+
+            // Event on.click re-assign
+            $content.find('.versions li.version a').on('click', changeVersionCompareTo);
+
+            // select navigation
+            $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + currentVersion + '\']').addClass('has-modifications');
+
+            $root.remove();
+            // TODO: on change main version or select the highest version re-render
+        }
+
+        initDynamic();
+    }
+
+    /**
+     * Compare all currently selected Versions with their predecessor.
+     */
+    function changeAllVersionCompareTo(e) {
+        e.preventDefault();
+        $('article:visible .versions').each(function(){
+            var $root = $(this).parents('article');
+            var currentVersion = $root.data('version');
+            var $foundElement = null;
+            $(this).find('li.version a').each(function() {
+                var selectVersion = $(this).html();
+                if (selectVersion < currentVersion && ! $foundElement)
+                    $foundElement = $(this);
+            });
+
+            if($foundElement)
+                $foundElement.trigger('click');
+        });
+        initDynamic();
+    }
+
+    /**
+     * Sort the fields.
+     */
+    function sortFields(fields_object) {
+        $.each(fields_object, function (key, fields) {
+
+            var reversed = fields.slice().reverse()
+
+            var max_dot_count = Math.max.apply(null, reversed.map(function (item) {
+                return item.field.split(".").length - 1;
+            }))
+
+            for (var dot_count = 1; dot_count <= max_dot_count; dot_count++) {
+                reversed.forEach(function (item, index) {
+                    var parts = item.field.split(".");
+                    if (parts.length - 1 == dot_count) {
+                        var fields_names = fields.map(function (item) { return item.field; });
+                        if (parts.slice(1).length  >= 1) {
+                            var prefix = parts.slice(0, parts.length - 1).join(".");
+                            var prefix_index = fields_names.indexOf(prefix);
+                            if (prefix_index > -1) {
+                                fields.splice(fields_names.indexOf(item.field), 1);
+                                fields.splice(prefix_index + 1, 0, item);
+                            }
+                        }
+                    }
+                });
+            }
+        });
+    }
+
+    /**
+     * Add article settings.
+     */
+    function addArticleSettings(fields, entry) {
+        // add unique id
+        // TODO: replace all group-name-version in template with id.
+        fields.id = fields.article.group + '-' + fields.article.name + '-' + fields.article.version;
+        fields.id = fields.id.replace(/\./g, '_');
+
+        if (entry.header && entry.header.fields) {
+            sortFields(entry.header.fields);
+            fields._hasTypeInHeaderFields = _hasTypeInFields(entry.header.fields);
+        }
+
+        if (entry.parameter && entry.parameter.fields) {
+            sortFields(entry.parameter.fields);
+            fields._hasTypeInParameterFields = _hasTypeInFields(entry.parameter.fields);
+        }
+
+        if (entry.error && entry.error.fields) {
+            sortFields(entry.error.fields);
+            fields._hasTypeInErrorFields = _hasTypeInFields(entry.error.fields);
+        }
+
+        if (entry.success && entry.success.fields) {
+            sortFields(entry.success.fields);
+            fields._hasTypeInSuccessFields = _hasTypeInFields(entry.success.fields);
+        }
+
+        if (entry.info && entry.info.fields) {
+            sortFields(entry.info.fields);
+            fields._hasTypeInInfoFields = _hasTypeInFields(entry.info.fields);
+        }
+
+        // add template settings
+        fields.template = apiProject.template;
+    }
+
+    /**
+     * Render Article.
+     */
+    function renderArticle(group, name, version) {
+        var entry = {};
+        $.each(apiByGroupAndName[group][name], function(index, currentEntry) {
+            if (currentEntry.version === version)
+                entry = currentEntry;
+        });
+        var fields = {
+            article: entry,
+            versions: articleVersions[group][name]
+        };
+
+        addArticleSettings(fields, entry);
+
+        return templateArticle(fields);
+    }
+
+    /**
+     * Render original Article and remove the current visible Article.
+     */
+    function resetArticle(group, name, version) {
+        var $root = $('article[data-group=\'' + group + '\'][data-name=\'' + name + '\']:visible');
+        var content = renderArticle(group, name, version);
+
+        $root.after(content);
+        var $content = $root.next();
+
+        // Event on.click needs to be reassigned (should actually work with on ... automatically)
+        $content.find('.versions li.version a').on('click', changeVersionCompareTo);
+
+        $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + version + '\']').removeClass('has-modifications');
+
+        $root.remove();
+        return;
+    }
+
+    /**
+     * Return ordered entries by custom order and append not defined entries to the end.
+     * @param  {String[]} elements
+     * @param  {String[]} order
+     * @param  {String}   splitBy
+     * @return {String[]} Custom ordered list.
+     */
+    function sortByOrder(elements, order, splitBy) {
+        var results = [];
+        order.forEach (function(name) {
+            if (splitBy)
+                elements.forEach (function(element) {
+                    var parts = element.split(splitBy);
+                    var key = parts[0]; // reference keep for sorting
+                    if (key == name || parts[1] == name)
+                        results.push(element);
+                });
+            else
+                elements.forEach (function(key) {
+                    if (key == name)
+                        results.push(name);
+                });
+        });
+        // Append all other entries that ar not defined in order
+        elements.forEach(function(element) {
+            if (results.indexOf(element) === -1)
+                results.push(element);
+        });
+        return results;
+    }
+    Prism.highlightAll()
+}
diff --git a/docs/utils/handlebars_helper.js b/docs/utils/handlebars_helper.js
new file mode 100644
index 00000000..14a57fc7
--- /dev/null
+++ b/docs/utils/handlebars_helper.js
@@ -0,0 +1,376 @@
+define([
+    'locales',
+    'handlebars',
+    'diffMatchPatch'
+], function(locale, Handlebars, DiffMatchPatch) {
+
+    /**
+     * Return a text as markdown.
+     * Currently only a little helper to replace apidoc-inline Links (#Group:Name).
+     * Should be replaced with a full markdown lib.
+     * @param string text
+     */
+    Handlebars.registerHelper('markdown', function(text) {
+        if ( ! text ) {
+          return text;
+        }
+        text = text.replace(/((\[(.*?)\])?\(#)((.+?):(.+?))(\))/mg, function(match, p1, p2, p3, p4, p5, p6) {
+          var link = p3 || p5 + '/' + p6;
+          return '<a href="#api-' + p5 + '-' + p6 + '">' + link + '</a>';
+        });
+        return text;
+    });
+
+    /**
+     * set paramater type.
+     */
+    Handlebars.registerHelper("setInputType", function(text) {
+          if (text === "File") {
+            return "file";
+          }
+          return "text";
+    });
+
+    /**
+     * start/stop timer for simple performance check.
+     */
+    var timer;
+    Handlebars.registerHelper('startTimer', function(text) {
+        timer = new Date();
+        return '';
+    });
+
+    Handlebars.registerHelper('stopTimer', function(text) {
+        console.log(new Date() - timer);
+        return '';
+    });
+
+    /**
+     * Return localized Text.
+     * @param string text
+     */
+    Handlebars.registerHelper('__', function(text) {
+        return locale.__(text);
+    });
+
+    /**
+     * Console log.
+     * @param mixed obj
+     */
+    Handlebars.registerHelper('cl', function(obj) {
+        console.log(obj);
+        return '';
+    });
+
+    /**
+     * Replace underscore with space.
+     * @param string text
+     */
+    Handlebars.registerHelper('underscoreToSpace', function(text) {
+        return text.replace(/(_+)/g, ' ');
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('assign', function(name) {
+        if(arguments.length > 0) {
+            var type = typeof(arguments[1]);
+            var arg = null;
+            if(type === 'string' || type === 'number' || type === 'boolean') arg = arguments[1];
+            Handlebars.registerHelper(name, function() { return arg; });
+        }
+        return '';
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('nl2br', function(text) {
+        return _handlebarsNewlineToBreak(text);
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('if_eq', function(context, options) {
+        var compare = context;
+        // Get length if context is an object
+        if (context instanceof Object && ! (options.hash.compare instanceof Object))
+             compare = Object.keys(context).length;
+
+        if (compare === options.hash.compare)
+            return options.fn(this);
+
+        return options.inverse(this);
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('if_gt', function(context, options) {
+        var compare = context;
+        // Get length if context is an object
+        if (context instanceof Object && ! (options.hash.compare instanceof Object))
+             compare = Object.keys(context).length;
+
+        if(compare > options.hash.compare)
+            return options.fn(this);
+
+        return options.inverse(this);
+    });
+
+    /**
+     *
+     */
+    var templateCache = {};
+    Handlebars.registerHelper('subTemplate', function(name, sourceContext) {
+        if ( ! templateCache[name])
+            templateCache[name] = Handlebars.compile($('#template-' + name).html());
+
+        var template = templateCache[name];
+        var templateContext = $.extend({}, this, sourceContext.hash);
+        return new Handlebars.SafeString( template(templateContext) );
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('toLowerCase', function(value) {
+        return (value && typeof value === 'string') ? value.toLowerCase() : '';
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('splitFill', function(value, splitChar, fillChar) {
+        var splits = value.split(splitChar);
+        return new Array(splits.length).join(fillChar) + splits[splits.length - 1];
+    });
+
+    /**
+     * Convert Newline to HTML-Break (nl2br).
+     *
+     * @param {String} text
+     * @returns {String}
+     */
+    function _handlebarsNewlineToBreak(text) {
+        return ('' + text).replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '<br>' + '$2');
+    }
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('each_compare_list_field', function(source, compare, options) {
+        var fieldName = options.hash.field;
+        var newSource = [];
+        if (source) {
+            source.forEach(function(entry) {
+                var values = entry;
+                values['key'] = entry[fieldName];
+                newSource.push(values);
+            });
+        }
+
+        var newCompare = [];
+        if (compare) {
+            compare.forEach(function(entry) {
+                var values = entry;
+                values['key'] = entry[fieldName];
+                newCompare.push(values);
+            });
+        }
+        return _handlebarsEachCompared('key', newSource, newCompare, options);
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('each_compare_keys', function(source, compare, options) {
+        var newSource = [];
+        if (source) {
+            var sourceFields = Object.keys(source);
+            sourceFields.forEach(function(name) {
+                var values = {};
+                values['value'] = source[name];
+                values['key'] = name;
+                newSource.push(values);
+            });
+        }
+
+        var newCompare = [];
+        if (compare) {
+            var compareFields = Object.keys(compare);
+            compareFields.forEach(function(name) {
+                var values = {};
+                values['value'] = compare[name];
+                values['key'] = name;
+                newCompare.push(values);
+            });
+        }
+        return _handlebarsEachCompared('key', newSource, newCompare, options);
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('each_compare_field', function(source, compare, options) {
+        return _handlebarsEachCompared('field', source, compare, options);
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('each_compare_title', function(source, compare, options) {
+        return _handlebarsEachCompared('title', source, compare, options);
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('reformat', function(source, type){
+        if (type == 'json')
+            try {
+               return JSON.stringify(JSON.parse(source.trim()),null, "    ");
+            } catch(e) {
+
+            }
+        return source
+    });
+
+    /**
+     *
+     */
+    Handlebars.registerHelper('showDiff', function(source, compare, options) {
+        var ds = '';
+        if(source === compare) {
+            ds = source;
+        } else {
+            if( ! source)
+                return compare;
+
+            if( ! compare)
+                return source;
+
+            var d = diffMatchPatch.diff_main(stripHtml(compare), stripHtml(source));
+            diffMatchPatch.diff_cleanupSemantic(d);
+            ds = diffMatchPatch.diff_prettyHtml(d);
+            ds = ds.replace(/&para;/gm, '');
+        }
+        if(options === 'nl2br')
+            ds = _handlebarsNewlineToBreak(ds);
+
+        return ds;
+    });
+
+    /**
+     *
+     */
+    function _handlebarsEachCompared(fieldname, source, compare, options)
+    {
+        var dataList = [];
+        var index = 0;
+        if(source) {
+            source.forEach(function(sourceEntry) {
+                var found = false;
+                if (compare) {
+                    compare.forEach(function(compareEntry) {
+                        if(sourceEntry[fieldname] === compareEntry[fieldname]) {
+                            var data = {
+                                typeSame: true,
+                                source: sourceEntry,
+                                compare: compareEntry,
+                                index: index
+                            };
+                            dataList.push(data);
+                            found = true;
+                            index++;
+                        }
+                    });
+                }
+                if ( ! found) {
+                    var data = {
+                        typeIns: true,
+                        source: sourceEntry,
+                        index: index
+                    };
+                    dataList.push(data);
+                    index++;
+                }
+            });
+        }
+
+        if (compare) {
+            compare.forEach(function(compareEntry) {
+                var found = false;
+                if (source) {
+                    source.forEach(function(sourceEntry) {
+                        if(sourceEntry[fieldname] === compareEntry[fieldname])
+                            found = true;
+                    });
+                }
+                if ( ! found) {
+                    var data = {
+                        typeDel: true,
+                        compare: compareEntry,
+                        index: index
+                    };
+                    dataList.push(data);
+                    index++;
+                }
+            });
+        }
+
+        var ret = '';
+        var length = dataList.length;
+        for (var index in dataList) {
+            if(index == (length - 1))
+                dataList[index]['_last'] = true;
+            ret = ret + options.fn(dataList[index]);
+        }
+        return ret;
+    }
+
+    var diffMatchPatch = new DiffMatchPatch();
+
+    /**
+     * Overwrite Colors
+     */
+    DiffMatchPatch.prototype.diff_prettyHtml = function(diffs) {
+      var html = [];
+      var pattern_amp = /&/g;
+      var pattern_lt = /</g;
+      var pattern_gt = />/g;
+      var pattern_para = /\n/g;
+      for (var x = 0; x < diffs.length; x++) {
+        var op = diffs[x][0];    // Operation (insert, delete, equal)
+        var data = diffs[x][1];  // Text of change.
+        var text = data.replace(pattern_amp, '&amp;').replace(pattern_lt, '&lt;')
+            .replace(pattern_gt, '&gt;').replace(pattern_para, '&para;<br>');
+        switch (op) {
+          case DIFF_INSERT:
+            html[x] = '<ins>' + text + '</ins>';
+            break;
+          case DIFF_DELETE:
+            html[x] = '<del>' + text + '</del>';
+            break;
+          case DIFF_EQUAL:
+            html[x] = '<span>' + text + '</span>';
+            break;
+        }
+      }
+      return html.join('');
+    };
+
+    /**
+     * Fixes html after comparison (#506, #538, #616, #825)
+     */
+    function stripHtml(html){
+      var div = document.createElement("div");
+      div.innerHTML = html;
+      return div.textContent || div.innerText || "";
+    }
+
+    // Exports
+    return Handlebars;
+});
diff --git a/docs/utils/send_sample_request.js b/docs/utils/send_sample_request.js
new file mode 100755
index 00000000..4d695d14
--- /dev/null
+++ b/docs/utils/send_sample_request.js
@@ -0,0 +1,272 @@
+define([
+    'jquery',
+    'lodash',
+    './utils/send_sample_request_utils'
+], function($, _, utils) {
+
+    var initDynamic = function() {
+        // Button send
+        $(".sample-request-send").off("click");
+        $(".sample-request-send").on("click", function(e) {
+            e.preventDefault();
+            var $root = $(this).parents("article");
+            var group = $root.data("group");
+            var name = $root.data("name");
+            var version = $root.data("version");
+            sendSampleRequest(group, name, version, $(this).data("sample-request-type"));
+        });
+
+        // Button clear
+        $(".sample-request-clear").off("click");
+        $(".sample-request-clear").on("click", function(e) {
+            e.preventDefault();
+            var $root = $(this).parents("article");
+            var group = $root.data("group");
+            var name = $root.data("name");
+            var version = $root.data("version");
+            clearSampleRequest(group, name, version);
+        });
+    }; // initDynamic
+
+    function sendSampleRequest(group, name, version, type)
+    {
+        var $root = $('article[data-group="' + group + '"][data-name="' + name + '"][data-version="' + version + '"]');
+
+        // Optional header
+        var header = {};
+        $root.find(".sample-request-header:checked").each(function(i, element) {
+            var group = $(element).data("sample-request-header-group-id");
+            $root.find("[data-sample-request-header-group=\"" + group + "\"]").each(function(i, element) {
+                var key = $(element).data("sample-request-header-name");
+                var value = element.value;
+                if (typeof element.optional === 'undefined') {
+                  element.optional = true;
+                }
+                if ( ! element.optional && element.defaultValue !== '') {
+                    value = element.defaultValue;
+                }
+                header[key] = value;
+            });
+        });
+
+
+        // create JSON dictionary of parameters
+        var param = {};
+        var paramType = {};
+        var bodyFormData = new FormData();
+        var bodyJson = '';
+        $root.find(".sample-request-param:checked").each(function(i, element) {
+            var group = $(element).data("sample-request-param-group-id");
+            var contentType = $(element).nextAll('.sample-header-content-type-switch').first().val();
+            if (contentType == "body-json"){
+                $root.find("[data-sample-request-body-group=\"" + group + "\"]").not(function(){
+                    return $(this).val() == "" && $(this).is("[data-sample-request-param-optional='true']");
+                }).each(function(i, element) {
+                    if (isJson(element.value)){
+                        header['Content-Type'] = 'application/json';
+                        bodyJson = element.value;
+                    }
+                });
+            }else {
+                $root.find("[data-sample-request-param-group=\"" + group + "\"]").not(function(){
+                    return $(this).val() == "" && $(this).is("[data-sample-request-param-optional='true']");
+                }).each(function(i, element) {
+                    var key = $(element).data("sample-request-param-name");
+                    var value = element.value;
+                    if ( ! element.optional && element.defaultValue !== '') {
+                        value = element.defaultValue;
+                    }
+                    if (contentType == "body-form-data"){
+                        header['Content-Type'] = 'multipart/form-data'
+                        if (element.type == "file") {
+                        value = element.files[0];
+                      }
+                      bodyFormData.append(key,value);
+                    }else {
+                        param[key] = value;
+                        paramType[key] = $(element).next().text();
+                    }
+                });
+            }
+        });
+
+        // grab user-inputted URL
+        var url = $root.find(".sample-request-url").val();
+
+        //Convert {param} form to :param
+        url = utils.convertPathParams(url);
+
+        // Insert url parameter
+        var pattern = pathToRegexp(url, null);
+        var matches = pattern.exec(url);
+        for (var i = 1; i < matches.length; i++) {
+            var key = matches[i].substr(1);
+            var optional = false
+            if (key[key.length - 1] === '?') {
+                optional = true;
+                key = key.substr(0, key.length - 1);
+            }
+            if (param[key] !== undefined) {
+                url = url.replace(matches[i], encodeURIComponent(param[key]));
+
+                // remove URL parameters from list
+                delete param[key];
+            } else if (optional) {
+                // if parameter is optional denoted by ending '?' in param (:param?)
+                // and no parameter is given, replace parameter with empty string instead
+                url = url.replace(matches[i], '');
+                delete param[key];
+            }
+        } // for
+
+        //handle nested objects and parsing fields
+        param = utils.handleNestedAndParsingFields(param, paramType);
+
+        //add url search parameter
+        if (header['Content-Type'] == 'application/json') {
+            if (bodyJson) {
+                // bodyJson is set to value if request body: 'body/json' was selected and manual json was input
+                // in this case, use the given bodyJson and add other params in query string
+                url = url + encodeSearchParams(param);
+                param = bodyJson;
+            } else {
+                // bodyJson not set, but Content-Type: application/json header was set. In this case, send parameters
+                // as JSON body. First, try parsing fields of object with given paramType definition so that the json
+                // is valid against the parameter spec (e.g. Boolean params are boolean instead of strings in final json)
+                param = utils.tryParsingWithTypes(param, paramType);
+                param = JSON.stringify(param);
+            }
+        }else if (header['Content-Type'] == 'multipart/form-data'){
+            url = url + encodeSearchParams(param);
+            param = bodyFormData;
+        }
+
+        $root.find(".sample-request-response").fadeTo(250, 1);
+        $root.find(".sample-request-response-json").html("Loading...");
+        refreshScrollSpy();
+
+        // send AJAX request, catch success or error callback
+        var ajaxRequest = {
+            url        : url,
+            headers    : header,
+            data       : param,
+            type       : type.toUpperCase(),
+            success    : displaySuccess,
+            error      : displayError
+        };
+
+        if(header['Content-Type'] == 'multipart/form-data'){
+            delete ajaxRequest.headers['Content-Type'];
+            ajaxRequest.contentType=false;
+            ajaxRequest.processData=false;
+        }
+        $.ajax(ajaxRequest);
+
+
+        function displaySuccess(data, status, jqXHR) {
+            var jsonResponse;
+            try {
+                jsonResponse = JSON.parse(jqXHR.responseText);
+                jsonResponse = JSON.stringify(jsonResponse, null, 4);
+            } catch (e) {
+                jsonResponse = jqXHR.responseText;
+            }
+            $root.find(".sample-request-response-json").text(jsonResponse);
+            refreshScrollSpy();
+        };
+
+        function displayError(jqXHR, textStatus, error) {
+            var message = "Error " + jqXHR.status + ": " + error;
+            var jsonResponse;
+            try {
+                jsonResponse = JSON.parse(jqXHR.responseText);
+                jsonResponse = JSON.stringify(jsonResponse, null, 4);
+            } catch (e) {
+                jsonResponse = jqXHR.responseText;
+            }
+
+            if (jsonResponse)
+                message += "\n" + jsonResponse;
+
+            // flicker on previous error to make clear that there is a new response
+            if($root.find(".sample-request-response").is(":visible"))
+                $root.find(".sample-request-response").fadeTo(1, 0.1);
+
+            $root.find(".sample-request-response").fadeTo(250, 1);
+            $root.find(".sample-request-response-json").text(message);
+            refreshScrollSpy();
+        };
+    }
+
+    function clearSampleRequest(group, name, version)
+    {
+        var $root = $('article[data-group="' + group + '"][data-name="' + name + '"][data-version="' + version + '"]');
+
+        // hide sample response
+        $root.find(".sample-request-response-json").html("");
+        $root.find(".sample-request-response").hide();
+
+        // reset value of parameters
+        $root.find(".sample-request-param").each(function(i, element) {
+            element.value = "";
+        });
+
+        // restore default URL
+        var $urlElement = $root.find(".sample-request-url");
+        $urlElement.val($urlElement.prop("defaultValue"));
+
+        refreshScrollSpy();
+    }
+
+    function refreshScrollSpy()
+    {
+        $('[data-spy="scroll"]').each(function () {
+            $(this).scrollspy("refresh");
+        });
+    }
+
+    function escapeHtml(str) {
+        var div = document.createElement("div");
+        div.appendChild(document.createTextNode(str));
+        return div.innerHTML;
+    }
+
+
+    /**
+     * is Json
+     */
+    function isJson(str) {
+        if (typeof str == 'string') {
+            try {
+                var obj=JSON.parse(str);
+                if(typeof obj == 'object' && obj ){
+                    return true;
+                }else{
+                    return false;
+                }
+            } catch(e) {
+                return false;
+            }
+        }
+    }
+
+    /**
+     * encode Search Params
+     */
+    function encodeSearchParams(obj) {
+        const params = [];
+        Object.keys(obj).forEach((key) => {
+            let value = obj[key];
+            params.push([key, encodeURIComponent(value)].join('='));
+        })
+        return params.length === 0 ? '' : '?' + params.join('&');
+    }
+
+    /**
+     * Exports.
+     */
+    return {
+        initDynamic: initDynamic
+    };
+
+});
diff --git a/docs/utils/send_sample_request_utils.js b/docs/utils/send_sample_request_utils.js
new file mode 100755
index 00000000..fbda1ffd
--- /dev/null
+++ b/docs/utils/send_sample_request_utils.js
@@ -0,0 +1,97 @@
+//this block is used to make this module works with Node (CommonJS module format)
+if (typeof define !== 'function') {
+    var define = require('amdefine')(module)
+}
+
+define(['lodash'], function (_) {
+
+    var log = console;
+
+    function handleNestedFields(object, key, params, paramType) {
+        var attributes = key.split('.');
+        var field = attributes[0];
+        params.push(field);
+        if (attributes.length > 1 && paramType[params.join('.')] == 'Object') {
+            var nestedField = attributes.slice(1).join('.');
+            if (!object[field])
+                object[field] = {};
+            if (typeof object[field] == 'object') {
+                object[field][nestedField] = object[key];
+                delete object[key];
+                handleNestedFields(object[field], nestedField, params, paramType);
+            }
+        }
+    }
+
+    function handleNestedFieldsForAllParams(param, paramType) {
+        var result = Object.assign({}, param);
+        Object.keys(result).forEach(function (key) {
+            handleNestedFields(result, key, [], paramType);
+        });
+        return result
+    }
+
+    function handleArraysAndObjectFields(param, paramType) {
+        var result = Object.assign({}, param);
+        Object.keys(paramType).forEach(function (key) {
+            if (result[key] && (paramType[key].endsWith('[]') || paramType[key] === 'Object')) {
+                try {
+                    result[key] = JSON.parse(result[key]);
+                } catch (e) {;}
+            }
+        });
+        return result
+    }
+
+    function tryParsingAsType(object, path, type) {
+        var val = _.get(object, path);
+        if (val !== undefined) {
+            if (type === 'Boolean') {
+                if (val === 'true') {
+                    _.set(object, path, true);
+                } else if (val === 'false') {
+                    _.set(object, path, false);
+                } else {
+                    log.warn('Failed to parse object value at path [' + path + ']. Value: (' + val + '). Type: (' + type + ')');
+                }
+            } else if (type === 'Number') {
+                var parsedInt = parseInt(val, 10);
+                if (!_.isNaN(parsedInt)) {
+                    _.set(object, path, parsedInt);
+                } else {
+                    log.warn('Failed to parse object value at path [' + path + ']. Value: (' + val + '). Type: (' + type + ')');
+                }
+            }
+        }
+    }
+
+    function handleNestedAndParsingFields(param, paramType) {
+        var result = handleArraysAndObjectFields(param, paramType);
+        result = handleNestedFieldsForAllParams(result, paramType);
+        return result;
+    }
+
+    function tryParsingWithTypes(param, paramType) {
+        var result = Object.assign({}, param);
+        Object.keys(paramType).forEach(function (key) {
+            tryParsingAsType(result, key, paramType[key]);
+        });
+        return result;
+    }
+
+    // Converts path params in the {param} format to the accepted :param format, used before inserting the URL params.
+    function convertPathParams(url) {
+        return url.replace(/{(.+?)}/g, ':$1');
+    }
+
+    function setLogger(logger) {
+      log = logger;
+    }
+
+    return {
+        handleNestedAndParsingFields,
+        convertPathParams,
+        tryParsingWithTypes,
+        setLogger
+    };
+});
diff --git a/docs/vendor/bootstrap.min.css b/docs/vendor/bootstrap.min.css
new file mode 100644
index 00000000..5b96335f
--- /dev/null
+++ b/docs/vendor/bootstrap.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.4.1 (https://getbootstrap.com/)
+ * Copyright 2011-2019 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:"Glyphicons Halflings";src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;background-image:none;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/docs/vendor/bootstrap.min.js b/docs/vendor/bootstrap.min.js
new file mode 100644
index 00000000..eb0a8b41
--- /dev/null
+++ b/docs/vendor/bootstrap.min.js
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.4.1 (https://getbootstrap.com/)
+ * Copyright 2011-2019 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3<e[0])throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(n){"use strict";n.fn.emulateTransitionEnd=function(t){var e=!1,i=this;n(this).one("bsTransitionEnd",function(){e=!0});return setTimeout(function(){e||n(i).trigger(n.support.transition.end)},t),this},n(function(){n.support.transition=function o(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(t.style[i]!==undefined)return{end:e[i]};return!1}(),n.support.transition&&(n.event.special.bsTransitionEnd={bindType:n.support.transition.end,delegateType:n.support.transition.end,handle:function(t){if(n(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(s){"use strict";var e='[data-dismiss="alert"]',a=function(t){s(t).on("click",e,this.close)};a.VERSION="3.4.1",a.TRANSITION_DURATION=150,a.prototype.close=function(t){var e=s(this),i=e.attr("data-target");i||(i=(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),i="#"===i?[]:i;var o=s(document).find(i);function n(){o.detach().trigger("closed.bs.alert").remove()}t&&t.preventDefault(),o.length||(o=e.closest(".alert")),o.trigger(t=s.Event("close.bs.alert")),t.isDefaultPrevented()||(o.removeClass("in"),s.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",n).emulateTransitionEnd(a.TRANSITION_DURATION):n())};var t=s.fn.alert;s.fn.alert=function o(i){return this.each(function(){var t=s(this),e=t.data("bs.alert");e||t.data("bs.alert",e=new a(this)),"string"==typeof i&&e[i].call(t)})},s.fn.alert.Constructor=a,s.fn.alert.noConflict=function(){return s.fn.alert=t,this},s(document).on("click.bs.alert.data-api",e,a.prototype.close)}(jQuery),function(s){"use strict";var n=function(t,e){this.$element=s(t),this.options=s.extend({},n.DEFAULTS,e),this.isLoading=!1};function i(o){return this.each(function(){var t=s(this),e=t.data("bs.button"),i="object"==typeof o&&o;e||t.data("bs.button",e=new n(this,i)),"toggle"==o?e.toggle():o&&e.setState(o)})}n.VERSION="3.4.1",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(t){var e="disabled",i=this.$element,o=i.is("input")?"val":"html",n=i.data();t+="Text",null==n.resetText&&i.data("resetText",i[o]()),setTimeout(s.proxy(function(){i[o](null==n[t]?this.options[t]:n[t]),"loadingText"==t?(this.isLoading=!0,i.addClass(e).attr(e,e).prop(e,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(e).removeAttr(e).prop(e,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var t=s.fn.button;s.fn.button=i,s.fn.button.Constructor=n,s.fn.button.noConflict=function(){return s.fn.button=t,this},s(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(t){var e=s(t.target).closest(".btn");i.call(e,"toggle"),s(t.target).is('input[type="radio"], input[type="checkbox"]')||(t.preventDefault(),e.is("input,button")?e.trigger("focus"):e.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(t){s(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))})}(jQuery),function(p){"use strict";var c=function(t,e){this.$element=p(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=e,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",p.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",p.proxy(this.pause,this)).on("mouseleave.bs.carousel",p.proxy(this.cycle,this))};function r(n){return this.each(function(){var t=p(this),e=t.data("bs.carousel"),i=p.extend({},c.DEFAULTS,t.data(),"object"==typeof n&&n),o="string"==typeof n?n:i.slide;e||t.data("bs.carousel",e=new c(this,i)),"number"==typeof n?e.to(n):o?e[o]():i.interval&&e.pause().cycle()})}c.VERSION="3.4.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},c.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(p.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},c.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var o=(i+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(o)},c.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(i<t?"next":"prev",this.$items.eq(t))},c.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&p.support.transition&&(this.$element.trigger(p.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(t,e){var i=this.$element.find(".item.active"),o=e||this.getItemForDirection(t,i),n=this.interval,s="next"==t?"left":"right",a=this;if(o.hasClass("active"))return this.sliding=!1;var r=o[0],l=p.Event("slide.bs.carousel",{relatedTarget:r,direction:s});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,n&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var h=p(this.$indicators.children()[this.getItemIndex(o)]);h&&h.addClass("active")}var d=p.Event("slid.bs.carousel",{relatedTarget:r,direction:s});return p.support.transition&&this.$element.hasClass("slide")?(o.addClass(t),"object"==typeof o&&o.length&&o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one("bsTransitionEnd",function(){o.removeClass([t,s].join(" ")).addClass("active"),i.removeClass(["active",s].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger(d)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(i.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),n&&this.cycle(),this}};var t=p.fn.carousel;p.fn.carousel=r,p.fn.carousel.Constructor=c,p.fn.carousel.noConflict=function(){return p.fn.carousel=t,this};var e=function(t){var e=p(this),i=e.attr("href");i&&(i=i.replace(/.*(?=#[^\s]+$)/,""));var o=e.attr("data-target")||i,n=p(document).find(o);if(n.hasClass("carousel")){var s=p.extend({},n.data(),e.data()),a=e.attr("data-slide-to");a&&(s.interval=!1),r.call(n,s),a&&n.data("bs.carousel").to(a),t.preventDefault()}};p(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),p(window).on("load",function(){p('[data-ride="carousel"]').each(function(){var t=p(this);r.call(t,t.data())})})}(jQuery),function(a){"use strict";var r=function(t,e){this.$element=a(t),this.options=a.extend({},r.DEFAULTS,e),this.$trigger=a('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(t){var e,i=t.attr("data-target")||(e=t.attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"");return a(document).find(i)}function l(o){return this.each(function(){var t=a(this),e=t.data("bs.collapse"),i=a.extend({},r.DEFAULTS,t.data(),"object"==typeof o&&o);!e&&i.toggle&&/show|hide/.test(o)&&(i.toggle=!1),e||t.data("bs.collapse",e=new r(this,i)),"string"==typeof o&&e[o]()})}r.VERSION="3.4.1",r.TRANSITION_DURATION=350,r.DEFAULTS={toggle:!0},r.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},r.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var t,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(t=e.data("bs.collapse"))&&t.transitioning)){var i=a.Event("show.bs.collapse");if(this.$element.trigger(i),!i.isDefaultPrevented()){e&&e.length&&(l.call(e,"hide"),t||e.data("bs.collapse",null));var o=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[o](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var n=function(){this.$element.removeClass("collapsing").addClass("collapse in")[o](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return n.call(this);var s=a.camelCase(["scroll",o].join("-"));this.$element.one("bsTransitionEnd",a.proxy(n,this)).emulateTransitionEnd(r.TRANSITION_DURATION)[o](this.$element[0][s])}}}},r.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var t=a.Event("hide.bs.collapse");if(this.$element.trigger(t),!t.isDefaultPrevented()){var e=this.dimension();this.$element[e](this.$element[e]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!a.support.transition)return i.call(this);this.$element[e](0).one("bsTransitionEnd",a.proxy(i,this)).emulateTransitionEnd(r.TRANSITION_DURATION)}}},r.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},r.prototype.getParent=function(){return a(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(t,e){var i=a(e);this.addAriaAndCollapsedClass(n(i),i)},this)).end()},r.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var t=a.fn.collapse;a.fn.collapse=l,a.fn.collapse.Constructor=r,a.fn.collapse.noConflict=function(){return a.fn.collapse=t,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(t){var e=a(this);e.attr("data-target")||t.preventDefault();var i=n(e),o=i.data("bs.collapse")?"toggle":e.data();l.call(i,o)})}(jQuery),function(a){"use strict";var r='[data-toggle="dropdown"]',o=function(t){a(t).on("click.bs.dropdown",this.toggle)};function l(t){var e=t.attr("data-target");e||(e=(e=t.attr("href"))&&/#[A-Za-z]/.test(e)&&e.replace(/.*(?=#[^\s]*$)/,""));var i="#"!==e?a(document).find(e):null;return i&&i.length?i:t.parent()}function s(o){o&&3===o.which||(a(".dropdown-backdrop").remove(),a(r).each(function(){var t=a(this),e=l(t),i={relatedTarget:this};e.hasClass("open")&&(o&&"click"==o.type&&/input|textarea/i.test(o.target.tagName)&&a.contains(e[0],o.target)||(e.trigger(o=a.Event("hide.bs.dropdown",i)),o.isDefaultPrevented()||(t.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",i)))))}))}o.VERSION="3.4.1",o.prototype.toggle=function(t){var e=a(this);if(!e.is(".disabled, :disabled")){var i=l(e),o=i.hasClass("open");if(s(),!o){"ontouchstart"in document.documentElement&&!i.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",s);var n={relatedTarget:this};if(i.trigger(t=a.Event("show.bs.dropdown",n)),t.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),i.toggleClass("open").trigger(a.Event("shown.bs.dropdown",n))}return!1}},o.prototype.keydown=function(t){if(/(38|40|27|32)/.test(t.which)&&!/input|textarea/i.test(t.target.tagName)){var e=a(this);if(t.preventDefault(),t.stopPropagation(),!e.is(".disabled, :disabled")){var i=l(e),o=i.hasClass("open");if(!o&&27!=t.which||o&&27==t.which)return 27==t.which&&i.find(r).trigger("focus"),e.trigger("click");var n=i.find(".dropdown-menu li:not(.disabled):visible a");if(n.length){var s=n.index(t.target);38==t.which&&0<s&&s--,40==t.which&&s<n.length-1&&s++,~s||(s=0),n.eq(s).trigger("focus")}}}};var t=a.fn.dropdown;a.fn.dropdown=function e(i){return this.each(function(){var t=a(this),e=t.data("bs.dropdown");e||t.data("bs.dropdown",e=new o(this)),"string"==typeof i&&e[i].call(t)})},a.fn.dropdown.Constructor=o,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=t,this},a(document).on("click.bs.dropdown.data-api",s).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",r,o.prototype.toggle).on("keydown.bs.dropdown.data-api",r,o.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",o.prototype.keydown)}(jQuery),function(a){"use strict";var s=function(t,e){this.options=e,this.$body=a(document.body),this.$element=a(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=".navbar-fixed-top, .navbar-fixed-bottom",this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};function r(o,n){return this.each(function(){var t=a(this),e=t.data("bs.modal"),i=a.extend({},s.DEFAULTS,t.data(),"object"==typeof o&&o);e||t.data("bs.modal",e=new s(this,i)),"string"==typeof o?e[o](n):i.show&&e.show(n)})}s.VERSION="3.4.1",s.TRANSITION_DURATION=300,s.BACKDROP_TRANSITION_DURATION=150,s.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},s.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},s.prototype.show=function(i){var o=this,t=a.Event("show.bs.modal",{relatedTarget:i});this.$element.trigger(t),this.isShown||t.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(t){a(t.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var t=a.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),t&&o.$element[0].offsetWidth,o.$element.addClass("in"),o.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:i});t?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(s.TRANSITION_DURATION):o.$element.trigger("focus").trigger(e)}))},s.prototype.hide=function(t){t&&t.preventDefault(),t=a.Event("hide.bs.modal"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(s.TRANSITION_DURATION):this.hideModal())},s.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},s.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},s.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},s.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},s.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},s.prototype.backdrop=function(t){var e=this,i=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=a.support.transition&&i;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+i).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!t)return;o?this.$backdrop.one("bsTransitionEnd",t).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var n=function(){e.removeBackdrop(),t&&t()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",n).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):n()}else t&&t()},s.prototype.handleUpdate=function(){this.adjustDialog()},s.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},s.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css("padding-right",t+n),a(this.fixedContent).each(function(t,e){var i=e.style.paddingRight,o=a(e).css("padding-right");a(e).data("padding-right",i).css("padding-right",parseFloat(o)+n+"px")}))},s.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad),a(this.fixedContent).each(function(t,e){var i=a(e).data("padding-right");a(e).removeData("padding-right"),e.style.paddingRight=i||""})},s.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var t=a.fn.modal;a.fn.modal=r,a.fn.modal.Constructor=s,a.fn.modal.noConflict=function(){return a.fn.modal=t,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(t){var e=a(this),i=e.attr("href"),o=e.attr("data-target")||i&&i.replace(/.*(?=#[^\s]+$)/,""),n=a(document).find(o),s=n.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(i)&&i},n.data(),e.data());e.is("a")&&t.preventDefault(),n.one("show.bs.modal",function(t){t.isDefaultPrevented()||n.one("hidden.bs.modal",function(){e.is(":visible")&&e.trigger("focus")})}),r.call(n,s,this)})}(jQuery),function(g){"use strict";var o=["sanitize","whiteList","sanitizeFn"],a=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],t={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,l=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function u(t,e){var i=t.nodeName.toLowerCase();if(-1!==g.inArray(i,e))return-1===g.inArray(i,a)||Boolean(t.nodeValue.match(r)||t.nodeValue.match(l));for(var o=g(e).filter(function(t,e){return e instanceof RegExp}),n=0,s=o.length;n<s;n++)if(i.match(o[n]))return!0;return!1}function n(t,e,i){if(0===t.length)return t;if(i&&"function"==typeof i)return i(t);if(!document.implementation||!document.implementation.createHTMLDocument)return t;var o=document.implementation.createHTMLDocument("sanitization");o.body.innerHTML=t;for(var n=g.map(e,function(t,e){return e}),s=g(o.body).find("*"),a=0,r=s.length;a<r;a++){var l=s[a],h=l.nodeName.toLowerCase();if(-1!==g.inArray(h,n))for(var d=g.map(l.attributes,function(t){return t}),p=[].concat(e["*"]||[],e[h]||[]),c=0,f=d.length;c<f;c++)u(d[c],p)||l.removeAttribute(d[c].nodeName);else l.parentNode.removeChild(l)}return o.body.innerHTML}var m=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};m.VERSION="3.4.1",m.TRANSITION_DURATION=150,m.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),n=o.length;n--;){var s=o[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,g.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",r="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+"."+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusin"==t.type?"focus":"hover"]=!0),e.tip().hasClass("in")||"in"==e.hoverState)e.hoverState="in";else{if(clearTimeout(e.timeout),e.hoverState="in",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){"in"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusout"==t.type?"focus":"hover"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState="out",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){"out"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,r=a.test(s);r&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s="bottom"==s&&l.bottom+d>c.bottom?"top":"top"==s&&l.top-d<c.top?"bottom":"right"==s&&l.right+h>c.width?"left":"left"==s&&l.left-h<c.left?"right":s,o.removeClass(p).addClass(s)}var f=this.getCalculatedOffset(s,l,h,d);this.applyPlacement(f,s);var u=function(){var t=i.hoverState;i.$element.trigger("shown.bs."+i.type),i.hoverState=null,"out"==t&&i.leave(i)};g.support.transition&&this.$tip.hasClass("fade")?o.one("bsTransitionEnd",u).emulateTransitionEnd(m.TRANSITION_DURATION):u()}},m.prototype.applyPlacement=function(t,e){var i=this.tip(),o=i[0].offsetWidth,n=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,g.offset.setOffset(i[0],g.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},t),0),i.addClass("in");var r=i[0].offsetWidth,l=i[0].offsetHeight;"top"==e&&l!=n&&(t.top=t.top+n-l);var h=this.getViewportAdjustedDelta(e,t,r,l);h.left?t.left+=h.left:t.top+=h.top;var d=/top|bottom/.test(e),p=d?2*h.left-o+r:2*h.top-n+l,c=d?"offsetWidth":"offsetHeight";i.offset(t),this.replaceArrow(p,i[0][c],d)},m.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},m.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=n(e,this.options.whiteList,this.options.sanitizeFn)),t.find(".tooltip-inner").html(e)):t.find(".tooltip-inner").text(e),t.removeClass("fade in top bottom left right")},m.prototype.hide=function(t){var e=this,i=g(this.$tip),o=g.Event("hide.bs."+this.type);function n(){"in"!=e.hoverState&&i.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),t&&t()}if(this.$element.trigger(o),!o.isDefaultPrevented())return i.removeClass("in"),g.support.transition&&i.hasClass("fade")?i.one("bsTransitionEnd",n).emulateTransitionEnd(m.TRANSITION_DURATION):n(),this.hoverState=null,this},m.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},m.prototype.hasContent=function(){return this.getTitle()},m.prototype.getPosition=function(t){var e=(t=t||this.$element)[0],i="BODY"==e.tagName,o=e.getBoundingClientRect();null==o.width&&(o=g.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var n=window.SVGElement&&e instanceof window.SVGElement,s=i?{top:0,left:0}:n?null:t.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},r=i?{width:g(window).width(),height:g(window).height()}:null;return g.extend({},o,a,r,s)},m.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},m.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data("bs."+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass("in")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data("bs.tooltip"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.tooltip",e=new m(this,i)),"string"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){"use strict";var s=function(t,e){this.init("popover",t,e)};if(!n.fn.tooltip)throw new Error("Popover requires tooltip.js");s.VERSION="3.4.1",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===o&&(i=this.sanitizeHtml(i))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===o?"html":"append"](i)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(i);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data("bs.popover"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.popover",e=new s(this,i)),"string"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){"use strict";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data("bs.scrollspy"),i="object"==typeof o&&o;e||t.data("bs.scrollspy",e=new n(this,i)),"string"==typeof o&&e[o]()})}n.VERSION="3.4.1",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data("target")||t.attr("href"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(":visible")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(n[t+1]===undefined||e<n[t+1])&&this.activate(s[t])},n.prototype.activate=function(t){this.activeTarget=t,this.clear();var e=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',i=s(e).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},n.prototype.clear=function(){s(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var t=s.fn.scrollspy;s.fn.scrollspy=e,s.fn.scrollspy.Constructor=n,s.fn.scrollspy.noConflict=function(){return s.fn.scrollspy=t,this},s(window).on("load.bs.scrollspy.data-api",function(){s('[data-spy="scroll"]').each(function(){var t=s(this);e.call(t,t.data())})})}(jQuery),function(r){"use strict";var a=function(t){this.element=r(t)};function e(i){return this.each(function(){var t=r(this),e=t.data("bs.tab");e||t.data("bs.tab",e=new a(this)),"string"==typeof i&&e[i]()})}a.VERSION="3.4.1",a.TRANSITION_DURATION=150,a.prototype.show=function(){var t=this.element,e=t.closest("ul:not(.dropdown-menu)"),i=t.data("target");if(i||(i=(i=t.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var o=e.find(".active:last a"),n=r.Event("hide.bs.tab",{relatedTarget:t[0]}),s=r.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(n),t.trigger(s),!s.isDefaultPrevented()&&!n.isDefaultPrevented()){var a=r(document).find(i);this.activate(t.closest("li"),e),this.activate(a,a.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},a.prototype.activate=function(t,e,i){var o=e.find("> .active"),n=i&&r.support.transition&&(o.length&&o.hasClass("fade")||!!e.find("> .fade").length);function s(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),n?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}o.length&&n?o.one("bsTransitionEnd",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass("in")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),"show")};r(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),function(l){"use strict";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on("scroll.bs.affix.data-api",l.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data("bs.affix"),i="object"==typeof o&&o;e||t.data("bs.affix",e=new h(this,i)),"string"==typeof o&&e[o]()})}h.VERSION="3.4.1",h.RESET="affix affix-top affix-bottom",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n<i&&"top";if("bottom"==this.affixed)return null!=i?!(n+this.unpin<=s.top)&&"bottom":!(n+a<=t-o)&&"bottom";var r=null==this.affixed,l=r?n:s.top;return null!=i&&n<=i?"top":null!=o&&t-o<=l+(r?a:e)&&"bottom"},h.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(h.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},h.prototype.checkPositionWithEventLoop=function(){setTimeout(l.proxy(this.checkPosition,this),1)},h.prototype.checkPosition=function(){if(this.$element.is(":visible")){var t=this.$element.height(),e=this.options.offset,i=e.top,o=e.bottom,n=Math.max(l(document).height(),l(document.body).height());"object"!=typeof e&&(o=i=e),"function"==typeof i&&(i=e.top(this.$element)),"function"==typeof o&&(o=e.bottom(this.$element));var s=this.getState(n,t,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var a="affix"+(s?"-"+s:""),r=l.Event(a+".bs.affix");if(this.$element.trigger(r),r.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(h.RESET).addClass(a).trigger(a.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:n-t-o})}};var t=l.fn.affix;l.fn.affix=i,l.fn.affix.Constructor=h,l.fn.affix.noConflict=function(){return l.fn.affix=t,this},l(window).on("load",function(){l('[data-spy="affix"]').each(function(){var t=l(this),e=t.data();e.offset=e.offset||{},null!=e.offsetBottom&&(e.offset.bottom=e.offsetBottom),null!=e.offsetTop&&(e.offset.top=e.offsetTop),i.call(t,e)})})}(jQuery);
\ No newline at end of file
diff --git a/docs/vendor/diff_match_patch.min.js b/docs/vendor/diff_match_patch.min.js
new file mode 100644
index 00000000..c41b5132
--- /dev/null
+++ b/docs/vendor/diff_match_patch.min.js
@@ -0,0 +1,49 @@
+(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=0.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=0.5;this.Patch_Margin=4;this.Match_MaxBits=32}
+diff_match_patch.prototype.diff_main=function(a,b,c,d){"undefined"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[[0,a]]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);var f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,
+b,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a};
+diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c):1==f.length?[[-1,a],[1,b]]:(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,
+d):this.diff_bisect_(a,b,d)};
+diff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([0,""]);for(var e=d=b=0,f="",g="";b<a.length;){switch(a[b][0]){case 1:e++;g+=a[b][1];break;case -1:d++;f+=a[b][1];break;case 0:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=d.length}d=e=0;g=f=""}b++}a.pop();return a};
+diff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=f,h=2*f,j=Array(h),i=Array(h),k=0;k<h;k++)j[k]=-1,i[k]=-1;j[g+1]=0;i[g+1]=0;for(var k=d-e,q=0!=k%2,r=0,t=0,p=0,w=0,v=0;v<f&&!((new Date).getTime()>c);v++){for(var n=-v+r;n<=v-t;n+=2){var l=g+n,m;m=n==-v||n!=v&&j[l-1]<j[l+1]?j[l+1]:j[l-1]+1;for(var s=m-n;m<d&&s<e&&a.charAt(m)==b.charAt(s);)m++,s++;j[l]=m;if(m>d)t+=2;else if(s>e)r+=2;else if(q&&(l=g+k-n,0<=l&&l<h&&-1!=i[l])){var u=d-i[l];if(m>=
+u)return this.diff_bisectSplit_(a,b,m,s,c)}}for(n=-v+p;n<=v-w;n+=2){l=g+n;u=n==-v||n!=v&&i[l-1]<i[l+1]?i[l+1]:i[l-1]+1;for(m=u-n;u<d&&m<e&&a.charAt(d-u-1)==b.charAt(e-m-1);)u++,m++;i[l]=u;if(u>d)w+=2;else if(m>e)p+=2;else if(!q&&(l=g+k-n,0<=l&&(l<h&&-1!=j[l])&&(m=j[l],s=g+m-l,u=d-u,m>=u)))return this.diff_bisectSplit_(a,b,m,s,c)}}return[[-1,a],[1,b]]};
+diff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};
+diff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b="",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf("\n",c);-1==f&&(f=a.length-1);var r=a.substring(c,f+1),c=f+1;(e.hasOwnProperty?e.hasOwnProperty(r):void 0!==e[r])?b+=String.fromCharCode(e[r]):(b+=String.fromCharCode(g),e[r]=g,d[g++]=r)}return b}var d=[],e={};d[0]="";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};
+diff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join("")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};
+diff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};
+diff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;for(var d=0,e=1;;){var f=a.substring(c-e),f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};
+diff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g="",h,j,n,l;-1!=(e=b.indexOf(d,e+1));){var m=f.diff_commonPrefix(a.substring(c),b.substring(e)),s=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<s+m&&(g=b.substring(e-s,e)+b.substring(e,e+m),h=a.substring(0,c-s),j=a.substring(c+m),n=b.substring(0,e-s),l=b.substring(e+m))}return 2*g.length>=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null;
+var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4)),d=c(d,e,Math.ceil(d.length/2)),h;if(!g&&!d)return null;h=d?g?g[4].length>d[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]};
+diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f<a.length;)0==a[f][0]?(c[d++]=f,g=j,h=i,i=j=0,e=a[f][1]):(1==a[f][0]?j+=a[f][1].length:i+=a[f][1].length,e&&(e.length<=Math.max(g,h)&&e.length<=Math.max(j,i))&&(a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,d--,f=0<d?c[d-1]:-1,i=j=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(-1==a[f-1][0]&&1==a[f][0]){b=a[f-1][1];c=a[f][1];
+d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}};
+diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_);
+return i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(0==a[c-1][0]&&0==a[c+1][0]){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g)var h=e.substring(e.length-g),d=d.substring(0,d.length-g),e=h+e.substring(0,e.length-g),f=h+f;for(var g=d,h=e,j=f,i=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){var d=d+e.charAt(0),e=e.substring(1)+f.charAt(0),f=f.substring(1),k=b(d,e)+b(e,f);k>=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]=
+h,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/;
+diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;f<a.length;){if(0==a[f][0])a[f][1].length<this.Diff_EditCost&&(j||i)?(c[d++]=f,g=j,h=i,e=a[f][1]):(d=0,e=null),j=i=!1;else if(-1==a[f][0]?i=!0:j=!0,e&&(g&&h&&j&&i||e.length<this.Diff_EditCost/2&&3==g+h+j+i))a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,e=null,g&&h?(j=i=!0,d=0):(d--,f=0<d?c[d-1]:-1,j=i=!1),b=!0;f++}b&&this.diff_cleanupMerge(a)};
+diff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([0,""]);for(var b=0,c=0,d=0,e="",f="",g;b<a.length;)switch(a[b][0]){case 1:d++;f+=a[b][1];b++;break;case -1:c++;e+=a[b][1];b++;break;case 0:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&0==a[b-c-d-1][0]?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[0,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-g)+a[b][1],f=f.substring(0,f.length-
+g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[1,f]):0===d?a.splice(b-c,c+d,[-1,e]):a.splice(b-c-d,c+d,[-1,e],[1,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&0==a[b-1][0]?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=""}""===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)0==a[b-1][0]&&0==a[b+1][0]&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,a[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,
+a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};diff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){1!==a[g][0]&&(c+=a[g][1].length);-1!==a[g][0]&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)};
+diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\n/g,g=0;g<a.length;g++){var h=a[g][0],j=a[g][1],j=j.replace(c,"&amp;").replace(d,"&lt;").replace(e,"&gt;").replace(f,"&para;<br>");switch(h){case 1:b[g]='<ins style="background:#e6ffe6;">'+j+"</ins>";break;case -1:b[g]='<del style="background:#ffe6e6;">'+j+"</del>";break;case 0:b[g]="<span>"+j+"</span>"}}return b.join("")};
+diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)-1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][0],g=a[e][1];switch(f){case 1:c+=g.length;break;case -1:d+=g.length;break;case 0:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};
+diff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case 1:b[c]="+"+encodeURI(a[c][1]);break;case -1:b[c]="-"+a[c][1].length;break;case 0:b[c]="="+a[c][1].length}return b.join("\t").replace(/%20/g," ")};
+diff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case "+":try{c[d++]=[1,decodeURI(h)]}catch(j){throw Error("Illegal escape in diff_fromDelta: "+h);}break;case "-":case "=":var i=parseInt(h,10);if(isNaN(i)||0>i)throw Error("Invalid number in diff_fromDelta: "+h);h=a.substring(e,e+=i);"="==f[g].charAt(0)?c[d++]=[0,h]:c[d++]=[-1,h];break;default:if(f[g])throw Error("Invalid diff operation in diff_fromDelta: "+
+f[g]);}}if(e!=a.length)throw Error("Delta length ("+e+") does not equal source text length ("+a.length+").");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error("Null input. (match_main)");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};
+diff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return!f.Match_Distance?g?1:e:e+g/f.Match_Distance}if(b.length>this.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<<b.length-1,h=-1,i,k,q=b.length+a.length,r,t=0;t<b.length;t++){i=0;for(k=q;i<k;)d(t,c+
+k)<=g?i=k:q=k,k=Math.floor((q-i)/2+i);q=k;i=Math.max(1,c-k+1);var p=Math.min(c+k,a.length)+b.length;k=Array(p+2);for(k[p+1]=(1<<t)-1;p>=i;p--){var w=e[a.charAt(p-1)];k[p]=0===t?(k[p+1]<<1|1)&w:(k[p+1]<<1|1)&w|((r[p+1]|r[p])<<1|1)|r[p+1];if(k[p]&j&&(w=d(t,p-1),w<=g))if(g=w,h=p-1,h>c)i=Math.max(1,2*c-h);else break}if(d(t+1,c)>g)break;r=k}return h};
+diff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};
+diff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([0,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([0,d]);a.start1-=c.length;a.start2-=c.length;a.length1+=
+c.length+d.length;a.length2+=c.length+d.length}};
+diff_match_patch.prototype.patch_make=function(a,b,c){var d;if("string"==typeof a&&"string"==typeof b&&"undefined"==typeof c)d=a,b=this.diff_main(d,b,!0),2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b));else if(a&&"object"==typeof a&&"undefined"==typeof b&&"undefined"==typeof c)b=a,d=this.diff_text1(b);else if("string"==typeof a&&b&&"object"==typeof b&&"undefined"==typeof c)d=a;else if("string"==typeof a&&"string"==typeof b&&c&&"object"==typeof c)d=a,b=c;else throw Error("Unknown call format to patch_make.");
+if(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,j=0;j<b.length;j++){var i=b[j][0],k=b[j][1];!e&&0!==i&&(a.start1=f,a.start2=g);switch(i){case 1:a.diffs[e++]=b[j];a.length2+=k.length;d=d.substring(0,g)+k+d.substring(g);break;case -1:a.length1+=k.length;a.diffs[e++]=b[j];d=d.substring(0,g)+d.substring(g+k.length);break;case 0:k.length<=2*this.Patch_Margin&&e&&b.length!=j+1?(a.diffs[e++]=b[j],a.length1+=k.length,a.length2+=k.length):k.length>=2*this.Patch_Margin&&
+e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};
+diff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),j,i=-1;if(h.length>this.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g);
+if(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;i<a[f].diffs.length;i++){var q=a[f].diffs[i];0!==q[0]&&(k=this.diff_xIndex(g,h));1===q[0]?b=b.substring(0,
+j+k)+q[1]+b.substring(j+k):-1===q[0]&&(b=b.substring(0,j+k)+b.substring(j+this.diff_xIndex(g,h+q[1].length)));-1!==q[0]&&(h+=q[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};
+diff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c="",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;var d=a[0],e=d.diffs;if(0==e.length||0!=e[0][0])e.unshift([0,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0,
+c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};
+diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g="";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,j=!0;h.start1=e-g.length;h.start2=f-g.length;""!==g&&(h.length1=h.length2=g.length,h.diffs.push([0,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){var g=d.diffs[0][0],i=d.diffs[0][1];1===g?(h.length2+=i.length,f+=i.length,h.diffs.push(d.diffs.shift()),
+j=!1):-1===g&&1==h.diffs.length&&0==h.diffs[0][0]&&i.length>2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==i&&
+(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join("")};
+diff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split("\n");for(var c=0,d=/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error("Invalid patch string: "+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);""===e[2]?(f.start1--,f.length1=1):"0"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);""===e[4]?(f.start2--,f.length2=1):"0"==e[4]?f.length2=0:(f.start2--,f.length2=
+parseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error("Illegal escape in patch_fromText: "+g);}if("-"==e)f.diffs.push([-1,g]);else if("+"==e)f.diffs.push([1,g]);else if(" "==e)f.diffs.push([0,g]);else if("@"==e)break;else if(""!==e)throw Error('Invalid patch mode "'+e+'" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};
+diff_match_patch.patch_obj.prototype.toString=function(){var a,b;a=0===this.length1?this.start1+",0":1==this.length1?this.start1+1:this.start1+1+","+this.length1;b=0===this.length2?this.start2+",0":1==this.length2?this.start2+1:this.start2+1+","+this.length2;a=["@@ -"+a+" +"+b+" @@\n"];var c;for(b=0;b<this.diffs.length;b++){switch(this.diffs[b][0]){case 1:c="+";break;case -1:c="-";break;case 0:c=" "}a[b+1]=c+encodeURI(this.diffs[b][1])+"\n"}return a.join("").replace(/%20/g," ")};
+this.diff_match_patch=diff_match_patch;this.DIFF_DELETE=-1;this.DIFF_INSERT=1;this.DIFF_EQUAL=0;})()
diff --git a/docs/vendor/handlebars.min.js b/docs/vendor/handlebars.min.js
new file mode 100644
index 00000000..21b15506
--- /dev/null
+++ b/docs/vendor/handlebars.min.js
@@ -0,0 +1,29 @@
+/**!
+
+ @license
+ handlebars v4.7.6
+
+Copyright (C) 2011-2019 by Yehuda Katz
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*/
+!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a.parseWithoutProcessing=j.parseWithoutProcessing,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(45),i=e(h),j=c(46),k=c(51),l=c(52),m=e(l),n=c(49),o=e(n),p=c(44),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(37),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(38),p=e(o),q=c(44),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(30),k=c(32),l=e(k),m=c(33),n="4.7.6";b.VERSION=n;var o=8;b.COMPILER_REVISION=o;var p=7;b.LAST_COMPATIBLE_COMPILER_REVISION=p;var q={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};b.REVISION_CHANGES=q;var r="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===r)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]},resetLoggedPropertyAccesses:function(){m.resetLoggedProperties()}};var s=l["default"].log;b.log=s,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0,i=void 0,j=void 0;c&&(g=c.start.line,h=c.end.line,i=c.start.column,j=c.end.column,a+=" - "+g+":"+i);for(var k=Error.prototype.constructor.call(this,a),l=0;l<f.length;l++)this[f[l]]=k[f[l]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,this.endLineNumber=h,e?(Object.defineProperty(this,"column",{value:i,enumerable:!0}),Object.defineProperty(this,"endColumn",{value:j,enumerable:!0})):(this.column=i,this.endColumn=j))}catch(m){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){h["default"](a),j["default"](a),l["default"](a),n["default"](a),p["default"](a),r["default"](a),t["default"](a)}function e(a,b,c){a.helpers[b]&&(a.hooks[b]=a.helpers[b],c||delete a.helpers[b])}var f=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d,b.moveHelperToHooks=e;var g=c(11),h=f(g),i=c(12),j=f(i),k=c(25),l=f(k),m=c(26),n=f(m),o=c(27),p=f(o),q=c(28),r=f(q),s=c(29),t=f(s)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){(function(d){"use strict";var e=c(13)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(5),h=c(6),i=f(h);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,d){l&&(l.key=b,l.index=c,l.first=0===c,l.last=!!d,m&&(l.contextPath=m+b)),k+=f(a[b],{data:l,blockParams:g.blockParams([a[b],b],[m+b,null])})}if(!b)throw new i["default"]("Must pass iterator to #each");var f=b.fn,h=b.inverse,j=0,k="",l=void 0,m=void 0;if(b.data&&b.ids&&(m=g.appendContextPath(b.data.contextPath,b.ids[0])+"."),g.isFunction(a)&&(a=a.call(this)),b.data&&(l=g.createFrame(b.data)),a&&"object"==typeof a)if(g.isArray(a))for(var n=a.length;j<n;j++)j in a&&c(j,j,j===a.length-1);else if(d.Symbol&&a[d.Symbol.iterator]){for(var o=[],p=a[d.Symbol.iterator](),q=p.next();!q.done;q=p.next())o.push(q.value);a=o;for(var n=a.length;j<n;j++)c(j,j,j===a.length-1)}else!function(){var b=void 0;e(a).forEach(function(a){void 0!==b&&c(b,j-1),b=a,j++}),void 0!==b&&c(b,j-1,!0)}();return 0===j&&(k=h(this)),k})},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b,c){a.exports={"default":c(14),__esModule:!0}},function(a,b,c){c(15),a.exports=c(21).Object.keys},function(a,b,c){var d=c(16);c(18)("keys",function(a){return function(b){return a(d(b))}})},function(a,b,c){var d=c(17);a.exports=function(a){return Object(d(a))}},function(a,b){a.exports=function(a){if(void 0==a)throw TypeError("Can't call method on  "+a);return a}},function(a,b,c){var d=c(19),e=c(21),f=c(24);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(20),e=c(21),f=c(22),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(23);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("if",function(a,b){if(2!=arguments.length)throw new g["default"]("#if requires exactly one argument");return e.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||e.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){if(2!=arguments.length)throw new g["default"]("#unless requires exactly one argument");return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b,c){return a?c.lookupProperty(a,b):a})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("with",function(a,b){if(2!=arguments.length)throw new g["default"]("#with requires exactly one argument");e.isFunction(a)&&(a=a.call(this));var c=b.fn;if(e.isEmpty(a))return b.inverse(this);var d=b.data;return b.data&&b.ids&&(d=e.createFrame(b.data),d.contextPath=e.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:d,blockParams:e.blockParams([a],[d&&d.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(31),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=i(null);b.constructor=!1,b.__defineGetter__=!1,b.__defineSetter__=!1,b.__lookupGetter__=!1;var c=i(null);return c.__proto__=!1,{properties:{whitelist:l.createNewLookupObject(c,a.allowedProtoProperties),defaultValue:a.allowProtoPropertiesByDefault},methods:{whitelist:l.createNewLookupObject(b,a.allowedProtoMethods),defaultValue:a.allowProtoMethodsByDefault}}}function e(a,b,c){return"function"==typeof a?f(b.methods,c):f(b.properties,c)}function f(a,b){return void 0!==a.whitelist[b]?a.whitelist[b]===!0:void 0!==a.defaultValue?a.defaultValue:(g(b),!1)}function g(a){o[a]!==!0&&(o[a]=!0,n.log("error",'Handlebars: Access has been denied to resolve the property "'+a+'" because it is not an "own property" of its parent.\nYou can add a runtime option to disable the check or this warning:\nSee https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'))}function h(){j(o).forEach(function(a){delete o[a]})}var i=c(34)["default"],j=c(13)["default"],k=c(3)["default"];b.__esModule=!0,b.createProtoAccessControl=d,b.resultIsAllowed=e,b.resetLoggedProperties=h;var l=c(36),m=c(32),n=k(m),o=i(null)},function(a,b,c){a.exports={"default":c(35),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b){return d.create(a,b)}},function(a,b,c){"use strict";function d(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return f.extend.apply(void 0,[e(null)].concat(b))}var e=c(34)["default"];b.__esModule=!0,b.createNewLookupObject=d;var f=c(5)},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=v.COMPILER_REVISION;if(!(b>=v.LAST_COMPATIBLE_COMPILER_REVISION&&b<=v.COMPILER_REVISION)){if(b<v.LAST_COMPATIBLE_COMPILER_REVISION){var d=v.REVISION_CHANGES[c],e=v.REVISION_CHANGES[b];throw new u["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new u["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=s.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=s.extend({},e,{hooks:this.hooks,protoAccessControl:this.protoAccessControl}),g=b.VM.invokePartial.call(this,c,d,f);if(null==g&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),g=e.partials[e.name](d,f)),null!=g){if(e.indent){for(var h=g.split("\n"),i=0,j=h.length;i<j&&(h[i]||i+1!==j);i++)h[i]=e.indent+h[i];g=h.join("\n")}return g}throw new u["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(g,b,g.helpers,g.partials,f,i,h)}var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],f=e.data;d._setup(e),!e.partial&&a.useData&&(f=j(b,f));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=e.depths?b!=e.depths[0]?[b].concat(e.depths):e.depths:[b]),(c=k(a.main,c,g,e.depths||[],f,i))(b,e)}if(!b)throw new u["default"]("No environment passed to template");if(!a||!a.main)throw new u["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e=a.compiler&&7===a.compiler[0],g={strict:function(a,b,c){if(!(a&&b in a))throw new u["default"]('"'+b+'" not defined in '+a,{loc:c});return a[b]},lookupProperty:function(a,b){var c=a[b];return null==c?c:Object.prototype.hasOwnProperty.call(a,b)?c:y.resultIsAllowed(c,g.protoAccessControl,b)?c:void 0},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++){var e=a[d]&&g.lookupProperty(a[d],b);if(null!=e)return a[d][b]}},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:s.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},mergeIfNeeded:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=s.extend({},b,a)),c},nullContext:n({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){if(c.partial)g.protoAccessControl=c.protoAccessControl,g.helpers=c.helpers,g.partials=c.partials,g.decorators=c.decorators,g.hooks=c.hooks;else{var d=s.extend({},b.helpers,c.helpers);l(d,g),g.helpers=d,a.usePartial&&(g.partials=g.mergeIfNeeded(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(g.decorators=s.extend({},b.decorators,c.decorators)),g.hooks={},g.protoAccessControl=y.createProtoAccessControl(c);var f=c.allowCallsToHelperMissing||e;w.moveHelperToHooks(g,"helperMissing",f),w.moveHelperToHooks(g,"blockHelperMissing",f)}},d._child=function(b,c,d,e){if(a.useBlockParams&&!d)throw new u["default"]("must pass block params");if(a.useDepths&&!e)throw new u["default"]("must pass parent depths");return f(g,b,a[b],c,0,d,e)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=v.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=v.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=s.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new u["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?v.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),s.extend(b,g)}return b}function l(a,b){o(a).forEach(function(c){var d=a[c];a[c]=m(d,b)})}function m(a,b){var c=b.lookupProperty;return x.wrapHelper(a,function(a){return s.extend({lookupProperty:c},a)})}var n=c(39)["default"],o=c(13)["default"],p=c(3)["default"],q=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var r=c(5),s=p(r),t=c(6),u=q(t),v=c(4),w=c(10),x=c(43),y=c(33)},function(a,b,c){a.exports={"default":c(40),__esModule:!0}},function(a,b,c){c(41),a.exports=c(21).Object.seal},function(a,b,c){var d=c(42);c(18)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b){"use strict";function c(a,b){if("function"!=typeof a)return a;var c=function(){var c=arguments[arguments.length-1];return arguments[arguments.length-1]=b(c),a.apply(this,arguments)};return c}b.__esModule=!0,b.wrapHelper=c},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;i["default"].yy=o,o.locInfo=function(a){return new o.SourceLocation(b&&b.srcName,a)};var c=i["default"].parse(a);return c}function e(a,b){var c=d(a,b),e=new k["default"](b);return e.accept(c)}var f=c(1)["default"],g=c(3)["default"];b.__esModule=!0,b.parseWithoutProcessing=d,b.parse=e;var h=c(47),i=f(h),j=c(48),k=f(j),l=c(50),m=g(l),n=c(5);b.parser=i["default"];var o={};n.extend(o,m)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,0],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{15:[2,48],17:39,18:[2,48]},{20:41,56:40,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:44,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:45,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:41,56:48,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:49,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,50]},{72:[1,35],86:51},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:52,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:53,38:55,39:[1,57],43:56,44:[1,58],45:54,47:[2,54]},{28:59,43:60,44:[1,58],47:[2,56]},{13:62,15:[1,20],18:[1,61]},{33:[2,86],57:63,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],
+72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:64,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:65,47:[1,66]},{30:67,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:68,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:69,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:70,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:74,33:[2,80],50:71,63:72,64:75,65:[1,43],69:73,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,79]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,50]},{20:74,53:80,54:[2,84],63:81,64:75,65:[1,43],69:82,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:83,47:[1,66]},{47:[2,55]},{4:84,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:85,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:86,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:87,47:[1,66]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:74,33:[2,88],58:88,63:89,64:75,65:[1,43],69:90,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:91,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:92,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,31:93,33:[2,60],63:94,64:75,65:[1,43],69:95,70:76,71:77,72:[1,78],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,66],36:96,63:97,64:75,65:[1,43],69:98,70:76,71:77,72:[1,78],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,22:99,23:[2,52],63:100,64:75,65:[1,43],69:101,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,92],62:102,63:103,64:75,65:[1,43],69:104,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,105]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:106,72:[1,107],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,108],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,109]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:55,39:[1,57],43:56,44:[1,58],45:111,46:110,47:[2,76]},{33:[2,70],40:112,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,113]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:74,63:115,64:75,65:[1,43],67:114,68:[2,96],69:116,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,117]},{32:118,33:[2,62],74:119,75:[1,120]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:121,74:122,75:[1,120]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,123]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,124]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,108]},{20:74,63:125,64:75,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:74,33:[2,72],41:126,63:127,64:75,65:[1,43],69:128,70:76,71:77,72:[1,78],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,129]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,130]},{33:[2,63]},{72:[1,132],76:131},{33:[1,133]},{33:[2,69]},{15:[2,12],18:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:134,74:135,75:[1,120]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,137],77:[1,136]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,138]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],54:[2,55],56:[2,20],60:[2,57],73:[2,81],82:[2,85],86:[2,18],90:[2,89],101:[2,53],104:[2,93],110:[2,19],111:[2,77],116:[2,97],119:[2,63],122:[2,69],135:[2,75],136:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substring(a,b.yyleng-c+a)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(e(5,9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]+?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(49),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substring(1,a.length-1):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g=0,h=b.length;g<h;g++){var i=b[g].part,j=b[g].original!==i;if(d+=(b[g].separator||"")+i,j||".."!==i&&"."!==i&&"this"!==i)e.push(i);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===i&&f++}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=m.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(m.isArray(a)&&m.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(34)["default"],j=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var k=c(6),l=j(k),m=c(5),n=c(45),o=j(n),p=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){return this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[],b.knownHelpers=m.extend(i(null),{helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},b.knownHelpers),this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new l["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new l["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new l["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,o["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=o["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:p.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=o["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&o["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||o["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&m.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),", ",JSON.stringify(b.source.currentLocation)," )"]:e}var g=c(13)["default"],h=c(1)["default"];b.__esModule=!0;var i=c(4),j=c(6),k=h(j),l=c(5),m=c(53),n=h(m);e.prototype={nameLookup:function(a,b){return this.internalNameLookup(a,b)},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=i.COMPILER_REVISION,b=i.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return l.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},internalNameLookup:function(a,b){return this.lookupPropertyFunctionIsUsed=!0,["lookupProperty(",a,",",JSON.stringify(b),")"]},lookupPropertyFunctionIsUsed:!1,compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new k["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend(["var decorators = container.decorators, ",this.lookupPropertyFunctionVarDeclaration(),";\n"]),
+this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var j=this.createFunctionContext(d);if(this.isChild)return j;var l={compiler:this.compilerInfo(),main:j};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new n["default"](this.options.srcName),this.decorators=new n["default"](this.options.srcName)},createFunctionContext:function(a){var b=this,c="",d=this.stackVars.concat(this.registers.list);d.length>0&&(c+=", "+d.join(", "));var e=0;g(this.aliases).forEach(function(a){var d=b.aliases[a];d.children&&d.referenceCount>1&&(c+=", alias"+ ++e+"="+a,d.children[0]="alias"+e)}),this.lookupPropertyFunctionIsUsed&&(c+=", "+this.lookupPropertyFunctionVarDeclaration());var f=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&f.push("blockParams"),this.useDepths&&f.push("depths");var h=this.mergeSource(c);return a?(f.push(h),Function.apply(this,f)):this.source.wrap(["function(",f.join(","),") {\n  ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend("  + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},lookupPropertyFunctionVarDeclaration:function(){return"\n      lookupProperty = container.lookupProperty || function(parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n        return undefined\n    }\n    ".trim()},blockValue:function(a){var b=this.aliasable("container.hooks.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("container.hooks.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:{},types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=[];c&&f.push(e.name),f.push(d),this.options.strict||f.push(this.aliasable("container.hooks.helperMissing"));var g=["(",this.itemsSeparatedBy(f,"||"),")"],h=this.source.functionCall(g,"call",e.callParams);this.push(h)},itemsSeparatedBy:function(a,b){var c=[];c.push(a[0]);for(var d=1;d<a.length;d++)c.push(b,a[d]);return c},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("container.hooks.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new k["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new k["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e.loc=JSON.stringify(this.source.currentLocation),e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(g.isArray(a)){for(var d=[],e=0,f=a.length;e<f;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}var f=c(13)["default"];b.__esModule=!0;var g=c(5),h=void 0;try{}catch(i){}h||(h=function(a,b,c,d){this.src="",d&&this.add(d)},h.prototype={add:function(a){g.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){g.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add(["  ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new h(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof h?a:(a=d(a,this,b),new h(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=this,c=[];f(a).forEach(function(e){var f=d(a[e],b);"undefined"!==f&&c.push([b.quotedString(e),":",f])});var e=this.generateList(c);return e.prepend("{"),e.add("}"),e},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
\ No newline at end of file
diff --git a/docs/vendor/jquery.min.js b/docs/vendor/jquery.min.js
new file mode 100644
index 00000000..b0614034
--- /dev/null
+++ b/docs/vendor/jquery.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
diff --git a/docs/vendor/list.min.js b/docs/vendor/list.min.js
new file mode 100644
index 00000000..06c4721a
--- /dev/null
+++ b/docs/vendor/list.min.js
@@ -0,0 +1,2 @@
+// List.js v1.3.0 (http://www.listjs.com) by Jonny Strömberg (http://javve.com)
+!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){!function(c,d){"use strict";var e=c.document,f=a("./src/utils/get-by-class"),g=a("./src/utils/extend"),h=a("./src/utils/index-of"),i=a("./src/utils/events"),j=a("./src/utils/to-string"),k=a("./src/utils/natural-sort"),l=a("./src/utils/classes"),m=a("./src/utils/get-attribute"),n=a("./src/utils/to-array"),o=function(b,c,p){var q,r=this,s=a("./src/item")(r),t=a("./src/add-async")(r);q={start:function(){r.listClass="list",r.searchClass="search",r.sortClass="sort",r.page=1e4,r.i=1,r.items=[],r.visibleItems=[],r.matchingItems=[],r.searched=!1,r.filtered=!1,r.searchColumns=d,r.handlers={updated:[]},r.plugins={},r.valueNames=[],r.utils={getByClass:f,extend:g,indexOf:h,events:i,toString:j,naturalSort:k,classes:l,getAttribute:m,toArray:n},r.utils.extend(r,c),r.listContainer="string"==typeof b?e.getElementById(b):b,r.listContainer&&(r.list=f(r.listContainer,r.listClass,!0),r.parse=a("./src/parse")(r),r.templater=a("./src/templater")(r),r.search=a("./src/search")(r),r.filter=a("./src/filter")(r),r.sort=a("./src/sort")(r),this.handlers(),this.items(),r.update(),this.plugins())},handlers:function(){for(var a in r.handlers)r[a]&&r.on(a,r[a])},items:function(){r.parse(r.list),p!==d&&r.add(p)},plugins:function(){for(var a=0;a<r.plugins.length;a++){var b=r.plugins[a];r[b.name]=b,b.init(r,o)}}},this.reIndex=function(){r.items=[],r.visibleItems=[],r.matchingItems=[],r.searched=!1,r.filtered=!1,r.parse(r.list)},this.toJSON=function(){for(var a=[],b=0,c=r.items.length;b<c;b++)a.push(r.items[b].values());return a},this.add=function(a,b){if(0!==a.length){if(b)return void t(a,b);var c=[],e=!1;a[0]===d&&(a=[a]);for(var f=0,g=a.length;f<g;f++){var h=null;e=r.items.length>r.page,h=new s(a[f],d,e),r.items.push(h),c.push(h)}return r.update(),c}},this.show=function(a,b){return this.i=a,this.page=b,r.update(),r},this.remove=function(a,b,c){for(var d=0,e=0,f=r.items.length;e<f;e++)r.items[e].values()[a]==b&&(r.templater.remove(r.items[e],c),r.items.splice(e,1),f--,e--,d++);return r.update(),d},this.get=function(a,b){for(var c=[],d=0,e=r.items.length;d<e;d++){var f=r.items[d];f.values()[a]==b&&c.push(f)}return c},this.size=function(){return r.items.length},this.clear=function(){return r.templater.clear(),r.items=[],r},this.on=function(a,b){return r.handlers[a].push(b),r},this.off=function(a,b){var c=r.handlers[a],d=h(c,b);return d>-1&&c.splice(d,1),r},this.trigger=function(a){for(var b=r.handlers[a].length;b--;)r.handlers[a][b](r);return r},this.reset={filter:function(){for(var a=r.items,b=a.length;b--;)a[b].filtered=!1;return r},search:function(){for(var a=r.items,b=a.length;b--;)a[b].found=!1;return r}},this.update=function(){var a=r.items,b=a.length;r.visibleItems=[],r.matchingItems=[],r.templater.clear();for(var c=0;c<b;c++)a[c].matching()&&r.matchingItems.length+1>=r.i&&r.visibleItems.length<r.page?(a[c].show(),r.visibleItems.push(a[c]),r.matchingItems.push(a[c])):a[c].matching()?(r.matchingItems.push(a[c]),a[c].hide()):a[c].hide();return r.trigger("updated"),r},q.start()};"function"==typeof define&&define.amd&&define(function(){return o}),b.exports=o,c.List=o}(window)},{"./src/add-async":2,"./src/filter":3,"./src/item":4,"./src/parse":5,"./src/search":6,"./src/sort":7,"./src/templater":8,"./src/utils/classes":9,"./src/utils/events":10,"./src/utils/extend":11,"./src/utils/get-attribute":12,"./src/utils/get-by-class":13,"./src/utils/index-of":14,"./src/utils/natural-sort":15,"./src/utils/to-array":16,"./src/utils/to-string":17}],2:[function(a,b,c){b.exports=function(a){var b=function(c,d,e){var f=c.splice(0,50);e=e||[],e=e.concat(a.add(f)),c.length>0?setTimeout(function(){b(c,d,e)},1):(a.update(),d(e))};return b}},{}],3:[function(a,b,c){b.exports=function(a){return a.handlers.filterStart=a.handlers.filterStart||[],a.handlers.filterComplete=a.handlers.filterComplete||[],function(b){if(a.trigger("filterStart"),a.i=1,a.reset.filter(),void 0===b)a.filtered=!1;else{a.filtered=!0;for(var c=a.items,d=0,e=c.length;d<e;d++){var f=c[d];b(f)?f.filtered=!0:f.filtered=!1}}return a.update(),a.trigger("filterComplete"),a.visibleItems}}},{}],4:[function(a,b,c){b.exports=function(a){return function(b,c,d){var e=this;this._values={},this.found=!1,this.filtered=!1;var f=function(b,c,d){if(void 0===c)d?e.values(b,d):e.values(b);else{e.elm=c;var f=a.templater.get(e,b);e.values(f)}};this.values=function(b,c){if(void 0===b)return e._values;for(var d in b)e._values[d]=b[d];c!==!0&&a.templater.set(e,e.values())},this.show=function(){a.templater.show(e)},this.hide=function(){a.templater.hide(e)},this.matching=function(){return a.filtered&&a.searched&&e.found&&e.filtered||a.filtered&&!a.searched&&e.filtered||!a.filtered&&a.searched&&e.found||!a.filtered&&!a.searched},this.visible=function(){return!(!e.elm||e.elm.parentNode!=a.list)},f(b,c,d)}}},{}],5:[function(a,b,c){b.exports=function(b){var c=a("./item")(b),d=function(a){for(var b=a.childNodes,c=[],d=0,e=b.length;d<e;d++)void 0===b[d].data&&c.push(b[d]);return c},e=function(a,d){for(var e=0,f=a.length;e<f;e++)b.items.push(new c(d,a[e]))},f=function(a,c){var d=a.splice(0,50);e(d,c),a.length>0?setTimeout(function(){f(a,c)},1):(b.update(),b.trigger("parseComplete"))};return b.handlers.parseComplete=b.handlers.parseComplete||[],function(){var a=d(b.list),c=b.valueNames;b.indexAsync?f(a,c):e(a,c)}}},{"./item":4}],6:[function(a,b,c){b.exports=function(a){var b,c,d,e,f={resetList:function(){a.i=1,a.templater.clear(),e=void 0},setOptions:function(a){2==a.length&&a[1]instanceof Array?c=a[1]:2==a.length&&"function"==typeof a[1]?(c=void 0,e=a[1]):3==a.length?(c=a[1],e=a[2]):c=void 0},setColumns:function(){0!==a.items.length&&void 0===c&&(c=void 0===a.searchColumns?f.toArray(a.items[0].values()):a.searchColumns)},setSearchString:function(b){b=a.utils.toString(b).toLowerCase(),b=b.replace(/[-[\]{}()*+?.,\\^$|#]/g,"\\$&"),d=b},toArray:function(a){var b=[];for(var c in a)b.push(c);return b}},g={list:function(){for(var b=0,c=a.items.length;b<c;b++)g.item(a.items[b])},item:function(a){a.found=!1;for(var b=0,d=c.length;b<d;b++)if(g.values(a.values(),c[b]))return void(a.found=!0)},values:function(c,e){return!!(c.hasOwnProperty(e)&&(b=a.utils.toString(c[e]).toLowerCase(),""!==d&&b.search(d)>-1))},reset:function(){a.reset.search(),a.searched=!1}},h=function(b){return a.trigger("searchStart"),f.resetList(),f.setSearchString(b),f.setOptions(arguments),f.setColumns(),""===d?g.reset():(a.searched=!0,e?e(d,c):g.list()),a.update(),a.trigger("searchComplete"),a.visibleItems};return a.handlers.searchStart=a.handlers.searchStart||[],a.handlers.searchComplete=a.handlers.searchComplete||[],a.utils.events.bind(a.utils.getByClass(a.listContainer,a.searchClass),"keyup",function(b){var c=b.target||b.srcElement,d=""===c.value&&!a.searched;d||h(c.value)}),a.utils.events.bind(a.utils.getByClass(a.listContainer,a.searchClass),"input",function(a){var b=a.target||a.srcElement;""===b.value&&h("")}),h}},{}],7:[function(a,b,c){b.exports=function(a){a.sortFunction=a.sortFunction||function(b,c,d){return d.desc="desc"==d.order,a.utils.naturalSort(b.values()[d.valueName],c.values()[d.valueName],d)};var b={els:void 0,clear:function(){for(var c=0,d=b.els.length;c<d;c++)a.utils.classes(b.els[c]).remove("asc"),a.utils.classes(b.els[c]).remove("desc")},getOrder:function(b){var c=a.utils.getAttribute(b,"data-order");return"asc"==c||"desc"==c?c:a.utils.classes(b).has("desc")?"asc":a.utils.classes(b).has("asc")?"desc":"asc"},getInSensitive:function(b,c){var d=a.utils.getAttribute(b,"data-insensitive");"false"===d?c.insensitive=!1:c.insensitive=!0},setOrder:function(c){for(var d=0,e=b.els.length;d<e;d++){var f=b.els[d];if(a.utils.getAttribute(f,"data-sort")===c.valueName){var g=a.utils.getAttribute(f,"data-order");"asc"==g||"desc"==g?g==c.order&&a.utils.classes(f).add(c.order):a.utils.classes(f).add(c.order)}}}},c=function(){a.trigger("sortStart");var c={},d=arguments[0].currentTarget||arguments[0].srcElement||void 0;d?(c.valueName=a.utils.getAttribute(d,"data-sort"),b.getInSensitive(d,c),c.order=b.getOrder(d)):(c=arguments[1]||c,c.valueName=arguments[0],c.order=c.order||"asc",c.insensitive="undefined"==typeof c.insensitive||c.insensitive),b.clear(),b.setOrder(c),c.sortFunction=c.sortFunction||a.sortFunction,a.items.sort(function(a,b){var d="desc"===c.order?-1:1;return c.sortFunction(a,b,c)*d}),a.update(),a.trigger("sortComplete")};return a.handlers.sortStart=a.handlers.sortStart||[],a.handlers.sortComplete=a.handlers.sortComplete||[],b.els=a.utils.getByClass(a.listContainer,a.sortClass),a.utils.events.bind(b.els,"click",c),a.on("searchStart",b.clear),a.on("filterStart",b.clear),c}},{}],8:[function(a,b,c){var d=function(a){var b,c=this,d=function(){b=c.getItemSource(a.item),b&&(b=c.clearSourceItem(b,a.valueNames))};this.clearSourceItem=function(b,c){for(var d=0,e=c.length;d<e;d++){var f;if(c[d].data)for(var g=0,h=c[d].data.length;g<h;g++)b.setAttribute("data-"+c[d].data[g],"");else c[d].attr&&c[d].name?(f=a.utils.getByClass(b,c[d].name,!0),f&&f.setAttribute(c[d].attr,"")):(f=a.utils.getByClass(b,c[d],!0),f&&(f.innerHTML=""));f=void 0}return b},this.getItemSource=function(b){if(void 0===b){for(var c=a.list.childNodes,d=0,e=c.length;d<e;d++)if(void 0===c[d].data)return c[d].cloneNode(!0)}else{if(/<tr[\s>]/g.exec(b)){var f=document.createElement("tbody");return f.innerHTML=b,f.firstChild}if(b.indexOf("<")!==-1){var g=document.createElement("div");return g.innerHTML=b,g.firstChild}var h=document.getElementById(a.item);if(h)return h}},this.get=function(b,d){c.create(b);for(var e={},f=0,g=d.length;f<g;f++){var h;if(d[f].data)for(var i=0,j=d[f].data.length;i<j;i++)e[d[f].data[i]]=a.utils.getAttribute(b.elm,"data-"+d[f].data[i]);else d[f].attr&&d[f].name?(h=a.utils.getByClass(b.elm,d[f].name,!0),e[d[f].name]=h?a.utils.getAttribute(h,d[f].attr):""):(h=a.utils.getByClass(b.elm,d[f],!0),e[d[f]]=h?h.innerHTML:"");h=void 0}return e},this.set=function(b,d){var e=function(b){for(var c=0,d=a.valueNames.length;c<d;c++)if(a.valueNames[c].data){for(var e=a.valueNames[c].data,f=0,g=e.length;f<g;f++)if(e[f]===b)return{data:b}}else{if(a.valueNames[c].attr&&a.valueNames[c].name&&a.valueNames[c].name==b)return a.valueNames[c];if(a.valueNames[c]===b)return b}},f=function(c,d){var f,g=e(c);g&&(g.data?b.elm.setAttribute("data-"+g.data,d):g.attr&&g.name?(f=a.utils.getByClass(b.elm,g.name,!0),f&&f.setAttribute(g.attr,d)):(f=a.utils.getByClass(b.elm,g,!0),f&&(f.innerHTML=d)),f=void 0)};if(!c.create(b))for(var g in d)d.hasOwnProperty(g)&&f(g,d[g])},this.create=function(a){if(void 0!==a.elm)return!1;if(void 0===b)throw new Error("The list need to have at list one item on init otherwise you'll have to add a template.");var d=b.cloneNode(!0);return d.removeAttribute("id"),a.elm=d,c.set(a,a.values()),!0},this.remove=function(b){b.elm.parentNode===a.list&&a.list.removeChild(b.elm)},this.show=function(b){c.create(b),a.list.appendChild(b.elm)},this.hide=function(b){void 0!==b.elm&&b.elm.parentNode===a.list&&a.list.removeChild(b.elm)},this.clear=function(){if(a.list.hasChildNodes())for(;a.list.childNodes.length>=1;)a.list.removeChild(a.list.firstChild)},d()};b.exports=function(a){return new d(a)}},{}],9:[function(a,b,c){function d(a){if(!a||!a.nodeType)throw new Error("A DOM element reference is required");this.el=a,this.list=a.classList}var e=a("./index-of"),f=/\s+/,g=Object.prototype.toString;b.exports=function(a){return new d(a)},d.prototype.add=function(a){if(this.list)return this.list.add(a),this;var b=this.array(),c=e(b,a);return~c||b.push(a),this.el.className=b.join(" "),this},d.prototype.remove=function(a){if("[object RegExp]"==g.call(a))return this.removeMatching(a);if(this.list)return this.list.remove(a),this;var b=this.array(),c=e(b,a);return~c&&b.splice(c,1),this.el.className=b.join(" "),this},d.prototype.removeMatching=function(a){for(var b=this.array(),c=0;c<b.length;c++)a.test(b[c])&&this.remove(b[c]);return this},d.prototype.toggle=function(a,b){return this.list?("undefined"!=typeof b?b!==this.list.toggle(a,b)&&this.list.toggle(a):this.list.toggle(a),this):("undefined"!=typeof b?b?this.add(a):this.remove(a):this.has(a)?this.remove(a):this.add(a),this)},d.prototype.array=function(){var a=this.el.getAttribute("class")||"",b=a.replace(/^\s+|\s+$/g,""),c=b.split(f);return""===c[0]&&c.shift(),c},d.prototype.has=d.prototype.contains=function(a){return this.list?this.list.contains(a):!!~e(this.array(),a)}},{"./index-of":14}],10:[function(a,b,c){var d=window.addEventListener?"addEventListener":"attachEvent",e=window.removeEventListener?"removeEventListener":"detachEvent",f="addEventListener"!==d?"on":"",g=a("./to-array");c.bind=function(a,b,c,e){a=g(a);for(var h=0;h<a.length;h++)a[h][d](f+b,c,e||!1)},c.unbind=function(a,b,c,d){a=g(a);for(var h=0;h<a.length;h++)a[h][e](f+b,c,d||!1)}},{"./to-array":16}],11:[function(a,b,c){b.exports=function(a){for(var b,c=Array.prototype.slice.call(arguments,1),d=0;b=c[d];d++)if(b)for(var e in b)a[e]=b[e];return a}},{}],12:[function(a,b,c){b.exports=function(a,b){var c=a.getAttribute&&a.getAttribute(b)||null;if(!c)for(var d=a.attributes,e=d.length,f=0;f<e;f++)void 0!==b[f]&&b[f].nodeName===b&&(c=b[f].nodeValue);return c}},{}],13:[function(a,b,c){b.exports=function(){return document.getElementsByClassName?function(a,b,c){return c?a.getElementsByClassName(b)[0]:a.getElementsByClassName(b)}:document.querySelector?function(a,b,c){return b="."+b,c?a.querySelector(b):a.querySelectorAll(b)}:function(a,b,c){var d=[],e="*";null===a&&(a=document);for(var f=a.getElementsByTagName(e),g=f.length,h=new RegExp("(^|\\s)"+b+"(\\s|$)"),i=0,j=0;i<g;i++)if(h.test(f[i].className)){if(c)return f[i];d[j]=f[i],j++}return d}}()},{}],14:[function(a,b,c){var d=[].indexOf;b.exports=function(a,b){if(d)return a.indexOf(b);for(var c=0;c<a.length;++c)if(a[c]===b)return c;return-1}},{}],15:[function(a,b,c){b.exports=function(a,b,c){var d,e,f=/(^([+\-]?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?(?=\D|\s|$))|^0x[\da-fA-F]+$|\d+)/g,g=/^\s+|\s+$/g,h=/\s+/g,i=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,j=/^0x[0-9a-f]+$/i,k=/^0/,l=c||{},m=function(a){return(l.insensitive&&(""+a).toLowerCase()||""+a).replace(g,"")},n=m(a),o=m(b),p=n.replace(f,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),q=o.replace(f,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),r=parseInt(n.match(j),16)||1!==p.length&&Date.parse(n),s=parseInt(o.match(j),16)||r&&o.match(i)&&Date.parse(o)||null,t=function(a,b){return(!a.match(k)||1==b)&&parseFloat(a)||a.replace(h," ").replace(g,"")||0};if(s){if(r<s)return-1;if(r>s)return 1}for(var u=0,v=p.length,w=q.length,x=Math.max(v,w);u<x;u++){if(d=t(p[u]||"",v),e=t(q[u]||"",w),isNaN(d)!==isNaN(e))return isNaN(d)?1:-1;if(/[^\x00-\x80]/.test(d+e)&&d.localeCompare){var y=d.localeCompare(e);return y/Math.abs(y)}if(d<e)return-1;if(d>e)return 1}return 0}},{}],16:[function(a,b,c){function d(a){return"[object Array]"===Object.prototype.toString.call(a)}b.exports=function(a){if("undefined"==typeof a)return[];if(null===a)return[null];if(a===window)return[window];if("string"==typeof a)return[a];if(d(a))return a;if("number"!=typeof a.length)return[a];if("function"==typeof a&&a instanceof Function)return[a];for(var b=[],c=0;c<a.length;c++)(Object.prototype.hasOwnProperty.call(a,c)||c in a)&&b.push(a[c]);return b.length?b:[]}},{}],17:[function(a,b,c){b.exports=function(a){return a=void 0===a?"":a,a=null===a?"":a,a=a.toString()}},{}]},{},[1]);
\ No newline at end of file
diff --git a/docs/vendor/lodash.custom.min.js b/docs/vendor/lodash.custom.min.js
new file mode 100644
index 00000000..c9717c38
--- /dev/null
+++ b/docs/vendor/lodash.custom.min.js
@@ -0,0 +1,41 @@
+/**
+ * @license
+ * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
+ * Build: `lodash -p -o template/vendor/lodash.custom.min.js include="get,set,groupBy,each,extend,some,isNaN" exports="amd"`
+ */
+;(function(){function t(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function e(t,e,r,n){for(var o=-1,c=null==t?0:t.length;++o<c;){var u=t[o];e(n,u,r(u),t)}return n}function r(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&false!==e(t[r],r,t););return t}function n(t,e){for(var r=-1,n=null==t?0:t.length,o=0,c=[];++r<n;){var u=t[r];e(u,r,t)&&(c[o++]=u)}return c}function o(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];
+return t}function c(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return true;return false}function u(t){return function(e){return null==e?Ut:e[t]}}function i(t){return function(e){return t(e)}}function a(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}function f(t){var e=Object;return function(r){return t(e(r))}}function s(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r}function l(){}function b(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){
+var n=t[e];this.set(n[0],n[1])}}function h(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function p(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function y(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new p;++e<r;)this.add(t[e])}function j(t){this.size=(this.__data__=new h(t)).size}function _(t,e){var r=Ke(t),n=!r&&Je(t),o=!r&&!n&&Qe(t),c=!r&&!n&&!o&&Ze(t);if(r=r||n||o||c){for(var n=t.length,u=String,i=-1,a=Array(n);++i<n;)a[i]=u(i);
+n=a}else n=[];var f,u=n.length;for(f in t)!e&&!ce.call(t,f)||r&&("length"==f||o&&("offset"==f||"parent"==f)||c&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||ot(f,u))||n.push(f);return n}function v(t,e,r){var n=t[e];ce.call(t,e)&&pt(n,r)&&(r!==Ut||e in t)||m(t,e,r)}function g(t,e){for(var r=t.length;r--;)if(pt(t[r][0],e))return r;return-1}function d(t,e,r,n){return Pe(t,function(t,o,c){e(n,t,r(t),c)}),n}function A(t,e){return t&&G(e,St(e),t)}function w(t,e){return t&&G(e,zt(e),t)}function m(t,e,r){
+"__proto__"==e&&ve?ve(t,e,{configurable:true,enumerable:true,value:r,writable:true}):t[e]=r}function O(t,e,n,o,c,u){var i,a=1&e,f=2&e,s=4&e;if(n&&(i=c?n(t,o,c,u):n(t)),i!==Ut)return i;if(!vt(t))return t;if(o=Ke(t)){if(i=rt(t),!a)return W(t,i)}else{var l=We(t),b="[object Function]"==l||"[object GeneratorFunction]"==l;if(Qe(t))return R(t,a);if("[object Object]"==l||"[object Arguments]"==l||b&&!c){if(i=f||b?{}:typeof t.constructor!="function"||it(t)?{}:Ne(he(t)),!a)return f?H(t,w(i,t)):q(t,A(i,t))}else{if(!Tt[l])return c?t:{};
+i=nt(t,l,a)}}if(u||(u=new j),c=u.get(t))return c;if(u.set(t,i),Ye(t))return t.forEach(function(r){i.add(O(r,e,n,r,t,u))}),i;if(Xe(t))return t.forEach(function(r,o){i.set(o,O(r,e,n,o,t,u))}),i;var f=s?f?X:Q:f?zt:St,h=o?Ut:f(t);return r(h||t,function(r,o){h&&(o=r,r=t[o]),v(i,o,O(r,e,n,o,t,u))}),i}function S(t,e){e=C(e,t);for(var r=0,n=e.length;null!=t&&r<n;)t=t[st(e[r++])];return r&&r==n?t:Ut}function z(t,e,r){return e=e(t),Ke(t)?e:o(e,r(t))}function k(t){if(null==t)t=t===Ut?"[object Undefined]":"[object Null]";else if(_e&&_e in Object(t)){
+var e=ce.call(t,_e),r=t[_e];try{t[_e]=Ut;var n=true}catch(t){}var o=ie.call(t);n&&(e?t[_e]=r:delete t[_e]),t=o}else t=ie.call(t);return t}function x(t){return gt(t)&&"[object Arguments]"==k(t)}function E(t,e,r,n,o){if(t===e)e=true;else if(null==t||null==e||!gt(t)&&!gt(e))e=t!==t&&e!==e;else t:{var c=Ke(t),u=Ke(e),i=c?"[object Array]":We(t),a=u?"[object Array]":We(e),i="[object Arguments]"==i?"[object Object]":i,a="[object Arguments]"==a?"[object Object]":a,f="[object Object]"==i,u="[object Object]"==a;
+if((a=i==a)&&Qe(t)){if(!Qe(e)){e=false;break t}c=true,f=false}if(a&&!f)o||(o=new j),e=c||Ze(t)?J(t,e,r,n,E,o):K(t,e,i,r,n,E,o);else{if(!(1&r)&&(c=f&&ce.call(t,"__wrapped__"),i=u&&ce.call(e,"__wrapped__"),c||i)){t=c?t.value():t,e=i?e.value():e,o||(o=new j),e=E(t,e,r,n,o);break t}if(a)e:if(o||(o=new j),c=1&r,i=Q(t),u=i.length,a=Q(e).length,u==a||c){for(f=u;f--;){var s=i[f];if(!(c?s in e:ce.call(e,s))){e=false;break e}}if((a=o.get(t))&&o.get(e))e=a==e;else{a=true,o.set(t,e),o.set(e,t);for(var l=c;++f<u;){var s=i[f],b=t[s],h=e[s];
+if(n)var p=c?n(h,b,s,e,t,o):n(b,h,s,t,e,o);if(p===Ut?b!==h&&!E(b,h,r,n,o):!p){a=false;break}l||(l="constructor"==s)}a&&!l&&(r=t.constructor,n=e.constructor,r!=n&&"constructor"in t&&"constructor"in e&&!(typeof r=="function"&&r instanceof r&&typeof n=="function"&&n instanceof n)&&(a=false)),o.delete(t),o.delete(e),e=a}}else e=false;else e=false}}return e}function F(t){return gt(t)&&"[object Map]"==We(t)}function I(t,e){var r=e.length,n=r;if(null==t)return!n;for(t=Object(t);r--;){var o=e[r];if(o[2]?o[1]!==t[o[0]]:!(o[0]in t))return false;
+}for(;++r<n;){var o=e[r],c=o[0],u=t[c],i=o[1];if(o[2]){if(u===Ut&&!(c in t))return false}else if(o=new j,void 0===Ut?!E(i,u,3,void 0,o):1)return false}return true}function M(t){return gt(t)&&"[object Set]"==We(t)}function U(t){return gt(t)&&_t(t.length)&&!!Rt[k(t)]}function B(t){return typeof t=="function"?t:null==t?xt:typeof t=="object"?Ke(t)?$(t[0],t[1]):D(t):Ft(t)}function D(t){var e=tt(t);return 1==e.length&&e[0][2]?at(e[0][0],e[0][1]):function(r){return r===t||I(r,e)}}function $(t,e){return ut(t)&&e===e&&!vt(e)?at(st(t),e):function(r){
+var n=mt(r,t);return n===Ut&&n===e?Ot(r,t):E(e,n,3)}}function L(t){return function(e){return S(e,t)}}function N(t){return Ge(ft(t,xt),t+"")}function P(t,e){var r;return Pe(t,function(t,n,o){return r=e(t,n,o),!r}),!!r}function V(t){if(typeof t=="string")return t;if(Ke(t)){for(var e=V,r=-1,n=null==t?0:t.length,o=Array(n);++r<n;)o[r]=e(t[r],r,t);return o+""}return At(t)?Le?Le.call(t):"":(e=t+"","0"==e&&1/t==-Bt?"-0":e)}function C(t,e){return Ke(t)?t:ut(t,e)?[t]:qe(wt(t))}function R(t,e){if(e)return t.slice();
+var r=t.length,r=be?be(r):new t.constructor(r);return t.copy(r),r}function T(t){var e=new t.constructor(t.byteLength);return new le(e).set(new le(t)),e}function W(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}function G(t,e,r){var n=!r;r||(r={});for(var o=-1,c=e.length;++o<c;){var u=e[o],i=Ut;i===Ut&&(i=t[u]),n?m(r,u,i):v(r,u,i)}return r}function q(t,e){return G(t,Re(t),e)}function H(t,e){return G(t,Te(t),e)}function J(t,e,r,n,o,u){var i=1&r,a=t.length,f=e.length;if(a!=f&&!(i&&f>a))return false;
+if((f=u.get(t))&&u.get(e))return f==e;var f=-1,s=true,l=2&r?new y:Ut;for(u.set(t,e),u.set(e,t);++f<a;){var b=t[f],h=e[f];if(n)var p=i?n(h,b,f,e,t,u):n(b,h,f,t,e,u);if(p!==Ut){if(p)continue;s=false;break}if(l){if(!c(e,function(t,e){if(!l.has(e)&&(b===t||o(b,t,r,n,u)))return l.push(e)})){s=false;break}}else if(b!==h&&!o(b,h,r,n,u)){s=false;break}}return u.delete(t),u.delete(e),s}function K(t,e,r,n,o,c,u){switch(r){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)break;t=t.buffer,
+e=e.buffer;case"[object ArrayBuffer]":if(t.byteLength!=e.byteLength||!c(new le(t),new le(e)))break;return true;case"[object Boolean]":case"[object Date]":case"[object Number]":return pt(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var i=a;case"[object Set]":if(i||(i=s),t.size!=e.size&&!(1&n))break;return(r=u.get(t))?r==e:(n|=2,u.set(t,e),e=J(i(t),i(e),n,o,c,u),u.delete(t),e);case"[object Symbol]":
+if($e)return $e.call(t)==$e.call(e)}return false}function Q(t){return z(t,St,Re)}function X(t){return z(t,zt,Te)}function Y(){var t=l.iteratee||Et,t=t===Et?B:t;return arguments.length?t(arguments[0],arguments[1]):t}function Z(t,e){var r=t.__data__,n=typeof e;return("string"==n||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==e:null===e)?r[typeof e=="string"?"string":"hash"]:r.map}function tt(t){for(var e=St(t),r=e.length;r--;){var n=e[r],o=t[n];e[r]=[n,o,o===o&&!vt(o)]}return e}function et(t,e){
+var r=null==t?Ut:t[e];return(!vt(r)||ue&&ue in r?0:(jt(r)?ae:Vt).test(lt(r)))?r:Ut}function rt(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&ce.call(t,"index")&&(r.index=t.index,r.input=t.input),r}function nt(t,e,r){var n=t.constructor;switch(e){case"[object ArrayBuffer]":return T(t);case"[object Boolean]":case"[object Date]":return new n(+t);case"[object DataView]":return e=r?T(t.buffer):t.buffer,new t.constructor(e,t.byteOffset,t.byteLength);case"[object Float32Array]":
+case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return e=r?T(t.buffer):t.buffer,new t.constructor(e,t.byteOffset,t.length);case"[object Map]":return new n;case"[object Number]":case"[object String]":return new n(t);case"[object RegExp]":return e=new t.constructor(t.source,Pt.exec(t)),e.lastIndex=t.lastIndex,e;case"[object Set]":return new n;
+case"[object Symbol]":return $e?Object($e.call(t)):{}}}function ot(t,e){var r=typeof t;return e=null==e?9007199254740991:e,!!e&&("number"==r||"symbol"!=r&&Ct.test(t))&&-1<t&&0==t%1&&t<e}function ct(t,e,r){if(!vt(r))return false;var n=typeof e;return!!("number"==n?yt(r)&&ot(e,r.length):"string"==n&&e in r)&&pt(r[e],t)}function ut(t,e){if(Ke(t))return false;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!At(t))||($t.test(t)||!Dt.test(t)||null!=e&&t in Object(e))}function it(t){var e=t&&t.constructor;
+return t===(typeof e=="function"&&e.prototype||re)}function at(t,e){return function(r){return null!=r&&(r[t]===e&&(e!==Ut||t in Object(r)))}}function ft(e,r){var n=void 0,n=we(n===Ut?e.length-1:n,0);return function(){for(var o=arguments,c=-1,u=we(o.length-n,0),i=Array(u);++c<u;)i[c]=o[n+c];for(c=-1,u=Array(n+1);++c<n;)u[c]=o[c];return u[n]=r(i),t(e,this,u)}}function st(t){if(typeof t=="string"||At(t))return t;var e=t+"";return"0"==e&&1/t==-Bt?"-0":e}function lt(t){if(null!=t){try{return oe.call(t);
+}catch(t){}return t+""}return""}function bt(t,e){return(Ke(t)?r:Pe)(t,Y(e,3))}function ht(t,e){function r(){var n=arguments,o=e?e.apply(this,n):n[0],c=r.cache;return c.has(o)?c.get(o):(n=t.apply(this,n),r.cache=c.set(o,n)||c,n)}if(typeof t!="function"||null!=e&&typeof e!="function")throw new TypeError("Expected a function");return r.cache=new(ht.Cache||p),r}function pt(t,e){return t===e||t!==t&&e!==e}function yt(t){return null!=t&&_t(t.length)&&!jt(t)}function jt(t){return!!vt(t)&&(t=k(t),"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t);
+}function _t(t){return typeof t=="number"&&-1<t&&0==t%1&&9007199254740991>=t}function vt(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function gt(t){return null!=t&&typeof t=="object"}function dt(t){return typeof t=="number"||gt(t)&&"[object Number]"==k(t)}function At(t){return typeof t=="symbol"||gt(t)&&"[object Symbol]"==k(t)}function wt(t){return null==t?"":V(t)}function mt(t,e,r){return t=null==t?Ut:S(t,e),t===Ut?r:t}function Ot(t,e){var r;if(r=null!=t){r=t;var n;n=C(e,r);for(var o=-1,c=n.length,u=false;++o<c;){
+var i=st(n[o]);if(!(u=null!=r&&null!=r&&i in Object(r)))break;r=r[i]}u||++o!=c?r=u:(c=null==r?0:r.length,r=!!c&&_t(c)&&ot(i,c)&&(Ke(r)||Je(r)))}return r}function St(t){if(yt(t))t=_(t);else if(it(t)){var e,r=[];for(e in Object(t))ce.call(t,e)&&"constructor"!=e&&r.push(e);t=r}else t=Ae(t);return t}function zt(t){if(yt(t))t=_(t,true);else if(vt(t)){var e,r=it(t),n=[];for(e in t)("constructor"!=e||!r&&ce.call(t,e))&&n.push(e);t=n}else{if(e=[],null!=t)for(r in Object(t))e.push(r);t=e}return t}function kt(t){
+return function(){return t}}function xt(t){return t}function Et(t){return B(typeof t=="function"?t:O(t,1))}function Ft(t){return ut(t)?u(st(t)):L(t)}function It(){return[]}function Mt(){return false}var Ut,Bt=1/0,Dt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,$t=/^\w*$/,Lt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Nt=/\\(\\)?/g,Pt=/\w*$/,Vt=/^\[object .+?Constructor\]$/,Ct=/^(?:0|[1-9]\d*)$/,Rt={};Rt["[object Float32Array]"]=Rt["[object Float64Array]"]=Rt["[object Int8Array]"]=Rt["[object Int16Array]"]=Rt["[object Int32Array]"]=Rt["[object Uint8Array]"]=Rt["[object Uint8ClampedArray]"]=Rt["[object Uint16Array]"]=Rt["[object Uint32Array]"]=true,
+Rt["[object Arguments]"]=Rt["[object Array]"]=Rt["[object ArrayBuffer]"]=Rt["[object Boolean]"]=Rt["[object DataView]"]=Rt["[object Date]"]=Rt["[object Error]"]=Rt["[object Function]"]=Rt["[object Map]"]=Rt["[object Number]"]=Rt["[object Object]"]=Rt["[object RegExp]"]=Rt["[object Set]"]=Rt["[object String]"]=Rt["[object WeakMap]"]=false;var Tt={};Tt["[object Arguments]"]=Tt["[object Array]"]=Tt["[object ArrayBuffer]"]=Tt["[object DataView]"]=Tt["[object Boolean]"]=Tt["[object Date]"]=Tt["[object Float32Array]"]=Tt["[object Float64Array]"]=Tt["[object Int8Array]"]=Tt["[object Int16Array]"]=Tt["[object Int32Array]"]=Tt["[object Map]"]=Tt["[object Number]"]=Tt["[object Object]"]=Tt["[object RegExp]"]=Tt["[object Set]"]=Tt["[object String]"]=Tt["[object Symbol]"]=Tt["[object Uint8Array]"]=Tt["[object Uint8ClampedArray]"]=Tt["[object Uint16Array]"]=Tt["[object Uint32Array]"]=true,
+Tt["[object Error]"]=Tt["[object Function]"]=Tt["[object WeakMap]"]=false;var Wt,Gt=typeof global=="object"&&global&&global.Object===Object&&global,qt=typeof self=="object"&&self&&self.Object===Object&&self,Ht=Gt||qt||Function("return this")(),Jt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Kt=Jt&&typeof module=="object"&&module&&!module.nodeType&&module,Qt=Kt&&Kt.exports===Jt,Xt=Qt&&Gt.process;t:{try{Wt=Xt&&Xt.binding&&Xt.binding("util");break t}catch(t){}Wt=void 0}var Yt=Wt&&Wt.isMap,Zt=Wt&&Wt.isSet,te=Wt&&Wt.isTypedArray,ee=Array.prototype,re=Object.prototype,ne=Ht["__core-js_shared__"],oe=Function.prototype.toString,ce=re.hasOwnProperty,ue=function(){
+var t=/[^.]+$/.exec(ne&&ne.keys&&ne.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),ie=re.toString,ae=RegExp("^"+oe.call(ce).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),fe=Qt?Ht.Buffer:Ut,se=Ht.Symbol,le=Ht.Uint8Array,be=fe?fe.a:Ut,he=f(Object.getPrototypeOf),pe=Object.create,ye=re.propertyIsEnumerable,je=ee.splice,_e=se?se.toStringTag:Ut,ve=function(){try{var t=et(Object,"defineProperty");return t({},"",{}),t}catch(t){}
+}(),ge=Object.getOwnPropertySymbols,de=fe?fe.isBuffer:Ut,Ae=f(Object.keys),we=Math.max,me=Date.now,Oe=et(Ht,"DataView"),Se=et(Ht,"Map"),ze=et(Ht,"Promise"),ke=et(Ht,"Set"),xe=et(Ht,"WeakMap"),Ee=et(Object,"create"),Fe=lt(Oe),Ie=lt(Se),Me=lt(ze),Ue=lt(ke),Be=lt(xe),De=se?se.prototype:Ut,$e=De?De.valueOf:Ut,Le=De?De.toString:Ut,Ne=function(){function t(){}return function(e){return vt(e)?pe?pe(e):(t.prototype=e,e=new t,t.prototype=Ut,e):{}}}();b.prototype.clear=function(){this.__data__=Ee?Ee(null):{},
+this.size=0},b.prototype.delete=function(t){return t=this.has(t)&&delete this.__data__[t],this.size-=t?1:0,t},b.prototype.get=function(t){var e=this.__data__;return Ee?(t=e[t],"__lodash_hash_undefined__"===t?Ut:t):ce.call(e,t)?e[t]:Ut},b.prototype.has=function(t){var e=this.__data__;return Ee?e[t]!==Ut:ce.call(e,t)},b.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Ee&&e===Ut?"__lodash_hash_undefined__":e,this},h.prototype.clear=function(){this.__data__=[],this.size=0;
+},h.prototype.delete=function(t){var e=this.__data__;return t=g(e,t),!(0>t)&&(t==e.length-1?e.pop():je.call(e,t,1),--this.size,true)},h.prototype.get=function(t){var e=this.__data__;return t=g(e,t),0>t?Ut:e[t][1]},h.prototype.has=function(t){return-1<g(this.__data__,t)},h.prototype.set=function(t,e){var r=this.__data__,n=g(r,t);return 0>n?(++this.size,r.push([t,e])):r[n][1]=e,this},p.prototype.clear=function(){this.size=0,this.__data__={hash:new b,map:new(Se||h),string:new b}},p.prototype.delete=function(t){
+return t=Z(this,t).delete(t),this.size-=t?1:0,t},p.prototype.get=function(t){return Z(this,t).get(t)},p.prototype.has=function(t){return Z(this,t).has(t)},p.prototype.set=function(t,e){var r=Z(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this},y.prototype.add=y.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},y.prototype.has=function(t){return this.__data__.has(t)},j.prototype.clear=function(){this.__data__=new h,this.size=0},j.prototype.delete=function(t){
+var e=this.__data__;return t=e.delete(t),this.size=e.size,t},j.prototype.get=function(t){return this.__data__.get(t)},j.prototype.has=function(t){return this.__data__.has(t)},j.prototype.set=function(t,e){var r=this.__data__;if(r instanceof h){var n=r.__data__;if(!Se||199>n.length)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new p(n)}return r.set(t,e),this.size=r.size,this};var Pe=function(t,e){return function(r,n){if(null==r)return r;if(!yt(r))return t(r,n);for(var o=r.length,c=e?o:-1,u=Object(r);(e?c--:++c<o)&&false!==n(u[c],c,u););
+return r}}(function(t,e){return t&&Ve(t,e,St)}),Ve=function(t){return function(e,r,n){var o=-1,c=Object(e);n=n(e);for(var u=n.length;u--;){var i=n[t?u:++o];if(false===r(c[i],i,c))break}return e}}(),Ce=ve?function(t,e){return ve(t,"toString",{configurable:true,enumerable:false,value:kt(e),writable:true})}:xt,Re=ge?function(t){return null==t?[]:(t=Object(t),n(ge(t),function(e){return ye.call(t,e)}))}:It,Te=ge?function(t){for(var e=[];t;)o(e,Re(t)),t=he(t);return e}:It,We=k;(Oe&&"[object DataView]"!=We(new Oe(new ArrayBuffer(1)))||Se&&"[object Map]"!=We(new Se)||ze&&"[object Promise]"!=We(ze.resolve())||ke&&"[object Set]"!=We(new ke)||xe&&"[object WeakMap]"!=We(new xe))&&(We=function(t){
+var e=k(t);if(t=(t="[object Object]"==e?t.constructor:Ut)?lt(t):"")switch(t){case Fe:return"[object DataView]";case Ie:return"[object Map]";case Me:return"[object Promise]";case Ue:return"[object Set]";case Be:return"[object WeakMap]"}return e});var Ge=function(t){var e=0,r=0;return function(){var n=me(),o=16-(n-r);if(r=n,0<o){if(800<=++e)return arguments[0]}else e=0;return t.apply(Ut,arguments)}}(Ce),qe=function(t){t=ht(t,function(t){return 500===e.size&&e.clear(),t});var e=t.cache;return t}(function(t){
+var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(Lt,function(t,r,n,o){e.push(n?o.replace(Nt,"$1"):r||t)}),e}),He=function(t,r){return function(n,o){var c=Ke(n)?e:d,u=r?r():{};return c(n,t,Y(o,2),u)}}(function(t,e,r){ce.call(t,r)?t[r].push(e):m(t,r,[e])});ht.Cache=p;var Je=x(function(){return arguments}())?x:function(t){return gt(t)&&ce.call(t,"callee")&&!ye.call(t,"callee")},Ke=Array.isArray,Qe=de||Mt,Xe=Yt?i(Yt):F,Ye=Zt?i(Zt):M,Ze=te?i(te):U,tr=function(t){return N(function(e,r){var n=-1,o=r.length,c=1<o?r[o-1]:Ut,u=2<o?r[2]:Ut,c=3<t.length&&typeof c=="function"?(o--,
+c):Ut;for(u&&ct(r[0],r[1],u)&&(c=3>o?Ut:c,o=1),e=Object(e);++n<o;)(u=r[n])&&t(e,u,n,c);return e})}(function(t,e){G(e,zt(e),t)});l.assignIn=tr,l.constant=kt,l.groupBy=He,l.iteratee=Et,l.keys=St,l.keysIn=zt,l.memoize=ht,l.property=Ft,l.set=function(t,e,r){if(null!=t&&vt(t)){e=C(e,t);for(var n=-1,o=e.length,c=o-1,u=t;null!=u&&++n<o;){var i=st(e[n]),a=r;if(n!=c){var f=u[i],a=Ut;a===Ut&&(a=vt(f)?f:ot(e[n+1])?[]:{})}v(u,i,a),u=u[i]}}return t},l.extend=tr,l.eq=pt,l.forEach=bt,l.get=mt,l.hasIn=Ot,l.identity=xt,
+l.isArguments=Je,l.isArray=Ke,l.isArrayLike=yt,l.isBuffer=Qe,l.isFunction=jt,l.isLength=_t,l.isMap=Xe,l.isNaN=function(t){return dt(t)&&t!=+t},l.isNumber=dt,l.isObject=vt,l.isObjectLike=gt,l.isSet=Ye,l.isSymbol=At,l.isTypedArray=Ze,l.stubArray=It,l.stubFalse=Mt,l.some=function(t,e,r){var n=Ke(t)?c:P;return r&&ct(t,e,r)&&(e=Ut),n(t,Y(e,3))},l.toString=wt,l.each=bt,l.VERSION="4.17.5",typeof define=="function"&&typeof define.amd=="object"&&define.amd&& define(function(){return l})}).call(this);
\ No newline at end of file
diff --git a/docs/vendor/path-to-regexp/LICENSE b/docs/vendor/path-to-regexp/LICENSE
new file mode 100644
index 00000000..983fbe8a
--- /dev/null
+++ b/docs/vendor/path-to-regexp/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/docs/vendor/path-to-regexp/index.js b/docs/vendor/path-to-regexp/index.js
new file mode 100644
index 00000000..5cb8ed8b
--- /dev/null
+++ b/docs/vendor/path-to-regexp/index.js
@@ -0,0 +1,204 @@
+var isArray = Array.isArray || function (arr) {
+  return Object.prototype.toString.call(arr) == '[object Array]';
+};
+
+/**
+ * Expose `pathToRegexp`.
+ */
+// module.exports = pathToRegexp
+
+/**
+ * The main path matching regexp utility.
+ *
+ * @type {RegExp}
+ */
+var PATH_REGEXP = new RegExp([
+  // Match escaped characters that would otherwise appear in future matches.
+  // This allows the user to escape special characters that won't transform.
+  '(\\\\.)',
+  // Match Express-style parameters and un-named parameters with a prefix
+  // and optional suffixes. Matches appear as:
+  //
+  // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?"]
+  // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined]
+  '([\\/.])?(?:\\:(\\w+)(?:\\(((?:\\\\.|[^)])*)\\))?|\\(((?:\\\\.|[^)])*)\\))([+*?])?',
+  // Match regexp special characters that are always escaped.
+  '([.+*?=^!:${}()[\\]|\\/])'
+].join('|'), 'g');
+
+/**
+ * Escape the capturing group by escaping special characters and meaning.
+ *
+ * @param  {String} group
+ * @return {String}
+ */
+function escapeGroup (group) {
+  return group.replace(/([=!:$\/()])/g, '\\$1');
+}
+
+/**
+ * Attach the keys as a property of the regexp.
+ *
+ * @param  {RegExp} re
+ * @param  {Array}  keys
+ * @return {RegExp}
+ */
+function attachKeys (re, keys) {
+  re.keys = keys;
+  return re;
+}
+
+/**
+ * Get the flags for a regexp from the options.
+ *
+ * @param  {Object} options
+ * @return {String}
+ */
+function flags (options) {
+  return options.sensitive ? '' : 'i';
+}
+
+/**
+ * Pull out keys from a regexp.
+ *
+ * @param  {RegExp} path
+ * @param  {Array}  keys
+ * @return {RegExp}
+ */
+function regexpToRegexp (path, keys) {
+  // Use a negative lookahead to match only capturing groups.
+  var groups = path.source.match(/\((?!\?)/g);
+
+  if (groups) {
+    for (var i = 0; i < groups.length; i++) {
+      keys.push({
+        name:      i,
+        delimiter: null,
+        optional:  false,
+        repeat:    false
+      });
+    }
+  }
+
+  return attachKeys(path, keys);
+}
+
+/**
+ * Transform an array into a regexp.
+ *
+ * @param  {Array}  path
+ * @param  {Array}  keys
+ * @param  {Object} options
+ * @return {RegExp}
+ */
+function arrayToRegexp (path, keys, options) {
+  var parts = [];
+
+  for (var i = 0; i < path.length; i++) {
+    parts.push(pathToRegexp(path[i], keys, options).source);
+  }
+
+  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));
+  return attachKeys(regexp, keys);
+}
+
+/**
+ * Replace the specific tags with regexp strings.
+ *
+ * @param  {String} path
+ * @param  {Array}  keys
+ * @return {String}
+ */
+function replacePath (path, keys) {
+  var index = 0;
+
+  function replace (_, escaped, prefix, key, capture, group, suffix, escape) {
+    if (escaped) {
+      return escaped;
+    }
+
+    if (escape) {
+      return '\\' + escape;
+    }
+
+    var repeat   = suffix === '+' || suffix === '*';
+    var optional = suffix === '?' || suffix === '*';
+
+    keys.push({
+      name:      key || index++,
+      delimiter: prefix || '/',
+      optional:  optional,
+      repeat:    repeat
+    });
+
+    prefix = prefix ? ('\\' + prefix) : '';
+    capture = escapeGroup(capture || group || '[^' + (prefix || '\\/') + ']+?');
+
+    if (repeat) {
+      capture = capture + '(?:' + prefix + capture + ')*';
+    }
+
+    if (optional) {
+      return '(?:' + prefix + '(' + capture + '))?';
+    }
+
+    // Basic parameter support.
+    return prefix + '(' + capture + ')';
+  }
+
+  return path.replace(PATH_REGEXP, replace);
+}
+
+/**
+ * Normalize the given path string, returning a regular expression.
+ *
+ * An empty array can be passed in for the keys, which will hold the
+ * placeholder key descriptions. For example, using `/user/:id`, `keys` will
+ * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
+ *
+ * @param  {(String|RegExp|Array)} path
+ * @param  {Array}                 [keys]
+ * @param  {Object}                [options]
+ * @return {RegExp}
+ */
+function pathToRegexp (path, keys, options) {
+  keys = keys || [];
+
+  if (!isArray(keys)) {
+    options = keys;
+    keys = [];
+  } else if (!options) {
+    options = {};
+  }
+
+  if (path instanceof RegExp) {
+    return regexpToRegexp(path, keys, options);
+  }
+
+  if (isArray(path)) {
+    return arrayToRegexp(path, keys, options);
+  }
+
+  var strict = options.strict;
+  var end = options.end !== false;
+  var route = replacePath(path, keys);
+  var endsWithSlash = path.charAt(path.length - 1) === '/';
+
+  // In non-strict mode we allow a slash at the end of match. If the path to
+  // match already ends with a slash, we remove it for consistency. The slash
+  // is valid at the end of a path match, not in the middle. This is important
+  // in non-ending mode, where "/test/" shouldn't match "/test//route".
+  if (!strict) {
+    route = (endsWithSlash ? route.slice(0, -2) : route) + '(?:\\/(?=$))?';
+  }
+
+  if (end) {
+    route += '$';
+  } else {
+    // In non-ending mode, we need the capturing groups to match as much as
+    // possible by using a positive lookahead to the end or next path segment.
+    route += strict && endsWithSlash ? '' : '(?=\\/|$)';
+  }
+
+  return attachKeys(new RegExp('^' + route, flags(options)), keys);
+}
diff --git a/docs/vendor/polyfill.js b/docs/vendor/polyfill.js
new file mode 100644
index 00000000..1d8c61cd
--- /dev/null
+++ b/docs/vendor/polyfill.js
@@ -0,0 +1,96 @@
+// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
+if (!Object.keys) {
+  Object.keys = (function () {
+    'use strict';
+    var hasOwnProperty = Object.prototype.hasOwnProperty,
+        hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
+        dontEnums = [
+          'toString',
+          'toLocaleString',
+          'valueOf',
+          'hasOwnProperty',
+          'isPrototypeOf',
+          'propertyIsEnumerable',
+          'constructor'
+        ],
+        dontEnumsLength = dontEnums.length;
+
+    return function (obj) {
+      if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
+        throw new TypeError('Object.keys called on non-object');
+      }
+
+      var result = [], prop, i;
+
+      for (prop in obj) {
+        if (hasOwnProperty.call(obj, prop)) {
+          result.push(prop);
+        }
+      }
+
+      if (hasDontEnumBug) {
+        for (i = 0; i < dontEnumsLength; i++) {
+          if (hasOwnProperty.call(obj, dontEnums[i])) {
+            result.push(dontEnums[i]);
+          }
+        }
+      }
+      return result;
+    };
+  }());
+}
+
+//Production steps of ECMA-262, Edition 5, 15.4.4.18
+//Reference: http://es5.github.com/#x15.4.4.18
+if (!Array.prototype.forEach) {
+  Array.prototype.forEach = function (callback, thisArg) {
+    var T, k;
+
+    if (this == null) {
+      throw new TypeError(' this is null or not defined');
+    }
+
+    // 1. Let O be the result of calling ToObject passing the |this| value as the argument.
+    var O = Object(this);
+
+    // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
+    // 3. Let len be ToUint32(lenValue).
+    var len = O.length >>> 0;
+
+    // 4. If IsCallable(callback) is false, throw a TypeError exception.
+    // See: http://es5.github.com/#x9.11
+    if (typeof callback !== "function") {
+      throw new TypeError(callback + " is not a function");
+    }
+
+    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
+    if (arguments.length > 1) {
+      T = thisArg;
+    }
+
+    // 6. Let k be 0
+    k = 0;
+
+    // 7. Repeat, while k < len
+    while (k < len) {
+      var kValue;
+
+      // a. Let Pk be ToString(k).
+      //   This is implicit for LHS operands of the in operator
+      // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
+      //   This step can be combined with c
+      // c. If kPresent is true, then
+      if (k in O) {
+        // i. Let kValue be the result of calling the Get internal method of O with argument Pk.
+        kValue = O[k];
+
+        // ii. Call the Call internal method of callback with T as the this value and
+        // argument list containing kValue, k, and O.
+        callback.call(T, kValue, k, O);
+      }
+      // d. Increase k by 1.
+      k++;
+    }
+    // 8. return undefined
+  };
+}
diff --git a/docs/vendor/prettify.css b/docs/vendor/prettify.css
new file mode 100644
index 00000000..c54bf6b6
--- /dev/null
+++ b/docs/vendor/prettify.css
@@ -0,0 +1,51 @@
+/* Pretty printing styles. Used with prettify.js. */
+/* Vim sunburst theme by David Leibovic */
+
+pre .str, code .str { color: #65B042; } /* string  - green */
+pre .kwd, code .kwd { color: #E28964; } /* keyword - dark pink */
+pre .com, code .com { color: #AEAEAE; font-style: italic; } /* comment - gray */
+pre .typ, code .typ { color: #89bdff; } /* type - light blue */
+pre .lit, code .lit { color: #3387CC; } /* literal - blue */
+pre .pun, code .pun { color: #fff; } /* punctuation - white */
+pre .pln, code .pln { color: #fff; } /* plaintext - white */
+pre .tag, code .tag { color: #89bdff; } /* html/xml tag    - light blue */
+pre .atn, code .atn { color: #bdb76b; } /* html/xml attribute name  - khaki */
+pre .atv, code .atv { color: #65B042; } /* html/xml attribute value - green */
+pre .dec, code .dec { color: #3387CC; } /* decimal - blue */
+
+pre.prettyprint, code.prettyprint {
+  background-color: #000;
+  -moz-border-radius: 8px;
+  -webkit-border-radius: 8px;
+  -o-border-radius: 8px;
+  -ms-border-radius: 8px;
+  -khtml-border-radius: 8px;
+  border-radius: 8px;
+}
+
+pre.prettyprint {
+  width: 95%;
+  margin: 1em auto;
+  padding: 1em;
+  white-space: pre-wrap;
+}
+
+
+/* Specify class=linenums on a pre to get line numbering */
+ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE; } /* IE indents via margin-left */
+li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
+/* Alternate shading for lines */
+li.L1,li.L3,li.L5,li.L7,li.L9 { }
+
+@media print {
+  pre .str, code .str { color: #060; }
+  pre .kwd, code .kwd { color: #006; font-weight: bold; }
+  pre .com, code .com { color: #600; font-style: italic; }
+  pre .typ, code .typ { color: #404; font-weight: bold; }
+  pre .lit, code .lit { color: #044; }
+  pre .pun, code .pun { color: #440; }
+  pre .pln, code .pln { color: #000; }
+  pre .tag, code .tag { color: #006; font-weight: bold; }
+  pre .atn, code .atn { color: #404; }
+  pre .atv, code .atv { color: #060; }
+}
diff --git a/docs/vendor/prettify/lang-Splus.js b/docs/vendor/prettify/lang-Splus.js
new file mode 100644
index 00000000..6ce16e8a
--- /dev/null
+++ b/docs/vendor/prettify/lang-Splus.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2012 Jeffrey B. Arnold
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\'(?:[^\'\\]|\\[\s\S])*(?:\'|$)/,null,"'"]],[["com",/^#.*/],["kwd",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![A-Za-z0-9_.])/],["lit",/^0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/],["lit",/^[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?[Li]?/],["lit",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\.\.(?:\.|[0-9]+))(?![A-Za-z0-9_.])/],
+["pun",/^(?:<<?-|->>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|\*|\+|\^|\/|!|%.*?%|=|~|\$|@|:{1,3}|[\[\](){};,?])/],["pln",/^(?:[A-Za-z]+[A-Za-z0-9_.]*|\.[a-zA-Z_][0-9a-zA-Z\._]*)(?![A-Za-z0-9_.])/],["str",/^`.+`/]]),["r","s","R","S","Splus"]);
diff --git a/docs/vendor/prettify/lang-aea.js b/docs/vendor/prettify/lang-aea.js
new file mode 100644
index 00000000..784ebb29
--- /dev/null
+++ b/docs/vendor/prettify/lang-aea.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2009 Onno Hommes.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,
+null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"]);
diff --git a/docs/vendor/prettify/lang-agc.js b/docs/vendor/prettify/lang-agc.js
new file mode 100644
index 00000000..784ebb29
--- /dev/null
+++ b/docs/vendor/prettify/lang-agc.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2009 Onno Hommes.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,
+null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"]);
diff --git a/docs/vendor/prettify/lang-apollo.js b/docs/vendor/prettify/lang-apollo.js
new file mode 100644
index 00000000..784ebb29
--- /dev/null
+++ b/docs/vendor/prettify/lang-apollo.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2009 Onno Hommes.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,
+null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"]);
diff --git a/docs/vendor/prettify/lang-basic.js b/docs/vendor/prettify/lang-basic.js
new file mode 100644
index 00000000..2d6151dc
--- /dev/null
+++ b/docs/vendor/prettify/lang-basic.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2013 Peter Kofler
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:"(?:[^\\"\r\n]|\\.)*(?:"|$))/,null,'"'],["pln",/^\s+/,null," \r\n\t\u00a0"]],[["com",/^REM[^\r\n]*/,null],["kwd",/^\b(?:AND|CLOSE|CLR|CMD|CONT|DATA|DEF ?FN|DIM|END|FOR|GET|GOSUB|GOTO|IF|INPUT|LET|LIST|LOAD|NEW|NEXT|NOT|ON|OPEN|OR|POKE|PRINT|READ|RESTORE|RETURN|RUN|SAVE|STEP|STOP|SYS|THEN|TO|VERIFY|WAIT)\b/,null],["pln",/^[A-Z][A-Z0-9]?(?:\$|%)?/i,null],["lit",/^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?/i,
+null,"0123456789"],["pun",/^.[^\s\w\.$%"]*/,null]]),["basic","cbm"]);
diff --git a/docs/vendor/prettify/lang-cbm.js b/docs/vendor/prettify/lang-cbm.js
new file mode 100644
index 00000000..2d6151dc
--- /dev/null
+++ b/docs/vendor/prettify/lang-cbm.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2013 Peter Kofler
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:"(?:[^\\"\r\n]|\\.)*(?:"|$))/,null,'"'],["pln",/^\s+/,null," \r\n\t\u00a0"]],[["com",/^REM[^\r\n]*/,null],["kwd",/^\b(?:AND|CLOSE|CLR|CMD|CONT|DATA|DEF ?FN|DIM|END|FOR|GET|GOSUB|GOTO|IF|INPUT|LET|LIST|LOAD|NEW|NEXT|NOT|ON|OPEN|OR|POKE|PRINT|READ|RESTORE|RETURN|RUN|SAVE|STEP|STOP|SYS|THEN|TO|VERIFY|WAIT)\b/,null],["pln",/^[A-Z][A-Z0-9]?(?:\$|%)?/i,null],["lit",/^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?/i,
+null,"0123456789"],["pun",/^.[^\s\w\.$%"]*/,null]]),["basic","cbm"]);
diff --git a/docs/vendor/prettify/lang-cl.js b/docs/vendor/prettify/lang-cl.js
new file mode 100644
index 00000000..2f18c967
--- /dev/null
+++ b/docs/vendor/prettify/lang-cl.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,
+null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" "));
diff --git a/docs/vendor/prettify/lang-clj.js b/docs/vendor/prettify/lang-clj.js
new file mode 100644
index 00000000..d1173b1e
--- /dev/null
+++ b/docs/vendor/prettify/lang-clj.js
@@ -0,0 +1,17 @@
+/*
+ Copyright (C) 2011 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^[\(\{\[]+/,null,"([{"],["clo",/^[\)\}\]]+/,null,")]}"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:def|if|do|let|quote|var|fn|loop|recur|throw|try|monitor-enter|monitor-exit|defmacro|defn|defn-|macroexpand|macroexpand-1|for|doseq|dosync|dotimes|and|or|when|not|assert|doto|proxy|defstruct|first|rest|cons|defprotocol|deftype|defrecord|reify|defmulti|defmethod|meta|with-meta|ns|in-ns|create-ns|import|intern|refer|alias|namespace|resolve|ref|deref|refset|new|set!|memfn|to-array|into-array|aset|gen-class|reduce|map|filter|find|nil?|empty?|hash-map|hash-set|vec|vector|seq|flatten|reverse|assoc|dissoc|list|list?|disj|get|union|difference|intersection|extend|extend-type|extend-protocol|prn)\b/,
+null],["typ",/^:[0-9a-zA-Z\-]+/]]),["clj"]);
diff --git a/docs/vendor/prettify/lang-css.js b/docs/vendor/prettify/lang-css.js
new file mode 100644
index 00000000..90d175da
--- /dev/null
+++ b/docs/vendor/prettify/lang-css.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2009 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[["str",/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],["str",/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']+)\)/i],["kwd",/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],
+["com",/^(?:\x3c!--|--\x3e)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#(?:[0-9a-f]{3}){1,2}\b/i],["pln",/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],["pun",/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^\)\"\']+/]]),["css-str"]);
diff --git a/docs/vendor/prettify/lang-dart.js b/docs/vendor/prettify/lang-dart.js
new file mode 100644
index 00000000..da142a4e
--- /dev/null
+++ b/docs/vendor/prettify/lang-dart.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2013 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"]],[["com",/^#!(?:.*)/],["kwd",/^\b(?:import|library|part of|part|as|show|hide)\b/i],["com",/^\/\/(?:.*)/],["com",/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],["kwd",/^\b(?:class|interface)\b/i],["kwd",/^\b(?:assert|async|await|break|case|catch|continue|default|do|else|finally|for|if|in|is|new|return|super|switch|sync|this|throw|try|while)\b/i],["kwd",/^\b(?:abstract|const|extends|factory|final|get|implements|native|operator|set|static|typedef|var)\b/i],
+["typ",/^\b(?:bool|double|Dynamic|int|num|Object|String|void)\b/i],["kwd",/^\b(?:false|null|true)\b/i],["str",/^r?[\']{3}[\s|\S]*?[^\\][\']{3}/],["str",/^r?[\"]{3}[\s|\S]*?[^\\][\"]{3}/],["str",/^r?\'(\'|(?:[^\n\r\f])*?[^\\]\')/],["str",/^r?\"(\"|(?:[^\n\r\f])*?[^\\]\")/],["typ",/^[A-Z]\w*/],["pln",/^[a-z_$][a-z0-9_]*/i],["pun",/^[~!%^&*+=|?:<>/-]/],["lit",/^\b0x[0-9a-f]+/i],["lit",/^\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i],["lit",
+/^\b\.\d+(?:e[+-]?\d+)?/i],["pun",/^[(){}\[\],.;]/]]),["dart"]);
diff --git a/docs/vendor/prettify/lang-el.js b/docs/vendor/prettify/lang-el.js
new file mode 100644
index 00000000..2f18c967
--- /dev/null
+++ b/docs/vendor/prettify/lang-el.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,
+null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" "));
diff --git a/docs/vendor/prettify/lang-erl.js b/docs/vendor/prettify/lang-erl.js
new file mode 100644
index 00000000..e7da9b04
--- /dev/null
+++ b/docs/vendor/prettify/lang-erl.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2013 Andrew Allen
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\x0B\x0C\r ]+/,null,"\t\n\x0B\f\r "],["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["lit",/^[a-z][a-zA-Z0-9_]*/],["lit",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])+\'?/,null,"'"],["lit",/^\?[^ \t\n({]+/,null,"?"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\n]*/],["kwd",/^(?:module|attributes|do|let|in|letrec|apply|call|primop|case|of|end|when|fun|try|catch|receive|after|char|integer|float,atom,string,var)\b/],
+["kwd",/^-[a-z_]+/],["typ",/^[A-Z_][a-zA-Z0-9_]*/],["pun",/^[.,;]/]]),["erlang","erl"]);
diff --git a/docs/vendor/prettify/lang-erlang.js b/docs/vendor/prettify/lang-erlang.js
new file mode 100644
index 00000000..e7da9b04
--- /dev/null
+++ b/docs/vendor/prettify/lang-erlang.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2013 Andrew Allen
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\x0B\x0C\r ]+/,null,"\t\n\x0B\f\r "],["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["lit",/^[a-z][a-zA-Z0-9_]*/],["lit",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])+\'?/,null,"'"],["lit",/^\?[^ \t\n({]+/,null,"?"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\n]*/],["kwd",/^(?:module|attributes|do|let|in|letrec|apply|call|primop|case|of|end|when|fun|try|catch|receive|after|char|integer|float,atom,string,var)\b/],
+["kwd",/^-[a-z_]+/],["typ",/^[A-Z_][a-zA-Z0-9_]*/],["pun",/^[.,;]/]]),["erlang","erl"]);
diff --git a/docs/vendor/prettify/lang-fs.js b/docs/vendor/prettify/lang-fs.js
new file mode 100644
index 00000000..c012a3ff
--- /dev/null
+++ b/docs/vendor/prettify/lang-fs.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^#(?:if[\t\n\r \xA0]+(?:[a-z_$][\w\']*|``[^\r\n\t`]*(?:``|$))|else|endif|light)/i,null,"#"],["str",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])(?:\'|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\r\n]*|\(\*[\s\S]*?\*\))/],["kwd",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/],
+["lit",/^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],["pln",/^(?:[a-z_][\w']*[!?#]?|``[^\r\n\t`]*(?:``|$))/i],["pun",/^[^\t\n\r \xA0\"\'\w]+/]]),["fs","ml"]);
diff --git a/docs/vendor/prettify/lang-go.js b/docs/vendor/prettify/lang-go.js
new file mode 100644
index 00000000..1f6934a4
--- /dev/null
+++ b/docs/vendor/prettify/lang-go.js
@@ -0,0 +1,17 @@
+/*
+
+ Copyright (C) 2010 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["pln",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])+(?:\'|$)|`[^`]*(?:`|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\r\n]*|\/\*[\s\S]*?\*\/)/],["pln",/^(?:[^\/\"\'`]|\/(?![\/\*]))+/i]]),["go"]);
diff --git a/docs/vendor/prettify/lang-hs.js b/docs/vendor/prettify/lang-hs.js
new file mode 100644
index 00000000..2002221e
--- /dev/null
+++ b/docs/vendor/prettify/lang-hs.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2009 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\x0B\x0C\r ]+/,null,"\t\n\x0B\f\r "],["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])\'?/,null,"'"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^(?:(?:--+(?:[^\r\n\x0C]*)?)|(?:\{-(?:[^-]|-+[^-\}])*-\}))/],["kwd",/^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^a-zA-Z0-9\']|$)/,
+null],["pln",/^(?:[A-Z][\w\']*\.)*[a-zA-Z][\w\']*/],["pun",/^[^\t\n\x0B\x0C\r a-zA-Z0-9\'\"]+/]]),["hs"]);
diff --git a/docs/vendor/prettify/lang-lasso.js b/docs/vendor/prettify/lang-lasso.js
new file mode 100644
index 00000000..415ca677
--- /dev/null
+++ b/docs/vendor/prettify/lang-lasso.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2013 Eric Knibbe
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\'(?:[^\'\\]|\\[\s\S])*(?:\'|$)/,null,"'"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\`[^\`]*(?:\`|$)/,null,"`"],["lit",/^0x[\da-f]+|\d+/i,null,"0123456789"],["atn",/^#\d+|[#$][a-z_][\w.]*|#![ \S]+lasso9\b/i,null,"#$"]],[["tag",/^[[\]]|<\?(?:lasso(?:script)?|=)|\?>|noprocess\b|no_square_brackets\b/i],["com",/^\/\/[^\r\n]*|\/\*[\s\S]*?\*\//],
+["atn",/^-(?!infinity)[a-z_][\w.]*|\.\s*'[a-z_][\w.]*'/i],["lit",/^\d*\.\d+(?:e[-+]?\d+)?|infinity\b|NaN\b/i],["atv",/^::\s*[a-z_][\w.]*/i],["lit",/^(?:true|false|none|minimal|full|all|void|and|or|not|bw|nbw|ew|new|cn|ncn|lt|lte|gt|gte|eq|neq|rx|nrx|ft)\b/i],["kwd",/^(?:error_code|error_msg|error_pop|error_push|error_reset|cache|database_names|database_schemanames|database_tablenames|define_tag|define_type|email_batch|encode_set|html_comment|handle|handle_error|header|if|inline|iterate|ljax_target|link|link_currentaction|link_currentgroup|link_currentrecord|link_detail|link_firstgroup|link_firstrecord|link_lastgroup|link_lastrecord|link_nextgroup|link_nextrecord|link_prevgroup|link_prevrecord|log|loop|namespace_using|output_none|portal|private|protect|records|referer|referrer|repeating|resultset|rows|search_args|search_arguments|select|sort_args|sort_arguments|thread_atomic|value_list|while|abort|case|else|if_empty|if_false|if_null|if_true|loop_abort|loop_continue|loop_count|params|params_up|return|return_value|run_children|soap_definetag|soap_lastrequest|soap_lastresponse|tag_name|ascending|average|by|define|descending|do|equals|frozen|group|handle_failure|import|in|into|join|let|match|max|min|on|order|parent|protected|provide|public|require|returnhome|skip|split_thread|sum|take|thread|to|trait|type|where|with|yield|yieldhome)\b/i],
+["typ",/^(?:array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray|local|var|variable|global|data|self|inherited|currentcapture|givenblock)\b|^\.\.?/i],["pln",/^[a-z_][\w.]*(?:=\s*(?=\())?/i],["pun",/^:=|[-+*\/%=<>&|!?\\]/]]),["lasso","ls","lassoscript"]);
diff --git a/docs/vendor/prettify/lang-lassoscript.js b/docs/vendor/prettify/lang-lassoscript.js
new file mode 100644
index 00000000..415ca677
--- /dev/null
+++ b/docs/vendor/prettify/lang-lassoscript.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2013 Eric Knibbe
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\'(?:[^\'\\]|\\[\s\S])*(?:\'|$)/,null,"'"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\`[^\`]*(?:\`|$)/,null,"`"],["lit",/^0x[\da-f]+|\d+/i,null,"0123456789"],["atn",/^#\d+|[#$][a-z_][\w.]*|#![ \S]+lasso9\b/i,null,"#$"]],[["tag",/^[[\]]|<\?(?:lasso(?:script)?|=)|\?>|noprocess\b|no_square_brackets\b/i],["com",/^\/\/[^\r\n]*|\/\*[\s\S]*?\*\//],
+["atn",/^-(?!infinity)[a-z_][\w.]*|\.\s*'[a-z_][\w.]*'/i],["lit",/^\d*\.\d+(?:e[-+]?\d+)?|infinity\b|NaN\b/i],["atv",/^::\s*[a-z_][\w.]*/i],["lit",/^(?:true|false|none|minimal|full|all|void|and|or|not|bw|nbw|ew|new|cn|ncn|lt|lte|gt|gte|eq|neq|rx|nrx|ft)\b/i],["kwd",/^(?:error_code|error_msg|error_pop|error_push|error_reset|cache|database_names|database_schemanames|database_tablenames|define_tag|define_type|email_batch|encode_set|html_comment|handle|handle_error|header|if|inline|iterate|ljax_target|link|link_currentaction|link_currentgroup|link_currentrecord|link_detail|link_firstgroup|link_firstrecord|link_lastgroup|link_lastrecord|link_nextgroup|link_nextrecord|link_prevgroup|link_prevrecord|log|loop|namespace_using|output_none|portal|private|protect|records|referer|referrer|repeating|resultset|rows|search_args|search_arguments|select|sort_args|sort_arguments|thread_atomic|value_list|while|abort|case|else|if_empty|if_false|if_null|if_true|loop_abort|loop_continue|loop_count|params|params_up|return|return_value|run_children|soap_definetag|soap_lastrequest|soap_lastresponse|tag_name|ascending|average|by|define|descending|do|equals|frozen|group|handle_failure|import|in|into|join|let|match|max|min|on|order|parent|protected|provide|public|require|returnhome|skip|split_thread|sum|take|thread|to|trait|type|where|with|yield|yieldhome)\b/i],
+["typ",/^(?:array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray|local|var|variable|global|data|self|inherited|currentcapture|givenblock)\b|^\.\.?/i],["pln",/^[a-z_][\w.]*(?:=\s*(?=\())?/i],["pun",/^:=|[-+*\/%=<>&|!?\\]/]]),["lasso","ls","lassoscript"]);
diff --git a/docs/vendor/prettify/lang-latex.js b/docs/vendor/prettify/lang-latex.js
new file mode 100644
index 00000000..efc758cd
--- /dev/null
+++ b/docs/vendor/prettify/lang-latex.js
@@ -0,0 +1,17 @@
+/*
+
+ Copyright (C) 2011 Martin S.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\r\n]*/,null,"%"]],[["kwd",/^\\[a-zA-Z@]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[{}()\[\]=]+/]]),["latex","tex"]);
diff --git a/docs/vendor/prettify/lang-lgt.js b/docs/vendor/prettify/lang-lgt.js
new file mode 100644
index 00000000..2959d759
--- /dev/null
+++ b/docs/vendor/prettify/lang-lgt.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2014 Paulo Moura
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["lit",/^[a-z][a-zA-Z0-9_]*/],["lit",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])+\'?/,null,"'"],["lit",/^(?:0'.|0b[0-1]+|0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\r\n]*/,null,"%"],["com",/^\/\*[\s\S]*?\*\//],["kwd",/^\s*:-\s(c(a(lls|tegory)|oinductive)|p(ublic|r(ot(ocol|ected)|ivate))|e(l(if|se)|n(coding|sure_loaded)|xport)|i(f|n(clude|itialization|fo))|alias|d(ynamic|iscontiguous)|m(eta_(non_terminal|predicate)|od(e|ule)|ultifile)|reexport|s(et_(logtalk|prolog)_flag|ynchronized)|o(bject|p)|use(s|_module))/],
+["kwd",/^\s*:-\s(e(lse|nd(if|_(category|object|protocol)))|built_in|dynamic|synchronized|threaded)/],["typ",/^[A-Z_][a-zA-Z0-9_]*/],["pun",/^[.,;{}:^<>=\\/+*?#!-]/]]),["logtalk","lgt"]);
diff --git a/docs/vendor/prettify/lang-lisp.js b/docs/vendor/prettify/lang-lisp.js
new file mode 100644
index 00000000..2f18c967
--- /dev/null
+++ b/docs/vendor/prettify/lang-lisp.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,
+null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" "));
diff --git a/docs/vendor/prettify/lang-ll.js b/docs/vendor/prettify/lang-ll.js
new file mode 100644
index 00000000..7604d962
--- /dev/null
+++ b/docs/vendor/prettify/lang-ll.js
@@ -0,0 +1,17 @@
+/*
+
+ Copyright (C) 2013 Nikhil Dabas
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^!?\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["com",/^;[^\r\n]*/,null,";"]],[["pln",/^[%@!](?:[-a-zA-Z$._][-a-zA-Z$._0-9]*|\d+)/],["kwd",/^[A-Za-z_][0-9A-Za-z_]*/,null],["lit",/^\d+\.\d+/],["lit",/^(?:\d+|0[xX][a-fA-F0-9]+)/],["pun",/^[()\[\]{},=*<>:]|\.\.\.$/]]),["llvm","ll"]);
diff --git a/docs/vendor/prettify/lang-llvm.js b/docs/vendor/prettify/lang-llvm.js
new file mode 100644
index 00000000..7604d962
--- /dev/null
+++ b/docs/vendor/prettify/lang-llvm.js
@@ -0,0 +1,17 @@
+/*
+
+ Copyright (C) 2013 Nikhil Dabas
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^!?\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["com",/^;[^\r\n]*/,null,";"]],[["pln",/^[%@!](?:[-a-zA-Z$._][-a-zA-Z$._0-9]*|\d+)/],["kwd",/^[A-Za-z_][0-9A-Za-z_]*/,null],["lit",/^\d+\.\d+/],["lit",/^(?:\d+|0[xX][a-fA-F0-9]+)/],["pun",/^[()\[\]{},=*<>:]|\.\.\.$/]]),["llvm","ll"]);
diff --git a/docs/vendor/prettify/lang-logtalk.js b/docs/vendor/prettify/lang-logtalk.js
new file mode 100644
index 00000000..2959d759
--- /dev/null
+++ b/docs/vendor/prettify/lang-logtalk.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2014 Paulo Moura
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["lit",/^[a-z][a-zA-Z0-9_]*/],["lit",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])+\'?/,null,"'"],["lit",/^(?:0'.|0b[0-1]+|0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\r\n]*/,null,"%"],["com",/^\/\*[\s\S]*?\*\//],["kwd",/^\s*:-\s(c(a(lls|tegory)|oinductive)|p(ublic|r(ot(ocol|ected)|ivate))|e(l(if|se)|n(coding|sure_loaded)|xport)|i(f|n(clude|itialization|fo))|alias|d(ynamic|iscontiguous)|m(eta_(non_terminal|predicate)|od(e|ule)|ultifile)|reexport|s(et_(logtalk|prolog)_flag|ynchronized)|o(bject|p)|use(s|_module))/],
+["kwd",/^\s*:-\s(e(lse|nd(if|_(category|object|protocol)))|built_in|dynamic|synchronized|threaded)/],["typ",/^[A-Z_][a-zA-Z0-9_]*/],["pun",/^[.,;{}:^<>=\\/+*?#!-]/]]),["logtalk","lgt"]);
diff --git a/docs/vendor/prettify/lang-ls.js b/docs/vendor/prettify/lang-ls.js
new file mode 100644
index 00000000..415ca677
--- /dev/null
+++ b/docs/vendor/prettify/lang-ls.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2013 Eric Knibbe
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\'(?:[^\'\\]|\\[\s\S])*(?:\'|$)/,null,"'"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\`[^\`]*(?:\`|$)/,null,"`"],["lit",/^0x[\da-f]+|\d+/i,null,"0123456789"],["atn",/^#\d+|[#$][a-z_][\w.]*|#![ \S]+lasso9\b/i,null,"#$"]],[["tag",/^[[\]]|<\?(?:lasso(?:script)?|=)|\?>|noprocess\b|no_square_brackets\b/i],["com",/^\/\/[^\r\n]*|\/\*[\s\S]*?\*\//],
+["atn",/^-(?!infinity)[a-z_][\w.]*|\.\s*'[a-z_][\w.]*'/i],["lit",/^\d*\.\d+(?:e[-+]?\d+)?|infinity\b|NaN\b/i],["atv",/^::\s*[a-z_][\w.]*/i],["lit",/^(?:true|false|none|minimal|full|all|void|and|or|not|bw|nbw|ew|new|cn|ncn|lt|lte|gt|gte|eq|neq|rx|nrx|ft)\b/i],["kwd",/^(?:error_code|error_msg|error_pop|error_push|error_reset|cache|database_names|database_schemanames|database_tablenames|define_tag|define_type|email_batch|encode_set|html_comment|handle|handle_error|header|if|inline|iterate|ljax_target|link|link_currentaction|link_currentgroup|link_currentrecord|link_detail|link_firstgroup|link_firstrecord|link_lastgroup|link_lastrecord|link_nextgroup|link_nextrecord|link_prevgroup|link_prevrecord|log|loop|namespace_using|output_none|portal|private|protect|records|referer|referrer|repeating|resultset|rows|search_args|search_arguments|select|sort_args|sort_arguments|thread_atomic|value_list|while|abort|case|else|if_empty|if_false|if_null|if_true|loop_abort|loop_continue|loop_count|params|params_up|return|return_value|run_children|soap_definetag|soap_lastrequest|soap_lastresponse|tag_name|ascending|average|by|define|descending|do|equals|frozen|group|handle_failure|import|in|into|join|let|match|max|min|on|order|parent|protected|provide|public|require|returnhome|skip|split_thread|sum|take|thread|to|trait|type|where|with|yield|yieldhome)\b/i],
+["typ",/^(?:array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray|local|var|variable|global|data|self|inherited|currentcapture|givenblock)\b|^\.\.?/i],["pln",/^[a-z_][\w.]*(?:=\s*(?=\())?/i],["pun",/^:=|[-+*\/%=<>&|!?\\]/]]),["lasso","ls","lassoscript"]);
diff --git a/docs/vendor/prettify/lang-lsp.js b/docs/vendor/prettify/lang-lsp.js
new file mode 100644
index 00000000..2f18c967
--- /dev/null
+++ b/docs/vendor/prettify/lang-lsp.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,
+null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" "));
diff --git a/docs/vendor/prettify/lang-lua.js b/docs/vendor/prettify/lang-lua.js
new file mode 100644
index 00000000..afb2901e
--- /dev/null
+++ b/docs/vendor/prettify/lang-lua.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/,null,"\"'"]],[["com",/^--(?:\[(=*)\[[\s\S]*?(?:\]\1\]|$)|[^\r\n]*)/],["str",/^\[(=*)\[[\s\S]*?(?:\]\1\]|$)/],["kwd",/^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,null],["lit",/^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],
+["pln",/^[a-z_]\w*/i],["pun",/^[^\w\t\n\r \xA0][^\w\t\n\r \xA0\"\'\-\+=]*/]]),["lua"]);
diff --git a/docs/vendor/prettify/lang-matlab.js b/docs/vendor/prettify/lang-matlab.js
new file mode 100644
index 00000000..a0522a5a
--- /dev/null
+++ b/docs/vendor/prettify/lang-matlab.js
@@ -0,0 +1,29 @@
+/*
+
+ Copyright (c) 2013 by Amro <amroamroamro@gmail.com>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+var a=window.PR,b=[[a.PR_PLAIN,/^[ \t\r\n\v\f\xA0]+/,null," \t\r\n\x0B\f\u00a0"],[a.PR_COMMENT,/^%\{[^%]*%+(?:[^\}%][^%]*%+)*\}/,null],[a.PR_COMMENT,/^%[^\r\n]*/,null,"%"],["syscmd",/^![^\r\n]*/,null,"!"]],c=[["linecont",/^\.\.\.\s*[\r\n]/,null],["err",/^\?\?\? [^\r\n]*/,null],["wrn",/^Warning: [^\r\n]*/,null],["codeoutput",/^>>\s+/,null],["codeoutput",/^octave:\d+>\s+/,null],["lang-matlab-operators",/^((?:[a-zA-Z][a-zA-Z0-9_]*(?:\.[a-zA-Z][a-zA-Z0-9_]*)*|\)|\]|\}|\.)')/,null],["lang-matlab-identifiers",
+/^([a-zA-Z][a-zA-Z0-9_]*(?:\.[a-zA-Z][a-zA-Z0-9_]*)*)(?!')/,null],[a.PR_STRING,/^'(?:[^']|'')*'/,null],[a.PR_LITERAL,/^[+\-]?\.?\d+(?:\.\d*)?(?:[Ee][+\-]?\d+)?[ij]?/,null],[a.PR_TAG,/^(?:\{|\}|\(|\)|\[|\])/,null],[a.PR_PUNCTUATION,/^(?:<|>|=|~|@|&|;|,|:|!|\-|\+|\*|\^|\.|\||\\|\/)/,null]],d=[["lang-matlab-identifiers",/^([a-zA-Z][a-zA-Z0-9_]*(?:\.[a-zA-Z][a-zA-Z0-9_]*)*)/,null],[a.PR_TAG,/^(?:\{|\}|\(|\)|\[|\])/,null],[a.PR_PUNCTUATION,/^(?:<|>|=|~|@|&|;|,|:|!|\-|\+|\*|\^|\.|\||\\|\/)/,null],["transpose",
+/^'/,null]];
+a.registerLangHandler(a.createSimpleLexer([],[[a.PR_KEYWORD,/^\b(?:break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while)\b/,null],["const",/^\b(?:true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout)\b/,null],[a.PR_TYPE,/^\b(?:cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse)\b/,null],["fun",/^\b(?:abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:.(?:close|closeVar|computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab.io.MatFile|matlab.mixin.(?:Copyable|Heterogeneous(?:.getDefaultScalarElement)?)|matlabrc|matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta.(?:class(?:.fromName)?|DynamicProperty|EnumeratedValue|event|MetaData|method|package(?:.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|ncwriteschema|ndgrid|ndims|ne|NET(?:.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|NetException|setStaticProperty))?|netcdf.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:.(?:create|getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:.isPlatformSupported)?|VideoWriter(?:.getProfiles)?|view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|ylabel|ylim|zeros|zip|zlabel|zlim|zoom)\b/,null],
+["fun_tbx",/^\b(?:addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|cholcov|Classification(?:BaggedEnsemble|Discriminant(?:.(?:fit|make|template))?|Ensemble|KNN(?:.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:.fit)?|geo(?:cdf|inv|mean|pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|LinearModel(?:.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:.fit)?|nan(?:cov|max|mean|median|min|std|sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|regstats|relieff|ridge|robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztest)\b/,
+null],["fun_tbx",/^\b(?:adapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|reflect|regionprops|registration.metric.(?:MattesMutualInformation|MeanSquares)|registration.optimizer.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb)\b/,
+null],["fun_tbx",/^\b(?:bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog)\b/,null],["ident",/^[a-zA-Z][a-zA-Z0-9_]*(?:\.[a-zA-Z][a-zA-Z0-9_]*)*/,null]]),["matlab-identifiers"]);a.registerLangHandler(a.createSimpleLexer([],d),["matlab-operators"]);a.registerLangHandler(a.createSimpleLexer(b,c),["matlab"]);
diff --git a/docs/vendor/prettify/lang-ml.js b/docs/vendor/prettify/lang-ml.js
new file mode 100644
index 00000000..c012a3ff
--- /dev/null
+++ b/docs/vendor/prettify/lang-ml.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^#(?:if[\t\n\r \xA0]+(?:[a-z_$][\w\']*|``[^\r\n\t`]*(?:``|$))|else|endif|light)/i,null,"#"],["str",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])(?:\'|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\r\n]*|\(\*[\s\S]*?\*\))/],["kwd",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/],
+["lit",/^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],["pln",/^(?:[a-z_][\w']*[!?#]?|``[^\r\n\t`]*(?:``|$))/i],["pun",/^[^\t\n\r \xA0\"\'\w]+/]]),["fs","ml"]);
diff --git a/docs/vendor/prettify/lang-mumps.js b/docs/vendor/prettify/lang-mumps.js
new file mode 100644
index 00000000..6d512589
--- /dev/null
+++ b/docs/vendor/prettify/lang-mumps.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2011 Kitware Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:[^"]|\\.)*")/,null,'"']],[["com",/^;[^\r\n]*/,null,";"],["dec",/^(?:\$(?:D|DEVICE|EC|ECODE|ES|ESTACK|ET|ETRAP|H|HOROLOG|I|IO|J|JOB|K|KEY|P|PRINCIPAL|Q|QUIT|ST|STACK|S|STORAGE|SY|SYSTEM|T|TEST|TL|TLEVEL|TR|TRESTART|X|Y|Z[A-Z]*|A|ASCII|C|CHAR|D|DATA|E|EXTRACT|F|FIND|FN|FNUMBER|G|GET|J|JUSTIFY|L|LENGTH|NA|NAME|O|ORDER|P|PIECE|QL|QLENGTH|QS|QSUBSCRIPT|Q|QUERY|R|RANDOM|RE|REVERSE|S|SELECT|ST|STACK|T|TEXT|TR|TRANSLATE|NaN))\b/i,
+null],["kwd",/^(?:[^\$]B|BREAK|C|CLOSE|D|DO|E|ELSE|F|FOR|G|GOTO|H|HALT|H|HANG|I|IF|J|JOB|K|KILL|L|LOCK|M|MERGE|N|NEW|O|OPEN|Q|QUIT|R|READ|S|SET|TC|TCOMMIT|TRE|TRESTART|TRO|TROLLBACK|TS|TSTART|U|USE|V|VIEW|W|WRITE|X|XECUTE)\b/i,null],["lit",/^[+-]?(?:(?:\.\d+|\d+(?:\.\d*)?)(?:E[+\-]?\d+)?)/i],["pln",/^[a-z][a-zA-Z0-9]*/i],["pun",/^[^\w\t\n\r\xA0\"\$;%\^]|_/]]),["mumps"]);
diff --git a/docs/vendor/prettify/lang-n.js b/docs/vendor/prettify/lang-n.js
new file mode 100644
index 00000000..9b3910c9
--- /dev/null
+++ b/docs/vendor/prettify/lang-n.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2011 Zimin A.V.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:\'(?:[^\\\'\r\n]|\\.)*\'|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,'"'],["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"],["pln",/^\s+/,null," \r\n\t\u00a0"]],[["str",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null],["str",/^<#(?:[^#>])*(?:#>|$)/,null],["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null],["com",/^\/\/[^\r\n]*/,
+null],["com",/^\/\*[\s\S]*?(?:\*\/|$)/,null],["kwd",/^(?:abstract|and|as|base|catch|class|def|delegate|enum|event|extern|false|finally|fun|implements|interface|internal|is|macro|match|matches|module|mutable|namespace|new|null|out|override|params|partial|private|protected|public|ref|sealed|static|struct|syntax|this|throw|true|try|type|typeof|using|variant|virtual|volatile|when|where|with|assert|assert2|async|break|checked|continue|do|else|ensures|for|foreach|if|late|lock|new|nolate|otherwise|regexp|repeat|requires|return|surroundwith|unchecked|unless|using|while|yield)\b/,
+null],["typ",/^(?:array|bool|byte|char|decimal|double|float|int|list|long|object|sbyte|short|string|ulong|uint|ufloat|ulong|ushort|void)\b/,null],["lit",/^@[a-z_$][a-z_$@0-9]*/i,null],["typ",/^@[A-Z]+[a-z][A-Za-z_$@0-9]*/,null],["pln",/^'?[A-Za-z_$][a-z_$@0-9]*/i,null],["lit",/^(?:0x[a-f0-9]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+\-]?\d+)?)[a-z]*/i,null,"0123456789"],["pun",/^.[^\s\w\.$@\'\"\`\/\#]*/,null]]),["n","nemerle"]);
diff --git a/docs/vendor/prettify/lang-nemerle.js b/docs/vendor/prettify/lang-nemerle.js
new file mode 100644
index 00000000..9b3910c9
--- /dev/null
+++ b/docs/vendor/prettify/lang-nemerle.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2011 Zimin A.V.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:\'(?:[^\\\'\r\n]|\\.)*\'|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,'"'],["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"],["pln",/^\s+/,null," \r\n\t\u00a0"]],[["str",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null],["str",/^<#(?:[^#>])*(?:#>|$)/,null],["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null],["com",/^\/\/[^\r\n]*/,
+null],["com",/^\/\*[\s\S]*?(?:\*\/|$)/,null],["kwd",/^(?:abstract|and|as|base|catch|class|def|delegate|enum|event|extern|false|finally|fun|implements|interface|internal|is|macro|match|matches|module|mutable|namespace|new|null|out|override|params|partial|private|protected|public|ref|sealed|static|struct|syntax|this|throw|true|try|type|typeof|using|variant|virtual|volatile|when|where|with|assert|assert2|async|break|checked|continue|do|else|ensures|for|foreach|if|late|lock|new|nolate|otherwise|regexp|repeat|requires|return|surroundwith|unchecked|unless|using|while|yield)\b/,
+null],["typ",/^(?:array|bool|byte|char|decimal|double|float|int|list|long|object|sbyte|short|string|ulong|uint|ufloat|ulong|ushort|void)\b/,null],["lit",/^@[a-z_$][a-z_$@0-9]*/i,null],["typ",/^@[A-Z]+[a-z][A-Za-z_$@0-9]*/,null],["pln",/^'?[A-Za-z_$][a-z_$@0-9]*/i,null],["lit",/^(?:0x[a-f0-9]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+\-]?\d+)?)[a-z]*/i,null,"0123456789"],["pun",/^.[^\s\w\.$@\'\"\`\/\#]*/,null]]),["n","nemerle"]);
diff --git a/docs/vendor/prettify/lang-pascal.js b/docs/vendor/prettify/lang-pascal.js
new file mode 100644
index 00000000..c76a11cf
--- /dev/null
+++ b/docs/vendor/prettify/lang-pascal.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2013 Peter Kofler
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$))/,null,"'"],["pln",/^\s+/,null," \r\n\t\u00a0"]],[["com",/^\(\*[\s\S]*?(?:\*\)|$)|^\{[\s\S]*?(?:\}|$)/,null],["kwd",/^(?:ABSOLUTE|AND|ARRAY|ASM|ASSEMBLER|BEGIN|CASE|CONST|CONSTRUCTOR|DESTRUCTOR|DIV|DO|DOWNTO|ELSE|END|EXTERNAL|FOR|FORWARD|FUNCTION|GOTO|IF|IMPLEMENTATION|IN|INLINE|INTERFACE|INTERRUPT|LABEL|MOD|NOT|OBJECT|OF|OR|PACKED|PROCEDURE|PROGRAM|RECORD|REPEAT|SET|SHL|SHR|THEN|TO|TYPE|UNIT|UNTIL|USES|VAR|VIRTUAL|WHILE|WITH|XOR)\b/i,
+null],["lit",/^(?:true|false|self|nil)/i,null],["pln",/^[a-z][a-z0-9]*/i,null],["lit",/^(?:\$[a-f0-9]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?)/i,null,"0123456789"],["pun",/^.[^\s\w\.$@\'\/]*/,null]]),["pascal"]);
diff --git a/docs/vendor/prettify/lang-proto.js b/docs/vendor/prettify/lang-proto.js
new file mode 100644
index 00000000..3215ff6d
--- /dev/null
+++ b/docs/vendor/prettify/lang-proto.js
@@ -0,0 +1,17 @@
+/*
+
+ Copyright (C) 2006 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.sourceDecorator({keywords:"bytes,default,double,enum,extend,extensions,false,group,import,max,message,option,optional,package,repeated,required,returns,rpc,service,syntax,to,true",types:/^(bool|(double|s?fixed|[su]?int)(32|64)|float|string)\b/,cStyleComments:!0}),["proto"]);
diff --git a/docs/vendor/prettify/lang-r.js b/docs/vendor/prettify/lang-r.js
new file mode 100644
index 00000000..6ce16e8a
--- /dev/null
+++ b/docs/vendor/prettify/lang-r.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2012 Jeffrey B. Arnold
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\'(?:[^\'\\]|\\[\s\S])*(?:\'|$)/,null,"'"]],[["com",/^#.*/],["kwd",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![A-Za-z0-9_.])/],["lit",/^0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/],["lit",/^[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?[Li]?/],["lit",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\.\.(?:\.|[0-9]+))(?![A-Za-z0-9_.])/],
+["pun",/^(?:<<?-|->>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|\*|\+|\^|\/|!|%.*?%|=|~|\$|@|:{1,3}|[\[\](){};,?])/],["pln",/^(?:[A-Za-z]+[A-Za-z0-9_.]*|\.[a-zA-Z_][0-9a-zA-Z\._]*)(?![A-Za-z0-9_.])/],["str",/^`.+`/]]),["r","s","R","S","Splus"]);
diff --git a/docs/vendor/prettify/lang-rd.js b/docs/vendor/prettify/lang-rd.js
new file mode 100644
index 00000000..113141c9
--- /dev/null
+++ b/docs/vendor/prettify/lang-rd.js
@@ -0,0 +1,17 @@
+/*
+
+ Copyright (C) 2012 Jeffrey Arnold
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\r\n]*/,null,"%"]],[["lit",/^\\(?:cr|l?dots|R|tab)\b/],["kwd",/^\\[a-zA-Z@]+/],["kwd",/^#(?:ifn?def|endif)/],["pln",/^\\[{}]/],["pun",/^[{}()\[\]]+/]]),["Rd","rd"]);
diff --git a/docs/vendor/prettify/lang-rkt.js b/docs/vendor/prettify/lang-rkt.js
new file mode 100644
index 00000000..2f18c967
--- /dev/null
+++ b/docs/vendor/prettify/lang-rkt.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,
+null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" "));
diff --git a/docs/vendor/prettify/lang-rust.js b/docs/vendor/prettify/lang-rust.js
new file mode 100644
index 00000000..43856778
--- /dev/null
+++ b/docs/vendor/prettify/lang-rust.js
@@ -0,0 +1,20 @@
+/*
+
+ Copyright (C) 2015 Chris Morgan
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([],[["pln",/^[\t\n\r \xA0]+/],["com",/^\/\/.*/],["com",/^\/\*[\s\S]*?(?:\*\/|$)/],["str",/^b"(?:[^\\]|\\(?:.|x[\da-fA-F]{2}))*?"/],["str",/^"(?:[^\\]|\\(?:.|x[\da-fA-F]{2}|u\{\[\da-fA-F]{1,6}\}))*?"/],["str",/^b?r(#*)\"[\s\S]*?\"\1/],["str",/^b'([^\\]|\\(.|x[\da-fA-F]{2}))'/],["str",/^'([^\\]|\\(.|x[\da-fA-F]{2}|u\{[\da-fA-F]{1,6}\}))'/],["tag",/^'\w+?\b/],["kwd",/^(?:match|if|else|as|break|box|continue|extern|fn|for|in|if|impl|let|loop|pub|return|super|unsafe|where|while|use|mod|trait|struct|enum|type|move|mut|ref|static|const|crate)\b/],
+["kwd",/^(?:alignof|become|do|offsetof|priv|pure|sizeof|typeof|unsized|yield|abstract|virtual|final|override|macro)\b/],["typ",/^(?:[iu](8|16|32|64|size)|char|bool|f32|f64|str|Self)\b/],["typ",/^(?:Copy|Send|Sized|Sync|Drop|Fn|FnMut|FnOnce|Box|ToOwned|Clone|PartialEq|PartialOrd|Eq|Ord|AsRef|AsMut|Into|From|Default|Iterator|Extend|IntoIterator|DoubleEndedIterator|ExactSizeIterator|Option|Some|None|Result|Ok|Err|SliceConcatExt|String|ToString|Vec)\b/],["lit",/^(self|true|false|null)\b/],
+["lit",/^\d[0-9_]*(?:[iu](?:size|8|16|32|64))?/],["lit",/^0x[a-fA-F0-9_]+(?:[iu](?:size|8|16|32|64))?/],["lit",/^0o[0-7_]+(?:[iu](?:size|8|16|32|64))?/],["lit",/^0b[01_]+(?:[iu](?:size|8|16|32|64))?/],["lit",/^\d[0-9_]*\.(?![^\s\d.])/],["lit",/^\d[0-9_]*(?:\.\d[0-9_]*)(?:[eE][+-]?[0-9_]+)?(?:f32|f64)?/],["lit",/^\d[0-9_]*(?:\.\d[0-9_]*)?(?:[eE][+-]?[0-9_]+)(?:f32|f64)?/],["lit",/^\d[0-9_]*(?:\.\d[0-9_]*)?(?:[eE][+-]?[0-9_]+)?(?:f32|f64)/],
+["atn",/^[a-z_]\w*!/i],["pln",/^[a-z_]\w*/i],["atv",/^#!?\[[\s\S]*?\]/],["pun",/^[+\-/*=^&|!<>%[\](){}?:.,;]/],["pln",/./]]),["rust"]);
diff --git a/docs/vendor/prettify/lang-s.js b/docs/vendor/prettify/lang-s.js
new file mode 100644
index 00000000..6ce16e8a
--- /dev/null
+++ b/docs/vendor/prettify/lang-s.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2012 Jeffrey B. Arnold
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\'(?:[^\'\\]|\\[\s\S])*(?:\'|$)/,null,"'"]],[["com",/^#.*/],["kwd",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![A-Za-z0-9_.])/],["lit",/^0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/],["lit",/^[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?[Li]?/],["lit",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\.\.(?:\.|[0-9]+))(?![A-Za-z0-9_.])/],
+["pun",/^(?:<<?-|->>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|\*|\+|\^|\/|!|%.*?%|=|~|\$|@|:{1,3}|[\[\](){};,?])/],["pln",/^(?:[A-Za-z]+[A-Za-z0-9_.]*|\.[a-zA-Z_][0-9a-zA-Z\._]*)(?![A-Za-z0-9_.])/],["str",/^`.+`/]]),["r","s","R","S","Splus"]);
diff --git a/docs/vendor/prettify/lang-scala.js b/docs/vendor/prettify/lang-scala.js
new file mode 100644
index 00000000..3347dd60
--- /dev/null
+++ b/docs/vendor/prettify/lang-scala.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2010 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:(?:""(?:""?(?!")|[^\\"]|\\.)*"{0,3})|(?:[^"\r\n\\]|\\.)*"?))/,null,'"'],["lit",/^`(?:[^\r\n\\`]|\\.)*`?/,null,"`"],["pun",/^[!#%&()*+,\-:;<=>?@\[\\\]^{|}~]+/,null,"!#%&()*+,-:;<=>?@[\\]^{|}~"]],[["str",/^'(?:[^\r\n\\']|\\(?:'|[^\r\n']+))'/],["lit",/^'[a-zA-Z_$][\w$]*(?!['$\w])/],["kwd",/^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\b/],
+["lit",/^(?:true|false|null|this)\b/],["lit",/^(?:(?:0(?:[0-7]+|X[0-9A-F]+))L?|(?:(?:0|[1-9][0-9]*)(?:(?:\.[0-9]+)?(?:E[+\-]?[0-9]+)?F?|L?))|\\.[0-9]+(?:E[+\-]?[0-9]+)?F?)/i],["typ",/^[$_]*[A-Z][_$A-Z0-9]*[a-z][\w$]*/],["pln",/^[$a-zA-Z_][\w$]*/],["com",/^\/(?:\/.*|\*(?:\/|\**[^*/])*(?:\*+\/?)?)/],["pun",/^(?:\.+|\/)/]]),["scala"]);
diff --git a/docs/vendor/prettify/lang-scm.js b/docs/vendor/prettify/lang-scm.js
new file mode 100644
index 00000000..2f18c967
--- /dev/null
+++ b/docs/vendor/prettify/lang-scm.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,
+null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" "));
diff --git a/docs/vendor/prettify/lang-sql.js b/docs/vendor/prettify/lang-sql.js
new file mode 100644
index 00000000..a7d292cb
--- /dev/null
+++ b/docs/vendor/prettify/lang-sql.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:[^\"\\]|\\.)*"|'(?:[^\'\\]|\\.)*')/,null,"\"'"]],[["com",/^(?:--[^\r\n]*|\/\*[\s\S]*?(?:\*\/|$))/],["kwd",/^(?:ADD|ALL|ALTER|AND|ANY|APPLY|AS|ASC|AUTHORIZATION|BACKUP|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONNECT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FOLLOWING|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LINENO|LOAD|MATCH|MATCHED|MERGE|NATURAL|NATIONAL|NOCHECK|NONCLUSTERED|NOCYCLE|NOT|NULL|NULLIF|OF|OFF|OFFSETS|ON|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PARTITION|PERCENT|PIVOT|PLAN|PRECEDING|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROWCOUNT|ROWGUIDCOL|ROWS?|RULE|SAVE|SCHEMA|SELECT|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|START|STATISTICS|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|UNBOUNDED|UNION|UNIQUE|UNPIVOT|UPDATE|UPDATETEXT|USE|USER|USING|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WITHIN|WRITETEXT|XML)(?=[^\w-]|$)/i,
+null],["lit",/^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],["pln",/^[a-z_][\w-]*/i],["pun",/^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0+\-\"\']*/]]),["sql"]);
diff --git a/docs/vendor/prettify/lang-ss.js b/docs/vendor/prettify/lang-ss.js
new file mode 100644
index 00000000..2f18c967
--- /dev/null
+++ b/docs/vendor/prettify/lang-ss.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2008 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,
+null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" "));
diff --git a/docs/vendor/prettify/lang-swift.js b/docs/vendor/prettify/lang-swift.js
new file mode 100644
index 00000000..5442fa77
--- /dev/null
+++ b/docs/vendor/prettify/lang-swift.js
@@ -0,0 +1,16 @@
+/*
+
+ Copyright (C) 2015 Google Inc.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[ \n\r\t\v\f\0]+/,null," \n\r\t\v\f\x00"],["str",/^"(?:[^"\\]|(?:\\.)|(?:\\\((?:[^"\\)]|\\.)*\)))*"/,null,'"']],[["lit",/^(?:(?:0x[\da-fA-F][\da-fA-F_]*\.[\da-fA-F][\da-fA-F_]*[pP]?)|(?:\d[\d_]*\.\d[\d_]*[eE]?))[+-]?\d[\d_]*/,null],["lit",/^-?(?:(?:0(?:(?:b[01][01_]*)|(?:o[0-7][0-7_]*)|(?:x[\da-fA-F][\da-fA-F_]*)))|(?:\d[\d_]*))/,null],["lit",/^(?:true|false|nil)\b/,null],["kwd",/^\b(?:__COLUMN__|__FILE__|__FUNCTION__|__LINE__|#available|#else|#elseif|#endif|#if|#line|arch|arm|arm64|associativity|as|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|dynamicType|else|enum|fallthrough|final|for|func|get|import|indirect|infix|init|inout|internal|i386|if|in|iOS|iOSApplicationExtension|is|lazy|left|let|mutating|none|nonmutating|operator|optional|OSX|OSXApplicationExtension|override|postfix|precedence|prefix|private|protocol|Protocol|public|required|rethrows|return|right|safe|self|set|static|struct|subscript|super|switch|throw|try|Type|typealias|unowned|unsafe|var|weak|watchOS|while|willSet|x86_64)\b/,
+null],["com",/^\/\/.*?[\n\r]/,null],["com",/^\/\*[\s\S]*?(?:\*\/|$)/,null],["pun",/^<<=|<=|<<|>>=|>=|>>|===|==|\.\.\.|&&=|\.\.<|!==|!=|&=|~=|~|\(|\)|\[|\]|{|}|@|#|;|\.|,|:|\|\|=|\?\?|\|\||&&|&\*|&\+|&-|&=|\+=|-=|\/=|\*=|\^=|%=|\|=|->|`|==|\+\+|--|\/|\+|!|\*|%|<|>|&|\||\^|\?|=|-|_/,null],["typ",/^\b(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null]]),["swift"]);
diff --git a/docs/vendor/prettify/lang-tcl.js b/docs/vendor/prettify/lang-tcl.js
new file mode 100644
index 00000000..1d75c3f0
--- /dev/null
+++ b/docs/vendor/prettify/lang-tcl.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2012 Pyrios
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\{+/,null,"{"],["clo",/^\}+/,null,"}"],["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:after|append|apply|array|break|case|catch|continue|error|eval|exec|exit|expr|for|foreach|if|incr|info|proc|return|set|switch|trace|uplevel|upvar|while)\b/,null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],
+["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["tcl"]);
diff --git a/docs/vendor/prettify/lang-tex.js b/docs/vendor/prettify/lang-tex.js
new file mode 100644
index 00000000..efc758cd
--- /dev/null
+++ b/docs/vendor/prettify/lang-tex.js
@@ -0,0 +1,17 @@
+/*
+
+ Copyright (C) 2011 Martin S.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\r\n]*/,null,"%"]],[["kwd",/^\\[a-zA-Z@]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[{}()\[\]=]+/]]),["latex","tex"]);
diff --git a/docs/vendor/prettify/lang-vb.js b/docs/vendor/prettify/lang-vb.js
new file mode 100644
index 00000000..e34086fe
--- /dev/null
+++ b/docs/vendor/prettify/lang-vb.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2009 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0\u2028\u2029]+/,null,"\t\n\r \u00a0\u2028\u2029"],["str",/^(?:[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})(?:[\"\u201C\u201D]c|$)|[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})*(?:[\"\u201C\u201D]|$))/i,null,'"\u201c\u201d'],["com",/^[\'\u2018\u2019](?:_(?:\r\n?|[^\r]?)|[^\r\n_\u2028\u2029])*/,null,"'\u2018\u2019"]],[["kwd",/^(?:AddHandler|AddressOf|Alias|And|AndAlso|Ansi|As|Assembly|Auto|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDbl|CDec|Char|CInt|Class|CLng|CObj|Const|CShort|CSng|CStr|CType|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get|GetType|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|New|Next|Not|NotInheritable|NotOverridable|Object|On|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Preserve|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TypeOf|Unicode|Until|Variant|Wend|When|While|With|WithEvents|WriteOnly|Xor|EndIf|GoSub|Let|Variant|Wend)\b/i,
+null],["com",/^REM\b[^\r\n\u2028\u2029]*/i],["lit",/^(?:True\b|False\b|Nothing\b|\d+(?:E[+\-]?\d+[FRD]?|[FRDSIL])?|(?:&H[0-9A-F]+|&O[0-7]+)[SIL]?|\d*\.\d+(?:E[+\-]?\d+)?[FRD]?|#\s+(?:\d+[\-\/]\d+[\-\/]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)?|\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)\s+#)/i],["pln",/^(?:(?:[a-z]|_\w)\w*(?:\[[%&@!#]+\])?|\[(?:[a-z]|_\w)\w*\])/i],["pun",/^[^\w\t\n\r \"\'\[\]\xA0\u2018\u2019\u201C\u201D\u2028\u2029]+/],["pun",/^(?:\[|\])/]]),["vb",
+"vbs"]);
diff --git a/docs/vendor/prettify/lang-vbs.js b/docs/vendor/prettify/lang-vbs.js
new file mode 100644
index 00000000..e34086fe
--- /dev/null
+++ b/docs/vendor/prettify/lang-vbs.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2009 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0\u2028\u2029]+/,null,"\t\n\r \u00a0\u2028\u2029"],["str",/^(?:[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})(?:[\"\u201C\u201D]c|$)|[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})*(?:[\"\u201C\u201D]|$))/i,null,'"\u201c\u201d'],["com",/^[\'\u2018\u2019](?:_(?:\r\n?|[^\r]?)|[^\r\n_\u2028\u2029])*/,null,"'\u2018\u2019"]],[["kwd",/^(?:AddHandler|AddressOf|Alias|And|AndAlso|Ansi|As|Assembly|Auto|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDbl|CDec|Char|CInt|Class|CLng|CObj|Const|CShort|CSng|CStr|CType|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get|GetType|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|New|Next|Not|NotInheritable|NotOverridable|Object|On|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Preserve|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TypeOf|Unicode|Until|Variant|Wend|When|While|With|WithEvents|WriteOnly|Xor|EndIf|GoSub|Let|Variant|Wend)\b/i,
+null],["com",/^REM\b[^\r\n\u2028\u2029]*/i],["lit",/^(?:True\b|False\b|Nothing\b|\d+(?:E[+\-]?\d+[FRD]?|[FRDSIL])?|(?:&H[0-9A-F]+|&O[0-7]+)[SIL]?|\d*\.\d+(?:E[+\-]?\d+)?[FRD]?|#\s+(?:\d+[\-\/]\d+[\-\/]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)?|\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)\s+#)/i],["pln",/^(?:(?:[a-z]|_\w)\w*(?:\[[%&@!#]+\])?|\[(?:[a-z]|_\w)\w*\])/i],["pun",/^[^\w\t\n\r \"\'\[\]\xA0\u2018\u2019\u201C\u201D\u2028\u2029]+/],["pun",/^(?:\[|\])/]]),["vb",
+"vbs"]);
diff --git a/docs/vendor/prettify/lang-vhd.js b/docs/vendor/prettify/lang-vhd.js
new file mode 100644
index 00000000..f67a4a39
--- /dev/null
+++ b/docs/vendor/prettify/lang-vhd.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2010 benoit@ryder.fr
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"]],[["str",/^(?:[BOX]?"(?:[^\"]|"")*"|'.')/i],["com",/^--[^\r\n]*/],["kwd",/^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\w-]|$)/i,
+null],["typ",/^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\w-]|$)/i,null],["typ",/^\'(?:ACTIVE|ASCENDING|BASE|DELAYED|DRIVING|DRIVING_VALUE|EVENT|HIGH|IMAGE|INSTANCE_NAME|LAST_ACTIVE|LAST_EVENT|LAST_VALUE|LEFT|LEFTOF|LENGTH|LOW|PATH_NAME|POS|PRED|QUIET|RANGE|REVERSE_RANGE|RIGHT|RIGHTOF|SIMPLE_NAME|STABLE|SUCC|TRANSACTION|VAL|VALUE)(?=[^\w-]|$)/i,null],["lit",/^\d+(?:_\d+)*(?:#[\w\\.]+#(?:[+\-]?\d+(?:_\d+)*)?|(?:\.\d+(?:_\d+)*)?(?:E[+\-]?\d+(?:_\d+)*)?)/i],
+["pln",/^(?:[a-z]\w*|\\[^\\]*\\)/i],["pun",/^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0\-\"\']*/]]),["vhdl","vhd"]);
diff --git a/docs/vendor/prettify/lang-vhdl.js b/docs/vendor/prettify/lang-vhdl.js
new file mode 100644
index 00000000..f67a4a39
--- /dev/null
+++ b/docs/vendor/prettify/lang-vhdl.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2010 benoit@ryder.fr
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"]],[["str",/^(?:[BOX]?"(?:[^\"]|"")*"|'.')/i],["com",/^--[^\r\n]*/],["kwd",/^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\w-]|$)/i,
+null],["typ",/^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\w-]|$)/i,null],["typ",/^\'(?:ACTIVE|ASCENDING|BASE|DELAYED|DRIVING|DRIVING_VALUE|EVENT|HIGH|IMAGE|INSTANCE_NAME|LAST_ACTIVE|LAST_EVENT|LAST_VALUE|LEFT|LEFTOF|LENGTH|LOW|PATH_NAME|POS|PRED|QUIET|RANGE|REVERSE_RANGE|RIGHT|RIGHTOF|SIMPLE_NAME|STABLE|SUCC|TRANSACTION|VAL|VALUE)(?=[^\w-]|$)/i,null],["lit",/^\d+(?:_\d+)*(?:#[\w\\.]+#(?:[+\-]?\d+(?:_\d+)*)?|(?:\.\d+(?:_\d+)*)?(?:E[+\-]?\d+(?:_\d+)*)?)/i],
+["pln",/^(?:[a-z]\w*|\\[^\\]*\\)/i],["pun",/^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0\-\"\']*/]]),["vhdl","vhd"]);
diff --git a/docs/vendor/prettify/lang-wiki.js b/docs/vendor/prettify/lang-wiki.js
new file mode 100644
index 00000000..d03fccd2
--- /dev/null
+++ b/docs/vendor/prettify/lang-wiki.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2009 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t \xA0a-gi-z0-9]+/,null,"\t \u00a0abcdefgijklmnopqrstuvwxyz0123456789"],["pun",/^[=*~\^\[\]]+/,null,"=*~^[]"]],[["lang-wiki.meta",/(?:^^|\r\n?|\n)(#[a-z]+)\b/],["lit",/^(?:[A-Z][a-z][a-z0-9]+[A-Z][a-z][a-zA-Z0-9]+)\b/],["lang-",/^\{\{\{([\s\S]+?)\}\}\}/],["lang-",/^`([^\r\n`]+)`/],["str",/^https?:\/\/[^\/?#\s]*(?:\/[^?#\s]*)?(?:\?[^#\s]*)?(?:#\S*)?/i],["pln",/^(?:\r\n|[\s\S])[^#=*~^A-Zh\{`\[\r\n]*/]]),["wiki"]);
+PR.registerLangHandler(PR.createSimpleLexer([["kwd",/^#[a-z]+/i,null,"#"]],[]),["wiki.meta"]);
diff --git a/docs/vendor/prettify/lang-xq.js b/docs/vendor/prettify/lang-xq.js
new file mode 100644
index 00000000..a6d85372
--- /dev/null
+++ b/docs/vendor/prettify/lang-xq.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2011 Patrick Wied
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["var pln",/^\$[A-Za-z0-9_\-]+/,null,"$"]],[["pln",/^[\s=][<>][\s=]/],["lit",/^\@[\w-]+/],["tag",/^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],["com",/^\(:[\s\S]*?:\)/],["pln",/^[\/\{\};,\[\]\(\)]$/],["str",/^(?:\"(?:[^\"\\\{]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\\{]|\\[\s\S])*(?:\'|$))/,null,"\"'"],["kwd",/^(?:xquery|where|version|variable|union|typeswitch|treat|to|then|text|stable|sortby|some|self|schema|satisfies|returns|return|ref|processing-instruction|preceding-sibling|preceding|precedes|parent|only|of|node|namespace|module|let|item|intersect|instance|in|import|if|function|for|follows|following-sibling|following|external|except|every|else|element|descending|descendant-or-self|descendant|define|default|declare|comment|child|cast|case|before|attribute|assert|ascending|as|ancestor-or-self|ancestor|after|eq|order|by|or|and|schema-element|document-node|node|at)\b/],
+["typ",/^(?:xs:yearMonthDuration|xs:unsignedLong|xs:time|xs:string|xs:short|xs:QName|xs:Name|xs:long|xs:integer|xs:int|xs:gYearMonth|xs:gYear|xs:gMonthDay|xs:gDay|xs:float|xs:duration|xs:double|xs:decimal|xs:dayTimeDuration|xs:dateTime|xs:date|xs:byte|xs:boolean|xs:anyURI|xf:yearMonthDuration)\b/,null],["fun pln",/^(?:xp:dereference|xinc:node-expand|xinc:link-references|xinc:link-expand|xhtml:restructure|xhtml:clean|xhtml:add-lists|xdmp:zip-manifest|xdmp:zip-get|xdmp:zip-create|xdmp:xquery-version|xdmp:word-convert|xdmp:with-namespaces|xdmp:version|xdmp:value|xdmp:user-roles|xdmp:user-last-login|xdmp:user|xdmp:url-encode|xdmp:url-decode|xdmp:uri-is-file|xdmp:uri-format|xdmp:uri-content-type|xdmp:unquote|xdmp:unpath|xdmp:triggers-database|xdmp:trace|xdmp:to-json|xdmp:tidy|xdmp:subbinary|xdmp:strftime|xdmp:spawn-in|xdmp:spawn|xdmp:sleep|xdmp:shutdown|xdmp:set-session-field|xdmp:set-response-encoding|xdmp:set-response-content-type|xdmp:set-response-code|xdmp:set-request-time-limit|xdmp:set|xdmp:servers|xdmp:server-status|xdmp:server-name|xdmp:server|xdmp:security-database|xdmp:security-assert|xdmp:schema-database|xdmp:save|xdmp:role-roles|xdmp:role|xdmp:rethrow|xdmp:restart|xdmp:request-timestamp|xdmp:request-status|xdmp:request-cancel|xdmp:request|xdmp:redirect-response|xdmp:random|xdmp:quote|xdmp:query-trace|xdmp:query-meters|xdmp:product-edition|xdmp:privilege-roles|xdmp:privilege|xdmp:pretty-print|xdmp:powerpoint-convert|xdmp:platform|xdmp:permission|xdmp:pdf-convert|xdmp:path|xdmp:octal-to-integer|xdmp:node-uri|xdmp:node-replace|xdmp:node-kind|xdmp:node-insert-child|xdmp:node-insert-before|xdmp:node-insert-after|xdmp:node-delete|xdmp:node-database|xdmp:mul64|xdmp:modules-root|xdmp:modules-database|xdmp:merging|xdmp:merge-cancel|xdmp:merge|xdmp:md5|xdmp:logout|xdmp:login|xdmp:log-level|xdmp:log|xdmp:lock-release|xdmp:lock-acquire|xdmp:load|xdmp:invoke-in|xdmp:invoke|xdmp:integer-to-octal|xdmp:integer-to-hex|xdmp:http-put|xdmp:http-post|xdmp:http-options|xdmp:http-head|xdmp:http-get|xdmp:http-delete|xdmp:hosts|xdmp:host-status|xdmp:host-name|xdmp:host|xdmp:hex-to-integer|xdmp:hash64|xdmp:hash32|xdmp:has-privilege|xdmp:groups|xdmp:group-serves|xdmp:group-servers|xdmp:group-name|xdmp:group-hosts|xdmp:group|xdmp:get-session-field-names|xdmp:get-session-field|xdmp:get-response-encoding|xdmp:get-response-code|xdmp:get-request-username|xdmp:get-request-user|xdmp:get-request-url|xdmp:get-request-protocol|xdmp:get-request-path|xdmp:get-request-method|xdmp:get-request-header-names|xdmp:get-request-header|xdmp:get-request-field-names|xdmp:get-request-field-filename|xdmp:get-request-field-content-type|xdmp:get-request-field|xdmp:get-request-client-certificate|xdmp:get-request-client-address|xdmp:get-request-body|xdmp:get-current-user|xdmp:get-current-roles|xdmp:get|xdmp:function-name|xdmp:function-module|xdmp:function|xdmp:from-json|xdmp:forests|xdmp:forest-status|xdmp:forest-restore|xdmp:forest-restart|xdmp:forest-name|xdmp:forest-delete|xdmp:forest-databases|xdmp:forest-counts|xdmp:forest-clear|xdmp:forest-backup|xdmp:forest|xdmp:filesystem-file|xdmp:filesystem-directory|xdmp:exists|xdmp:excel-convert|xdmp:eval-in|xdmp:eval|xdmp:estimate|xdmp:email|xdmp:element-content-type|xdmp:elapsed-time|xdmp:document-set-quality|xdmp:document-set-property|xdmp:document-set-properties|xdmp:document-set-permissions|xdmp:document-set-collections|xdmp:document-remove-properties|xdmp:document-remove-permissions|xdmp:document-remove-collections|xdmp:document-properties|xdmp:document-locks|xdmp:document-load|xdmp:document-insert|xdmp:document-get-quality|xdmp:document-get-properties|xdmp:document-get-permissions|xdmp:document-get-collections|xdmp:document-get|xdmp:document-forest|xdmp:document-delete|xdmp:document-add-properties|xdmp:document-add-permissions|xdmp:document-add-collections|xdmp:directory-properties|xdmp:directory-locks|xdmp:directory-delete|xdmp:directory-create|xdmp:directory|xdmp:diacritic-less|xdmp:describe|xdmp:default-permissions|xdmp:default-collections|xdmp:databases|xdmp:database-restore-validate|xdmp:database-restore-status|xdmp:database-restore-cancel|xdmp:database-restore|xdmp:database-name|xdmp:database-forests|xdmp:database-backup-validate|xdmp:database-backup-status|xdmp:database-backup-purge|xdmp:database-backup-cancel|xdmp:database-backup|xdmp:database|xdmp:collection-properties|xdmp:collection-locks|xdmp:collection-delete|xdmp:collation-canonical-uri|xdmp:castable-as|xdmp:can-grant-roles|xdmp:base64-encode|xdmp:base64-decode|xdmp:architecture|xdmp:apply|xdmp:amp-roles|xdmp:amp|xdmp:add64|xdmp:add-response-header|xdmp:access|trgr:trigger-set-recursive|trgr:trigger-set-permissions|trgr:trigger-set-name|trgr:trigger-set-module|trgr:trigger-set-event|trgr:trigger-set-description|trgr:trigger-remove-permissions|trgr:trigger-module|trgr:trigger-get-permissions|trgr:trigger-enable|trgr:trigger-disable|trgr:trigger-database-online-event|trgr:trigger-data-event|trgr:trigger-add-permissions|trgr:remove-trigger|trgr:property-content|trgr:pre-commit|trgr:post-commit|trgr:get-trigger-by-id|trgr:get-trigger|trgr:document-scope|trgr:document-content|trgr:directory-scope|trgr:create-trigger|trgr:collection-scope|trgr:any-property-content|thsr:set-entry|thsr:remove-term|thsr:remove-synonym|thsr:remove-entry|thsr:query-lookup|thsr:lookup|thsr:load|thsr:insert|thsr:expand|thsr:add-synonym|spell:suggest-detailed|spell:suggest|spell:remove-word|spell:make-dictionary|spell:load|spell:levenshtein-distance|spell:is-correct|spell:insert|spell:double-metaphone|spell:add-word|sec:users-collection|sec:user-set-roles|sec:user-set-password|sec:user-set-name|sec:user-set-description|sec:user-set-default-permissions|sec:user-set-default-collections|sec:user-remove-roles|sec:user-privileges|sec:user-get-roles|sec:user-get-description|sec:user-get-default-permissions|sec:user-get-default-collections|sec:user-doc-permissions|sec:user-doc-collections|sec:user-add-roles|sec:unprotect-collection|sec:uid-for-name|sec:set-realm|sec:security-version|sec:security-namespace|sec:security-installed|sec:security-collection|sec:roles-collection|sec:role-set-roles|sec:role-set-name|sec:role-set-description|sec:role-set-default-permissions|sec:role-set-default-collections|sec:role-remove-roles|sec:role-privileges|sec:role-get-roles|sec:role-get-description|sec:role-get-default-permissions|sec:role-get-default-collections|sec:role-doc-permissions|sec:role-doc-collections|sec:role-add-roles|sec:remove-user|sec:remove-role-from-users|sec:remove-role-from-role|sec:remove-role-from-privileges|sec:remove-role-from-amps|sec:remove-role|sec:remove-privilege|sec:remove-amp|sec:protect-collection|sec:privileges-collection|sec:privilege-set-roles|sec:privilege-set-name|sec:privilege-remove-roles|sec:privilege-get-roles|sec:privilege-add-roles|sec:priv-doc-permissions|sec:priv-doc-collections|sec:get-user-names|sec:get-unique-elem-id|sec:get-role-names|sec:get-role-ids|sec:get-privilege|sec:get-distinct-permissions|sec:get-collection|sec:get-amp|sec:create-user-with-role|sec:create-user|sec:create-role|sec:create-privilege|sec:create-amp|sec:collections-collection|sec:collection-set-permissions|sec:collection-remove-permissions|sec:collection-get-permissions|sec:collection-add-permissions|sec:check-admin|sec:amps-collection|sec:amp-set-roles|sec:amp-remove-roles|sec:amp-get-roles|sec:amp-doc-permissions|sec:amp-doc-collections|sec:amp-add-roles|search:unparse|search:suggest|search:snippet|search:search|search:resolve-nodes|search:resolve|search:remove-constraint|search:parse|search:get-default-options|search:estimate|search:check-options|prof:value|prof:reset|prof:report|prof:invoke|prof:eval|prof:enable|prof:disable|prof:allowed|ppt:clean|pki:template-set-request|pki:template-set-name|pki:template-set-key-type|pki:template-set-key-options|pki:template-set-description|pki:template-in-use|pki:template-get-version|pki:template-get-request|pki:template-get-name|pki:template-get-key-type|pki:template-get-key-options|pki:template-get-id|pki:template-get-description|pki:need-certificate|pki:is-temporary|pki:insert-trusted-certificates|pki:insert-template|pki:insert-signed-certificates|pki:insert-certificate-revocation-list|pki:get-trusted-certificate-ids|pki:get-template-ids|pki:get-template-certificate-authority|pki:get-template-by-name|pki:get-template|pki:get-pending-certificate-requests-xml|pki:get-pending-certificate-requests-pem|pki:get-pending-certificate-request|pki:get-certificates-for-template-xml|pki:get-certificates-for-template|pki:get-certificates|pki:get-certificate-xml|pki:get-certificate-pem|pki:get-certificate|pki:generate-temporary-certificate-if-necessary|pki:generate-temporary-certificate|pki:generate-template-certificate-authority|pki:generate-certificate-request|pki:delete-template|pki:delete-certificate|pki:create-template|pdf:make-toc|pdf:insert-toc-headers|pdf:get-toc|pdf:clean|p:status-transition|p:state-transition|p:remove|p:pipelines|p:insert|p:get-by-id|p:get|p:execute|p:create|p:condition|p:collection|p:action|ooxml:runs-merge|ooxml:package-uris|ooxml:package-parts-insert|ooxml:package-parts|msword:clean|mcgm:polygon|mcgm:point|mcgm:geospatial-query-from-elements|mcgm:geospatial-query|mcgm:circle|math:tanh|math:tan|math:sqrt|math:sinh|math:sin|math:pow|math:modf|math:log10|math:log|math:ldexp|math:frexp|math:fmod|math:floor|math:fabs|math:exp|math:cosh|math:cos|math:ceil|math:atan2|math:atan|math:asin|math:acos|map:put|map:map|map:keys|map:get|map:delete|map:count|map:clear|lnk:to|lnk:remove|lnk:insert|lnk:get|lnk:from|lnk:create|kml:polygon|kml:point|kml:interior-polygon|kml:geospatial-query-from-elements|kml:geospatial-query|kml:circle|kml:box|gml:polygon|gml:point|gml:interior-polygon|gml:geospatial-query-from-elements|gml:geospatial-query|gml:circle|gml:box|georss:point|georss:geospatial-query|georss:circle|geo:polygon|geo:point|geo:interior-polygon|geo:geospatial-query-from-elements|geo:geospatial-query|geo:circle|geo:box|fn:zero-or-one|fn:years-from-duration|fn:year-from-dateTime|fn:year-from-date|fn:upper-case|fn:unordered|fn:true|fn:translate|fn:trace|fn:tokenize|fn:timezone-from-time|fn:timezone-from-dateTime|fn:timezone-from-date|fn:sum|fn:subtract-dateTimes-yielding-yearMonthDuration|fn:subtract-dateTimes-yielding-dayTimeDuration|fn:substring-before|fn:substring-after|fn:substring|fn:subsequence|fn:string-to-codepoints|fn:string-pad|fn:string-length|fn:string-join|fn:string|fn:static-base-uri|fn:starts-with|fn:seconds-from-time|fn:seconds-from-duration|fn:seconds-from-dateTime|fn:round-half-to-even|fn:round|fn:root|fn:reverse|fn:resolve-uri|fn:resolve-QName|fn:replace|fn:remove|fn:QName|fn:prefix-from-QName|fn:position|fn:one-or-more|fn:number|fn:not|fn:normalize-unicode|fn:normalize-space|fn:node-name|fn:node-kind|fn:nilled|fn:namespace-uri-from-QName|fn:namespace-uri-for-prefix|fn:namespace-uri|fn:name|fn:months-from-duration|fn:month-from-dateTime|fn:month-from-date|fn:minutes-from-time|fn:minutes-from-duration|fn:minutes-from-dateTime|fn:min|fn:max|fn:matches|fn:lower-case|fn:local-name-from-QName|fn:local-name|fn:last|fn:lang|fn:iri-to-uri|fn:insert-before|fn:index-of|fn:in-scope-prefixes|fn:implicit-timezone|fn:idref|fn:id|fn:hours-from-time|fn:hours-from-duration|fn:hours-from-dateTime|fn:floor|fn:false|fn:expanded-QName|fn:exists|fn:exactly-one|fn:escape-uri|fn:escape-html-uri|fn:error|fn:ends-with|fn:encode-for-uri|fn:empty|fn:document-uri|fn:doc-available|fn:doc|fn:distinct-values|fn:distinct-nodes|fn:default-collation|fn:deep-equal|fn:days-from-duration|fn:day-from-dateTime|fn:day-from-date|fn:data|fn:current-time|fn:current-dateTime|fn:current-date|fn:count|fn:contains|fn:concat|fn:compare|fn:collection|fn:codepoints-to-string|fn:codepoint-equal|fn:ceiling|fn:boolean|fn:base-uri|fn:avg|fn:adjust-time-to-timezone|fn:adjust-dateTime-to-timezone|fn:adjust-date-to-timezone|fn:abs|feed:unsubscribe|feed:subscription|feed:subscribe|feed:request|feed:item|feed:description|excel:clean|entity:enrich|dom:set-pipelines|dom:set-permissions|dom:set-name|dom:set-evaluation-context|dom:set-domain-scope|dom:set-description|dom:remove-pipeline|dom:remove-permissions|dom:remove|dom:get|dom:evaluation-context|dom:domains|dom:domain-scope|dom:create|dom:configuration-set-restart-user|dom:configuration-set-permissions|dom:configuration-set-evaluation-context|dom:configuration-set-default-domain|dom:configuration-get|dom:configuration-create|dom:collection|dom:add-pipeline|dom:add-permissions|dls:retention-rules|dls:retention-rule-remove|dls:retention-rule-insert|dls:retention-rule|dls:purge|dls:node-expand|dls:link-references|dls:link-expand|dls:documents-query|dls:document-versions-query|dls:document-version-uri|dls:document-version-query|dls:document-version-delete|dls:document-version-as-of|dls:document-version|dls:document-update|dls:document-unmanage|dls:document-set-quality|dls:document-set-property|dls:document-set-properties|dls:document-set-permissions|dls:document-set-collections|dls:document-retention-rules|dls:document-remove-properties|dls:document-remove-permissions|dls:document-remove-collections|dls:document-purge|dls:document-manage|dls:document-is-managed|dls:document-insert-and-manage|dls:document-include-query|dls:document-history|dls:document-get-permissions|dls:document-extract-part|dls:document-delete|dls:document-checkout-status|dls:document-checkout|dls:document-checkin|dls:document-add-properties|dls:document-add-permissions|dls:document-add-collections|dls:break-checkout|dls:author-query|dls:as-of-query|dbk:convert|dbg:wait|dbg:value|dbg:stopped|dbg:stop|dbg:step|dbg:status|dbg:stack|dbg:out|dbg:next|dbg:line|dbg:invoke|dbg:function|dbg:finish|dbg:expr|dbg:eval|dbg:disconnect|dbg:detach|dbg:continue|dbg:connect|dbg:clear|dbg:breakpoints|dbg:break|dbg:attached|dbg:attach|cvt:save-converted-documents|cvt:part-uri|cvt:destination-uri|cvt:basepath|cvt:basename|cts:words|cts:word-query-weight|cts:word-query-text|cts:word-query-options|cts:word-query|cts:word-match|cts:walk|cts:uris|cts:uri-match|cts:train|cts:tokenize|cts:thresholds|cts:stem|cts:similar-query-weight|cts:similar-query-nodes|cts:similar-query|cts:shortest-distance|cts:search|cts:score|cts:reverse-query-weight|cts:reverse-query-nodes|cts:reverse-query|cts:remainder|cts:registered-query-weight|cts:registered-query-options|cts:registered-query-ids|cts:registered-query|cts:register|cts:query|cts:quality|cts:properties-query-query|cts:properties-query|cts:polygon-vertices|cts:polygon|cts:point-longitude|cts:point-latitude|cts:point|cts:or-query-queries|cts:or-query|cts:not-query-weight|cts:not-query-query|cts:not-query|cts:near-query-weight|cts:near-query-queries|cts:near-query-options|cts:near-query-distance|cts:near-query|cts:highlight|cts:geospatial-co-occurrences|cts:frequency|cts:fitness|cts:field-words|cts:field-word-query-weight|cts:field-word-query-text|cts:field-word-query-options|cts:field-word-query-field-name|cts:field-word-query|cts:field-word-match|cts:entity-highlight|cts:element-words|cts:element-word-query-weight|cts:element-word-query-text|cts:element-word-query-options|cts:element-word-query-element-name|cts:element-word-query|cts:element-word-match|cts:element-values|cts:element-value-ranges|cts:element-value-query-weight|cts:element-value-query-text|cts:element-value-query-options|cts:element-value-query-element-name|cts:element-value-query|cts:element-value-match|cts:element-value-geospatial-co-occurrences|cts:element-value-co-occurrences|cts:element-range-query-weight|cts:element-range-query-value|cts:element-range-query-options|cts:element-range-query-operator|cts:element-range-query-element-name|cts:element-range-query|cts:element-query-query|cts:element-query-element-name|cts:element-query|cts:element-pair-geospatial-values|cts:element-pair-geospatial-value-match|cts:element-pair-geospatial-query-weight|cts:element-pair-geospatial-query-region|cts:element-pair-geospatial-query-options|cts:element-pair-geospatial-query-longitude-name|cts:element-pair-geospatial-query-latitude-name|cts:element-pair-geospatial-query-element-name|cts:element-pair-geospatial-query|cts:element-pair-geospatial-boxes|cts:element-geospatial-values|cts:element-geospatial-value-match|cts:element-geospatial-query-weight|cts:element-geospatial-query-region|cts:element-geospatial-query-options|cts:element-geospatial-query-element-name|cts:element-geospatial-query|cts:element-geospatial-boxes|cts:element-child-geospatial-values|cts:element-child-geospatial-value-match|cts:element-child-geospatial-query-weight|cts:element-child-geospatial-query-region|cts:element-child-geospatial-query-options|cts:element-child-geospatial-query-element-name|cts:element-child-geospatial-query-child-name|cts:element-child-geospatial-query|cts:element-child-geospatial-boxes|cts:element-attribute-words|cts:element-attribute-word-query-weight|cts:element-attribute-word-query-text|cts:element-attribute-word-query-options|cts:element-attribute-word-query-element-name|cts:element-attribute-word-query-attribute-name|cts:element-attribute-word-query|cts:element-attribute-word-match|cts:element-attribute-values|cts:element-attribute-value-ranges|cts:element-attribute-value-query-weight|cts:element-attribute-value-query-text|cts:element-attribute-value-query-options|cts:element-attribute-value-query-element-name|cts:element-attribute-value-query-attribute-name|cts:element-attribute-value-query|cts:element-attribute-value-match|cts:element-attribute-value-geospatial-co-occurrences|cts:element-attribute-value-co-occurrences|cts:element-attribute-range-query-weight|cts:element-attribute-range-query-value|cts:element-attribute-range-query-options|cts:element-attribute-range-query-operator|cts:element-attribute-range-query-element-name|cts:element-attribute-range-query-attribute-name|cts:element-attribute-range-query|cts:element-attribute-pair-geospatial-values|cts:element-attribute-pair-geospatial-value-match|cts:element-attribute-pair-geospatial-query-weight|cts:element-attribute-pair-geospatial-query-region|cts:element-attribute-pair-geospatial-query-options|cts:element-attribute-pair-geospatial-query-longitude-name|cts:element-attribute-pair-geospatial-query-latitude-name|cts:element-attribute-pair-geospatial-query-element-name|cts:element-attribute-pair-geospatial-query|cts:element-attribute-pair-geospatial-boxes|cts:document-query-uris|cts:document-query|cts:distance|cts:directory-query-uris|cts:directory-query-depth|cts:directory-query|cts:destination|cts:deregister|cts:contains|cts:confidence|cts:collections|cts:collection-query-uris|cts:collection-query|cts:collection-match|cts:classify|cts:circle-radius|cts:circle-center|cts:circle|cts:box-west|cts:box-south|cts:box-north|cts:box-east|cts:box|cts:bearing|cts:arc-intersection|cts:and-query-queries|cts:and-query-options|cts:and-query|cts:and-not-query-positive-query|cts:and-not-query-negative-query|cts:and-not-query|css:get|css:convert|cpf:success|cpf:failure|cpf:document-set-state|cpf:document-set-processing-status|cpf:document-set-last-updated|cpf:document-set-error|cpf:document-get-state|cpf:document-get-processing-status|cpf:document-get-last-updated|cpf:document-get-error|cpf:check-transition|alert:spawn-matching-actions|alert:rule-user-id-query|alert:rule-set-user-id|alert:rule-set-query|alert:rule-set-options|alert:rule-set-name|alert:rule-set-description|alert:rule-set-action|alert:rule-remove|alert:rule-name-query|alert:rule-insert|alert:rule-id-query|alert:rule-get-user-id|alert:rule-get-query|alert:rule-get-options|alert:rule-get-name|alert:rule-get-id|alert:rule-get-description|alert:rule-get-action|alert:rule-action-query|alert:remove-triggers|alert:make-rule|alert:make-log-action|alert:make-config|alert:make-action|alert:invoke-matching-actions|alert:get-my-rules|alert:get-all-rules|alert:get-actions|alert:find-matching-rules|alert:create-triggers|alert:config-set-uri|alert:config-set-trigger-ids|alert:config-set-options|alert:config-set-name|alert:config-set-description|alert:config-set-cpf-domain-names|alert:config-set-cpf-domain-ids|alert:config-insert|alert:config-get-uri|alert:config-get-trigger-ids|alert:config-get-options|alert:config-get-name|alert:config-get-id|alert:config-get-description|alert:config-get-cpf-domain-names|alert:config-get-cpf-domain-ids|alert:config-get|alert:config-delete|alert:action-set-options|alert:action-set-name|alert:action-set-module-root|alert:action-set-module-db|alert:action-set-module|alert:action-set-description|alert:action-remove|alert:action-insert|alert:action-get-options|alert:action-get-name|alert:action-get-module-root|alert:action-get-module-db|alert:action-get-module|alert:action-get-description|zero-or-one|years-from-duration|year-from-dateTime|year-from-date|upper-case|unordered|true|translate|trace|tokenize|timezone-from-time|timezone-from-dateTime|timezone-from-date|sum|subtract-dateTimes-yielding-yearMonthDuration|subtract-dateTimes-yielding-dayTimeDuration|substring-before|substring-after|substring|subsequence|string-to-codepoints|string-pad|string-length|string-join|string|static-base-uri|starts-with|seconds-from-time|seconds-from-duration|seconds-from-dateTime|round-half-to-even|round|root|reverse|resolve-uri|resolve-QName|replace|remove|QName|prefix-from-QName|position|one-or-more|number|not|normalize-unicode|normalize-space|node-name|node-kind|nilled|namespace-uri-from-QName|namespace-uri-for-prefix|namespace-uri|name|months-from-duration|month-from-dateTime|month-from-date|minutes-from-time|minutes-from-duration|minutes-from-dateTime|min|max|matches|lower-case|local-name-from-QName|local-name|last|lang|iri-to-uri|insert-before|index-of|in-scope-prefixes|implicit-timezone|idref|id|hours-from-time|hours-from-duration|hours-from-dateTime|floor|false|expanded-QName|exists|exactly-one|escape-uri|escape-html-uri|error|ends-with|encode-for-uri|empty|document-uri|doc-available|doc|distinct-values|distinct-nodes|default-collation|deep-equal|days-from-duration|day-from-dateTime|day-from-date|data|current-time|current-dateTime|current-date|count|contains|concat|compare|collection|codepoints-to-string|codepoint-equal|ceiling|boolean|base-uri|avg|adjust-time-to-timezone|adjust-dateTime-to-timezone|adjust-date-to-timezone|abs)\b/],
+["pln",/^[A-Za-z0-9_\-\:]+/],["pln",/^[\t\n\r \xA0]+/]]),["xq","xquery"]);
diff --git a/docs/vendor/prettify/lang-xquery.js b/docs/vendor/prettify/lang-xquery.js
new file mode 100644
index 00000000..a6d85372
--- /dev/null
+++ b/docs/vendor/prettify/lang-xquery.js
@@ -0,0 +1,19 @@
+/*
+
+ Copyright (C) 2011 Patrick Wied
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["var pln",/^\$[A-Za-z0-9_\-]+/,null,"$"]],[["pln",/^[\s=][<>][\s=]/],["lit",/^\@[\w-]+/],["tag",/^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],["com",/^\(:[\s\S]*?:\)/],["pln",/^[\/\{\};,\[\]\(\)]$/],["str",/^(?:\"(?:[^\"\\\{]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\\{]|\\[\s\S])*(?:\'|$))/,null,"\"'"],["kwd",/^(?:xquery|where|version|variable|union|typeswitch|treat|to|then|text|stable|sortby|some|self|schema|satisfies|returns|return|ref|processing-instruction|preceding-sibling|preceding|precedes|parent|only|of|node|namespace|module|let|item|intersect|instance|in|import|if|function|for|follows|following-sibling|following|external|except|every|else|element|descending|descendant-or-self|descendant|define|default|declare|comment|child|cast|case|before|attribute|assert|ascending|as|ancestor-or-self|ancestor|after|eq|order|by|or|and|schema-element|document-node|node|at)\b/],
+["typ",/^(?:xs:yearMonthDuration|xs:unsignedLong|xs:time|xs:string|xs:short|xs:QName|xs:Name|xs:long|xs:integer|xs:int|xs:gYearMonth|xs:gYear|xs:gMonthDay|xs:gDay|xs:float|xs:duration|xs:double|xs:decimal|xs:dayTimeDuration|xs:dateTime|xs:date|xs:byte|xs:boolean|xs:anyURI|xf:yearMonthDuration)\b/,null],["fun pln",/^(?:xp:dereference|xinc:node-expand|xinc:link-references|xinc:link-expand|xhtml:restructure|xhtml:clean|xhtml:add-lists|xdmp:zip-manifest|xdmp:zip-get|xdmp:zip-create|xdmp:xquery-version|xdmp:word-convert|xdmp:with-namespaces|xdmp:version|xdmp:value|xdmp:user-roles|xdmp:user-last-login|xdmp:user|xdmp:url-encode|xdmp:url-decode|xdmp:uri-is-file|xdmp:uri-format|xdmp:uri-content-type|xdmp:unquote|xdmp:unpath|xdmp:triggers-database|xdmp:trace|xdmp:to-json|xdmp:tidy|xdmp:subbinary|xdmp:strftime|xdmp:spawn-in|xdmp:spawn|xdmp:sleep|xdmp:shutdown|xdmp:set-session-field|xdmp:set-response-encoding|xdmp:set-response-content-type|xdmp:set-response-code|xdmp:set-request-time-limit|xdmp:set|xdmp:servers|xdmp:server-status|xdmp:server-name|xdmp:server|xdmp:security-database|xdmp:security-assert|xdmp:schema-database|xdmp:save|xdmp:role-roles|xdmp:role|xdmp:rethrow|xdmp:restart|xdmp:request-timestamp|xdmp:request-status|xdmp:request-cancel|xdmp:request|xdmp:redirect-response|xdmp:random|xdmp:quote|xdmp:query-trace|xdmp:query-meters|xdmp:product-edition|xdmp:privilege-roles|xdmp:privilege|xdmp:pretty-print|xdmp:powerpoint-convert|xdmp:platform|xdmp:permission|xdmp:pdf-convert|xdmp:path|xdmp:octal-to-integer|xdmp:node-uri|xdmp:node-replace|xdmp:node-kind|xdmp:node-insert-child|xdmp:node-insert-before|xdmp:node-insert-after|xdmp:node-delete|xdmp:node-database|xdmp:mul64|xdmp:modules-root|xdmp:modules-database|xdmp:merging|xdmp:merge-cancel|xdmp:merge|xdmp:md5|xdmp:logout|xdmp:login|xdmp:log-level|xdmp:log|xdmp:lock-release|xdmp:lock-acquire|xdmp:load|xdmp:invoke-in|xdmp:invoke|xdmp:integer-to-octal|xdmp:integer-to-hex|xdmp:http-put|xdmp:http-post|xdmp:http-options|xdmp:http-head|xdmp:http-get|xdmp:http-delete|xdmp:hosts|xdmp:host-status|xdmp:host-name|xdmp:host|xdmp:hex-to-integer|xdmp:hash64|xdmp:hash32|xdmp:has-privilege|xdmp:groups|xdmp:group-serves|xdmp:group-servers|xdmp:group-name|xdmp:group-hosts|xdmp:group|xdmp:get-session-field-names|xdmp:get-session-field|xdmp:get-response-encoding|xdmp:get-response-code|xdmp:get-request-username|xdmp:get-request-user|xdmp:get-request-url|xdmp:get-request-protocol|xdmp:get-request-path|xdmp:get-request-method|xdmp:get-request-header-names|xdmp:get-request-header|xdmp:get-request-field-names|xdmp:get-request-field-filename|xdmp:get-request-field-content-type|xdmp:get-request-field|xdmp:get-request-client-certificate|xdmp:get-request-client-address|xdmp:get-request-body|xdmp:get-current-user|xdmp:get-current-roles|xdmp:get|xdmp:function-name|xdmp:function-module|xdmp:function|xdmp:from-json|xdmp:forests|xdmp:forest-status|xdmp:forest-restore|xdmp:forest-restart|xdmp:forest-name|xdmp:forest-delete|xdmp:forest-databases|xdmp:forest-counts|xdmp:forest-clear|xdmp:forest-backup|xdmp:forest|xdmp:filesystem-file|xdmp:filesystem-directory|xdmp:exists|xdmp:excel-convert|xdmp:eval-in|xdmp:eval|xdmp:estimate|xdmp:email|xdmp:element-content-type|xdmp:elapsed-time|xdmp:document-set-quality|xdmp:document-set-property|xdmp:document-set-properties|xdmp:document-set-permissions|xdmp:document-set-collections|xdmp:document-remove-properties|xdmp:document-remove-permissions|xdmp:document-remove-collections|xdmp:document-properties|xdmp:document-locks|xdmp:document-load|xdmp:document-insert|xdmp:document-get-quality|xdmp:document-get-properties|xdmp:document-get-permissions|xdmp:document-get-collections|xdmp:document-get|xdmp:document-forest|xdmp:document-delete|xdmp:document-add-properties|xdmp:document-add-permissions|xdmp:document-add-collections|xdmp:directory-properties|xdmp:directory-locks|xdmp:directory-delete|xdmp:directory-create|xdmp:directory|xdmp:diacritic-less|xdmp:describe|xdmp:default-permissions|xdmp:default-collections|xdmp:databases|xdmp:database-restore-validate|xdmp:database-restore-status|xdmp:database-restore-cancel|xdmp:database-restore|xdmp:database-name|xdmp:database-forests|xdmp:database-backup-validate|xdmp:database-backup-status|xdmp:database-backup-purge|xdmp:database-backup-cancel|xdmp:database-backup|xdmp:database|xdmp:collection-properties|xdmp:collection-locks|xdmp:collection-delete|xdmp:collation-canonical-uri|xdmp:castable-as|xdmp:can-grant-roles|xdmp:base64-encode|xdmp:base64-decode|xdmp:architecture|xdmp:apply|xdmp:amp-roles|xdmp:amp|xdmp:add64|xdmp:add-response-header|xdmp:access|trgr:trigger-set-recursive|trgr:trigger-set-permissions|trgr:trigger-set-name|trgr:trigger-set-module|trgr:trigger-set-event|trgr:trigger-set-description|trgr:trigger-remove-permissions|trgr:trigger-module|trgr:trigger-get-permissions|trgr:trigger-enable|trgr:trigger-disable|trgr:trigger-database-online-event|trgr:trigger-data-event|trgr:trigger-add-permissions|trgr:remove-trigger|trgr:property-content|trgr:pre-commit|trgr:post-commit|trgr:get-trigger-by-id|trgr:get-trigger|trgr:document-scope|trgr:document-content|trgr:directory-scope|trgr:create-trigger|trgr:collection-scope|trgr:any-property-content|thsr:set-entry|thsr:remove-term|thsr:remove-synonym|thsr:remove-entry|thsr:query-lookup|thsr:lookup|thsr:load|thsr:insert|thsr:expand|thsr:add-synonym|spell:suggest-detailed|spell:suggest|spell:remove-word|spell:make-dictionary|spell:load|spell:levenshtein-distance|spell:is-correct|spell:insert|spell:double-metaphone|spell:add-word|sec:users-collection|sec:user-set-roles|sec:user-set-password|sec:user-set-name|sec:user-set-description|sec:user-set-default-permissions|sec:user-set-default-collections|sec:user-remove-roles|sec:user-privileges|sec:user-get-roles|sec:user-get-description|sec:user-get-default-permissions|sec:user-get-default-collections|sec:user-doc-permissions|sec:user-doc-collections|sec:user-add-roles|sec:unprotect-collection|sec:uid-for-name|sec:set-realm|sec:security-version|sec:security-namespace|sec:security-installed|sec:security-collection|sec:roles-collection|sec:role-set-roles|sec:role-set-name|sec:role-set-description|sec:role-set-default-permissions|sec:role-set-default-collections|sec:role-remove-roles|sec:role-privileges|sec:role-get-roles|sec:role-get-description|sec:role-get-default-permissions|sec:role-get-default-collections|sec:role-doc-permissions|sec:role-doc-collections|sec:role-add-roles|sec:remove-user|sec:remove-role-from-users|sec:remove-role-from-role|sec:remove-role-from-privileges|sec:remove-role-from-amps|sec:remove-role|sec:remove-privilege|sec:remove-amp|sec:protect-collection|sec:privileges-collection|sec:privilege-set-roles|sec:privilege-set-name|sec:privilege-remove-roles|sec:privilege-get-roles|sec:privilege-add-roles|sec:priv-doc-permissions|sec:priv-doc-collections|sec:get-user-names|sec:get-unique-elem-id|sec:get-role-names|sec:get-role-ids|sec:get-privilege|sec:get-distinct-permissions|sec:get-collection|sec:get-amp|sec:create-user-with-role|sec:create-user|sec:create-role|sec:create-privilege|sec:create-amp|sec:collections-collection|sec:collection-set-permissions|sec:collection-remove-permissions|sec:collection-get-permissions|sec:collection-add-permissions|sec:check-admin|sec:amps-collection|sec:amp-set-roles|sec:amp-remove-roles|sec:amp-get-roles|sec:amp-doc-permissions|sec:amp-doc-collections|sec:amp-add-roles|search:unparse|search:suggest|search:snippet|search:search|search:resolve-nodes|search:resolve|search:remove-constraint|search:parse|search:get-default-options|search:estimate|search:check-options|prof:value|prof:reset|prof:report|prof:invoke|prof:eval|prof:enable|prof:disable|prof:allowed|ppt:clean|pki:template-set-request|pki:template-set-name|pki:template-set-key-type|pki:template-set-key-options|pki:template-set-description|pki:template-in-use|pki:template-get-version|pki:template-get-request|pki:template-get-name|pki:template-get-key-type|pki:template-get-key-options|pki:template-get-id|pki:template-get-description|pki:need-certificate|pki:is-temporary|pki:insert-trusted-certificates|pki:insert-template|pki:insert-signed-certificates|pki:insert-certificate-revocation-list|pki:get-trusted-certificate-ids|pki:get-template-ids|pki:get-template-certificate-authority|pki:get-template-by-name|pki:get-template|pki:get-pending-certificate-requests-xml|pki:get-pending-certificate-requests-pem|pki:get-pending-certificate-request|pki:get-certificates-for-template-xml|pki:get-certificates-for-template|pki:get-certificates|pki:get-certificate-xml|pki:get-certificate-pem|pki:get-certificate|pki:generate-temporary-certificate-if-necessary|pki:generate-temporary-certificate|pki:generate-template-certificate-authority|pki:generate-certificate-request|pki:delete-template|pki:delete-certificate|pki:create-template|pdf:make-toc|pdf:insert-toc-headers|pdf:get-toc|pdf:clean|p:status-transition|p:state-transition|p:remove|p:pipelines|p:insert|p:get-by-id|p:get|p:execute|p:create|p:condition|p:collection|p:action|ooxml:runs-merge|ooxml:package-uris|ooxml:package-parts-insert|ooxml:package-parts|msword:clean|mcgm:polygon|mcgm:point|mcgm:geospatial-query-from-elements|mcgm:geospatial-query|mcgm:circle|math:tanh|math:tan|math:sqrt|math:sinh|math:sin|math:pow|math:modf|math:log10|math:log|math:ldexp|math:frexp|math:fmod|math:floor|math:fabs|math:exp|math:cosh|math:cos|math:ceil|math:atan2|math:atan|math:asin|math:acos|map:put|map:map|map:keys|map:get|map:delete|map:count|map:clear|lnk:to|lnk:remove|lnk:insert|lnk:get|lnk:from|lnk:create|kml:polygon|kml:point|kml:interior-polygon|kml:geospatial-query-from-elements|kml:geospatial-query|kml:circle|kml:box|gml:polygon|gml:point|gml:interior-polygon|gml:geospatial-query-from-elements|gml:geospatial-query|gml:circle|gml:box|georss:point|georss:geospatial-query|georss:circle|geo:polygon|geo:point|geo:interior-polygon|geo:geospatial-query-from-elements|geo:geospatial-query|geo:circle|geo:box|fn:zero-or-one|fn:years-from-duration|fn:year-from-dateTime|fn:year-from-date|fn:upper-case|fn:unordered|fn:true|fn:translate|fn:trace|fn:tokenize|fn:timezone-from-time|fn:timezone-from-dateTime|fn:timezone-from-date|fn:sum|fn:subtract-dateTimes-yielding-yearMonthDuration|fn:subtract-dateTimes-yielding-dayTimeDuration|fn:substring-before|fn:substring-after|fn:substring|fn:subsequence|fn:string-to-codepoints|fn:string-pad|fn:string-length|fn:string-join|fn:string|fn:static-base-uri|fn:starts-with|fn:seconds-from-time|fn:seconds-from-duration|fn:seconds-from-dateTime|fn:round-half-to-even|fn:round|fn:root|fn:reverse|fn:resolve-uri|fn:resolve-QName|fn:replace|fn:remove|fn:QName|fn:prefix-from-QName|fn:position|fn:one-or-more|fn:number|fn:not|fn:normalize-unicode|fn:normalize-space|fn:node-name|fn:node-kind|fn:nilled|fn:namespace-uri-from-QName|fn:namespace-uri-for-prefix|fn:namespace-uri|fn:name|fn:months-from-duration|fn:month-from-dateTime|fn:month-from-date|fn:minutes-from-time|fn:minutes-from-duration|fn:minutes-from-dateTime|fn:min|fn:max|fn:matches|fn:lower-case|fn:local-name-from-QName|fn:local-name|fn:last|fn:lang|fn:iri-to-uri|fn:insert-before|fn:index-of|fn:in-scope-prefixes|fn:implicit-timezone|fn:idref|fn:id|fn:hours-from-time|fn:hours-from-duration|fn:hours-from-dateTime|fn:floor|fn:false|fn:expanded-QName|fn:exists|fn:exactly-one|fn:escape-uri|fn:escape-html-uri|fn:error|fn:ends-with|fn:encode-for-uri|fn:empty|fn:document-uri|fn:doc-available|fn:doc|fn:distinct-values|fn:distinct-nodes|fn:default-collation|fn:deep-equal|fn:days-from-duration|fn:day-from-dateTime|fn:day-from-date|fn:data|fn:current-time|fn:current-dateTime|fn:current-date|fn:count|fn:contains|fn:concat|fn:compare|fn:collection|fn:codepoints-to-string|fn:codepoint-equal|fn:ceiling|fn:boolean|fn:base-uri|fn:avg|fn:adjust-time-to-timezone|fn:adjust-dateTime-to-timezone|fn:adjust-date-to-timezone|fn:abs|feed:unsubscribe|feed:subscription|feed:subscribe|feed:request|feed:item|feed:description|excel:clean|entity:enrich|dom:set-pipelines|dom:set-permissions|dom:set-name|dom:set-evaluation-context|dom:set-domain-scope|dom:set-description|dom:remove-pipeline|dom:remove-permissions|dom:remove|dom:get|dom:evaluation-context|dom:domains|dom:domain-scope|dom:create|dom:configuration-set-restart-user|dom:configuration-set-permissions|dom:configuration-set-evaluation-context|dom:configuration-set-default-domain|dom:configuration-get|dom:configuration-create|dom:collection|dom:add-pipeline|dom:add-permissions|dls:retention-rules|dls:retention-rule-remove|dls:retention-rule-insert|dls:retention-rule|dls:purge|dls:node-expand|dls:link-references|dls:link-expand|dls:documents-query|dls:document-versions-query|dls:document-version-uri|dls:document-version-query|dls:document-version-delete|dls:document-version-as-of|dls:document-version|dls:document-update|dls:document-unmanage|dls:document-set-quality|dls:document-set-property|dls:document-set-properties|dls:document-set-permissions|dls:document-set-collections|dls:document-retention-rules|dls:document-remove-properties|dls:document-remove-permissions|dls:document-remove-collections|dls:document-purge|dls:document-manage|dls:document-is-managed|dls:document-insert-and-manage|dls:document-include-query|dls:document-history|dls:document-get-permissions|dls:document-extract-part|dls:document-delete|dls:document-checkout-status|dls:document-checkout|dls:document-checkin|dls:document-add-properties|dls:document-add-permissions|dls:document-add-collections|dls:break-checkout|dls:author-query|dls:as-of-query|dbk:convert|dbg:wait|dbg:value|dbg:stopped|dbg:stop|dbg:step|dbg:status|dbg:stack|dbg:out|dbg:next|dbg:line|dbg:invoke|dbg:function|dbg:finish|dbg:expr|dbg:eval|dbg:disconnect|dbg:detach|dbg:continue|dbg:connect|dbg:clear|dbg:breakpoints|dbg:break|dbg:attached|dbg:attach|cvt:save-converted-documents|cvt:part-uri|cvt:destination-uri|cvt:basepath|cvt:basename|cts:words|cts:word-query-weight|cts:word-query-text|cts:word-query-options|cts:word-query|cts:word-match|cts:walk|cts:uris|cts:uri-match|cts:train|cts:tokenize|cts:thresholds|cts:stem|cts:similar-query-weight|cts:similar-query-nodes|cts:similar-query|cts:shortest-distance|cts:search|cts:score|cts:reverse-query-weight|cts:reverse-query-nodes|cts:reverse-query|cts:remainder|cts:registered-query-weight|cts:registered-query-options|cts:registered-query-ids|cts:registered-query|cts:register|cts:query|cts:quality|cts:properties-query-query|cts:properties-query|cts:polygon-vertices|cts:polygon|cts:point-longitude|cts:point-latitude|cts:point|cts:or-query-queries|cts:or-query|cts:not-query-weight|cts:not-query-query|cts:not-query|cts:near-query-weight|cts:near-query-queries|cts:near-query-options|cts:near-query-distance|cts:near-query|cts:highlight|cts:geospatial-co-occurrences|cts:frequency|cts:fitness|cts:field-words|cts:field-word-query-weight|cts:field-word-query-text|cts:field-word-query-options|cts:field-word-query-field-name|cts:field-word-query|cts:field-word-match|cts:entity-highlight|cts:element-words|cts:element-word-query-weight|cts:element-word-query-text|cts:element-word-query-options|cts:element-word-query-element-name|cts:element-word-query|cts:element-word-match|cts:element-values|cts:element-value-ranges|cts:element-value-query-weight|cts:element-value-query-text|cts:element-value-query-options|cts:element-value-query-element-name|cts:element-value-query|cts:element-value-match|cts:element-value-geospatial-co-occurrences|cts:element-value-co-occurrences|cts:element-range-query-weight|cts:element-range-query-value|cts:element-range-query-options|cts:element-range-query-operator|cts:element-range-query-element-name|cts:element-range-query|cts:element-query-query|cts:element-query-element-name|cts:element-query|cts:element-pair-geospatial-values|cts:element-pair-geospatial-value-match|cts:element-pair-geospatial-query-weight|cts:element-pair-geospatial-query-region|cts:element-pair-geospatial-query-options|cts:element-pair-geospatial-query-longitude-name|cts:element-pair-geospatial-query-latitude-name|cts:element-pair-geospatial-query-element-name|cts:element-pair-geospatial-query|cts:element-pair-geospatial-boxes|cts:element-geospatial-values|cts:element-geospatial-value-match|cts:element-geospatial-query-weight|cts:element-geospatial-query-region|cts:element-geospatial-query-options|cts:element-geospatial-query-element-name|cts:element-geospatial-query|cts:element-geospatial-boxes|cts:element-child-geospatial-values|cts:element-child-geospatial-value-match|cts:element-child-geospatial-query-weight|cts:element-child-geospatial-query-region|cts:element-child-geospatial-query-options|cts:element-child-geospatial-query-element-name|cts:element-child-geospatial-query-child-name|cts:element-child-geospatial-query|cts:element-child-geospatial-boxes|cts:element-attribute-words|cts:element-attribute-word-query-weight|cts:element-attribute-word-query-text|cts:element-attribute-word-query-options|cts:element-attribute-word-query-element-name|cts:element-attribute-word-query-attribute-name|cts:element-attribute-word-query|cts:element-attribute-word-match|cts:element-attribute-values|cts:element-attribute-value-ranges|cts:element-attribute-value-query-weight|cts:element-attribute-value-query-text|cts:element-attribute-value-query-options|cts:element-attribute-value-query-element-name|cts:element-attribute-value-query-attribute-name|cts:element-attribute-value-query|cts:element-attribute-value-match|cts:element-attribute-value-geospatial-co-occurrences|cts:element-attribute-value-co-occurrences|cts:element-attribute-range-query-weight|cts:element-attribute-range-query-value|cts:element-attribute-range-query-options|cts:element-attribute-range-query-operator|cts:element-attribute-range-query-element-name|cts:element-attribute-range-query-attribute-name|cts:element-attribute-range-query|cts:element-attribute-pair-geospatial-values|cts:element-attribute-pair-geospatial-value-match|cts:element-attribute-pair-geospatial-query-weight|cts:element-attribute-pair-geospatial-query-region|cts:element-attribute-pair-geospatial-query-options|cts:element-attribute-pair-geospatial-query-longitude-name|cts:element-attribute-pair-geospatial-query-latitude-name|cts:element-attribute-pair-geospatial-query-element-name|cts:element-attribute-pair-geospatial-query|cts:element-attribute-pair-geospatial-boxes|cts:document-query-uris|cts:document-query|cts:distance|cts:directory-query-uris|cts:directory-query-depth|cts:directory-query|cts:destination|cts:deregister|cts:contains|cts:confidence|cts:collections|cts:collection-query-uris|cts:collection-query|cts:collection-match|cts:classify|cts:circle-radius|cts:circle-center|cts:circle|cts:box-west|cts:box-south|cts:box-north|cts:box-east|cts:box|cts:bearing|cts:arc-intersection|cts:and-query-queries|cts:and-query-options|cts:and-query|cts:and-not-query-positive-query|cts:and-not-query-negative-query|cts:and-not-query|css:get|css:convert|cpf:success|cpf:failure|cpf:document-set-state|cpf:document-set-processing-status|cpf:document-set-last-updated|cpf:document-set-error|cpf:document-get-state|cpf:document-get-processing-status|cpf:document-get-last-updated|cpf:document-get-error|cpf:check-transition|alert:spawn-matching-actions|alert:rule-user-id-query|alert:rule-set-user-id|alert:rule-set-query|alert:rule-set-options|alert:rule-set-name|alert:rule-set-description|alert:rule-set-action|alert:rule-remove|alert:rule-name-query|alert:rule-insert|alert:rule-id-query|alert:rule-get-user-id|alert:rule-get-query|alert:rule-get-options|alert:rule-get-name|alert:rule-get-id|alert:rule-get-description|alert:rule-get-action|alert:rule-action-query|alert:remove-triggers|alert:make-rule|alert:make-log-action|alert:make-config|alert:make-action|alert:invoke-matching-actions|alert:get-my-rules|alert:get-all-rules|alert:get-actions|alert:find-matching-rules|alert:create-triggers|alert:config-set-uri|alert:config-set-trigger-ids|alert:config-set-options|alert:config-set-name|alert:config-set-description|alert:config-set-cpf-domain-names|alert:config-set-cpf-domain-ids|alert:config-insert|alert:config-get-uri|alert:config-get-trigger-ids|alert:config-get-options|alert:config-get-name|alert:config-get-id|alert:config-get-description|alert:config-get-cpf-domain-names|alert:config-get-cpf-domain-ids|alert:config-get|alert:config-delete|alert:action-set-options|alert:action-set-name|alert:action-set-module-root|alert:action-set-module-db|alert:action-set-module|alert:action-set-description|alert:action-remove|alert:action-insert|alert:action-get-options|alert:action-get-name|alert:action-get-module-root|alert:action-get-module-db|alert:action-get-module|alert:action-get-description|zero-or-one|years-from-duration|year-from-dateTime|year-from-date|upper-case|unordered|true|translate|trace|tokenize|timezone-from-time|timezone-from-dateTime|timezone-from-date|sum|subtract-dateTimes-yielding-yearMonthDuration|subtract-dateTimes-yielding-dayTimeDuration|substring-before|substring-after|substring|subsequence|string-to-codepoints|string-pad|string-length|string-join|string|static-base-uri|starts-with|seconds-from-time|seconds-from-duration|seconds-from-dateTime|round-half-to-even|round|root|reverse|resolve-uri|resolve-QName|replace|remove|QName|prefix-from-QName|position|one-or-more|number|not|normalize-unicode|normalize-space|node-name|node-kind|nilled|namespace-uri-from-QName|namespace-uri-for-prefix|namespace-uri|name|months-from-duration|month-from-dateTime|month-from-date|minutes-from-time|minutes-from-duration|minutes-from-dateTime|min|max|matches|lower-case|local-name-from-QName|local-name|last|lang|iri-to-uri|insert-before|index-of|in-scope-prefixes|implicit-timezone|idref|id|hours-from-time|hours-from-duration|hours-from-dateTime|floor|false|expanded-QName|exists|exactly-one|escape-uri|escape-html-uri|error|ends-with|encode-for-uri|empty|document-uri|doc-available|doc|distinct-values|distinct-nodes|default-collation|deep-equal|days-from-duration|day-from-dateTime|day-from-date|data|current-time|current-dateTime|current-date|count|contains|concat|compare|collection|codepoints-to-string|codepoint-equal|ceiling|boolean|base-uri|avg|adjust-time-to-timezone|adjust-dateTime-to-timezone|adjust-date-to-timezone|abs)\b/],
+["pln",/^[A-Za-z0-9_\-\:]+/],["pln",/^[\t\n\r \xA0]+/]]),["xq","xquery"]);
diff --git a/docs/vendor/prettify/lang-yaml.js b/docs/vendor/prettify/lang-yaml.js
new file mode 100644
index 00000000..a2b4b079
--- /dev/null
+++ b/docs/vendor/prettify/lang-yaml.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2015 ribrdb @ code.google.com
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:|>?]+/,null,":|>?"],["dec",/^%(?:YAML|TAG)[^#\r\n]+/,null,"%"],["typ",/^[&]\S+/,null,"&"],["typ",/^!\S*/,null,"!"],["str",/^"(?:[^\\"]|\\.)*(?:"|$)/,null,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,null,"'"],["com",/^#[^\r\n]*/,null,"#"],["pln",/^\s+/,null," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\r\n]|$)/],["pun",/^-/],["kwd",/^[\w-]+:[ \r\n]/],["pln",
+/^\w+/]]),["yaml","yml"]);
diff --git a/docs/vendor/prettify/lang-yml.js b/docs/vendor/prettify/lang-yml.js
new file mode 100644
index 00000000..a2b4b079
--- /dev/null
+++ b/docs/vendor/prettify/lang-yml.js
@@ -0,0 +1,18 @@
+/*
+
+ Copyright (C) 2015 ribrdb @ code.google.com
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:|>?]+/,null,":|>?"],["dec",/^%(?:YAML|TAG)[^#\r\n]+/,null,"%"],["typ",/^[&]\S+/,null,"&"],["typ",/^!\S*/,null,"!"],["str",/^"(?:[^\\"]|\\.)*(?:"|$)/,null,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,null,"'"],["com",/^#[^\r\n]*/,null,"#"],["pln",/^\s+/,null," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\r\n]|$)/],["pun",/^-/],["kwd",/^[\w-]+:[ \r\n]/],["pln",
+/^\w+/]]),["yaml","yml"]);
diff --git a/docs/vendor/prettify/prettify.css b/docs/vendor/prettify/prettify.css
new file mode 100644
index 00000000..d44b3a22
--- /dev/null
+++ b/docs/vendor/prettify/prettify.css
@@ -0,0 +1 @@
+.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
\ No newline at end of file
diff --git a/docs/vendor/prettify/prettify.js b/docs/vendor/prettify/prettify.js
new file mode 100644
index 00000000..0a2b435c
--- /dev/null
+++ b/docs/vendor/prettify/prettify.js
@@ -0,0 +1,46 @@
+!function(){/*
+
+ Copyright (C) 2006 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+window.PR_SHOULD_USE_CONTINUATION=!0;
+(function(){function T(a){function d(e){var b=e.charCodeAt(0);if(92!==b)return b;var a=e.charAt(1);return(b=w[a])?b:"0"<=a&&"7">=a?parseInt(e.substring(1),8):"u"===a||"x"===a?parseInt(e.substring(2),16):e.charCodeAt(1)}function f(e){if(32>e)return(16>e?"\\x0":"\\x")+e.toString(16);e=String.fromCharCode(e);return"\\"===e||"-"===e||"]"===e||"^"===e?"\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\u[0-9A-Fa-f]{4}|\\x[0-9A-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\s\S]|-|[^-\\]/g);e=
+[];var a="^"===b[0],c=["["];a&&c.push("^");for(var a=a?1:0,g=b.length;a<g;++a){var h=b[a];if(/\\[bdsw]/i.test(h))c.push(h);else{var h=d(h),k;a+2<g&&"-"===b[a+1]?(k=d(b[a+2]),a+=2):k=h;e.push([h,k]);65>k||122<h||(65>k||90<h||e.push([Math.max(65,h)|32,Math.min(k,90)|32]),97>k||122<h||e.push([Math.max(97,h)&-33,Math.min(k,122)&-33]))}}e.sort(function(e,a){return e[0]-a[0]||a[1]-e[1]});b=[];g=[];for(a=0;a<e.length;++a)h=e[a],h[0]<=g[1]+1?g[1]=Math.max(g[1],h[1]):b.push(g=h);for(a=0;a<b.length;++a)h=b[a],
+c.push(f(h[0])),h[1]>h[0]&&(h[1]+1>h[0]&&c.push("-"),c.push(f(h[1])));c.push("]");return c.join("")}function v(e){for(var a=e.source.match(/(?:\[(?:[^\x5C\x5D]|\\[\s\S])*\]|\\u[A-Fa-f0-9]{4}|\\x[A-Fa-f0-9]{2}|\\[0-9]+|\\[^ux0-9]|\(\?[:!=]|[\(\)\^]|[^\x5B\x5C\(\)\^]+)/g),c=a.length,d=[],g=0,h=0;g<c;++g){var k=a[g];"("===k?++h:"\\"===k.charAt(0)&&(k=+k.substring(1))&&(k<=h?d[k]=-1:a[g]=f(k))}for(g=1;g<d.length;++g)-1===d[g]&&(d[g]=++A);for(h=g=0;g<c;++g)k=a[g],"("===k?(++h,d[h]||(a[g]="(?:")):"\\"===
+k.charAt(0)&&(k=+k.substring(1))&&k<=h&&(a[g]="\\"+d[k]);for(g=0;g<c;++g)"^"===a[g]&&"^"!==a[g+1]&&(a[g]="");if(e.ignoreCase&&n)for(g=0;g<c;++g)k=a[g],e=k.charAt(0),2<=k.length&&"["===e?a[g]=b(k):"\\"!==e&&(a[g]=k.replace(/[a-zA-Z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var A=0,n=!1,l=!1,m=0,c=a.length;m<c;++m){var p=a[m];if(p.ignoreCase)l=!0;else if(/[a-z]/i.test(p.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){n=!0;
+l=!1;break}}for(var w={b:8,t:9,n:10,v:11,f:12,r:13},r=[],m=0,c=a.length;m<c;++m){p=a[m];if(p.global||p.multiline)throw Error(""+p);r.push("(?:"+v(p)+")")}return new RegExp(r.join("|"),l?"gi":"g")}function U(a,d){function f(a){var c=a.nodeType;if(1==c){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)f(c);c=a.nodeName.toLowerCase();if("br"===c||"li"===c)v[l]="\n",n[l<<1]=A++,n[l++<<1|1]=a}}else if(3==c||4==c)c=a.nodeValue,c.length&&(c=d?c.replace(/\r\n?/g,"\n"):c.replace(/[ \t\r\n]+/g,
+" "),v[l]=c,n[l<<1]=A,A+=c.length,n[l++<<1|1]=a)}var b=/(?:^|\s)nocode(?:\s|$)/,v=[],A=0,n=[],l=0;f(a);return{a:v.join("").replace(/\n$/,""),c:n}}function J(a,d,f,b,v){f&&(a={h:a,l:1,j:null,m:null,a:f,c:null,i:d,g:null},b(a),v.push.apply(v,a.g))}function V(a){for(var d=void 0,f=a.firstChild;f;f=f.nextSibling)var b=f.nodeType,d=1===b?d?a:f:3===b?W.test(f.nodeValue)?a:d:d;return d===a?void 0:d}function G(a,d){function f(a){for(var l=a.i,m=a.h,c=[l,"pln"],p=0,w=a.a.match(v)||[],r={},e=0,t=w.length;e<
+t;++e){var z=w[e],q=r[z],g=void 0,h;if("string"===typeof q)h=!1;else{var k=b[z.charAt(0)];if(k)g=z.match(k[1]),q=k[0];else{for(h=0;h<A;++h)if(k=d[h],g=z.match(k[1])){q=k[0];break}g||(q="pln")}!(h=5<=q.length&&"lang-"===q.substring(0,5))||g&&"string"===typeof g[1]||(h=!1,q="src");h||(r[z]=q)}k=p;p+=z.length;if(h){h=g[1];var B=z.indexOf(h),D=B+h.length;g[2]&&(D=z.length-g[2].length,B=D-h.length);q=q.substring(5);J(m,l+k,z.substring(0,B),f,c);J(m,l+k+B,h,K(q,h),c);J(m,l+k+D,z.substring(D),f,c)}else c.push(l+
+k,q)}a.g=c}var b={},v;(function(){for(var f=a.concat(d),l=[],m={},c=0,p=f.length;c<p;++c){var w=f[c],r=w[3];if(r)for(var e=r.length;0<=--e;)b[r.charAt(e)]=w;w=w[1];r=""+w;m.hasOwnProperty(r)||(l.push(w),m[r]=null)}l.push(/[\0-\uffff]/);v=T(l)})();var A=d.length;return f}function y(a){var d=[],f=[];a.tripleQuotedStrings?d.push(["str",/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
+null,"'\""]):a.multiLineStrings?d.push(["str",/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"]):d.push(["str",/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"]);a.verbatimStrings&&f.push(["str",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null]);var b=a.hashComments;b&&(a.cStyleComments?(1<b?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\r\n]*)/,
+null,"#"]),f.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,null])):d.push(["com",/^#[^\r\n]*/,null,"#"]));a.cStyleComments&&(f.push(["com",/^\/\/[^\r\n]*/,null]),f.push(["com",/^\/\*[\s\S]*?(?:\*\/|$)/,null]));if(b=a.regexLiterals){var v=(b=1<b?"":"\n\r")?".":"[\\S\\s]";f.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*("+
+("/(?=[^/*"+b+"])(?:[^/\\x5B\\x5C"+b+"]|\\x5C"+v+"|\\x5B(?:[^\\x5C\\x5D"+b+"]|\\x5C"+v+")*(?:\\x5D|$))+/")+")")])}(b=a.types)&&f.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&f.push(["kwd",new RegExp("^(?:"+b.replace(/[\s,]+/g,"|")+")\\b"),null]);d.push(["pln",/^\s+/,null," \r\n\t\u00a0"]);b="^.[^\\s\\w.$@'\"`/\\\\]*";a.regexLiterals&&(b+="(?!s*/)");f.push(["lit",/^@[a-z_$][a-z_$@0-9]*/i,null],["typ",/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],["pln",/^[a-z_$][a-z_$@0-9]*/i,
+null],["lit",/^(?:0x[a-f0-9]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+\-]?\d+)?)[a-z]*/i,null,"0123456789"],["pln",/^\\[\s\S]?/,null],["pun",new RegExp(b),null]);return G(d,f)}function L(a,d,f){function b(a){var c=a.nodeType;if(1==c&&!A.test(a.className))if("br"===a.nodeName)v(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((3==c||4==c)&&f){var d=a.nodeValue,q=d.match(n);q&&(c=d.substring(0,q.index),a.nodeValue=c,(d=d.substring(q.index+q[0].length))&&
+a.parentNode.insertBefore(l.createTextNode(d),a.nextSibling),v(a),c||a.parentNode.removeChild(a))}}function v(a){function b(a,c){var d=c?a.cloneNode(!1):a,k=a.parentNode;if(k){var k=b(k,1),e=a.nextSibling;k.appendChild(d);for(var f=e;f;f=e)e=f.nextSibling,k.appendChild(f)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;a=b(a.nextSibling,0);for(var d;(d=a.parentNode)&&1===d.nodeType;)a=d;c.push(a)}for(var A=/(?:^|\s)nocode(?:\s|$)/,n=/\r\n?|\n/,l=a.ownerDocument,m=l.createElement("li");a.firstChild;)m.appendChild(a.firstChild);
+for(var c=[m],p=0;p<c.length;++p)b(c[p]);d===(d|0)&&c[0].setAttribute("value",d);var w=l.createElement("ol");w.className="linenums";d=Math.max(0,d-1|0)||0;for(var p=0,r=c.length;p<r;++p)m=c[p],m.className="L"+(p+d)%10,m.firstChild||m.appendChild(l.createTextNode("\u00a0")),w.appendChild(m);a.appendChild(w)}function t(a,d){for(var f=d.length;0<=--f;){var b=d[f];I.hasOwnProperty(b)?E.console&&console.warn("cannot override language handler %s",b):I[b]=a}}function K(a,d){a&&I.hasOwnProperty(a)||(a=/^\s*</.test(d)?
+"default-markup":"default-code");return I[a]}function M(a){var d=a.j;try{var f=U(a.h,a.l),b=f.a;a.a=b;a.c=f.c;a.i=0;K(d,b)(a);var v=/\bMSIE\s(\d+)/.exec(navigator.userAgent),v=v&&8>=+v[1],d=/\n/g,A=a.a,n=A.length,f=0,l=a.c,m=l.length,b=0,c=a.g,p=c.length,w=0;c[p]=n;var r,e;for(e=r=0;e<p;)c[e]!==c[e+2]?(c[r++]=c[e++],c[r++]=c[e++]):e+=2;p=r;for(e=r=0;e<p;){for(var t=c[e],z=c[e+1],q=e+2;q+2<=p&&c[q+1]===z;)q+=2;c[r++]=t;c[r++]=z;e=q}c.length=r;var g=a.h;a="";g&&(a=g.style.display,g.style.display="none");
+try{for(;b<m;){var h=l[b+2]||n,k=c[w+2]||n,q=Math.min(h,k),B=l[b+1],D;if(1!==B.nodeType&&(D=A.substring(f,q))){v&&(D=D.replace(d,"\r"));B.nodeValue=D;var N=B.ownerDocument,u=N.createElement("span");u.className=c[w+1];var y=B.parentNode;y.replaceChild(u,B);u.appendChild(B);f<h&&(l[b+1]=B=N.createTextNode(A.substring(q,h)),y.insertBefore(B,u.nextSibling))}f=q;f>=h&&(b+=2);f>=k&&(w+=2)}}finally{g&&(g.style.display=a)}}catch(x){E.console&&console.log(x&&x.stack||x)}}var E=window,C=["break,continue,do,else,for,if,return,while"],
+F=[[C,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],H=[F,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],
+O=[F,"abstract,assert,boolean,byte,extends,finally,final,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],P=[F,"abstract,as,base,bool,by,byte,checked,decimal,delegate,descending,dynamic,event,finally,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,null,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],F=[F,"debugger,eval,export,function,get,instanceof,null,set,undefined,var,with,Infinity,NaN"],
+Q=[C,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],R=[C,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],C=[C,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],S=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,
+W=/\S/,X=y({keywords:[H,P,O,F,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",Q,R,C],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),I={};t(X,["default-code"]);t(G([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",
+/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),"default-markup htm html mxml xhtml xml xsl".split(" "));t(G([["pln",/^[\s]+/,null," \t\r\n"],["atv",/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
+["pun",/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);t(G([],[["atv",/^[\s\S]+/]]),["uq.val"]);t(y({keywords:H,hashComments:!0,cStyleComments:!0,types:S}),"c cc cpp cxx cyc m".split(" "));t(y({keywords:"null,true,false"}),["json"]);t(y({keywords:P,hashComments:!0,cStyleComments:!0,
+verbatimStrings:!0,types:S}),["cs"]);t(y({keywords:O,cStyleComments:!0}),["java"]);t(y({keywords:C,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);t(y({keywords:Q,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]);t(y({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),
+["perl","pl","pm"]);t(y({keywords:R,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);t(y({keywords:F,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);t(y({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);t(G([],[["str",/^[\s\S]+/]]),["regex"]);
+var Y=E.PR={createSimpleLexer:G,registerLangHandler:t,sourceDecorator:y,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:E.prettyPrintOne=function(a,d,f){f=f||!1;d=d||null;var b=document.createElement("div");b.innerHTML="<pre>"+a+"</pre>";b=b.firstChild;f&&L(b,f,!0);M({j:d,m:f,h:b,l:1,a:null,i:null,c:null,
+g:null});return b.innerHTML},prettyPrint:E.prettyPrint=function(a,d){function f(){for(var b=E.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;p<t.length&&c.now()<b;p++){for(var d=t[p],l=g,m=d;m=m.previousSibling;){var n=m.nodeType,u=(7===n||8===n)&&m.nodeValue;if(u?!/^\??prettify\b/.test(u):3!==n||/\S/.test(m.nodeValue))break;if(u){l={};u.replace(/\b(\w+)=([\w:.%+-]+)/g,function(a,b,c){l[b]=c});break}}m=d.className;if((l!==g||r.test(m))&&!e.test(m)){n=!1;for(u=d.parentNode;u;u=u.parentNode)if(q.test(u.tagName)&&
+u.className&&r.test(u.className)){n=!0;break}if(!n){d.className+=" prettyprinted";n=l.lang;if(!n){var n=m.match(w),C;!n&&(C=V(d))&&z.test(C.tagName)&&(n=C.className.match(w));n&&(n=n[1])}if(y.test(d.tagName))u=1;else var u=d.currentStyle,x=v.defaultView,u=(u=u?u.whiteSpace:x&&x.getComputedStyle?x.getComputedStyle(d,null).getPropertyValue("white-space"):0)&&"pre"===u.substring(0,3);x=l.linenums;(x="true"===x||+x)||(x=(x=m.match(/\blinenums\b(?::(\d+))?/))?x[1]&&x[1].length?+x[1]:!0:!1);x&&L(d,x,u);
+M({j:n,h:d,m:x,l:u,a:null,i:null,c:null,g:null})}}}p<t.length?E.setTimeout(f,250):"function"===typeof a&&a()}for(var b=d||document.body,v=b.ownerDocument||document,b=[b.getElementsByTagName("pre"),b.getElementsByTagName("code"),b.getElementsByTagName("xmp")],t=[],n=0;n<b.length;++n)for(var l=0,m=b[n].length;l<m;++l)t.push(b[n][l]);var b=null,c=Date;c.now||(c={now:function(){return+new Date}});var p=0,w=/\blang(?:uage)?-([\w.]+)(?!\S)/,r=/\bprettyprint\b/,e=/\bprettyprinted\b/,y=/pre|xmp/i,z=/^code$/i,
+q=/^(?:pre|code|xmp)$/i,g={};f()}},H=E.define;"function"===typeof H&&H.amd&&H("google-code-prettify",[],function(){return Y})})();}()
diff --git a/docs/vendor/prettify/run_prettify.js b/docs/vendor/prettify/run_prettify.js
new file mode 100644
index 00000000..a9691da0
--- /dev/null
+++ b/docs/vendor/prettify/run_prettify.js
@@ -0,0 +1,63 @@
+!function(){/*
+
+ Copyright (C) 2013 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Copyright (C) 2006 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+(function(){function ba(g){function k(){try{M.doScroll("left")}catch(g){t.setTimeout(k,50);return}z("poll")}function z(k){if("readystatechange"!=k.type||"complete"==A.readyState)("load"==k.type?t:A)[B](p+k.type,z,!1),!q&&(q=!0)&&g.call(t,k.type||k)}var Y=A.addEventListener,q=!1,C=!0,x=Y?"addEventListener":"attachEvent",B=Y?"removeEventListener":"detachEvent",p=Y?"":"on";if("complete"==A.readyState)g.call(t,"lazy");else{if(A.createEventObject&&M.doScroll){try{C=!t.frameElement}catch(da){}C&&k()}A[x](p+
+"DOMContentLoaded",z,!1);A[x](p+"readystatechange",z,!1);t[x](p+"load",z,!1)}}function U(){V&&ba(function(){var g=N.length;ca(g?function(){for(var k=0;k<g;++k)(function(g){t.setTimeout(function(){t.exports[N[g]].apply(t,arguments)},0)})(k)}:void 0)})}for(var t=window,A=document,M=A.documentElement,O=A.head||A.getElementsByTagName("head")[0]||M,B="",F=A.getElementsByTagName("script"),q=F.length;0<=--q;){var P=F[q],Z=P.src.match(/^[^?#]*\/run_prettify\.js(\?[^#]*)?(?:#.*)?$/);if(Z){B=Z[1]||"";P.parentNode.removeChild(P);
+break}}var V=!0,H=[],Q=[],N=[];B.replace(/[?&]([^&=]+)=([^&]+)/g,function(g,k,z){z=decodeURIComponent(z);k=decodeURIComponent(k);"autorun"==k?V=!/^[0fn]/i.test(z):"lang"==k?H.push(z):"skin"==k?Q.push(z):"callback"==k&&N.push(z)});q=0;for(B=H.length;q<B;++q)(function(){var g=A.createElement("script");g.onload=g.onerror=g.onreadystatechange=function(){!g||g.readyState&&!/loaded|complete/.test(g.readyState)||(g.onerror=g.onload=g.onreadystatechange=null,--T,T||t.setTimeout(U,0),g.parentNode&&g.parentNode.removeChild(g),
+g=null)};g.type="text/javascript";g.src="https://cdn.rawgit.com/google/code-prettify/master/loader/lang-"+encodeURIComponent(H[q])+".js";O.insertBefore(g,O.firstChild)})(H[q]);for(var T=H.length,F=[],q=0,B=Q.length;q<B;++q)F.push("https://cdn.rawgit.com/google/code-prettify/master/loader/skins/"+encodeURIComponent(Q[q])+".css");F.push("https://cdn.rawgit.com/google/code-prettify/master/loader/prettify.css");(function(g){function k(q){if(q!==z){var t=A.createElement("link");t.rel="stylesheet";t.type=
+"text/css";q+1<z&&(t.error=t.onerror=function(){k(q+1)});t.href=g[q];O.appendChild(t)}}var z=g.length;k(0)})(F);var ca=function(){window.PR_SHOULD_USE_CONTINUATION=!0;var g;(function(){function k(a){function d(e){var b=e.charCodeAt(0);if(92!==b)return b;var a=e.charAt(1);return(b=W[a])?b:"0"<=a&&"7">=a?parseInt(e.substring(1),8):"u"===a||"x"===a?parseInt(e.substring(2),16):e.charCodeAt(1)}function f(e){if(32>e)return(16>e?"\\x0":"\\x")+e.toString(16);e=String.fromCharCode(e);return"\\"===e||"-"===
+e||"]"===e||"^"===e?"\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\u[0-9A-Fa-f]{4}|\\x[0-9A-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\s\S]|-|[^-\\]/g);e=[];var a="^"===b[0],c=["["];a&&c.push("^");for(var a=a?1:0,h=b.length;a<h;++a){var l=b[a];if(/\\[bdsw]/i.test(l))c.push(l);else{var l=d(l),n;a+2<h&&"-"===b[a+1]?(n=d(b[a+2]),a+=2):n=l;e.push([l,n]);65>n||122<l||(65>n||90<l||e.push([Math.max(65,l)|32,Math.min(n,90)|32]),97>n||122<l||e.push([Math.max(97,l)&-33,Math.min(n,122)&-33]))}}e.sort(function(e,
+a){return e[0]-a[0]||a[1]-e[1]});b=[];h=[];for(a=0;a<e.length;++a)l=e[a],l[0]<=h[1]+1?h[1]=Math.max(h[1],l[1]):b.push(h=l);for(a=0;a<b.length;++a)l=b[a],c.push(f(l[0])),l[1]>l[0]&&(l[1]+1>l[0]&&c.push("-"),c.push(f(l[1])));c.push("]");return c.join("")}function g(e){for(var a=e.source.match(/(?:\[(?:[^\x5C\x5D]|\\[\s\S])*\]|\\u[A-Fa-f0-9]{4}|\\x[A-Fa-f0-9]{2}|\\[0-9]+|\\[^ux0-9]|\(\?[:!=]|[\(\)\^]|[^\x5B\x5C\(\)\^]+)/g),c=a.length,d=[],h=0,l=0;h<c;++h){var n=a[h];"("===n?++l:"\\"===n.charAt(0)&&(n=
++n.substring(1))&&(n<=l?d[n]=-1:a[h]=f(n))}for(h=1;h<d.length;++h)-1===d[h]&&(d[h]=++k);for(l=h=0;h<c;++h)n=a[h],"("===n?(++l,d[l]||(a[h]="(?:")):"\\"===n.charAt(0)&&(n=+n.substring(1))&&n<=l&&(a[h]="\\"+d[n]);for(h=0;h<c;++h)"^"===a[h]&&"^"!==a[h+1]&&(a[h]="");if(e.ignoreCase&&I)for(h=0;h<c;++h)n=a[h],e=n.charAt(0),2<=n.length&&"["===e?a[h]=b(n):"\\"!==e&&(a[h]=n.replace(/[a-zA-Z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var k=0,I=!1,
+m=!1,J=0,c=a.length;J<c;++J){var r=a[J];if(r.ignoreCase)m=!0;else if(/[a-z]/i.test(r.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){I=!0;m=!1;break}}for(var W={b:8,t:9,n:10,v:11,f:12,r:13},u=[],J=0,c=a.length;J<c;++J){r=a[J];if(r.global||r.multiline)throw Error(""+r);u.push("(?:"+g(r)+")")}return new RegExp(u.join("|"),m?"gi":"g")}function q(a,d){function f(a){var c=a.nodeType;if(1==c){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)f(c);c=a.nodeName.toLowerCase();if("br"===
+c||"li"===c)g[m]="\n",I[m<<1]=k++,I[m++<<1|1]=a}}else if(3==c||4==c)c=a.nodeValue,c.length&&(c=d?c.replace(/\r\n?/g,"\n"):c.replace(/[ \t\r\n]+/g," "),g[m]=c,I[m<<1]=k,k+=c.length,I[m++<<1|1]=a)}var b=/(?:^|\s)nocode(?:\s|$)/,g=[],k=0,I=[],m=0;f(a);return{a:g.join("").replace(/\n$/,""),c:I}}function t(a,d,f,b,g){f&&(a={h:a,l:1,j:null,m:null,a:f,c:null,i:d,g:null},b(a),g.push.apply(g,a.g))}function A(a){for(var d=void 0,f=a.firstChild;f;f=f.nextSibling)var b=f.nodeType,d=1===b?d?a:f:3===b?T.test(f.nodeValue)?
+a:d:d;return d===a?void 0:d}function C(a,d){function f(a){for(var m=a.i,k=a.h,c=[m,"pln"],r=0,W=a.a.match(g)||[],u={},e=0,q=W.length;e<q;++e){var D=W[e],w=u[D],h=void 0,l;if("string"===typeof w)l=!1;else{var n=b[D.charAt(0)];if(n)h=D.match(n[1]),w=n[0];else{for(l=0;l<p;++l)if(n=d[l],h=D.match(n[1])){w=n[0];break}h||(w="pln")}!(l=5<=w.length&&"lang-"===w.substring(0,5))||h&&"string"===typeof h[1]||(l=!1,w="src");l||(u[D]=w)}n=r;r+=D.length;if(l){l=h[1];var E=D.indexOf(l),G=E+l.length;h[2]&&(G=D.length-
+h[2].length,E=G-l.length);w=w.substring(5);t(k,m+n,D.substring(0,E),f,c);t(k,m+n+E,l,F(w,l),c);t(k,m+n+G,D.substring(G),f,c)}else c.push(m+n,w)}a.g=c}var b={},g;(function(){for(var f=a.concat(d),m=[],p={},c=0,r=f.length;c<r;++c){var q=f[c],u=q[3];if(u)for(var e=u.length;0<=--e;)b[u.charAt(e)]=q;q=q[1];u=""+q;p.hasOwnProperty(u)||(m.push(q),p[u]=null)}m.push(/[\0-\uffff]/);g=k(m)})();var p=d.length;return f}function x(a){var d=[],f=[];a.tripleQuotedStrings?d.push(["str",/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
+null,"'\""]):a.multiLineStrings?d.push(["str",/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"]):d.push(["str",/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"]);a.verbatimStrings&&f.push(["str",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null]);var b=a.hashComments;b&&(a.cStyleComments?(1<b?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\r\n]*)/,
+null,"#"]),f.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,null])):d.push(["com",/^#[^\r\n]*/,null,"#"]));a.cStyleComments&&(f.push(["com",/^\/\/[^\r\n]*/,null]),f.push(["com",/^\/\*[\s\S]*?(?:\*\/|$)/,null]));if(b=a.regexLiterals){var g=(b=1<b?"":"\n\r")?".":"[\\S\\s]";f.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*("+
+("/(?=[^/*"+b+"])(?:[^/\\x5B\\x5C"+b+"]|\\x5C"+g+"|\\x5B(?:[^\\x5C\\x5D"+b+"]|\\x5C"+g+")*(?:\\x5D|$))+/")+")")])}(b=a.types)&&f.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&f.push(["kwd",new RegExp("^(?:"+b.replace(/[\s,]+/g,"|")+")\\b"),null]);d.push(["pln",/^\s+/,null," \r\n\t\u00a0"]);b="^.[^\\s\\w.$@'\"`/\\\\]*";a.regexLiterals&&(b+="(?!s*/)");f.push(["lit",/^@[a-z_$][a-z_$@0-9]*/i,null],["typ",/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],["pln",/^[a-z_$][a-z_$@0-9]*/i,
+null],["lit",/^(?:0x[a-f0-9]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+\-]?\d+)?)[a-z]*/i,null,"0123456789"],["pln",/^\\[\s\S]?/,null],["pun",new RegExp(b),null]);return C(d,f)}function B(a,d,f){function b(a){var c=a.nodeType;if(1==c&&!k.test(a.className))if("br"===a.nodeName)g(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((3==c||4==c)&&f){var d=a.nodeValue,p=d.match(q);p&&(c=d.substring(0,p.index),a.nodeValue=c,(d=d.substring(p.index+p[0].length))&&
+a.parentNode.insertBefore(m.createTextNode(d),a.nextSibling),g(a),c||a.parentNode.removeChild(a))}}function g(a){function b(a,c){var d=c?a.cloneNode(!1):a,n=a.parentNode;if(n){var n=b(n,1),e=a.nextSibling;n.appendChild(d);for(var f=e;f;f=e)e=f.nextSibling,n.appendChild(f)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;a=b(a.nextSibling,0);for(var d;(d=a.parentNode)&&1===d.nodeType;)a=d;c.push(a)}for(var k=/(?:^|\s)nocode(?:\s|$)/,q=/\r\n?|\n/,m=a.ownerDocument,p=m.createElement("li");a.firstChild;)p.appendChild(a.firstChild);
+for(var c=[p],r=0;r<c.length;++r)b(c[r]);d===(d|0)&&c[0].setAttribute("value",d);var t=m.createElement("ol");t.className="linenums";d=Math.max(0,d-1|0)||0;for(var r=0,u=c.length;r<u;++r)p=c[r],p.className="L"+(r+d)%10,p.firstChild||p.appendChild(m.createTextNode("\u00a0")),t.appendChild(p);a.appendChild(t)}function p(a,d){for(var f=d.length;0<=--f;){var b=d[f];X.hasOwnProperty(b)?R.console&&console.warn("cannot override language handler %s",b):X[b]=a}}function F(a,d){a&&X.hasOwnProperty(a)||(a=/^\s*</.test(d)?
+"default-markup":"default-code");return X[a]}function H(a){var d=a.j;try{var f=q(a.h,a.l),b=f.a;a.a=b;a.c=f.c;a.i=0;F(d,b)(a);var g=/\bMSIE\s(\d+)/.exec(navigator.userAgent),g=g&&8>=+g[1],d=/\n/g,p=a.a,k=p.length,f=0,m=a.c,t=m.length,b=0,c=a.g,r=c.length,x=0;c[r]=k;var u,e;for(e=u=0;e<r;)c[e]!==c[e+2]?(c[u++]=c[e++],c[u++]=c[e++]):e+=2;r=u;for(e=u=0;e<r;){for(var A=c[e],D=c[e+1],w=e+2;w+2<=r&&c[w+1]===D;)w+=2;c[u++]=A;c[u++]=D;e=w}c.length=u;var h=a.h;a="";h&&(a=h.style.display,h.style.display="none");
+try{for(;b<t;){var l=m[b+2]||k,n=c[x+2]||k,w=Math.min(l,n),E=m[b+1],G;if(1!==E.nodeType&&(G=p.substring(f,w))){g&&(G=G.replace(d,"\r"));E.nodeValue=G;var aa=E.ownerDocument,v=aa.createElement("span");v.className=c[x+1];var B=E.parentNode;B.replaceChild(v,E);v.appendChild(E);f<l&&(m[b+1]=E=aa.createTextNode(p.substring(w,l)),B.insertBefore(E,v.nextSibling))}f=w;f>=l&&(b+=2);f>=n&&(x+=2)}}finally{h&&(h.style.display=a)}}catch(y){R.console&&console.log(y&&y.stack||y)}}var R=window,K=["break,continue,do,else,for,if,return,while"],
+L=[[K,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],S=[L,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],
+M=[L,"abstract,assert,boolean,byte,extends,finally,final,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],N=[L,"abstract,as,base,bool,by,byte,checked,decimal,delegate,descending,dynamic,event,finally,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,null,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],L=[L,"debugger,eval,export,function,get,instanceof,null,set,undefined,var,with,Infinity,NaN"],
+O=[K,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],P=[K,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],K=[K,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],Q=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,
+T=/\S/,U=x({keywords:[S,N,M,L,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",O,P,K],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),X={};p(U,["default-code"]);p(C([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",
+/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),"default-markup htm html mxml xhtml xml xsl".split(" "));p(C([["pln",/^[\s]+/,null," \t\r\n"],["atv",/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
+["pun",/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);p(C([],[["atv",/^[\s\S]+/]]),["uq.val"]);p(x({keywords:S,hashComments:!0,cStyleComments:!0,types:Q}),"c cc cpp cxx cyc m".split(" "));p(x({keywords:"null,true,false"}),["json"]);p(x({keywords:N,hashComments:!0,cStyleComments:!0,
+verbatimStrings:!0,types:Q}),["cs"]);p(x({keywords:M,cStyleComments:!0}),["java"]);p(x({keywords:K,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);p(x({keywords:O,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]);p(x({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),
+["perl","pl","pm"]);p(x({keywords:P,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);p(x({keywords:L,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);p(x({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);p(C([],[["str",/^[\s\S]+/]]),["regex"]);
+var V=R.PR={createSimpleLexer:C,registerLangHandler:p,sourceDecorator:x,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:function(a,d,f){f=f||!1;d=d||null;var b=document.createElement("div");b.innerHTML="<pre>"+a+"</pre>";b=b.firstChild;f&&B(b,f,!0);H({j:d,m:f,h:b,l:1,a:null,i:null,c:null,g:null});return b.innerHTML},
+prettyPrint:g=g=function(a,d){function f(){for(var b=R.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;r<p.length&&c.now()<b;r++){for(var d=p[r],k=h,q=d;q=q.previousSibling;){var m=q.nodeType,v=(7===m||8===m)&&q.nodeValue;if(v?!/^\??prettify\b/.test(v):3!==m||/\S/.test(q.nodeValue))break;if(v){k={};v.replace(/\b(\w+)=([\w:.%+-]+)/g,function(a,b,c){k[b]=c});break}}q=d.className;if((k!==h||u.test(q))&&!e.test(q)){m=!1;for(v=d.parentNode;v;v=v.parentNode)if(w.test(v.tagName)&&v.className&&u.test(v.className)){m=
+!0;break}if(!m){d.className+=" prettyprinted";m=k.lang;if(!m){var m=q.match(t),C;!m&&(C=A(d))&&z.test(C.tagName)&&(m=C.className.match(t));m&&(m=m[1])}if(x.test(d.tagName))v=1;else var v=d.currentStyle,y=g.defaultView,v=(v=v?v.whiteSpace:y&&y.getComputedStyle?y.getComputedStyle(d,null).getPropertyValue("white-space"):0)&&"pre"===v.substring(0,3);y=k.linenums;(y="true"===y||+y)||(y=(y=q.match(/\blinenums\b(?::(\d+))?/))?y[1]&&y[1].length?+y[1]:!0:!1);y&&B(d,y,v);H({j:m,h:d,m:y,l:v,a:null,i:null,c:null,
+g:null})}}}r<p.length?R.setTimeout(f,250):"function"===typeof a&&a()}for(var b=d||document.body,g=b.ownerDocument||document,b=[b.getElementsByTagName("pre"),b.getElementsByTagName("code"),b.getElementsByTagName("xmp")],p=[],k=0;k<b.length;++k)for(var m=0,q=b[k].length;m<q;++m)p.push(b[k][m]);var b=null,c=Date;c.now||(c={now:function(){return+new Date}});var r=0,t=/\blang(?:uage)?-([\w.]+)(?!\S)/,u=/\bprettyprint\b/,e=/\bprettyprinted\b/,x=/pre|xmp/i,z=/^code$/i,w=/^(?:pre|code|xmp)$/i,h={};f()}},
+S=R.define;"function"===typeof S&&S.amd&&S("google-code-prettify",[],function(){return V})})();return g}();T||t.setTimeout(U,0)})();}()
diff --git a/docs/vendor/prism.css b/docs/vendor/prism.css
new file mode 100644
index 00000000..4fac8142
--- /dev/null
+++ b/docs/vendor/prism.css
@@ -0,0 +1,125 @@
+/* PrismJS 1.21.0
+https://prismjs.com/download.html#themes=prism-tomorrow&languages=clike+javascript+bash+c+csharp+cpp+clojure+elixir+erlang+go+http+json+json5+jsonp+lua+perl+python+rust */
+/**
+ * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML
+ * Based on https://github.com/chriskempson/tomorrow-theme
+ * @author Rose Pritchard
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+	color: #ccc;
+	background: none;
+	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+	font-size: 1em;
+	text-align: left;
+	white-space: pre;
+	word-spacing: normal;
+	word-break: normal;
+	word-wrap: normal;
+	line-height: 1.5;
+
+	-moz-tab-size: 4;
+	-o-tab-size: 4;
+	tab-size: 4;
+
+	-webkit-hyphens: none;
+	-moz-hyphens: none;
+	-ms-hyphens: none;
+	hyphens: none;
+
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+	padding: 1em;
+	margin: .5em 0;
+	overflow: auto;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+	background: #2d2d2d;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+	padding: .1em;
+	border-radius: .3em;
+	white-space: normal;
+}
+
+.token.comment,
+.token.block-comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+	color: #999;
+}
+
+.token.punctuation {
+	color: #ccc;
+}
+
+.token.tag,
+.token.attr-name,
+.token.namespace,
+.token.deleted {
+	color: #e2777a;
+}
+
+.token.function-name {
+	color: #6196cc;
+}
+
+.token.boolean,
+.token.number,
+.token.function {
+	color: #f08d49;
+}
+
+.token.property,
+.token.class-name,
+.token.constant,
+.token.symbol {
+	color: #f8c555;
+}
+
+.token.selector,
+.token.important,
+.token.atrule,
+.token.keyword,
+.token.builtin {
+	color: #cc99cd;
+}
+
+.token.string,
+.token.char,
+.token.attr-value,
+.token.regex,
+.token.variable {
+	color: #7ec699;
+}
+
+.token.operator,
+.token.entity,
+.token.url {
+	color: #67cdcc;
+}
+
+.token.important,
+.token.bold {
+	font-weight: bold;
+}
+.token.italic {
+	font-style: italic;
+}
+
+.token.entity {
+	cursor: help;
+}
+
+.token.inserted {
+	color: green;
+}
+
diff --git a/docs/vendor/prism.js b/docs/vendor/prism.js
new file mode 100644
index 00000000..7f211e59
--- /dev/null
+++ b/docs/vendor/prism.js
@@ -0,0 +1,21 @@
+/* PrismJS 1.21.0
+https://prismjs.com/download.html#themes=prism-tomorrow&languages=clike+javascript+bash+c+csharp+cpp+clojure+elixir+erlang+go+http+json+json5+jsonp+lua+perl+python+rust */
+var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++n}),e.__id},clone:function t(e,r){var a,n;switch(r=r||{},M.util.type(e)){case"Object":if(n=M.util.objId(e),r[n])return r[n];for(var i in a={},r[n]=a,e)e.hasOwnProperty(i)&&(a[i]=t(e[i],r));return a;case"Array":return n=M.util.objId(e),r[n]?r[n]:(a=[],r[n]=a,e.forEach(function(e,n){a[n]=t(e,r)}),a);default:return e}},getLanguage:function(e){for(;e&&!c.test(e.className);)e=e.parentElement;return e?(e.className.match(c)||[,"none"])[1].toLowerCase():"none"},currentScript:function(){if("undefined"==typeof document)return null;if("currentScript"in document)return document.currentScript;try{throw new Error}catch(e){var n=(/at [^(\r\n]*\((.*):.+:.+\)$/i.exec(e.stack)||[])[1];if(n){var t=document.getElementsByTagName("script");for(var r in t)if(t[r].src==n)return t[r]}return null}},isActive:function(e,n,t){for(var r="no-"+n;e;){var a=e.classList;if(a.contains(n))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!t}},languages:{extend:function(e,n){var t=M.util.clone(M.languages[e]);for(var r in n)t[r]=n[r];return t},insertBefore:function(t,e,n,r){var a=(r=r||M.languages)[t],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==e)for(var o in n)n.hasOwnProperty(o)&&(i[o]=n[o]);n.hasOwnProperty(l)||(i[l]=a[l])}var s=r[t];return r[t]=i,M.languages.DFS(M.languages,function(e,n){n===s&&e!=t&&(this[e]=i)}),i},DFS:function e(n,t,r,a){a=a||{};var i=M.util.objId;for(var l in n)if(n.hasOwnProperty(l)){t.call(n,l,n[l],r||l);var o=n[l],s=M.util.type(o);"Object"!==s||a[i(o)]?"Array"!==s||a[i(o)]||(a[i(o)]=!0,e(o,t,l,a)):(a[i(o)]=!0,e(o,t,null,a))}}},plugins:{},highlightAll:function(e,n){M.highlightAllUnder(document,e,n)},highlightAllUnder:function(e,n,t){var r={callback:t,container:e,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};M.hooks.run("before-highlightall",r),r.elements=Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)),M.hooks.run("before-all-elements-highlight",r);for(var a,i=0;a=r.elements[i++];)M.highlightElement(a,!0===n,r.callback)},highlightElement:function(e,n,t){var r=M.util.getLanguage(e),a=M.languages[r];e.className=e.className.replace(c,"").replace(/\s+/g," ")+" language-"+r;var i=e.parentElement;i&&"pre"===i.nodeName.toLowerCase()&&(i.className=i.className.replace(c,"").replace(/\s+/g," ")+" language-"+r);var l={element:e,language:r,grammar:a,code:e.textContent};function o(e){l.highlightedCode=e,M.hooks.run("before-insert",l),l.element.innerHTML=l.highlightedCode,M.hooks.run("after-highlight",l),M.hooks.run("complete",l),t&&t.call(l.element)}if(M.hooks.run("before-sanity-check",l),!l.code)return M.hooks.run("complete",l),void(t&&t.call(l.element));if(M.hooks.run("before-highlight",l),l.grammar)if(n&&u.Worker){var s=new Worker(M.filename);s.onmessage=function(e){o(e.data)},s.postMessage(JSON.stringify({language:l.language,code:l.code,immediateClose:!0}))}else o(M.highlight(l.code,l.grammar,l.language));else o(M.util.encode(l.code))},highlight:function(e,n,t){var r={code:e,grammar:n,language:t};return M.hooks.run("before-tokenize",r),r.tokens=M.tokenize(r.code,r.grammar),M.hooks.run("after-tokenize",r),W.stringify(M.util.encode(r.tokens),r.language)},tokenize:function(e,n){var t=n.rest;if(t){for(var r in t)n[r]=t[r];delete n.rest}var a=new i;return I(a,a.head,e),function e(n,t,r,a,i,l){for(var o in r)if(r.hasOwnProperty(o)&&r[o]){var s=r[o];s=Array.isArray(s)?s:[s];for(var u=0;u<s.length;++u){if(l&&l.cause==o+","+u)return;var c=s[u],g=c.inside,f=!!c.lookbehind,h=!!c.greedy,d=0,v=c.alias;if(h&&!c.pattern.global){var p=c.pattern.toString().match(/[imsuy]*$/)[0];c.pattern=RegExp(c.pattern.source,p+"g")}for(var m=c.pattern||c,y=a.next,k=i;y!==t.tail&&!(l&&k>=l.reach);k+=y.value.length,y=y.next){var b=y.value;if(t.length>n.length)return;if(!(b instanceof W)){var x=1;if(h&&y!=t.tail.prev){m.lastIndex=k;var w=m.exec(n);if(!w)break;var A=w.index+(f&&w[1]?w[1].length:0),P=w.index+w[0].length,S=k;for(S+=y.value.length;S<=A;)y=y.next,S+=y.value.length;if(S-=y.value.length,k=S,y.value instanceof W)continue;for(var E=y;E!==t.tail&&(S<P||"string"==typeof E.value);E=E.next)x++,S+=E.value.length;x--,b=n.slice(k,S),w.index-=k}else{m.lastIndex=0;var w=m.exec(b)}if(w){f&&(d=w[1]?w[1].length:0);var A=w.index+d,O=w[0].slice(d),P=A+O.length,L=b.slice(0,A),N=b.slice(P),j=k+b.length;l&&j>l.reach&&(l.reach=j);var C=y.prev;L&&(C=I(t,C,L),k+=L.length),z(t,C,x);var _=new W(o,g?M.tokenize(O,g):O,v,O);y=I(t,C,_),N&&I(t,y,N),1<x&&e(n,t,r,y.prev,k,{cause:o+","+u,reach:j})}}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=M.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=M.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:W};function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function z(e,n,t){for(var r=n.next,a=0;a<t&&r!==e.tail;a++)r=r.next;(n.next=r).prev=n,e.length-=a}if(u.Prism=M,W.stringify=function n(e,t){if("string"==typeof e)return e;if(Array.isArray(e)){var r="";return e.forEach(function(e){r+=n(e,t)}),r}var a={type:e.type,content:n(e.content,t),tag:"span",classes:["token",e.type],attributes:{},language:t},i=e.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),M.hooks.run("wrap",a);var l="";for(var o in a.attributes)l+=" "+o+'="'+(a.attributes[o]||"").replace(/"/g,"&quot;")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var e=M.util.currentScript();function t(){M.manual||M.highlightAll()}if(e&&(M.filename=e.src,e.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var r=document.readyState;"loading"===r||"interactive"===r&&e&&e.defer?document.addEventListener("DOMContentLoaded",t):window.requestAnimationFrame?window.requestAnimationFrame(t):window.setTimeout(t,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
+Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};
+Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript;
+!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\2)[^\\])*\2/,lookbehind:!0,greedy:!0,inside:n}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}};for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=n.variable[1].inside,s=0;s<a.length;s++)r[a[s]]=e.languages.bash[a[s]];e.languages.shell=e.languages.bash}(Prism);
+Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+/,lookbehind:!0},keyword:/\b(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,function:/[a-z_]\w*(?=\s*\()/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c.boolean;
+!function(s){function a(e,s){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+s[+n]+")"})}function t(e,n,s){return RegExp(a(e,n),s||"")}function e(e,n){for(var s=0;s<n;s++)e=e.replace(/<<self>>/g,function(){return"(?:"+e+")"});return e.replace(/<<self>>/g,"[^\\s\\S]")}var n="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface struct",i="add alias and ascending async await by descending from get global group into join let nameof not notnull on or orderby partial remove select set unmanaged value when where where",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var d=l(r),p=RegExp(l(n+" "+r+" "+i+" "+o)),c=l(r+" "+i+" "+o),u=l(n+" "+r+" "+o),g=e("<(?:[^<>;=+\\-*/%&|^]|<<self>>)*>",2),b=e("\\((?:[^()]|<<self>>)*\\)",2),h="@?\\b[A-Za-z_]\\w*\\b",f=a("<<0>>(?:\\s*<<1>>)?",[h,g]),m=a("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[c,f]),k="\\[\\s*(?:,\\s*)*\\]",y=a("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[m,k]),w=a("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[a("\\(<<0>>+(?:,<<0>>+)+\\)",[a("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[g,b,k])]),m,k]),v={keyword:p,punctuation:/[<>()?,.:[\]]/},x="'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",$='"(?:\\\\.|[^\\\\"\r\n])*"';s.languages.csharp=s.languages.extend("clike",{string:[{pattern:t("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:t("(^|[^@$\\\\])<<0>>",[$]),lookbehind:!0,greedy:!0},{pattern:RegExp(x),greedy:!0,alias:"character"}],"class-name":[{pattern:t("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[m]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[h,w]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+)<<0>>(?=\\s*=)",[h]),lookbehind:!0},{pattern:t("(\\b<<0>>\\s+)<<1>>",[d,f]),lookbehind:!0,inside:v},{pattern:t("(\\bcatch\\s*\\(\\s*)<<0>>",[m]),lookbehind:!0,inside:v},{pattern:t("(\\bwhere\\s+)<<0>>",[h]),lookbehind:!0},{pattern:t("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[y]),lookbehind:!0,inside:v},{pattern:t("\\b<<0>>(?=\\s+(?!<<1>>)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[w,u,h]),inside:v}],keyword:p,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:ul|lu|[dflmu])?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),s.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),s.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:t("([(,]\\s*)<<0>>(?=\\s*:)",[h]),lookbehind:!0,alias:"punctuation"}}),s.languages.insertBefore("csharp","class-name",{namespace:{pattern:t("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:t("(\\b(?:default|typeof|sizeof)\\s*\\(\\s*)(?:[^()\\s]|\\s(?!\\s*\\))|<<0>>)*(?=\\s*\\))",[b]),lookbehind:!0,alias:"class-name",inside:v},"return-type":{pattern:t("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[w,m]),inside:v,alias:"class-name"},"constructor-invocation":{pattern:t("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[w]),lookbehind:!0,inside:v,alias:"class-name"},"generic-method":{pattern:t("<<0>>\\s*<<1>>(?=\\s*\\()",[h,g]),inside:{function:t("^<<0>>",[h]),generic:{pattern:RegExp(g),alias:"class-name",inside:v}}},"type-list":{pattern:t("\\b((?:<<0>>\\s+<<1>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>)(?:\\s*,\\s*(?:<<3>>|<<4>>))*(?=\\s*(?:where|[{;]|=>|$))",[d,f,h,w,p.source]),lookbehind:!0,inside:{keyword:p,"class-name":{pattern:RegExp(w),greedy:!0,inside:v},punctuation:/,/}},preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var _=$+"|"+x,B=a("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>",[_]),E=e(a("[^\"'/()]|<<0>>|\\(<<self>>*\\)",[B]),2),R="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",P=a("<<0>>(?:\\s*\\(<<1>>*\\))?",[m,E]);s.languages.insertBefore("csharp","class-name",{attribute:{pattern:t("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[R,P]),lookbehind:!0,greedy:!0,inside:{target:{pattern:t("^<<0>>(?=\\s*:)",[R]),alias:"keyword"},"attribute-arguments":{pattern:t("\\(<<0>>*\\)",[E]),inside:s.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var z=":[^}\r\n]+",S=e(a("[^\"'/()]|<<0>>|\\(<<self>>*\\)",[B]),2),j=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[S,z]),A=e(a("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<<self>>*\\)",[_]),2),F=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[A,z]);function U(e,n){return{interpolation:{pattern:t("((?:^|[^{])(?:\\{\\{)*)<<0>>",[e]),lookbehind:!0,inside:{"format-string":{pattern:t("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[n,z]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:s.languages.csharp}}},string:/[\s\S]+/}}s.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:t('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[j]),lookbehind:!0,greedy:!0,inside:U(j,S)},{pattern:t('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[F]),lookbehind:!0,greedy:!0,inside:U(F,A)}]})}(Prism),Prism.languages.dotnet=Prism.languages.cs=Prism.languages.csharp;
+!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!<keyword>)\\w+".replace(/<keyword>/g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+\.?[\da-f']*|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+\.?[\d']*|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]*/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)(?:[^;{}"'])+?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism);
+Prism.languages.clojure={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},operator:/(?:::|[:|'])\b[a-z][\w*+!?-]*\b/i,keyword:{pattern:/([^\w+*'?-])(?:def|if|do|let|\.\.|quote|var|->>|->|fn|loop|recur|throw|try|monitor-enter|\.|new|set!|def\-|defn|defn\-|defmacro|defmulti|defmethod|defstruct|defonce|declare|definline|definterface|defprotocol|==|defrecord|>=|deftype|<=|defproject|ns|\*|\+|\-|\/|<|=|>|accessor|agent|agent-errors|aget|alength|all-ns|alter|and|append-child|apply|array-map|aset|aset-boolean|aset-byte|aset-char|aset-double|aset-float|aset-int|aset-long|aset-short|assert|assoc|await|await-for|bean|binding|bit-and|bit-not|bit-or|bit-shift-left|bit-shift-right|bit-xor|boolean|branch\?|butlast|byte|cast|char|children|class|clear-agent-errors|comment|commute|comp|comparator|complement|concat|conj|cons|constantly|cond|if-not|construct-proxy|contains\?|count|create-ns|create-struct|cycle|dec|deref|difference|disj|dissoc|distinct|doall|doc|dorun|doseq|dosync|dotimes|doto|double|down|drop|drop-while|edit|end\?|ensure|eval|every\?|false\?|ffirst|file-seq|filter|find|find-doc|find-ns|find-var|first|float|flush|for|fnseq|frest|gensym|get-proxy-class|get|hash-map|hash-set|identical\?|identity|if-let|import|in-ns|inc|index|insert-child|insert-left|insert-right|inspect-table|inspect-tree|instance\?|int|interleave|intersection|into|into-array|iterate|join|key|keys|keyword|keyword\?|last|lazy-cat|lazy-cons|left|lefts|line-seq|list\*|list|load|load-file|locking|long|loop|macroexpand|macroexpand-1|make-array|make-node|map|map-invert|map\?|mapcat|max|max-key|memfn|merge|merge-with|meta|min|min-key|name|namespace|neg\?|new|newline|next|nil\?|node|not|not-any\?|not-every\?|not=|ns-imports|ns-interns|ns-map|ns-name|ns-publics|ns-refers|ns-resolve|ns-unmap|nth|nthrest|or|parse|partial|path|peek|pop|pos\?|pr|pr-str|print|print-str|println|println-str|prn|prn-str|project|proxy|proxy-mappings|quot|rand|rand-int|range|re-find|re-groups|re-matcher|re-matches|re-pattern|re-seq|read|read-line|reduce|ref|ref-set|refer|rem|remove|remove-method|remove-ns|rename|rename-keys|repeat|replace|replicate|resolve|rest|resultset-seq|reverse|rfirst|right|rights|root|rrest|rseq|second|select|select-keys|send|send-off|seq|seq-zip|seq\?|set|short|slurp|some|sort|sort-by|sorted-map|sorted-map-by|sorted-set|special-symbol\?|split-at|split-with|str|string\?|struct|struct-map|subs|subvec|symbol|symbol\?|sync|take|take-nth|take-while|test|time|to-array|to-array-2d|tree-seq|true\?|union|up|update-proxy|val|vals|var-get|var-set|var\?|vector|vector-zip|vector\?|when|when-first|when-let|when-not|with-local-vars|with-meta|with-open|with-out-str|xml-seq|xml-zip|zero\?|zipmap|zipper)(?=[^\w+*'?-])/,lookbehind:!0},boolean:/\b(?:true|false|nil)\b/,number:/\b[\da-f]+\b/i,punctuation:/[{}\[\](),]/};
+Prism.languages.elixir={comment:/#.*/m,regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},"attr-name":/\w+\??:(?!:)/,capture:{pattern:/(^|[^&])&(?:[^&\s\d()][^\s()]*|(?=\())/,lookbehind:!0,alias:"function"},argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|exception|impl|module|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|require|rescue|try|unless|use|when)\b/,boolean:/\b(?:true|false|nil)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},Prism.languages.elixir.string.forEach(function(e){e.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:Prism.languages.elixir}}}});
+Prism.languages.erlang={comment:/%.+/,string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},"quoted-function":{pattern:/'(?:\\.|[^\\'\r\n])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^\\'\r\n])+'/,alias:"atom"},boolean:/\b(?:true|false)\b/,keyword:/\b(?:fun|when|case|of|end|if|receive|after|try|catch)\b/,number:[/\$\\?./,/\d+#[a-z0-9]+/i,/(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i],function:/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:bnot|div|rem|band|bor|bxor|bsl|bsr|not|and|or|xor|orelse|andalso)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/};
+Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete Prism.languages.go["class-name"];
+!function(t){t.languages.http={"request-line":{pattern:/^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\s(?:https?:\/\/|\/)\S+\sHTTP\/[0-9.]+/m,inside:{property:/^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b/,"attr-name":/:\w+/}},"response-status":{pattern:/^HTTP\/1.[01] \d+.*/m,inside:{property:{pattern:/(^HTTP\/1.[01] )\d+.*/i,lookbehind:!0}}},"header-name":{pattern:/^[\w-]+:(?=.)/m,alias:"keyword"}};var a,e,n,i=t.languages,p={"application/javascript":i.javascript,"application/json":i.json||i.javascript,"application/xml":i.xml,"text/xml":i.xml,"text/html":i.html,"text/css":i.css},s={"application/json":!0,"application/xml":!0};for(var r in p)if(p[r]){a=a||{};var T=s[r]?(void 0,n=(e=r).replace(/^[a-z]+\//,""),"(?:"+e+"|\\w+/(?:[\\w.-]+\\+)+"+n+"(?![+\\w.-]))"):r;a[r.replace(/\//g,"-")]={pattern:RegExp("(content-type:\\s*"+T+"[\\s\\S]*?)(?:\\r?\\n|\\r){2}[\\s\\S]*","i"),lookbehind:!0,inside:p[r]}}a&&t.languages.insertBefore("http","header-name",a)}(Prism);
+Prism.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json;
+!function(n){var e=/("|')(?:\\(?:\r\n?|\n|.)|(?!\1)[^\\\r\n])*\1/;n.languages.json5=n.languages.extend("json",{property:[{pattern:RegExp(e.source+"(?=\\s*:)"),greedy:!0},{pattern:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*:)/,alias:"unquoted"}],string:{pattern:e,greedy:!0},number:/[+-]?\b(?:NaN|Infinity|0x[a-fA-F\d]+)\b|[+-]?(?:\b\d+\.?\d*|\B\.\d+)(?:[eE][+-]?\d+\b)?/})}(Prism);
+Prism.languages.jsonp=Prism.languages.extend("json",{punctuation:/[{}[\]();,.]/}),Prism.languages.insertBefore("jsonp","punctuation",{function:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/});
+Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[\s\S]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+\.?[a-f\d]*(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|\.?\d*(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/};
+Prism.languages.perl={comment:[{pattern:/(^\s*)=\w+[\s\S]*?=cut.*/m,lookbehind:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0}],string:[{pattern:/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:/\b(?:m|qr)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+)+(?:::)*/i,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*>|\b_\b/,alias:"symbol"},vstring:{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/sub [a-z0-9_]+/i,inside:{keyword:/sub/}},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,punctuation:/[{}[\];(),:]/};
+Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python;
+!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|<self>)*\\*/",t=0;t<2;t++)a=a.replace(/<self>/g,function(){return a});a=a.replace(/<self>/g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u{(?:[\da-fA-F]_*){1,6}|.)|[^\\\r\n\t'])'/,greedy:!0,alias:"string"},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|Self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:[ui](?:8|16|32|64|128|size)|f(?:32|64)|bool|char|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64|size)?|f32|f64))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism);
diff --git a/docs/vendor/require.min.js b/docs/vendor/require.min.js
new file mode 100644
index 00000000..651902f2
--- /dev/null
+++ b/docs/vendor/require.min.js
@@ -0,0 +1,37 @@
+/*
+ RequireJS 2.1.22 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved.
+ Available via the MIT or new BSD license.
+ see: http://github.com/jrburke/requirejs for details
+*/
+var requirejs,require,define;
+(function(ha){function L(b){return"[object Function]"===R.call(b)}function M(b){return"[object Array]"===R.call(b)}function x(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function Y(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));--d);}}function w(b,c){return la.call(b,c)}function g(b,c){return w(b,c)&&b[c]}function E(b,c){for(var d in b)if(w(b,d)&&c(b[d],d))break}function Z(b,c,d,k){c&&E(c,function(c,g){if(d||!w(b,g))!k||"object"!==typeof c||!c||M(c)||L(c)||c instanceof
+RegExp?b[g]=c:(b[g]||(b[g]={}),Z(b[g],c,d,k))});return b}function y(b,c){return function(){return c.apply(b,arguments)}}function ia(b){throw b;}function ja(b){if(!b)return b;var c=ha;x(b.split("."),function(b){c=c[b]});return c}function G(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ma(b){function c(a,n,b){var f,l,c,d,h,k,e,A;n=n&&n.split("/");var q=m.map,p=q&&q["*"];if(a){a=a.split("/");l=a.length-1;m.nodeIdCompat&&
+V.test(a[l])&&(a[l]=a[l].replace(V,""));"."===a[0].charAt(0)&&n&&(l=n.slice(0,n.length-1),a=l.concat(a));l=a;for(c=0;c<l.length;c++)d=l[c],"."===d?(l.splice(c,1),--c):".."===d&&0!==c&&(1!==c||".."!==l[2])&&".."!==l[c-1]&&0<c&&(l.splice(c-1,2),c-=2);a=a.join("/")}if(b&&q&&(n||p)){l=a.split("/");c=l.length;a:for(;0<c;--c){h=l.slice(0,c).join("/");if(n)for(d=n.length;0<d;--d)if(b=g(q,n.slice(0,d).join("/")))if(b=g(b,h)){f=b;k=c;break a}!e&&p&&g(p,h)&&(e=g(p,h),A=c)}!f&&e&&(f=e,k=A);f&&(l.splice(0,k,
+f),a=l.join("/"))}return(f=g(m.pkgs,a))?f:a}function d(a){F&&x(document.getElementsByTagName("script"),function(n){if(n.getAttribute("data-requiremodule")===a&&n.getAttribute("data-requirecontext")===h.contextName)return n.parentNode.removeChild(n),!0})}function p(a){var n=g(m.paths,a);if(n&&M(n)&&1<n.length)return n.shift(),h.require.undef(a),h.makeRequire(null,{skipMap:!0})([a]),!0}function e(a){var n,b=a?a.indexOf("!"):-1;-1<b&&(n=a.substring(0,b),a=a.substring(b+1,a.length));return[n,a]}function q(a,
+n,b,f){var l,d,z=null,k=n?n.name:null,m=a,q=!0,A="";a||(q=!1,a="_@r"+(R+=1));a=e(a);z=a[0];a=a[1];z&&(z=c(z,k,f),d=g(r,z));a&&(z?A=d&&d.normalize?d.normalize(a,function(a){return c(a,k,f)}):-1===a.indexOf("!")?c(a,k,f):a:(A=c(a,k,f),a=e(A),z=a[0],A=a[1],b=!0,l=h.nameToUrl(A)));b=!z||d||b?"":"_unnormalized"+(U+=1);return{prefix:z,name:A,parentMap:n,unnormalized:!!b,url:l,originalName:m,isDefine:q,id:(z?z+"!"+A:A)+b}}function u(a){var b=a.id,c=g(t,b);c||(c=t[b]=new h.Module(a));return c}function v(a,
+b,c){var f=a.id,l=g(t,f);if(!w(r,f)||l&&!l.defineEmitComplete)if(l=u(a),l.error&&"error"===b)c(l.error);else l.on(b,c);else"defined"===b&&c(r[f])}function B(a,b){var c=a.requireModules,f=!1;if(b)b(a);else if(x(c,function(b){if(b=g(t,b))b.error=a,b.events.error&&(f=!0,b.emit("error",a))}),!f)k.onError(a)}function C(){W.length&&(x(W,function(a){var b=a[0];"string"===typeof b&&(h.defQueueMap[b]=!0);H.push(a)}),W=[])}function D(a){delete t[a];delete aa[a]}function K(a,b,c){var f=a.map.id;a.error?a.emit("error",
+a.error):(b[f]=!0,x(a.depMaps,function(f,d){var h=f.id,k=g(t,h);!k||a.depMatched[d]||c[h]||(g(b,h)?(a.defineDep(d,r[h]),a.check()):K(k,b,c))}),c[f]=!0)}function I(){var a,b,c=(a=1E3*m.waitSeconds)&&h.startTime+a<(new Date).getTime(),f=[],l=[],k=!1,g=!0;if(!ba){ba=!0;E(aa,function(a){var h=a.map,e=h.id;if(a.enabled&&(h.isDefine||l.push(a),!a.error))if(!a.inited&&c)p(e)?k=b=!0:(f.push(e),d(e));else if(!a.inited&&a.fetched&&h.isDefine&&(k=!0,!h.prefix))return g=!1});if(c&&f.length)return a=G("timeout",
+"Load timeout for modules: "+f,null,f),a.contextName=h.contextName,B(a);g&&x(l,function(a){K(a,{},{})});c&&!b||!k||!F&&!ka||ca||(ca=setTimeout(function(){ca=0;I()},50));ba=!1}}function J(a){w(r,a[0])||u(q(a[0],null,!0)).init(a[1],a[2])}function P(a){a=a.currentTarget||a.srcElement;var b=h.onScriptLoad;a.detachEvent&&!da?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=h.onScriptError;a.detachEvent&&!da||a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}
+function Q(){var a;for(C();H.length;){a=H.shift();if(null===a[0])return B(G("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));J(a)}h.defQueueMap={}}var ba,ea,h,S,ca,m={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},t={},aa={},fa={},H=[],r={},X={},ga={},R=1,U=1;S={require:function(a){return a.require?a.require:a.require=h.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?r[a.map.id]=a.exports:a.exports=r[a.map.id]=
+{}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return g(m.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};ea=function(a){this.events=g(fa,a.id)||{};this.map=a;this.shim=g(m.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};ea.prototype={init:function(a,b,c,f){f=f||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=y(this,function(a){this.emit("error",
+a)}));this.depMaps=a&&a.slice(0);this.errback=c;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,--this.depCount,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;h.startTime=(new Date).getTime();var a=this.map;if(this.shim)h.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],y(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?
+this.callPlugin():this.load()}},load:function(){var a=this.map.url;X[a]||(X[a]=!0,h.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var f=this.exports,l=this.factory;if(!this.inited)w(h.defQueueMap,c)||this.fetch();else if(this.error)this.emit("error",this.error);else if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(L(l)){try{f=h.execCb(c,l,b,f)}catch(d){a=d}this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:
+this.usingExports&&(f=this.exports));if(a){if(this.events.error&&this.map.isDefine||k.onError!==ia)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",B(this.error=a);if("undefined"!==typeof console&&console.error)console.error(a);else k.onError(a)}}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,k.onResourceLoad)){var e=[];x(this.depMaps,function(a){e.push(a.normalizedMap||a)});k.onResourceLoad(h,
+this.map,e)}D(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}},callPlugin:function(){var a=this.map,b=a.id,d=q(a.prefix);this.depMaps.push(d);v(d,"defined",y(this,function(f){var l,d,e=g(ga,this.map.id),N=this.map.name,p=this.map.parentMap?this.map.parentMap.name:null,r=h.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(N=f.normalize(N,function(a){return c(a,
+p,!0)})||""),d=q(a.prefix+"!"+N,this.map.parentMap),v(d,"defined",y(this,function(a){this.map.normalizedMap=d;this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),f=g(t,d.id)){this.depMaps.push(d);if(this.events.error)f.on("error",y(this,function(a){this.emit("error",a)}));f.enable()}}else e?(this.map.url=h.nameToUrl(e),this.load()):(l=y(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=y(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];
+E(t,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&D(a.map.id)});B(a)}),l.fromText=y(this,function(f,c){var d=a.name,e=q(d),N=T;c&&(f=c);N&&(T=!1);u(e);w(m.config,b)&&(m.config[d]=m.config[b]);try{k.exec(f)}catch(g){return B(G("fromtexteval","fromText eval for "+b+" failed: "+g,g,[b]))}N&&(T=!0);this.depMaps.push(e);h.completeLoad(d);r([d],l)}),f.load(a.name,r,l,m))}));h.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){aa[this.map.id]=this;this.enabling=this.enabled=!0;x(this.depMaps,
+y(this,function(a,b){var c,f;if("string"===typeof a){a=q(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=g(S,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;v(a,"defined",y(this,function(a){this.undefed||(this.defineDep(b,a),this.check())}));this.errback?v(a,"error",y(this,this.errback)):this.events.error&&v(a,"error",y(this,function(a){this.emit("error",a)}))}c=a.id;f=t[c];w(S,c)||!f||f.enabled||h.enable(a,this)}));E(this.pluginMaps,y(this,function(a){var b=
+g(t,a.id);b&&!b.enabled&&h.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){x(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};h={config:m,contextName:b,registry:t,defined:r,urlFetched:X,defQueue:H,defQueueMap:{},Module:ea,makeModuleMap:q,nextTick:k.nextTick,onError:B,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=m.shim,c={paths:!0,
+bundles:!0,config:!0,map:!0};E(a,function(a,b){c[b]?(m[b]||(m[b]={}),Z(m[b],a,!0,!0)):m[b]=a});a.bundles&&E(a.bundles,function(a,b){x(a,function(a){a!==b&&(ga[a]=b)})});a.shim&&(E(a.shim,function(a,c){M(a)&&(a={deps:a});!a.exports&&!a.init||a.exportsFn||(a.exportsFn=h.makeShimExports(a));b[c]=a}),m.shim=b);a.packages&&x(a.packages,function(a){var b;a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(m.paths[b]=a.location);m.pkgs[b]=a.name+"/"+(a.main||"main").replace(na,"").replace(V,"")});E(t,
+function(a,b){a.inited||a.map.unnormalized||(a.map=q(b,null,!0))});(a.deps||a.callback)&&h.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ha,arguments));return b||a.exports&&ja(a.exports)}},makeRequire:function(a,n){function e(c,d,g){var m,p;n.enableBuildCallback&&d&&L(d)&&(d.__requireJsBuild=!0);if("string"===typeof c){if(L(d))return B(G("requireargs","Invalid require call"),g);if(a&&w(S,c))return S[c](t[a.id]);if(k.get)return k.get(h,
+c,a,e);m=q(c,a,!1,!0);m=m.id;return w(r,m)?r[m]:B(G("notloaded",'Module name "'+m+'" has not been loaded yet for context: '+b+(a?"":". Use require([])")))}Q();h.nextTick(function(){Q();p=u(q(null,a));p.skipMap=n.skipMap;p.init(c,d,g,{enabled:!0});I()});return e}n=n||{};Z(e,{isBrowser:F,toUrl:function(b){var d,e=b.lastIndexOf("."),n=b.split("/")[0];-1!==e&&("."!==n&&".."!==n||1<e)&&(d=b.substring(e,b.length),b=b.substring(0,e));return h.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return w(r,
+q(b,a,!1,!0).id)},specified:function(b){b=q(b,a,!1,!0).id;return w(r,b)||w(t,b)}});a||(e.undef=function(b){C();var c=q(b,a,!0),e=g(t,b);e.undefed=!0;d(b);delete r[b];delete X[c.url];delete fa[b];Y(H,function(a,c){a[0]===b&&H.splice(c,1)});delete h.defQueueMap[b];e&&(e.events.defined&&(fa[b]=e.events),D(b))});return e},enable:function(a){g(t,a.id)&&u(a).enable()},completeLoad:function(a){var b,c,d=g(m.shim,a)||{},e=d.exports;for(C();H.length;){c=H.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===
+a&&(b=!0);J(c)}h.defQueueMap={};c=g(t,a);if(!b&&!w(r,a)&&c&&!c.inited)if(!m.enforceDefine||e&&ja(e))J([a,d.deps||[],d.exportsFn]);else return p(a)?void 0:B(G("nodefine","No define call for "+a,null,[a]));I()},nameToUrl:function(a,b,c){var d,e,p;(d=g(m.pkgs,a))&&(a=d);if(d=g(ga,a))return h.nameToUrl(d,b,c);if(k.jsExtRegExp.test(a))d=a+(b||"");else{d=m.paths;a=a.split("/");for(e=a.length;0<e;--e)if(p=a.slice(0,e).join("/"),p=g(d,p)){M(p)&&(p=p[0]);a.splice(0,e,p);break}d=a.join("/");d+=b||(/^data\:|\?/.test(d)||
+c?"":".js");d=("/"===d.charAt(0)||d.match(/^[\w\+\.\-]+:/)?"":m.baseUrl)+d}return m.urlArgs?d+((-1===d.indexOf("?")?"?":"&")+m.urlArgs):d},load:function(a,b){k.load(h,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||oa.test((a.currentTarget||a.srcElement).readyState))O=null,a=P(a),h.completeLoad(a.id)},onScriptError:function(a){var b=P(a);if(!p(b.id)){var c=[];E(t,function(a,d){0!==d.indexOf("_@r")&&x(a.depMaps,function(a){a.id===b.id&&c.push(d);return!0})});
+return B(G("scripterror",'Script error for "'+b.id+(c.length?'", needed by: '+c.join(", "):'"'),a,[b.id]))}}};h.require=h.makeRequire();return h}function pa(){if(O&&"interactive"===O.readyState)return O;Y(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return O=b});return O}var k,C,D,I,P,J,O,Q,u,U,qa=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ra=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,V=/\.js$/,na=/^\.\//;C=Object.prototype;var R=C.toString,la=C.hasOwnProperty,
+F=!("undefined"===typeof window||"undefined"===typeof navigator||!window.document),ka=!F&&"undefined"!==typeof importScripts,oa=F&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,da="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),K={},v={},W=[],T=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(L(requirejs))return;v=requirejs;requirejs=void 0}"undefined"===typeof require||L(require)||(v=require,require=void 0);k=requirejs=function(b,
+c,d,p){var e,q="_";M(b)||"string"===typeof b||(e=b,M(c)?(b=c,c=d,d=p):b=[]);e&&e.context&&(q=e.context);(p=g(K,q))||(p=K[q]=k.s.newContext(q));e&&p.configure(e);return p.require(b,c,d)};k.config=function(b){return k(b)};k.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=k);k.version="2.1.22";k.jsExtRegExp=/^\/|:|\?|\.js$/;k.isBrowser=F;C=k.s={contexts:K,newContext:ma};k({});x(["toUrl","undef","defined","specified"],function(b){k[b]=function(){var c=
+K._;return c.require[b].apply(c,arguments)}});F&&(D=C.head=document.getElementsByTagName("head")[0],I=document.getElementsByTagName("base")[0])&&(D=C.head=I.parentNode);k.onError=ia;k.createNode=function(b,c,d){c=b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};k.load=function(b,c,d){var g=b&&b.config||{},e;if(F){e=k.createNode(g,c,d);if(g.onNodeCreated)g.onNodeCreated(e,
+g,c,d);e.setAttribute("data-requirecontext",b.contextName);e.setAttribute("data-requiremodule",c);!e.attachEvent||e.attachEvent.toString&&0>e.attachEvent.toString().indexOf("[native code")||da?(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)):(T=!0,e.attachEvent("onreadystatechange",b.onScriptLoad));e.src=d;Q=e;I?D.insertBefore(e,I):D.appendChild(e);Q=null;return e}if(ka)try{importScripts(d),b.completeLoad(c)}catch(q){b.onError(G("importscripts","importScripts failed for "+
+c+" at "+d,q,[c]))}};F&&!v.skipDataMain&&Y(document.getElementsByTagName("script"),function(b){D||(D=b.parentNode);if(P=b.getAttribute("data-main"))return u=P,v.baseUrl||(J=u.split("/"),u=J.pop(),U=J.length?J.join("/")+"/":"./",v.baseUrl=U),u=u.replace(V,""),k.jsExtRegExp.test(u)&&(u=P),v.deps=v.deps?v.deps.concat(u):[u],!0});define=function(b,c,d){var g,e;"string"!==typeof b&&(d=c,c=b,b=null);M(c)||(d=c,c=null);!c&&L(d)&&(c=[],d.length&&(d.toString().replace(qa,"").replace(ra,function(b,d){c.push(d)}),
+c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));T&&(g=Q||pa())&&(b||(b=g.getAttribute("data-requiremodule")),e=K[g.getAttribute("data-requirecontext")]);e?(e.defQueue.push([b,c,d]),e.defQueueMap[b]=!0):W.push([b,c,d])};define.amd={jQuery:!0};k.exec=function(b){return eval(b)};k(v)}})(this);
diff --git a/docs/vendor/semver.min.js b/docs/vendor/semver.min.js
new file mode 100644
index 00000000..c2b3ff48
--- /dev/null
+++ b/docs/vendor/semver.min.js
@@ -0,0 +1 @@
+(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=K;e.SEMVER_SPEC_VERSION="2.0.0";var r=256;var t=Number.MAX_SAFE_INTEGER||9007199254740991;var n=e.re=[];var i=e.src=[];var s=0;var o=s++;i[o]="0|[1-9]\\d*";var a=s++;i[a]="[0-9]+";var f=s++;i[f]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var u=s++;i[u]="("+i[o]+")\\."+"("+i[o]+")\\."+"("+i[o]+")";var l=s++;i[l]="("+i[a]+")\\."+"("+i[a]+")\\."+"("+i[a]+")";var p=s++;i[p]="(?:"+i[o]+"|"+i[f]+")";var h=s++;i[h]="(?:"+i[a]+"|"+i[f]+")";var c=s++;i[c]="(?:-("+i[p]+"(?:\\."+i[p]+")*))";var v=s++;i[v]="(?:-?("+i[h]+"(?:\\."+i[h]+")*))";var m=s++;i[m]="[0-9A-Za-z-]+";var g=s++;i[g]="(?:\\+("+i[m]+"(?:\\."+i[m]+")*))";var w=s++;var y="v?"+i[u]+i[c]+"?"+i[g]+"?";i[w]="^"+y+"$";var d="[v=\\s]*"+i[l]+i[v]+"?"+i[g]+"?";var j=s++;i[j]="^"+d+"$";var b=s++;i[b]="((?:<|>)?=?)";var E=s++;i[E]=i[a]+"|x|X|\\*";var $=s++;i[$]=i[o]+"|x|X|\\*";var k=s++;i[k]="[v=\\s]*("+i[$]+")"+"(?:\\.("+i[$]+")"+"(?:\\.("+i[$]+")"+"(?:"+i[c]+")?"+i[g]+"?"+")?)?";var R=s++;i[R]="[v=\\s]*("+i[E]+")"+"(?:\\.("+i[E]+")"+"(?:\\.("+i[E]+")"+"(?:"+i[v]+")?"+i[g]+"?"+")?)?";var S=s++;i[S]="^"+i[b]+"\\s*"+i[k]+"$";var x=s++;i[x]="^"+i[b]+"\\s*"+i[R]+"$";var I=s++;i[I]="(?:~>?)";var T=s++;i[T]="(\\s*)"+i[I]+"\\s+";n[T]=new RegExp(i[T],"g");var V="$1~";var A=s++;i[A]="^"+i[I]+i[k]+"$";var C=s++;i[C]="^"+i[I]+i[R]+"$";var M=s++;i[M]="(?:\\^)";var N=s++;i[N]="(\\s*)"+i[M]+"\\s+";n[N]=new RegExp(i[N],"g");var _="$1^";var z=s++;i[z]="^"+i[M]+i[k]+"$";var P=s++;i[P]="^"+i[M]+i[R]+"$";var X=s++;i[X]="^"+i[b]+"\\s*("+d+")$|^$";var Z=s++;i[Z]="^"+i[b]+"\\s*("+y+")$|^$";var q=s++;i[q]="(\\s*)"+i[b]+"\\s*("+d+"|"+i[k]+")";n[q]=new RegExp(i[q],"g");var L="$1$2$3";var F=s++;i[F]="^\\s*("+i[k]+")"+"\\s+-\\s+"+"("+i[k]+")"+"\\s*$";var G=s++;i[G]="^\\s*("+i[R]+")"+"\\s+-\\s+"+"("+i[R]+")"+"\\s*$";var O=s++;i[O]="(<|>)?=?\\s*\\*";for(var B=0;B<s;B++){if(!n[B])n[B]=new RegExp(i[B])}e.parse=D;function D(e,t){if(e instanceof K)return e;if(typeof e!=="string")return null;if(e.length>r)return null;var i=t?n[j]:n[w];if(!i.test(e))return null;try{return new K(e,t)}catch(s){return null}}e.valid=H;function H(e,r){var t=D(e,r);return t?t.version:null}e.clean=J;function J(e,r){var t=D(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null}e.SemVer=K;function K(e,i){if(e instanceof K){if(e.loose===i)return e;else e=e.version}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}if(e.length>r)throw new TypeError("version is longer than "+r+" characters");if(!(this instanceof K))return new K(e,i);this.loose=i;var s=e.trim().match(i?n[j]:n[w]);if(!s)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+s[1];this.minor=+s[2];this.patch=+s[3];if(this.major>t||this.major<0)throw new TypeError("Invalid major version");if(this.minor>t||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>t||this.patch<0)throw new TypeError("Invalid patch version");if(!s[4])this.prerelease=[];else this.prerelease=s[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var r=+e;if(r>=0&&r<t)return r}return e});this.build=s[5]?s[5].split("."):[];this.format()}K.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};K.prototype.inspect=function(){return'<SemVer "'+this+'">'};K.prototype.toString=function(){return this.version};K.prototype.compare=function(e){if(!(e instanceof K))e=new K(e,this.loose);return this.compareMain(e)||this.comparePre(e)};K.prototype.compareMain=function(e){if(!(e instanceof K))e=new K(e,this.loose);return Y(this.major,e.major)||Y(this.minor,e.minor)||Y(this.patch,e.patch)};K.prototype.comparePre=function(e){if(!(e instanceof K))e=new K(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.length&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Y(t,n)}while(++r)};K.prototype.inc=function(e,r){switch(e){case"premajor":this.prerelease.length=0;this.patch=0;this.minor=0;this.major++;this.inc("pre",r);break;case"preminor":this.prerelease.length=0;this.patch=0;this.minor++;this.inc("pre",r);break;case"prepatch":this.prerelease.length=0;this.inc("patch",r);this.inc("pre",r);break;case"prerelease":if(this.prerelease.length===0)this.inc("patch",r);this.inc("pre",r);break;case"major":if(this.minor!==0||this.patch!==0||this.prerelease.length===0)this.major++;this.minor=0;this.patch=0;this.prerelease=[];break;case"minor":if(this.patch!==0||this.prerelease.length===0)this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var t=this.prerelease.length;while(--t>=0){if(typeof this.prerelease[t]==="number"){this.prerelease[t]++;t=-2}}if(t===-1)this.prerelease.push(0)}if(r){if(this.prerelease[0]===r){if(isNaN(this.prerelease[1]))this.prerelease=[r,0]}else this.prerelease=[r,0]}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=Q;function Q(e,r,t,n){if(typeof t==="string"){n=t;t=undefined}try{return new K(e,t).inc(r,n).version}catch(i){return null}}e.diff=U;function U(e,r){if(pr(e,r)){return null}else{var t=D(e);var n=D(r);if(t.prerelease.length||n.prerelease.length){for(var i in t){if(i==="major"||i==="minor"||i==="patch"){if(t[i]!==n[i]){return"pre"+i}}}return"prerelease"}for(var i in t){if(i==="major"||i==="minor"||i==="patch"){if(t[i]!==n[i]){return i}}}}}e.compareIdentifiers=Y;var W=/^[0-9]+$/;function Y(e,r){var t=W.test(e);var n=W.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=er;function er(e,r){return Y(r,e)}e.major=rr;function rr(e,r){return new K(e,r).major}e.minor=tr;function tr(e,r){return new K(e,r).minor}e.patch=nr;function nr(e,r){return new K(e,r).patch}e.compare=ir;function ir(e,r,t){return new K(e,t).compare(r)}e.compareLoose=sr;function sr(e,r){return ir(e,r,true)}e.rcompare=or;function or(e,r,t){return ir(r,e,t)}e.sort=ar;function ar(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=fr;function fr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=ur;function ur(e,r,t){return ir(e,r,t)>0}e.lt=lr;function lr(e,r,t){return ir(e,r,t)<0}e.eq=pr;function pr(e,r,t){return ir(e,r,t)===0}e.neq=hr;function hr(e,r,t){return ir(e,r,t)!==0}e.gte=cr;function cr(e,r,t){return ir(e,r,t)>=0}e.lte=vr;function vr(e,r,t){return ir(e,r,t)<=0}e.cmp=mr;function mr(e,r,t,n){var i;switch(r){case"===":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e===t;break;case"!==":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e!==t;break;case"":case"=":case"==":i=pr(e,t,n);break;case"!=":i=hr(e,t,n);break;case">":i=ur(e,t,n);break;case">=":i=cr(e,t,n);break;case"<":i=lr(e,t,n);break;case"<=":i=vr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=gr;function gr(e,r){if(e instanceof gr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof gr))return new gr(e,r);this.loose=r;this.parse(e);if(this.semver===wr)this.value="";else this.value=this.operator+this.semver.version}var wr={};gr.prototype.parse=function(e){var r=this.loose?n[X]:n[Z];var t=e.match(r);if(!t)throw new TypeError("Invalid comparator: "+e);this.operator=t[1];if(this.operator==="=")this.operator="";if(!t[2])this.semver=wr;else this.semver=new K(t[2],this.loose)};gr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};gr.prototype.toString=function(){return this.value};gr.prototype.test=function(e){if(this.semver===wr)return true;if(typeof e==="string")e=new K(e,this.loose);return mr(e,this.operator,this.semver,this.loose)};e.Range=yr;function yr(e,r){if(e instanceof yr&&e.loose===r)return e;if(!(this instanceof yr))return new yr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}yr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};yr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};yr.prototype.toString=function(){return this.range};yr.prototype.parseRange=function(e){var r=this.loose;e=e.trim();var t=r?n[G]:n[F];e=e.replace(t,Tr);e=e.replace(n[q],L);e=e.replace(n[T],V);e=e.replace(n[N],_);e=e.split(/\s+/).join(" ");var i=r?n[X]:n[Z];var s=e.split(" ").map(function(e){return jr(e,r)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new gr(e,r)});return s};e.toComparators=dr;function dr(e,r){return new yr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function jr(e,r){e=kr(e,r);e=Er(e,r);e=Sr(e,r);e=Ir(e,r);return e}function br(e){return!e||e.toLowerCase()==="x"||e==="*"}function Er(e,r){return e.trim().split(/\s+/).map(function(e){return $r(e,r)}).join(" ")}function $r(e,r){var t=r?n[C]:n[A];return e.replace(t,function(e,r,t,n,i){var s;if(br(r))s="";else if(br(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(br(n))s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0";return s})}function kr(e,r){return e.trim().split(/\s+/).map(function(e){return Rr(e,r)}).join(" ")}function Rr(e,r){var t=r?n[P]:n[z];return e.replace(t,function(e,r,t,n,i){var s;if(br(r))s="";else if(br(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(br(n)){if(r==="0")s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else s=">="+r+"."+t+".0 <"+(+r+1)+".0.0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+i+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0"}else{if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+(+r+1)+".0.0"}return s})}function Sr(e,r){return e.split(/\s+/).map(function(e){return xr(e,r)}).join(" ")}function xr(e,r){e=e.trim();var t=r?n[x]:n[S];return e.replace(t,function(e,r,t,n,i,s){var o=br(t);var a=o||br(n);var f=a||br(i);var u=f;if(r==="="&&u)r="";if(o){if(r===">"||r==="<"){e="<0.0.0"}else{e="*"}}else if(r&&u){if(a)n=0;if(f)i=0;if(r===">"){r=">=";if(a){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}else if(r==="<="){r="<";if(a)t=+t+1;else n=+n+1}e=r+t+"."+n+"."+i}else if(a){e=">="+t+".0.0 <"+(+t+1)+".0.0"}else if(f){e=">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0"}return e})}function Ir(e,r){return e.trim().replace(n[O],"")}function Tr(e,r,t,n,i,s,o,a,f,u,l,p,h){if(br(t))r="";else if(br(n))r=">="+t+".0.0";else if(br(i))r=">="+t+"."+n+".0";else r=">="+r;if(br(f))a="";else if(br(u))a="<"+(+f+1)+".0.0";else if(br(l))a="<"+f+"."+(+u+1)+".0";else if(p)a="<="+f+"."+u+"."+l+"-"+p;else a="<="+a;return(r+" "+a).trim()}yr.prototype.test=function(e){if(!e)return false;if(typeof e==="string")e=new K(e,this.loose);for(var r=0;r<this.set.length;r++){if(Vr(this.set[r],e))return true}return false};function Vr(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}if(r.prerelease.length){for(var t=0;t<e.length;t++){if(e[t].semver===wr)return true;if(e[t].semver.prerelease.length>0){var n=e[t].semver;if(n.major===r.major&&n.minor===r.minor&&n.patch===r.patch)return true}}return false}return true}e.satisfies=Ar;function Ar(e,r,t){try{r=new yr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Cr;function Cr(e,r,t){return e.filter(function(e){return Ar(e,r,t)}).sort(function(e,r){return or(e,r,t)})[0]||null}e.validRange=Mr;function Mr(e,r){try{return new yr(e,r).range||"*"}catch(t){return null}}e.ltr=Nr;function Nr(e,r,t){return zr(e,r,"<",t)}e.gtr=_r;function _r(e,r,t){return zr(e,r,">",t)}e.outside=zr;function zr(e,r,t,n){e=new K(e,n);r=new yr(r,n);var i,s,o,a,f;switch(t){case">":i=ur;s=vr;o=lr;a=">";f=">=";break;case"<":i=lr;s=cr;o=ur;a="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Ar(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var p=null;var h=null;l.forEach(function(e){p=p||e;h=h||e;if(i(e.semver,p.semver,n)){p=e}else if(o(e.semver,h.semver,n)){h=e}});if(p.operator===a||p.operator===f){return false}if((!h.operator||h.operator===a)&&s(e,h.semver)){return false}else if(h.operator===f&&o(e,h.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={});
\ No newline at end of file
diff --git a/docs/vendor/webfontloader.js b/docs/vendor/webfontloader.js
new file mode 100644
index 00000000..2c7f6b3d
--- /dev/null
+++ b/docs/vendor/webfontloader.js
@@ -0,0 +1,17 @@
+/* Web Font Loader v1.6.24 - (c) Adobe Systems, Google. License: Apache 2.0 */
+(function(){function aa(a,b,d){return a.call.apply(a.bind,arguments)}function ba(a,b,d){if(!a)throw Error();if(2<arguments.length){var c=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,c);return a.apply(b,d)}}return function(){return a.apply(b,arguments)}}function p(a,b,d){p=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?aa:ba;return p.apply(null,arguments)}var q=Date.now||function(){return+new Date};function ca(a,b){this.a=a;this.m=b||a;this.c=this.m.document}var da=!!window.FontFace;function t(a,b,d,c){b=a.c.createElement(b);if(d)for(var e in d)d.hasOwnProperty(e)&&("style"==e?b.style.cssText=d[e]:b.setAttribute(e,d[e]));c&&b.appendChild(a.c.createTextNode(c));return b}function u(a,b,d){a=a.c.getElementsByTagName(b)[0];a||(a=document.documentElement);a.insertBefore(d,a.lastChild)}function v(a){a.parentNode&&a.parentNode.removeChild(a)}
+function w(a,b,d){b=b||[];d=d||[];for(var c=a.className.split(/\s+/),e=0;e<b.length;e+=1){for(var f=!1,g=0;g<c.length;g+=1)if(b[e]===c[g]){f=!0;break}f||c.push(b[e])}b=[];for(e=0;e<c.length;e+=1){f=!1;for(g=0;g<d.length;g+=1)if(c[e]===d[g]){f=!0;break}f||b.push(c[e])}a.className=b.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function y(a,b){for(var d=a.className.split(/\s+/),c=0,e=d.length;c<e;c++)if(d[c]==b)return!0;return!1}
+function z(a){if("string"===typeof a.f)return a.f;var b=a.m.location.protocol;"about:"==b&&(b=a.a.location.protocol);return"https:"==b?"https:":"http:"}function ea(a){return a.m.location.hostname||a.a.location.hostname}
+function A(a,b,d){function c(){k&&e&&f&&(k(g),k=null)}b=t(a,"link",{rel:"stylesheet",href:b,media:"all"});var e=!1,f=!0,g=null,k=d||null;da?(b.onload=function(){e=!0;c()},b.onerror=function(){e=!0;g=Error("Stylesheet failed to load");c()}):setTimeout(function(){e=!0;c()},0);u(a,"head",b)}
+function B(a,b,d,c){var e=a.c.getElementsByTagName("head")[0];if(e){var f=t(a,"script",{src:b}),g=!1;f.onload=f.onreadystatechange=function(){g||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(g=!0,d&&d(null),f.onload=f.onreadystatechange=null,"HEAD"==f.parentNode.tagName&&e.removeChild(f))};e.appendChild(f);setTimeout(function(){g||(g=!0,d&&d(Error("Script load timeout")))},c||5E3);return f}return null};function C(){this.a=0;this.c=null}function D(a){a.a++;return function(){a.a--;E(a)}}function F(a,b){a.c=b;E(a)}function E(a){0==a.a&&a.c&&(a.c(),a.c=null)};function G(a){this.a=a||"-"}G.prototype.c=function(a){for(var b=[],d=0;d<arguments.length;d++)b.push(arguments[d].replace(/[\W_]+/g,"").toLowerCase());return b.join(this.a)};function H(a,b){this.c=a;this.f=4;this.a="n";var d=(b||"n4").match(/^([nio])([1-9])$/i);d&&(this.a=d[1],this.f=parseInt(d[2],10))}function fa(a){return I(a)+" "+(a.f+"00")+" 300px "+J(a.c)}function J(a){var b=[];a=a.split(/,\s*/);for(var d=0;d<a.length;d++){var c=a[d].replace(/['"]/g,"");-1!=c.indexOf(" ")||/^\d/.test(c)?b.push("'"+c+"'"):b.push(c)}return b.join(",")}function K(a){return a.a+a.f}function I(a){var b="normal";"o"===a.a?b="oblique":"i"===a.a&&(b="italic");return b}
+function ga(a){var b=4,d="n",c=null;a&&((c=a.match(/(normal|oblique|italic)/i))&&c[1]&&(d=c[1].substr(0,1).toLowerCase()),(c=a.match(/([1-9]00|normal|bold)/i))&&c[1]&&(/bold/i.test(c[1])?b=7:/[1-9]00/.test(c[1])&&(b=parseInt(c[1].substr(0,1),10))));return d+b};function ha(a,b){this.c=a;this.f=a.m.document.documentElement;this.h=b;this.a=new G("-");this.j=!1!==b.events;this.g=!1!==b.classes}function ia(a){a.g&&w(a.f,[a.a.c("wf","loading")]);L(a,"loading")}function M(a){if(a.g){var b=y(a.f,a.a.c("wf","active")),d=[],c=[a.a.c("wf","loading")];b||d.push(a.a.c("wf","inactive"));w(a.f,d,c)}L(a,"inactive")}function L(a,b,d){if(a.j&&a.h[b])if(d)a.h[b](d.c,K(d));else a.h[b]()};function ja(){this.c={}}function ka(a,b,d){var c=[],e;for(e in b)if(b.hasOwnProperty(e)){var f=a.c[e];f&&c.push(f(b[e],d))}return c};function N(a,b){this.c=a;this.f=b;this.a=t(this.c,"span",{"aria-hidden":"true"},this.f)}function O(a){u(a.c,"body",a.a)}function P(a){return"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+J(a.c)+";"+("font-style:"+I(a)+";font-weight:"+(a.f+"00")+";")};function Q(a,b,d,c,e,f){this.g=a;this.j=b;this.a=c;this.c=d;this.f=e||3E3;this.h=f||void 0}Q.prototype.start=function(){var a=this.c.m.document,b=this,d=q(),c=new Promise(function(c,e){function k(){q()-d>=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?c():setTimeout(k,25)},function(){e()})}k()}),e=new Promise(function(a,c){setTimeout(c,b.f)});Promise.race([e,c]).then(function(){b.g(b.a)},function(){b.j(b.a)})};function R(a,b,d,c,e,f,g){this.v=a;this.B=b;this.c=d;this.a=c;this.s=g||"BESbswy";this.f={};this.w=e||3E3;this.u=f||null;this.o=this.j=this.h=this.g=null;this.g=new N(this.c,this.s);this.h=new N(this.c,this.s);this.j=new N(this.c,this.s);this.o=new N(this.c,this.s);a=new H(this.a.c+",serif",K(this.a));a=P(a);this.g.a.style.cssText=a;a=new H(this.a.c+",sans-serif",K(this.a));a=P(a);this.h.a.style.cssText=a;a=new H("serif",K(this.a));a=P(a);this.j.a.style.cssText=a;a=new H("sans-serif",K(this.a));a=
+P(a);this.o.a.style.cssText=a;O(this.g);O(this.h);O(this.j);O(this.o)}var S={D:"serif",C:"sans-serif"},T=null;function U(){if(null===T){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);T=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return T}R.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f["sans-serif"]=this.o.a.offsetWidth;this.A=q();la(this)};
+function ma(a,b,d){for(var c in S)if(S.hasOwnProperty(c)&&b===a.f[S[c]]&&d===a.f[S[c]])return!0;return!1}function la(a){var b=a.g.a.offsetWidth,d=a.h.a.offsetWidth,c;(c=b===a.f.serif&&d===a.f["sans-serif"])||(c=U()&&ma(a,b,d));c?q()-a.A>=a.w?U()&&ma(a,b,d)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):na(a):V(a,a.v)}function na(a){setTimeout(p(function(){la(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.o.a);b(this.a)},a),0)};function W(a,b,d){this.c=a;this.a=b;this.f=0;this.o=this.j=!1;this.s=d}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c("wf",a.c,K(a).toString(),"active")],[b.a.c("wf",a.c,K(a).toString(),"loading"),b.a.c("wf",a.c,K(a).toString(),"inactive")]);L(b,"fontactive",a);this.o=!0;oa(this)};
+W.prototype.h=function(a){var b=this.a;if(b.g){var d=y(b.f,b.a.c("wf",a.c,K(a).toString(),"active")),c=[],e=[b.a.c("wf",a.c,K(a).toString(),"loading")];d||c.push(b.a.c("wf",a.c,K(a).toString(),"inactive"));w(b.f,c,e)}L(b,"fontinactive",a);oa(this)};function oa(a){0==--a.f&&a.j&&(a.o?(a=a.a,a.g&&w(a.f,[a.a.c("wf","active")],[a.a.c("wf","loading"),a.a.c("wf","inactive")]),L(a,"active")):M(a.a))};function pa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}pa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;qa(this,new ha(this.c,a),a)};
+function ra(a,b,d,c,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,k=c||null||{};if(0===d.length&&f)M(b.a);else{b.f+=d.length;f&&(b.j=f);var h,m=[];for(h=0;h<d.length;h++){var l=d[h],n=k[l.c],r=b.a,x=l;r.g&&w(r.f,[r.a.c("wf",x.c,K(x).toString(),"loading")]);L(r,"fontloading",x);r=null;null===X&&(X=window.FontFace?(x=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent))?42<parseInt(x[1],10):!0:!1);X?r=new Q(p(b.g,b),p(b.h,b),b.c,l,b.s,n):r=new R(p(b.g,b),p(b.h,b),b.c,l,b.s,a,
+n);m.push(r)}for(h=0;h<m.length;h++)m[h].start()}},0)}function qa(a,b,d){var c=[],e=d.timeout;ia(b);var c=ka(a.a,d,a.c),f=new W(a.c,b,e);a.h=c.length;b=0;for(d=c.length;b<d;b++)c[b].load(function(b,c,d){ra(a,f,b,c,d)})};function sa(a,b){this.c=a;this.a=b}function ta(a,b,d){var c=z(a.c);a=(a.a.api||"fast.fonts.net/jsapi").replace(/^.*http(s?):(\/\/)?/,"");return c+"//"+a+"/"+b+".js"+(d?"?v="+d:"")}
+sa.prototype.load=function(a){function b(){if(e["__mti_fntLst"+d]){var c=e["__mti_fntLst"+d](),g=[],k;if(c)for(var h=0;h<c.length;h++){var m=c[h].fontfamily;void 0!=c[h].fontStyle&&void 0!=c[h].fontWeight?(k=c[h].fontStyle+c[h].fontWeight,g.push(new H(m,k))):g.push(new H(m))}a(g)}else setTimeout(function(){b()},50)}var d=this.a.projectId,c=this.a.version;if(d){var e=this.c.m;B(this.c,ta(this,d,c),function(c){c?a([]):b()}).id="__MonotypeAPIScript__"+d}else a([])};function ua(a,b){this.c=a;this.a=b}ua.prototype.load=function(a){var b,d,c=this.a.urls||[],e=this.a.families||[],f=this.a.testStrings||{},g=new C;b=0;for(d=c.length;b<d;b++)A(this.c,c[b],D(g));var k=[];b=0;for(d=e.length;b<d;b++)if(c=e[b].split(":"),c[1])for(var h=c[1].split(","),m=0;m<h.length;m+=1)k.push(new H(c[0],h[m]));else k.push(new H(c[0]));F(g,function(){a(k,f)})};function va(a,b,d){a?this.c=a:this.c=b+wa;this.a=[];this.f=[];this.g=d||""}var wa="//fonts.googleapis.com/css";function xa(a,b){for(var d=b.length,c=0;c<d;c++){var e=b[c].split(":");3==e.length&&a.f.push(e.pop());var f="";2==e.length&&""!=e[1]&&(f=":");a.a.push(e.join(f))}}
+function ya(a){if(0==a.a.length)throw Error("No fonts to load!");if(-1!=a.c.indexOf("kit="))return a.c;for(var b=a.a.length,d=[],c=0;c<b;c++)d.push(a.a[c].replace(/ /g,"+"));b=a.c+"?family="+d.join("%7C");0<a.f.length&&(b+="&subset="+a.f.join(","));0<a.g.length&&(b+="&text="+encodeURIComponent(a.g));return b};function za(a){this.f=a;this.a=[];this.c={}}
+var Aa={latin:"BESbswy",cyrillic:"\u0439\u044f\u0416",greek:"\u03b1\u03b2\u03a3",khmer:"\u1780\u1781\u1782",Hanuman:"\u1780\u1781\u1782"},Ba={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},Ca={i:"i",italic:"i",n:"n",normal:"n"},Da=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;
+function Ea(a){for(var b=a.f.length,d=0;d<b;d++){var c=a.f[d].split(":"),e=c[0].replace(/\+/g," "),f=["n4"];if(2<=c.length){var g;var k=c[1];g=[];if(k)for(var k=k.split(","),h=k.length,m=0;m<h;m++){var l;l=k[m];if(l.match(/^[\w-]+$/)){var n=Da.exec(l.toLowerCase());if(null==n)l="";else{l=n[2];l=null==l||""==l?"n":Ca[l];n=n[1];if(null==n||""==n)n="4";else var r=Ba[n],n=r?r:isNaN(n)?"4":n.substr(0,1);l=[l,n].join("")}}else l="";l&&g.push(l)}0<g.length&&(f=g);3==c.length&&(c=c[2],g=[],c=c?c.split(","):
+g,0<c.length&&(c=Aa[c[0]])&&(a.c[e]=c))}a.c[e]||(c=Aa[e])&&(a.c[e]=c);for(c=0;c<f.length;c+=1)a.a.push(new H(e,f[c]))}};function Fa(a,b){this.c=a;this.a=b}var Ga={Arimo:!0,Cousine:!0,Tinos:!0};Fa.prototype.load=function(a){var b=new C,d=this.c,c=new va(this.a.api,z(d),this.a.text),e=this.a.families;xa(c,e);var f=new za(e);Ea(f);A(d,ya(c),D(b));F(b,function(){a(f.a,f.c,Ga)})};function Ha(a,b){this.c=a;this.a=b}Ha.prototype.load=function(a){var b=this.a.id,d=this.c.m;b?B(this.c,(this.a.api||"https://use.typekit.net")+"/"+b+".js",function(b){if(b)a([]);else if(d.Typekit&&d.Typekit.config&&d.Typekit.config.fn){b=d.Typekit.config.fn;for(var e=[],f=0;f<b.length;f+=2)for(var g=b[f],k=b[f+1],h=0;h<k.length;h++)e.push(new H(g,k[h]));try{d.Typekit.load({events:!1,classes:!1,async:!0})}catch(m){}a(e)}},2E3):a([])};function Ia(a,b){this.c=a;this.f=b;this.a=[]}Ia.prototype.load=function(a){var b=this.f.id,d=this.c.m,c=this;b?(d.__webfontfontdeckmodule__||(d.__webfontfontdeckmodule__={}),d.__webfontfontdeckmodule__[b]=function(b,d){for(var g=0,k=d.fonts.length;g<k;++g){var h=d.fonts[g];c.a.push(new H(h.name,ga("font-weight:"+h.weight+";font-style:"+h.style)))}a(c.a)},B(this.c,z(this.c)+(this.f.api||"//f.fontdeck.com/s/css/js/")+ea(this.c)+"/"+b+".js",function(b){b&&a([])})):a([])};var Y=new pa(window);Y.a.c.custom=function(a,b){return new ua(b,a)};Y.a.c.fontdeck=function(a,b){return new Ia(b,a)};Y.a.c.monotype=function(a,b){return new sa(b,a)};Y.a.c.typekit=function(a,b){return new Ha(b,a)};Y.a.c.google=function(a,b){return new Fa(b,a)};var Z={load:p(Y.load,Y)};"function"===typeof define&&define.amd?define(function(){return Z}):"undefined"!==typeof module&&module.exports?module.exports=Z:(window.WebFont=Z,window.WebFontConfig&&Y.load(window.WebFontConfig));}());
diff --git a/gulpfile.js b/gulpfile.js
index 7e21779a..7aacd8b5 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -1 +1,5 @@
-require('./.core/gulpfile');
+// *********** DO NOT MANUALLY EDIT THIS FILE ************
+//   THIS FILE IS GENERATED VIA THE ARCLI UPDATE COMMAND
+// *******************************************************
+
+require('@atomic-reactor/reactium-core/gulpfile');
diff --git a/docs/deployment.md b/markdown/deployment.md
similarity index 100%
rename from docs/deployment.md
rename to markdown/deployment.md
diff --git a/docs/design-system.md b/markdown/design-system.md
similarity index 96%
rename from docs/design-system.md
rename to markdown/design-system.md
index 59cf396d..e9dcaa3d 100644
--- a/docs/design-system.md
+++ b/markdown/design-system.md
@@ -39,7 +39,7 @@ Pages are specific instances of templates. Here, placeholder content is replaced
 
 # Creating Elements
 
-Using the [Atomic Reactor CLI](https://www.npmjs.com/package/atomic-reactor-cli) you can easily add new elements and menu items to the Design System.
+Using the [Atomic Reactor CLI](https://www.npmjs.com/package/@atomic-reactor/cli) you can easily add new elements and menu items to the Design System.
 
 ```
 $ arcli element create
diff --git a/docs/development-guide.md b/markdown/development-guide.md
similarity index 98%
rename from docs/development-guide.md
rename to markdown/development-guide.md
index 7e15c7de..49224703 100644
--- a/docs/development-guide.md
+++ b/markdown/development-guide.md
@@ -8,7 +8,7 @@ Before reading the rest of this guide, grab the [Atomic Reactor CLI](https://git
 No, seriously... go get the CLI:
 
 ```
-$ npm i -g atomic-reactor-cli
+$ npm i -g @atomic-reactor/cli
 ```
 
 ## Zero Day Install
@@ -99,10 +99,7 @@ const mapDispatchToProps = (dispatch, props) => ({
     },
 });
 
-export default connect(
-    mapStateToProps,
-    mapDispatchToProps,
-)(Test);
+export default connect(mapStateToProps, mapDispatchToProps)(Test);
 ```
 
 Test.js:
@@ -453,7 +450,7 @@ export default {
 1.  Before creating a component, grab the [Atomic Reactor CLI](https://github.com/Atomic-Reactor/CLI):
 
 ```
-$ npm i -g atomic-reactor-cli
+$ npm i -g @atomic-reactor/cli
 ```
 
 2.  Change directory into your project:
@@ -592,22 +589,6 @@ Deploy the entire project directory if you wish to run the node/express server t
 
 By default, running the server with `npm start` will start the server on port 3030 in front-end rendering mode.
 
-## Server-Side Rendering
-
-To bind port 80, and use server-side rendering, start the application like so (for linux/mac):
-
-```
-SSR_MODE=on APP_PORT=80 npm start
-```
-
-For Windows:
-
-```
-set SSR_MODE=on
-set APP_PORT=80
-npm start
-```
-
 ## The Build Process
 
 ![](https://image.ibb.co/jeddNw/reactium_build_process_2.png)
diff --git a/docs/electron.md b/markdown/electron.md
similarity index 98%
rename from docs/electron.md
rename to markdown/electron.md
index b6b87559..4ad8572c 100644
--- a/docs/electron.md
+++ b/markdown/electron.md
@@ -7,7 +7,7 @@ Out of the box, Reactium comes with the ability to build a basic Electron app.
 Install the necessary tools:
 
 ```
-$ npm install -g atomic-reactor-cli
+$ npm install -g @atomic-reactor/cli
 $ npm install -g electron
 $ npm install -g gulp
 ```
@@ -42,7 +42,6 @@ module.exports = config => {
 
 > _You can apply custom Electron configuration in the `config.electron.config` object._
 
-
 #### Build the App
 
 From the project root run the following:
@@ -55,7 +54,6 @@ You should now have a directory in the project root called `build-electron` _(if
 
 > _**Note:**_ If a file is protected or generated via the `electron-build` command, it will have a loud header telling you so :)
 
-
 #### App Icon
 
 The app icon can be changed by supplying a new `~/build-electron/resources/icon.png` and `~/build-electron/resources/icon.ico`.
diff --git a/docs/override-extend-core.md b/markdown/override-extend-core.md
similarity index 87%
rename from docs/override-extend-core.md
rename to markdown/override-extend-core.md
index fd1924e1..0de41ef0 100644
--- a/docs/override-extend-core.md
+++ b/markdown/override-extend-core.md
@@ -155,14 +155,13 @@ if (typeof window !== 'undefined') {
 
 ### Environment Variables
 
-| Variable (Where) | Values (How)                                                                                                           | Purpose (What)                                                                                                                              | Reason (Why)                                                                                                         |
-| ---------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
-| SSR_MODE         | Unset (default), OFF, ON                                                                                               | Unset or OFF to serve the React application in front-end only mode. ON to attempt to pre-render the application when serving the React app. | Increase perceptual performance (TTFR), or SEO related paranoia.                                                     |
-| PORT             | Unset (default) or Any TCP port appropriate for HTTP protocol (default to 3030 or port.proxy in ./core/gulp.config.js) | For environments where running application is specified by PORT var.                                                                        | Some environments automatically set this value for HTTP                                                              |
-| APP_PORT         | Unset (default) or Any TCP port appropriate for HTTP protocol (default to 3030 or port.proxy in ./core/gulp.config.js) | For environments where running application is specified by APP_PORT var.                                                                    | Some environments automatically set this value for HTTP (such as IBM Bluemix)                                        |
-| PORT_VAR         | Unset (default) or the string specifying the environment variable where the HTTP port can be found                     | Tells express where to look in environment variable to get the HTTP port setting.                                                           | For environments where neither PORT nor APP_PORT can be set, but other custom variables can be.                      |
-| DEBUG            | Unset (default), OFF, ON. Unset or OFF to suppress logging to STDOUT. ON to enable logging.                            | Enable or Disable logging                                                                                                                   | Logging can be helpful for troubleshooting server-side rendering issues. SSR logging can drive front-end devs batty. |
-| PUBLIC_DIRECTORY | Unset (default) or full-path to public assets directory (default ./public)                                             | Change the directory that express will serve static assets from (static middleware)                                                         | You have changed the build process to output static assets (js/css/images, etc)                                      |
+| Variable (Where) | Values (How)                                                                                                           | Purpose (What)                                                                      | Reason (Why)                                                                                                         |
+| ---------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| PORT             | Unset (default) or Any TCP port appropriate for HTTP protocol (default to 3030 or port.proxy in ./core/gulp.config.js) | For environments where running application is specified by PORT var.                | Some environments automatically set this value for HTTP                                                              |
+| APP_PORT         | Unset (default) or Any TCP port appropriate for HTTP protocol (default to 3030 or port.proxy in ./core/gulp.config.js) | For environments where running application is specified by APP_PORT var.            | Some environments automatically set this value for HTTP (such as IBM Bluemix)                                        |
+| PORT_VAR         | Unset (default) or the string specifying the environment variable where the HTTP port can be found                     | Tells express where to look in environment variable to get the HTTP port setting.   | For environments where neither PORT nor APP_PORT can be set, but other custom variables can be.                      |
+| DEBUG            | Unset (default), OFF, ON. Unset or OFF to suppress logging to STDOUT. ON to enable logging.                            | Enable or Disable logging                                                           | Logging can be helpful for troubleshooting server-side rendering issues. SSR logging can drive front-end devs batty. |
+| PUBLIC_DIRECTORY | Unset (default) or full-path to public assets directory (default ./public)                                             | Change the directory that express will serve static assets from (static middleware) | You have changed the build process to output static assets (js/css/images, etc)                                      |
 
 ## Front-End Redux Middleware / Store Enhancers
 
diff --git a/docs/plugins.md b/markdown/plugins.md
similarity index 55%
rename from docs/plugins.md
rename to markdown/plugins.md
index 27510cd0..e550581b 100644
--- a/docs/plugins.md
+++ b/markdown/plugins.md
@@ -1,9 +1,29 @@
 # Plugin API
 
-Reactium comes with the built-in concept of **plugins.** Plugins are React components
-that will be rendered automatically through-out your application when you place plugins **zones**.
+Reactium has a number of features that make it a plugable React application framework. Instead of monolithically composed applications
+that can only be maintained by one group of developers, with Reactium, it is possible to compose your
+application to be extensible with plugin modules. The key features of the Reactium Plugin API provided by the Reactium SDK:
 
-Plugins are a helpful pattern for when you do not want to hard-code the composition of your component, often because you can't or shouldn't update the parent component manually, or you want to provide dynamic composition (not just data).
+-   Asynchronous Hooks to bind into your application
+-   Dynamic Component Rendering Zones
+-   Front-end runtime caching for improved data loading
+-   Front-end `Pulse` task runner
+-   Component registration for easy externalization
+-   Imperative handle registration for easy communication between components
+-   Helpful SDK features for interacting with the plugable node/express back-end partner of Reactium, `Actinium`.
+-   Internal or UMD plugin module development workflow and registration
+
+Many of the [SDK's core features](https://atomic-reactor.github.io/reactium-sdk-core/) can be even be used on non-Reactium projects.
+
+## Component Rendering Zones
+
+Reactium comes with the built-in concept of **zones.** Component zones are just
+React components themselves. Component rendering zones are used to dynamically gather components
+at runtime designated at that zone, and render them as children.
+
+Zones are a helpful pattern for when you do not want to hard-code the composition of your application, often because you can't or shouldn't update each large component manually, or you want to provide dynamic composition (not just data).
+
+### Scenario
 
 For example, I have an admin UI that specifies a generic layout with a **navigation** zone, a **footer** zone, a content **zone**, and a **sidebar** zone.
 
@@ -97,36 +117,36 @@ export default class Template extends React {
 
 There are patterns to "clean" this up. We can extract these zones into new components, create separate templates, but somewhere there is going to be a bunch of imperative code or I'm going to have to repeat myself.
 
-## Plugin Zones
+### Zone Solution
 
-Enter Reactium **Plugins**. This is where Reactium plugin zones can help make your composition more dynamic, and let you accomplish something like this in a more declarative way.
+Enter Reactium **Zone**. This is where Reactium plugin zones can help make your composition more dynamic, and let you accomplish something like this in a more declarative way.
 
-Let's start by defining plugin zones with the built-in `<Plugins />` component.
+Let's start by defining plugin zones with the SDK's `<Zone />` component.
 
 ```js
 import React from 'react';
-import { Plugins } from 'reactium-core/components/Plugable';
+import { Zone } from 'reactium-core/sdk';
 
 export default class Template extends React {
     render() {
         return (
             <main>
                 <section className='navigation'>
-                    <Plugins zone='navigation' />
+                    <Zone zone='navigation' />
                 </section>
 
                 <section className='content'>
-                    <Plugins zone='content-pre' />
+                    <Zone zone='content-pre' />
                     {this.props.children}
-                    <Plugins zone='content-post' />
+                    <Zone zone='content-post' />
                 </section>
 
                 <aside className='sidebar'>
-                    <Plugins zone='sidebar' />
+                    <Zone zone='sidebar' />
                 </aside>
 
                 <section className='footer'>
-                    <Plugins zone='footer' />
+                    <Zone zone='footer' />
                 </section>
             </main>
         );
@@ -134,7 +154,7 @@ export default class Template extends React {
 }
 ```
 
-Now that we've defined the zones for our layout, let's add our existing `HomeNavigation` component as a plugin to the `navigation` zone.
+Now that we've defined the zones for our layout, let's add our existing `HomeNavigation` component to the `navigation` zone.
 
 Within our `components/HomeNavigation` directory, we will create a **plugin.js** file like so:
 
@@ -149,7 +169,7 @@ export default {
     id: 'home-page-main-navigation',
 
     /**
-     * By default plugins in zone are rendering in ascending order.
+     * By default components in zone are rendering in ascending order.
      * @type {Number}
      */
     order: 0,
@@ -183,134 +203,13 @@ export default {
      * Any additional properties you provide below, will be provided as params to the component when rendered.
      *
      * e.g. Below will be provided to the HomeNavigation, <HomeNavigation pageType="home" />
-     * These can also be used to help sort or filter plugins.
+     * These can also be used to help sort or filter zone components.
      * @type {Mixed}
      */
     pageType: 'home',
 };
 ```
 
-### Advanced Plugins Properties
-
-When you define your `Plugins` zone, you can also optionally provide a `mapper` callback which will be called for each plugin in the zone, a `sort` callback to determine rendering order, and a `filter` callback to disqualify plugins from a zone.
-
-```js
-import React from 'react';
-import { Plugins } from 'reactium-core/components/Plugable';
-
-export default class Template extends React {
-    render() {
-        return (
-            <main>
-                <section className='navigation'>
-                    <Plugins
-                        zone='navigation'
-                        mapper={plugin => {
-                            // use mapper to augment plugins in zone
-                            return {
-                                ...plugin,
-                                additionalProp: 'value',
-                            };
-                        }}
-                        sort={(pluginA, pluginB) => {
-                            // reverse order
-                            return pluginB.order - pluginA.order;
-                        }}
-                        filter={plugin => {
-                            // filter out plugins that aren't for this page type
-                            return plugin.pageType === this.props.pageType;
-                        }}
-                    />
-                </section>
-                {
-                    // snip to shorten example
-                }
-            </main>
-        );
-    }
-}
-
-Template.defaultProps = {
-    pageType: 'home',
-};
-```
-
-Now that we have a filter on the plugin zone, plugins will only appear when those conditions are met.
-
-### Redux Driven Plugins
-
-If you wish to use application state to determine what plugins are loaded in a zone, you can dispatch core actions to dynamically add / remove / update plugins in a zone.
-
-```js
-deps().actions.Plugable.addPlugin(plugin);
-```
-
-> Add a dynamic redux plugin
-
-```js
-deps().actions.Plugable.updatePlugin(plugin);
-```
-
-> Update a redux plugin (must have same id)
-
-```js
-deps().actions.Plugable.removePlugin(pluginId);
-```
-
-> Remove a redux plugin by id
-
-```js
-import deps from 'dependencies';
-
-export default {
-    // on loading thunk, dynamically add this
-    // components/navs/SecondaryNav to the navigation zone, having it appear only on the home pageType
-    // (see custom filter above)
-    load: () => dispatch => {
-        dispatch(deps().actions.Plugable.addPlugin({
-            id: 'my-dynamic-plugin',
-            order: -1000,
-            component: 'SecondaryNav',
-            paths: ['navs']
-            zone: ['navigation'],
-            pageType: 'home',
-        }))
-    };
-};
-```
-
-> Some actions.js file
-
-Imagine the possibilities here, you could load the payload above from a REST service. Imagine the navs were loaded by calling an api endpoint `/api/navs`:
-
-```js
-import deps from 'dependencies';
-import api from 'appdir/api';
-
-export default {
-    load: () => dispatch => {
-        return api.get('/api/navs')
-            .then(({data: plugins}) => {
-                plugins.forEach(plugin => dispatch(deps().actions.Plugable.addPlugin(plugin)))
-            })
-            .catch(error => {
-                const errorId = `error-${new Date()}`;
-                dispatch(deps().actions.Plugable.addPlugin({
-                    id: errorId,
-                    component: 'ErrorMessage',
-                    zone: 'errors',
-                    error,
-                }))
-
-                // clear error after 2 seconds
-                setTimeout(() => {
-                    dispatch(deps().actions.Plugable.removePlugin(errorId));
-                }, 2000)
-            })
-    };
-};
-```
-
 ### Command Line Help
 
 After you've defined the zones for your layout, you can use the CLI to scan those zones using the command:
@@ -331,10 +230,30 @@ arcli zones add -i "sidebar" -d "Sidebar zone in template"
 arcli zones add -i "content-pre" -d "Footer zone in template"
 ```
 
-> (Optional) Again, this just helps speed up your workflow with the CLI when creating new plugins.
+> (Optional) Again, this just helps speed up your workflow with the CLI when creating new zone components.
 
-For existing components, you can add the `plugin.js` file to register it as a plugin, by using:
+For existing components, you can add the `plugin.js` file to register it to a component `Zone`, by using:
 
 ```sh
-arcli plugins
+arcli plugin component
 ```
+
+## Hooks
+
+// TODO: Write Hooks Docs
+
+## Component Registration
+
+// TODO: Write Component Registration Docs
+
+## Handles
+
+// TODO: Write Handles Docs
+
+## Plugin Modules
+
+// TODO: Write Plugin Modules Docs
+
+## Actinium Extensions
+
+// TODO: Write Actinium Extensions Docs
diff --git a/markdown/plugins/modules.md b/markdown/plugins/modules.md
new file mode 100644
index 00000000..7ba5703b
--- /dev/null
+++ b/markdown/plugins/modules.md
@@ -0,0 +1,247 @@
+# Plugin Module
+
+Plugin modules are extensions to Reactium using the Reactium SDK, built as one or more stand-alone UMD (Universal Module Definition) javascript modules to be delivered to the Reactium CMS admin automatically on bootstrap.
+
+The primary feature of a plugin module is that it will use the Reactium SDK
+async `Reactium.Plugin.register()` to register itself when the module loads in the browser.
+
+On bootstrap of the front-end Reactium framework, if this module is loaded in
+the base html page immediately after `main.js` and `vendors~main.js` bundles, the
+plugin will register itself with Reactium at plugin initialization.
+
+At this point, you may register one or more hooks, provide Redux reducers / middleware, register React components, and more.
+
+## Create
+
+Create a Reactium plugin module with the command:
+
+```bash
+arcli plugin module
+```
+
+When prompted, provide the name of your module.
+
+e.g. "Customer" module will yield boilerplate files:
+
+```
+src/app/components/plugin-src/customer
+├── assets
+│   └── style
+│       └── customer-plugin.scss # src of your modules styles
+├── index.js            # most of your code goes here
+├── reactium-hooks.js   # local development binding
+│                       # (uncommented for dev)
+│
+├── umd-config.json     # configuration used to generate your module
+└── umd.js              # the entry point for generating your module
+```
+
+> Scaffold directory structure
+
+## Development
+
+When in development, uncomment the contents of your `reactium-hooks.js` like so:
+
+```js
+import Reactium from 'reactium-core/sdk';
+Reactium.Hook.register(
+    'plugin-dependencies',
+    async () => {
+        Reactium.Plugin.unregister('customer');
+
+        // make your edits to index.js, not here
+        require('./index');
+    },
+    Reactium.Enums.priority.highest,
+);
+```
+
+This will unregister the current version of the plugin if present, and allow your local code to override.
+
+## Ejecting
+
+Ejecting the plugin is the process used to build your UMD module javascript and compile your css asset from sass (your plugin's front-end assets), and "publish" the production ready module assets to the back-end API module. Here these assets can be registered for delivery
+through the API.
+
+For example:
+
+In the CMS backend, there may be a Customer plugin directory under:
+`src/app/customer-plugin`
+
+If this is the first time you have ejected the module, make sure the target directory exists and run:
+
+```bash
+$ arcli plugin eject
+
+[ARCLI] > Choose plugin:
+  1: customer
+[ARCLI] > Target actinium plugin directory: cwd/../actinium/src/app/customer-plugin
+[ARCLI] > This path does not have a label, provide one? (Y/N): y
+[ARCLI] > Label for target directory: customer-plugin
+[ARCLI] > No assets appear for plugin customer. Run build? (Y/N): y
+```
+
+Actinium plugin targets are added to your `~/.arcli/config.json`, and will be offered on subsequent ejections.
+
+> ~/.arcli/config.json
+
+```
+{
+  "actinium-plugins": {
+    "customer-plugin": "/path/to/actinium/src/app/customer-plugin"
+  }
+}
+```
+
+After running the above ejection, the target directory of compiled js and css will look like so:
+
+> Backend module target
+
+```
+actinium/src/app/customer-plugin
+└── plugin-assets
+    ├── customer-plugin.css
+    └── customer.js
+```
+
+## Registering Module
+
+To register your module assets in Actinium, in your node/express plugin module, you can register these assets to make them available for delivery to the browser through
+the API.
+
+> Backend customer-plugin.js module
+
+```js
+const PLUGIN = {
+    ID: 'Customer',
+    meta: {},
+};
+
+Actinium.Plugin.register(PLUGIN);
+
+// you can also add a logo to appear in plugin manager
+Actinium.Plugin.addLogo(
+    PLUGIN.ID,
+    path.resolve(__dirname, 'plugin-assets/customer.svg'),
+);
+
+Actinium.Plugin.addScript(
+    PLUGIN.ID,
+    path.resolve(__dirname, 'plugin-assets/customer.js'),
+);
+
+Actinium.Plugin.addStylesheet(
+    PLUGIN.ID,
+    path.resolve(__dirname, 'plugin-assets/customer-plugin.css'),
+);
+```
+
+## Portable CSS Assets
+
+If your plugin module requires images or fonts, you generate a sass partial containing encoded inline assets in a SASS map data structure, by creating a `plugin-assets.json` with keys and relative paths to assets.
+
+In the same directory, Reactium will automatically create a
+`_plugin-assets.scss` partial containing a map of the encoded inline assets.
+
+```
+src/app/components/plugin-src/customer
+├── assets
+│   ├── images
+│   │   └── bg-image.jpg # the asset I wish to port
+│   └── style
+│       ├── _plugin-assets.scss
+│       ├── customer-plugin.scss
+│       └── plugin-assets.json # where I wish _plugin-assets.scss to exist
+├── index.js
+├── reactium-hooks.js
+├── umd-config.json
+└── umd.js
+```
+
+> Example plugin-assets.json
+
+```json
+{
+    "bg-image": "../images/bg-image.jpg"
+}
+```
+
+> Resulting partial \_plugin-assets.scss
+
+```scss
+// Generated Data URLs from plugin-assets.json
+$assets: (
+    'bg-image':
+        'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4gxYSUNDX1BST0...',
+);
+```
+
+Do not modify the partial directly.
+
+Import inline assets into your plugin module's scss file:
+
+> custom-plugin.scss
+
+```scss
+@import './plugin-assets';
+
+body {
+    background: url(#{map-get($assets, bg-image)});
+}
+```
+
+In this way, you will not need to worry about the pathing
+on your css assets packaged with your module, for example if the css file is published to a CDN.
+
+## Javascript Dependencies
+
+Some framework dependencies are available for import into your plugin module by default, and will be made available to your module from the framework automatically.
+
+A complete and current manifest of these import externals are available in `.core/reactium-config.js` in the `defaultLibraryExternals` constant. To add external dependency configuration in your application to core, implement a `manifest.config.override.js` file in root of your project and modify the `pluginExternals` property:
+
+> manifest.config.override.js
+
+```js
+module.exports = manifest => {
+    // to add react-spring as a dependency
+    // npm install --save react-spring
+    manifest.pluginExternals['react-spring'] = {
+        externalName: 'react-spring',
+        requirePath: 'react-spring',
+    };
+
+    return manifest;
+};
+```
+
+You can also customize the webpack configuration used to generate your plugin module for advanced users.
+
+To do so, implement `umd.webpack.override.js` in the root of your project to provide customized configuration per module. Some
+simple setting can be conveniently changed in the `umd-config.js` of your module.
+
+By default, dependencies that are not externalized will be included in your UMD module bundle (may be inefficient / duplicate).
+
+> umd.webpack.override.js
+
+```js
+// umdConfig {Object} Contains configuration for each module, providing enough context
+// for your webpack config modifications.
+// - entry - entry path used for webpack configuration for this module
+// - libraryName - can be changed earlier in umd-config.json adjacent to umd.js
+// - outputPath - can be changed earlier in umd-config.json (libraryName by default)
+// - outputFile - can be changed earlier in umd-config.json (${libraryName}.js by default)
+// - externals - external dependency patterns used to generate webpack config
+//               can be changed in umd-config.json (externalName properties from manifest config pluginExternals)
+// - globalObject - where externals can be found, default 'window'. can be changed in umd-config.json ('this' for service workers)
+// - babelPresetEnv - true to use env-preset to include core-js polyfills. can be changed in umd-config.json (true by default)
+//
+// webpackConfig {Object} return this object as the webpack configuration for the module
+module.exports = (umdConfig, webpackConfig) => {
+    if (umdConfig.libraryName === 'some-library-name') {
+        // modify or replace webpackConfig here
+        return webpackConfig;
+    }
+
+    return webpackConfig;
+};
+```
diff --git a/docs/static-files.md b/markdown/static-files.md
similarity index 100%
rename from docs/static-files.md
rename to markdown/static-files.md
diff --git a/docs/static-site.md b/markdown/static-site.md
similarity index 86%
rename from docs/static-site.md
rename to markdown/static-site.md
index 0bcfff84..e92c403c 100644
--- a/docs/static-site.md
+++ b/markdown/static-site.md
@@ -6,15 +6,14 @@ You can generate a static site by ensuring your project has a `~/public/index-st
 <!DOCTYPE html>
 <html>
     <head>
-        <link rel="stylesheet" href="./assets/style/style.css">
+        <link rel="stylesheet" href="./assets/style/style.css" />
     </head>
     <body>
         <Component type="DevTools"></Component>
         <div id="router"></div>
 
         <script>
-            window.ssr        = false;
-            window.restAPI    = '/api';
+            window.restAPI = '/api';
             window.parseAppId = 'Actinium';
         </script>
         <script src="./assets/js/vendors.js"></script>
diff --git a/package-lock.json b/package-lock.json
index 1382dc3e..c5fb5560 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,18629 +1,21164 @@
 {
-    "name": "reactium",
-    "version": "3.0.20",
-    "lockfileVersion": 1,
+    "name": "reactium-core-project",
+    "version": "6.1.0",
+    "lockfileVersion": 3,
     "requires": true,
-    "dependencies": {
-        "@atomic-reactor/gulp-watch": {
-            "version": "5.0.1-patched",
-            "resolved": "https://registry.npmjs.org/@atomic-reactor/gulp-watch/-/gulp-watch-5.0.1-patched.tgz",
-            "integrity": "sha512-4BwI5t300zu63r8rUc8k4qyta9tAD321dXchKzjiaP+tUfKfCoHM4EazYGueh6DjazuVAywKJjTQ0hVuQ9DZgg==",
-            "dev": true,
-            "requires": {
-                "ansi-colors": "4.1.1",
-                "anymatch": "^3.0.3",
-                "chokidar": "^2.0.0",
-                "fancy-log": "1.3.3",
-                "glob-parent": "^5.0.0",
-                "normalize-path": "^3.0.0",
-                "object-assign": "^4.1.1",
-                "path-is-absolute": "^2.0.0",
-                "plugin-error": "1.0.1",
-                "readable-stream": "^3.4.0",
-                "vinyl": "^2.2.0",
-                "vinyl-file": "^3.0.0"
-            },
+    "packages": {
+        "": {
+            "name": "reactium-core-project",
+            "version": "6.1.0",
+            "license": "MIT",
+            "workspaces": [
+                "reactium_modules/*",
+                "reactium_modules/@*/*"
+            ],
             "dependencies": {
-                "anymatch": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.0.tgz",
-                    "integrity": "sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA==",
-                    "dev": true,
-                    "requires": {
-                        "normalize-path": "^3.0.0",
-                        "picomatch": "^2.0.4"
-                    }
-                },
-                "glob-parent": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
-                    "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
-                    "dev": true,
-                    "requires": {
-                        "is-glob": "^4.0.1"
-                    }
-                },
-                "path-is-absolute": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-2.0.0.tgz",
-                    "integrity": "sha512-ajROpjq1SLxJZsgSVCcVIt+ZebVH+PwJtPnVESjfg6JKwJGwAgHRC3zIcjvI0LnecjIHCJhtfNZ/Y/RregqyXg==",
-                    "dev": true
-                },
-                "readable-stream": {
-                    "version": "3.4.0",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
-                    "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "^2.0.3",
-                        "string_decoder": "^1.1.1",
-                        "util-deprecate": "^1.0.1"
-                    }
-                }
+                "react": "^18.2.0"
+            },
+            "engines": {
+                "node": "18.x",
+                "npm": "9.x"
             }
         },
-        "@babel/cli": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.6.2.tgz",
-            "integrity": "sha512-JDZ+T/br9pPfT2lmAMJypJDTTTHM9ePD/ED10TRjRzJVdEVy+JB3iRlhzYmTt5YkNgHvxWGlUVnLtdv6ruiDrQ==",
-            "requires": {
-                "chokidar": "^2.1.8",
-                "commander": "^2.8.1",
-                "convert-source-map": "^1.1.0",
-                "fs-readdir-recursive": "^1.1.0",
-                "glob": "^7.0.0",
-                "lodash": "^4.17.13",
-                "mkdirp": "^0.5.1",
-                "output-file-sync": "^2.0.0",
-                "slash": "^2.0.0",
-                "source-map": "^0.5.0"
+        "node_modules/@ampproject/remapping": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+            "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+            "dependencies": {
+                "@jridgewell/gen-mapping": "^0.3.5",
+                "@jridgewell/trace-mapping": "^0.3.24"
+            },
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
-        "@babel/code-frame": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
-            "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
-            "dev": true,
-            "requires": {
-                "@babel/highlight": "^7.0.0"
-            }
+        "node_modules/@atomic-reactor/dirname": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/@atomic-reactor/dirname/-/dirname-1.0.7.tgz",
+            "integrity": "sha512-jbhcrpFN1HqE35NVntOc/Gu0eSD8snH5u/Qk1tZ5z9NQPGu7TiG0VvJWi8aaawMn5iZXkhvOUkgQB7rBhEYoTw=="
         },
-        "@babel/core": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.2.tgz",
-            "integrity": "sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ==",
-            "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.5.5",
-                "@babel/generator": "^7.6.2",
-                "@babel/helpers": "^7.6.2",
-                "@babel/parser": "^7.6.2",
-                "@babel/template": "^7.6.0",
-                "@babel/traverse": "^7.6.2",
-                "@babel/types": "^7.6.0",
-                "convert-source-map": "^1.1.0",
-                "debug": "^4.1.0",
-                "json5": "^2.1.0",
-                "lodash": "^4.17.13",
-                "resolve": "^1.3.2",
-                "semver": "^5.4.1",
-                "source-map": "^0.5.0"
-            },
+        "node_modules/@atomic-reactor/gulp-run": {
+            "version": "1.8.0",
+            "resolved": "https://registry.npmjs.org/@atomic-reactor/gulp-run/-/gulp-run-1.8.0.tgz",
+            "integrity": "sha512-1j51Lq3nJsl0ch30qMzGt5rAfvDqzyRSwylseWARX3qh8pVJEbtEo08jR4x8daj13xwTmuWfkkkXFLiZ9EQgGQ==",
+            "dev": true,
             "dependencies": {
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "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
-                },
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
+                "chalk": "^2.4.2",
+                "lodash.defaults": "^4.0.1",
+                "lodash.template": "^4.0.2",
+                "vinyl": "^0.4.6"
             }
         },
-        "@babel/generator": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.2.tgz",
-            "integrity": "sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==",
+        "node_modules/@atomic-reactor/gulp-run/node_modules/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": {
-                "@babel/types": "^7.6.0",
-                "jsesc": "^2.5.1",
-                "lodash": "^4.17.13",
-                "source-map": "^0.5.0"
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/helper-annotate-as-pure": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
-            "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+        "node_modules/@atomic-reactor/gulp-run/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.0.0"
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/helper-builder-binary-assignment-operator-visitor": {
-            "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
-            "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+        "node_modules/@atomic-reactor/gulp-run/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
             "dev": true,
-            "requires": {
-                "@babel/helper-explode-assignable-expression": "^7.1.0",
-                "@babel/types": "^7.0.0"
+            "dependencies": {
+                "color-name": "1.1.3"
             }
         },
-        "@babel/helper-builder-react-jsx": {
-            "version": "7.3.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz",
-            "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.3.0",
-                "esutils": "^2.0.0"
-            }
+        "node_modules/@atomic-reactor/gulp-run/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+            "dev": true
         },
-        "@babel/helper-call-delegate": {
-            "version": "7.4.4",
-            "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
-            "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
+        "node_modules/@atomic-reactor/gulp-run/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
             "dev": true,
-            "requires": {
-                "@babel/helper-hoist-variables": "^7.4.4",
-                "@babel/traverse": "^7.4.4",
-                "@babel/types": "^7.4.4"
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/helper-create-class-features-plugin": {
-            "version": "7.6.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz",
-            "integrity": "sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng==",
+        "node_modules/@atomic-reactor/gulp-run/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
             "dev": true,
-            "requires": {
-                "@babel/helper-function-name": "^7.1.0",
-                "@babel/helper-member-expression-to-functions": "^7.5.5",
-                "@babel/helper-optimise-call-expression": "^7.0.0",
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-replace-supers": "^7.5.5",
-                "@babel/helper-split-export-declaration": "^7.4.4"
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/helper-define-map": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz",
-            "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==",
+        "node_modules/@atomic-reactor/gulp-watch": {
+            "version": "5.0.2",
+            "resolved": "https://registry.npmjs.org/@atomic-reactor/gulp-watch/-/gulp-watch-5.0.2.tgz",
+            "integrity": "sha512-fNE8c6WpcZK8JOCIGim4By+B79Y2NapcVv5tASXowTsdo671GpIDnT1YRjqGtMDiv6ozTSj/zAWApCM+L52h9w==",
             "dev": true,
-            "requires": {
-                "@babel/helper-function-name": "^7.1.0",
-                "@babel/types": "^7.5.5",
-                "lodash": "^4.17.13"
+            "dependencies": {
+                "ansi-colors": "4.1.1",
+                "anymatch": "^3.0.3",
+                "chokidar": "^2.0.0",
+                "fancy-log": "1.3.3",
+                "glob-parent": "^5.0.0",
+                "normalize-path": "^3.0.0",
+                "object-assign": "^4.1.1",
+                "path-is-absolute": "^2.0.0",
+                "plugin-error": "1.0.1",
+                "readable-stream": "^3.4.0",
+                "vinyl": "^2.2.0",
+                "vinyl-file": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10.16.0",
+                "npm": ">=6.9.0"
             }
         },
-        "@babel/helper-explode-assignable-expression": {
-            "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
-            "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+        "node_modules/@atomic-reactor/gulp-watch/node_modules/clone": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+            "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
             "dev": true,
-            "requires": {
-                "@babel/traverse": "^7.1.0",
-                "@babel/types": "^7.0.0"
+            "engines": {
+                "node": ">=0.8"
             }
         },
-        "@babel/helper-function-name": {
-            "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
-            "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-get-function-arity": "^7.0.0",
-                "@babel/template": "^7.1.0",
-                "@babel/types": "^7.0.0"
-            }
+        "node_modules/@atomic-reactor/gulp-watch/node_modules/clone-stats": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+            "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
+            "dev": true
         },
-        "@babel/helper-get-function-arity": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
-            "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+        "node_modules/@atomic-reactor/gulp-watch/node_modules/replace-ext": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+            "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.0.0"
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "@babel/helper-hoist-variables": {
-            "version": "7.4.4",
-            "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
-            "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
+        "node_modules/@atomic-reactor/gulp-watch/node_modules/vinyl": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+            "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.4.4"
+            "dependencies": {
+                "clone": "^2.1.1",
+                "clone-buffer": "^1.0.0",
+                "clone-stats": "^1.0.0",
+                "cloneable-readable": "^1.0.0",
+                "remove-trailing-separator": "^1.0.1",
+                "replace-ext": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "@babel/helper-member-expression-to-functions": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz",
-            "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==",
+        "node_modules/@atomic-reactor/node-sass-reactium-importer": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/@atomic-reactor/node-sass-reactium-importer/-/node-sass-reactium-importer-1.0.0.tgz",
+            "integrity": "sha512-HM4cDQaaUhPC7de4tBhLH1eEGw62lu8wvBB274K4bz6VrNm5OXI6N2MnWkKWHQ7ywaZCCtA1fmOkiJ9oic+e9w==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.5.5"
+            "dependencies": {
+                "find-parent-dir": "^0.3.0"
             }
         },
-        "@babel/helper-module-imports": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
-            "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.0.0"
-            }
+        "node_modules/@atomic-reactor/reactium-api": {
+            "resolved": "reactium_modules/@atomic-reactor/reactium-api",
+            "link": true
         },
-        "@babel/helper-module-transforms": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz",
-            "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-imports": "^7.0.0",
-                "@babel/helper-simple-access": "^7.1.0",
-                "@babel/helper-split-export-declaration": "^7.4.4",
-                "@babel/template": "^7.4.4",
-                "@babel/types": "^7.5.5",
-                "lodash": "^4.17.13"
-            }
+        "node_modules/@atomic-reactor/reactium-capability": {
+            "resolved": "reactium_modules/@atomic-reactor/reactium-capability",
+            "link": true
         },
-        "@babel/helper-optimise-call-expression": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
-            "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.0.0"
-            }
+        "node_modules/@atomic-reactor/reactium-core": {
+            "resolved": "reactium_modules/@atomic-reactor/reactium-core",
+            "link": true
         },
-        "@babel/helper-plugin-utils": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
-            "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
-            "dev": true
+        "node_modules/@atomic-reactor/reactium-role": {
+            "resolved": "reactium_modules/@atomic-reactor/reactium-role",
+            "link": true
         },
-        "@babel/helper-regex": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz",
-            "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
-            "dev": true,
-            "requires": {
-                "lodash": "^4.17.13"
+        "node_modules/@atomic-reactor/reactium-sdk-core": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/@atomic-reactor/reactium-sdk-core/-/reactium-sdk-core-2.2.0.tgz",
+            "integrity": "sha512-fXEhb0rV/TJq5jkOTfHGXeyiDeGj4IUzE3k8Bl5VSBdNwOxug2cTW7pgEZOKfi6PlEtA281jh2wsumejuEe7mQ==",
+            "dependencies": {
+                "action-sequence": "^1.1.2",
+                "classnames": "^2.5.1",
+                "dayjs": "^1.11.10",
+                "memory-cache": "^0.2.0",
+                "object-path": "^0.11.8",
+                "shallow-equals": "^1.0.0",
+                "underscore": "^1.13.6",
+                "uuid": "^3.3.3"
             }
         },
-        "@babel/helper-remap-async-to-generator": {
-            "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
-            "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-annotate-as-pure": "^7.0.0",
-                "@babel/helper-wrap-function": "^7.1.0",
-                "@babel/template": "^7.1.0",
-                "@babel/traverse": "^7.1.0",
-                "@babel/types": "^7.0.0"
-            }
+        "node_modules/@atomic-reactor/reactium-setting": {
+            "resolved": "reactium_modules/@atomic-reactor/reactium-setting",
+            "link": true
         },
-        "@babel/helper-replace-supers": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz",
-            "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==",
+        "node_modules/@atomic-reactor/reactium-svg": {
+            "resolved": "reactium_modules/@atomic-reactor/reactium-svg",
+            "link": true
+        },
+        "node_modules/@atomic-reactor/reactium-user": {
+            "resolved": "reactium_modules/@atomic-reactor/reactium-user",
+            "link": true
+        },
+        "node_modules/@atomic-reactor/webpack-po-loader": {
+            "version": "5.0.2",
+            "resolved": "https://registry.npmjs.org/@atomic-reactor/webpack-po-loader/-/webpack-po-loader-5.0.2.tgz",
+            "integrity": "sha512-4BmrXE7jMv1TRedTt54Ij1ZOzkt580zYB+GgcChPp4uviiZbuuAxrs062KPEjvOMnrvG3LPkcLLzo89otxm8yA==",
             "dev": true,
-            "requires": {
-                "@babel/helper-member-expression-to-functions": "^7.5.5",
-                "@babel/helper-optimise-call-expression": "^7.0.0",
-                "@babel/traverse": "^7.5.5",
-                "@babel/types": "^7.5.5"
+            "dependencies": {
+                "po2json": "^0.4.5"
             }
         },
-        "@babel/helper-simple-access": {
-            "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
-            "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
-            "dev": true,
-            "requires": {
-                "@babel/template": "^7.1.0",
-                "@babel/types": "^7.0.0"
+        "node_modules/@babel/cli": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.24.6.tgz",
+            "integrity": "sha512-Sm/YhG/0REw9SKByFHDf4hkk7PYsjcsOyZgHGz1nvab4tUTQ9N4XVv+ykK0Y+VCJ3OshA/7EDyxnwCd8NEP/mQ==",
+            "dependencies": {
+                "@jridgewell/trace-mapping": "^0.3.25",
+                "commander": "^6.2.0",
+                "convert-source-map": "^2.0.0",
+                "fs-readdir-recursive": "^1.1.0",
+                "glob": "^7.2.0",
+                "make-dir": "^2.1.0",
+                "slash": "^2.0.0"
+            },
+            "bin": {
+                "babel": "bin/babel.js",
+                "babel-external-helpers": "bin/babel-external-helpers.js"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "optionalDependencies": {
+                "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
+                "chokidar": "^3.4.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/helper-split-export-declaration": {
-            "version": "7.4.4",
-            "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
-            "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.4.4"
+        "node_modules/@babel/cli/node_modules/binary-extensions": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+            "optional": true,
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "@babel/helper-wrap-function": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
-            "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-function-name": "^7.1.0",
-                "@babel/template": "^7.1.0",
-                "@babel/traverse": "^7.1.0",
-                "@babel/types": "^7.2.0"
+        "node_modules/@babel/cli/node_modules/braces": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+            "optional": true,
+            "dependencies": {
+                "fill-range": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "@babel/helpers": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz",
-            "integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==",
-            "dev": true,
-            "requires": {
-                "@babel/template": "^7.6.0",
-                "@babel/traverse": "^7.6.2",
-                "@babel/types": "^7.6.0"
+        "node_modules/@babel/cli/node_modules/chokidar": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+            "optional": true,
+            "dependencies": {
+                "anymatch": "~3.1.2",
+                "braces": "~3.0.2",
+                "glob-parent": "~5.1.2",
+                "is-binary-path": "~2.1.0",
+                "is-glob": "~4.0.1",
+                "normalize-path": "~3.0.0",
+                "readdirp": "~3.6.0"
+            },
+            "engines": {
+                "node": ">= 8.10.0"
+            },
+            "funding": {
+                "url": "https://paulmillr.com/funding/"
+            },
+            "optionalDependencies": {
+                "fsevents": "~2.3.2"
             }
         },
-        "@babel/highlight": {
-            "version": "7.5.0",
-            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
-            "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
-            "dev": true,
-            "requires": {
-                "chalk": "^2.0.0",
-                "esutils": "^2.0.2",
-                "js-tokens": "^4.0.0"
+        "node_modules/@babel/cli/node_modules/fill-range": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+            "optional": true,
+            "dependencies": {
+                "to-regex-range": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "@babel/node": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.6.2.tgz",
-            "integrity": "sha512-59UxvVtRpVpL5i0KTcw41FqLNPT/Jc9k/48Rq00wfN49lAIQeRKGwZ6xX1FWlCfcIGP+5l4rfZajORvmYkhfGg==",
-            "requires": {
-                "@babel/register": "^7.6.2",
-                "commander": "^2.8.1",
-                "core-js": "^3.2.1",
-                "lodash": "^4.17.13",
-                "node-environment-flags": "^1.0.5",
-                "regenerator-runtime": "^0.13.3",
-                "v8flags": "^3.1.1"
+        "node_modules/@babel/cli/node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
             }
         },
-        "@babel/parser": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.2.tgz",
-            "integrity": "sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==",
-            "dev": true
+        "node_modules/@babel/cli/node_modules/is-binary-path": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+            "optional": true,
+            "dependencies": {
+                "binary-extensions": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "@babel/plugin-proposal-async-generator-functions": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
-            "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-remap-async-to-generator": "^7.1.0",
-                "@babel/plugin-syntax-async-generators": "^7.2.0"
+        "node_modules/@babel/cli/node_modules/is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+            "optional": true,
+            "engines": {
+                "node": ">=0.12.0"
             }
         },
-        "@babel/plugin-proposal-class-properties": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz",
-            "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-create-class-features-plugin": "^7.5.5",
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/cli/node_modules/readdirp": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "optional": true,
+            "dependencies": {
+                "picomatch": "^2.2.1"
+            },
+            "engines": {
+                "node": ">=8.10.0"
             }
         },
-        "@babel/plugin-proposal-dynamic-import": {
-            "version": "7.5.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz",
-            "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-syntax-dynamic-import": "^7.2.0"
+        "node_modules/@babel/cli/node_modules/to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+            "optional": true,
+            "dependencies": {
+                "is-number": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=8.0"
             }
         },
-        "@babel/plugin-proposal-export-default-from": {
-            "version": "7.5.2",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.5.2.tgz",
-            "integrity": "sha512-wr9Itk05L1/wyyZKVEmXWCdcsp/e185WUNl6AfYZeEKYaUPPvHXRDqO5K1VH7/UamYqGJowFRuCv30aDYZawsg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-syntax-export-default-from": "^7.2.0"
+        "node_modules/@babel/code-frame": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz",
+            "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==",
+            "dependencies": {
+                "@babel/highlight": "^7.24.6",
+                "picocolors": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-proposal-json-strings": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
-            "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-syntax-json-strings": "^7.2.0"
+        "node_modules/@babel/compat-data": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz",
+            "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==",
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-proposal-object-rest-spread": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz",
-            "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+        "node_modules/@babel/core": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz",
+            "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==",
+            "dependencies": {
+                "@ampproject/remapping": "^2.2.0",
+                "@babel/code-frame": "^7.24.6",
+                "@babel/generator": "^7.24.6",
+                "@babel/helper-compilation-targets": "^7.24.6",
+                "@babel/helper-module-transforms": "^7.24.6",
+                "@babel/helpers": "^7.24.6",
+                "@babel/parser": "^7.24.6",
+                "@babel/template": "^7.24.6",
+                "@babel/traverse": "^7.24.6",
+                "@babel/types": "^7.24.6",
+                "convert-source-map": "^2.0.0",
+                "debug": "^4.1.0",
+                "gensync": "^1.0.0-beta.2",
+                "json5": "^2.2.3",
+                "semver": "^6.3.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/babel"
             }
         },
-        "@babel/plugin-proposal-optional-catch-binding": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
-            "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+        "node_modules/@babel/core/node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "bin": {
+                "semver": "bin/semver.js"
             }
         },
-        "@babel/plugin-proposal-unicode-property-regex": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz",
-            "integrity": "sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-regex": "^7.4.4",
-                "regexpu-core": "^4.6.0"
+        "node_modules/@babel/generator": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz",
+            "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==",
+            "dependencies": {
+                "@babel/types": "^7.24.6",
+                "@jridgewell/gen-mapping": "^0.3.5",
+                "@jridgewell/trace-mapping": "^0.3.25",
+                "jsesc": "^2.5.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-syntax-async-generators": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
-            "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-annotate-as-pure": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz",
+            "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==",
+            "dependencies": {
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-syntax-dynamic-import": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
-            "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz",
+            "integrity": "sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==",
+            "dependencies": {
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-syntax-export-default-from": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz",
-            "integrity": "sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-compilation-targets": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz",
+            "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==",
+            "dependencies": {
+                "@babel/compat-data": "^7.24.6",
+                "@babel/helper-validator-option": "^7.24.6",
+                "browserslist": "^4.22.2",
+                "lru-cache": "^5.1.1",
+                "semver": "^6.3.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-syntax-json-strings": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
-            "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "bin": {
+                "semver": "bin/semver.js"
             }
         },
-        "@babel/plugin-syntax-jsx": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
-            "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-create-class-features-plugin": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz",
+            "integrity": "sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-function-name": "^7.24.6",
+                "@babel/helper-member-expression-to-functions": "^7.24.6",
+                "@babel/helper-optimise-call-expression": "^7.24.6",
+                "@babel/helper-replace-supers": "^7.24.6",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
+                "@babel/helper-split-export-declaration": "^7.24.6",
+                "semver": "^6.3.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "@babel/plugin-syntax-object-rest-spread": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
-            "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "bin": {
+                "semver": "bin/semver.js"
             }
         },
-        "@babel/plugin-syntax-optional-catch-binding": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
-            "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-create-regexp-features-plugin": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz",
+            "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "regexpu-core": "^5.3.1",
+                "semver": "^6.3.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "@babel/plugin-transform-arrow-functions": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
-            "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "bin": {
+                "semver": "bin/semver.js"
             }
         },
-        "@babel/plugin-transform-async-to-generator": {
-            "version": "7.5.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz",
-            "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-imports": "^7.0.0",
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-remap-async-to-generator": "^7.1.0"
+        "node_modules/@babel/helper-define-polyfill-provider": {
+            "version": "0.6.2",
+            "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
+            "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
+            "dependencies": {
+                "@babel/helper-compilation-targets": "^7.22.6",
+                "@babel/helper-plugin-utils": "^7.22.5",
+                "debug": "^4.1.1",
+                "lodash.debounce": "^4.0.8",
+                "resolve": "^1.14.2"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
             }
         },
-        "@babel/plugin-transform-block-scoped-functions": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
-            "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-environment-visitor": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz",
+            "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==",
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-block-scoping": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz",
-            "integrity": "sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "lodash": "^4.17.13"
+        "node_modules/@babel/helper-function-name": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz",
+            "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==",
+            "dependencies": {
+                "@babel/template": "^7.24.6",
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-classes": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz",
-            "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-annotate-as-pure": "^7.0.0",
-                "@babel/helper-define-map": "^7.5.5",
-                "@babel/helper-function-name": "^7.1.0",
-                "@babel/helper-optimise-call-expression": "^7.0.0",
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-replace-supers": "^7.5.5",
-                "@babel/helper-split-export-declaration": "^7.4.4",
-                "globals": "^11.1.0"
+        "node_modules/@babel/helper-hoist-variables": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz",
+            "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==",
+            "dependencies": {
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-computed-properties": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
-            "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-member-expression-to-functions": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz",
+            "integrity": "sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==",
+            "dependencies": {
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-destructuring": {
-            "version": "7.6.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz",
-            "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-module-imports": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz",
+            "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==",
+            "dependencies": {
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-dotall-regex": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz",
-            "integrity": "sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-regex": "^7.4.4",
-                "regexpu-core": "^4.6.0"
+        "node_modules/@babel/helper-module-transforms": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz",
+            "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==",
+            "dependencies": {
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-module-imports": "^7.24.6",
+                "@babel/helper-simple-access": "^7.24.6",
+                "@babel/helper-split-export-declaration": "^7.24.6",
+                "@babel/helper-validator-identifier": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "@babel/plugin-transform-duplicate-keys": {
-            "version": "7.5.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz",
-            "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-optimise-call-expression": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz",
+            "integrity": "sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==",
+            "dependencies": {
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-exponentiation-operator": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
-            "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-plugin-utils": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz",
+            "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==",
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-for-of": {
-            "version": "7.4.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
-            "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-remap-async-to-generator": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz",
+            "integrity": "sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-wrap-function": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "@babel/plugin-transform-function-name": {
-            "version": "7.4.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
-            "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-function-name": "^7.1.0",
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-replace-supers": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz",
+            "integrity": "sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==",
+            "dependencies": {
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-member-expression-to-functions": "^7.24.6",
+                "@babel/helper-optimise-call-expression": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "@babel/plugin-transform-literals": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
-            "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-simple-access": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz",
+            "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==",
+            "dependencies": {
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-member-expression-literals": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
-            "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz",
+            "integrity": "sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==",
+            "dependencies": {
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-modules-amd": {
-            "version": "7.5.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz",
-            "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-transforms": "^7.1.0",
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "babel-plugin-dynamic-import-node": "^2.3.0"
+        "node_modules/@babel/helper-split-export-declaration": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz",
+            "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==",
+            "dependencies": {
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-modules-commonjs": {
-            "version": "7.6.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz",
-            "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-transforms": "^7.4.4",
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-simple-access": "^7.1.0",
-                "babel-plugin-dynamic-import-node": "^2.3.0"
+        "node_modules/@babel/helper-string-parser": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz",
+            "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==",
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-modules-systemjs": {
-            "version": "7.5.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz",
-            "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-hoist-variables": "^7.4.4",
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "babel-plugin-dynamic-import-node": "^2.3.0"
+        "node_modules/@babel/helper-validator-identifier": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz",
+            "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==",
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-modules-umd": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
-            "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-transforms": "^7.1.0",
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helper-validator-option": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz",
+            "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==",
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-named-capturing-groups-regex": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz",
-            "integrity": "sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g==",
-            "dev": true,
-            "requires": {
-                "regexpu-core": "^4.6.0"
+        "node_modules/@babel/helper-wrap-function": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz",
+            "integrity": "sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==",
+            "dependencies": {
+                "@babel/helper-function-name": "^7.24.6",
+                "@babel/template": "^7.24.6",
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-new-target": {
-            "version": "7.4.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
-            "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/helpers": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz",
+            "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==",
+            "dependencies": {
+                "@babel/template": "^7.24.6",
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-object-super": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz",
-            "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-replace-supers": "^7.5.5"
+        "node_modules/@babel/highlight": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz",
+            "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==",
+            "dependencies": {
+                "@babel/helper-validator-identifier": "^7.24.6",
+                "chalk": "^2.4.2",
+                "js-tokens": "^4.0.0",
+                "picocolors": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/plugin-transform-parameters": {
-            "version": "7.4.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
-            "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-call-delegate": "^7.4.4",
-                "@babel/helper-get-function-arity": "^7.0.0",
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/highlight/node_modules/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==",
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/plugin-transform-property-literals": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
-            "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/highlight/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/plugin-transform-react-display-name": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz",
-            "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/highlight/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "dependencies": {
+                "color-name": "1.1.3"
             }
         },
-        "@babel/plugin-transform-react-jsx": {
-            "version": "7.3.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz",
-            "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-builder-react-jsx": "^7.3.0",
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-syntax-jsx": "^7.2.0"
-            }
+        "node_modules/@babel/highlight/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
         },
-        "@babel/plugin-transform-react-jsx-self": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz",
-            "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-syntax-jsx": "^7.2.0"
+        "node_modules/@babel/highlight/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/plugin-transform-react-jsx-source": {
-            "version": "7.5.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz",
-            "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-syntax-jsx": "^7.2.0"
+        "node_modules/@babel/highlight/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/plugin-transform-regenerator": {
-            "version": "7.4.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz",
-            "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==",
-            "dev": true,
-            "requires": {
-                "regenerator-transform": "^0.14.0"
+        "node_modules/@babel/node": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.24.6.tgz",
+            "integrity": "sha512-63bD/Kbh1Vl6HapTZLSsyaGlQhhpF1/GpyS1oJotroJKoamOgKKEEKk3iHZAkicjcr+n4V4zdB0V+8siv6AZ5Q==",
+            "dependencies": {
+                "@babel/register": "^7.24.6",
+                "commander": "^6.2.0",
+                "core-js": "^3.30.2",
+                "node-environment-flags": "^1.0.5",
+                "regenerator-runtime": "^0.14.0",
+                "v8flags": "^3.1.1"
+            },
+            "bin": {
+                "babel-node": "bin/babel-node.js"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/plugin-transform-reserved-words": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
-            "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/parser": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz",
+            "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==",
+            "bin": {
+                "parser": "bin/babel-parser.js"
+            },
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
-        "@babel/plugin-transform-shorthand-properties": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
-            "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz",
+            "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==",
+            "dependencies": {
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "@babel/plugin-transform-spread": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz",
-            "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz",
+            "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "@babel/plugin-transform-sticky-regex": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
-            "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-regex": "^7.0.0"
+        "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz",
+            "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
+                "@babel/plugin-transform-optional-chaining": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.13.0"
             }
         },
-        "@babel/plugin-transform-template-literals": {
-            "version": "7.4.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
-            "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-annotate-as-pure": "^7.0.0",
-                "@babel/helper-plugin-utils": "^7.0.0"
+        "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz",
+            "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==",
+            "dependencies": {
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "@babel/plugin-transform-typeof-symbol": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
-            "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+        "node_modules/@babel/plugin-proposal-class-properties": {
+            "version": "7.18.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
+            "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
+            "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0"
+            "dependencies": {
+                "@babel/helper-create-class-features-plugin": "^7.18.6",
+                "@babel/helper-plugin-utils": "^7.18.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/plugin-transform-unicode-regex": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz",
-            "integrity": "sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==",
+        "node_modules/@babel/plugin-proposal-export-default-from": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.6.tgz",
+            "integrity": "sha512-qPPDbYs9j5IArMFqYi85QxatHURSzRyskKpIbjrVoVglDuGdhu1s7UTCmXvP/qR2aHa3EdJ8X3iZvQAHjmdHUw==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/helper-regex": "^7.4.4",
-                "regexpu-core": "^4.6.0"
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-export-default-from": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/preset-env": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.2.tgz",
-            "integrity": "sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q==",
+        "node_modules/@babel/plugin-proposal-private-methods": {
+            "version": "7.18.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
+            "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
+            "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.",
             "dev": true,
-            "requires": {
-                "@babel/helper-module-imports": "^7.0.0",
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
-                "@babel/plugin-proposal-dynamic-import": "^7.5.0",
-                "@babel/plugin-proposal-json-strings": "^7.2.0",
-                "@babel/plugin-proposal-object-rest-spread": "^7.6.2",
-                "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
-                "@babel/plugin-proposal-unicode-property-regex": "^7.6.2",
-                "@babel/plugin-syntax-async-generators": "^7.2.0",
-                "@babel/plugin-syntax-dynamic-import": "^7.2.0",
-                "@babel/plugin-syntax-json-strings": "^7.2.0",
-                "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
-                "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
-                "@babel/plugin-transform-arrow-functions": "^7.2.0",
-                "@babel/plugin-transform-async-to-generator": "^7.5.0",
-                "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
-                "@babel/plugin-transform-block-scoping": "^7.6.2",
-                "@babel/plugin-transform-classes": "^7.5.5",
-                "@babel/plugin-transform-computed-properties": "^7.2.0",
-                "@babel/plugin-transform-destructuring": "^7.6.0",
-                "@babel/plugin-transform-dotall-regex": "^7.6.2",
-                "@babel/plugin-transform-duplicate-keys": "^7.5.0",
-                "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
-                "@babel/plugin-transform-for-of": "^7.4.4",
-                "@babel/plugin-transform-function-name": "^7.4.4",
-                "@babel/plugin-transform-literals": "^7.2.0",
-                "@babel/plugin-transform-member-expression-literals": "^7.2.0",
-                "@babel/plugin-transform-modules-amd": "^7.5.0",
-                "@babel/plugin-transform-modules-commonjs": "^7.6.0",
-                "@babel/plugin-transform-modules-systemjs": "^7.5.0",
-                "@babel/plugin-transform-modules-umd": "^7.2.0",
-                "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.2",
-                "@babel/plugin-transform-new-target": "^7.4.4",
-                "@babel/plugin-transform-object-super": "^7.5.5",
-                "@babel/plugin-transform-parameters": "^7.4.4",
-                "@babel/plugin-transform-property-literals": "^7.2.0",
-                "@babel/plugin-transform-regenerator": "^7.4.5",
-                "@babel/plugin-transform-reserved-words": "^7.2.0",
-                "@babel/plugin-transform-shorthand-properties": "^7.2.0",
-                "@babel/plugin-transform-spread": "^7.6.2",
-                "@babel/plugin-transform-sticky-regex": "^7.2.0",
-                "@babel/plugin-transform-template-literals": "^7.4.4",
-                "@babel/plugin-transform-typeof-symbol": "^7.2.0",
-                "@babel/plugin-transform-unicode-regex": "^7.6.2",
-                "@babel/types": "^7.6.0",
-                "browserslist": "^4.6.0",
-                "core-js-compat": "^3.1.1",
-                "invariant": "^2.2.2",
-                "js-levenshtein": "^1.1.3",
-                "semver": "^5.5.0"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
+            "dependencies": {
+                "@babel/helper-create-class-features-plugin": "^7.18.6",
+                "@babel/helper-plugin-utils": "^7.18.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/preset-react": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz",
-            "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-transform-react-display-name": "^7.0.0",
-                "@babel/plugin-transform-react-jsx": "^7.0.0",
-                "@babel/plugin-transform-react-jsx-self": "^7.0.0",
-                "@babel/plugin-transform-react-jsx-source": "^7.0.0"
+        "node_modules/@babel/plugin-proposal-private-property-in-object": {
+            "version": "7.21.0-placeholder-for-preset-env.2",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+            "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/register": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.6.2.tgz",
-            "integrity": "sha512-xgZk2LRZvt6i2SAUWxc7ellk4+OYRgS3Zpsnr13nMS1Qo25w21Uu8o6vTOAqNaxiqrnv30KTYzh9YWY2k21CeQ==",
-            "requires": {
-                "find-cache-dir": "^2.0.0",
-                "lodash": "^4.17.13",
-                "mkdirp": "^0.5.1",
-                "pirates": "^4.0.0",
-                "source-map-support": "^0.5.9"
+        "node_modules/@babel/plugin-syntax-async-generators": {
+            "version": "7.8.4",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+            "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.8.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/runtime": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz",
-            "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==",
-            "requires": {
-                "regenerator-runtime": "^0.13.2"
+        "node_modules/@babel/plugin-syntax-class-properties": {
+            "version": "7.12.13",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+            "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.12.13"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/runtime-corejs2": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.6.2.tgz",
-            "integrity": "sha512-wdyVKnTv9Be4YlwF/7pByYNfcl23qC21aAQ0aIaZOo2ZOvhFEyJdBLJClYZ9i+Pmrz7sUQgg/MwbJa2RZTkygg==",
-            "dev": true,
-            "requires": {
-                "core-js": "^2.6.5",
-                "regenerator-runtime": "^0.13.2"
-            },
+        "node_modules/@babel/plugin-syntax-class-static-block": {
+            "version": "7.14.5",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+            "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
             "dependencies": {
-                "core-js": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
-                    "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
-                    "dev": true
-                }
+                "@babel/helper-plugin-utils": "^7.14.5"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/runtime-corejs3": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.5.5.tgz",
-            "integrity": "sha512-bNxHJ+w7RfLzZJtIZdEjFgL1twwZ6ozuOmsEjtyuTqfi1hb1fqsDYYyi3Fi3i+RgAO4S9+wkSG102+GCqdpr7w==",
-            "requires": {
-                "core-js-pure": "^3.0.0",
-                "regenerator-runtime": "^0.13.2"
+        "node_modules/@babel/plugin-syntax-dynamic-import": {
+            "version": "7.8.3",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+            "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.8.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/template": {
-            "version": "7.6.0",
-            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz",
-            "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==",
+        "node_modules/@babel/plugin-syntax-export-default-from": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.6.tgz",
+            "integrity": "sha512-Nzl7kZ4tjOM2LJpejBMPwZs7OJfc26++2HsMQuSrw6gxpqXGtZZ3Rj4Zt4Qm7vulMZL2gHIGGc2stnlQnHQCqA==",
             "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.0.0",
-                "@babel/parser": "^7.6.0",
-                "@babel/types": "^7.6.0"
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/traverse": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.2.tgz",
-            "integrity": "sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==",
-            "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.5.5",
-                "@babel/generator": "^7.6.2",
-                "@babel/helper-function-name": "^7.1.0",
-                "@babel/helper-split-export-declaration": "^7.4.4",
-                "@babel/parser": "^7.6.2",
-                "@babel/types": "^7.6.0",
-                "debug": "^4.1.0",
-                "globals": "^11.1.0",
-                "lodash": "^4.17.13"
-            },
+        "node_modules/@babel/plugin-syntax-export-namespace-from": {
+            "version": "7.8.3",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+            "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
             "dependencies": {
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "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
-                }
+                "@babel/helper-plugin-utils": "^7.8.3"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@babel/types": {
-            "version": "7.6.1",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
-            "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
-            "dev": true,
-            "requires": {
-                "esutils": "^2.0.2",
-                "lodash": "^4.17.13",
-                "to-fast-properties": "^2.0.0"
+        "node_modules/@babel/plugin-syntax-import-assertions": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz",
+            "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@cnakazawa/watch": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
-            "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==",
-            "dev": true,
-            "requires": {
-                "exec-sh": "^0.3.2",
-                "minimist": "^1.2.0"
-            },
+        "node_modules/@babel/plugin-syntax-import-attributes": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz",
+            "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==",
             "dependencies": {
-                "minimist": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-                    "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-                    "dev": true
-                }
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@gulp-sourcemaps/identity-map": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz",
-            "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==",
-            "dev": true,
-            "requires": {
-                "acorn": "^5.0.3",
-                "css": "^2.2.1",
-                "normalize-path": "^2.1.1",
-                "source-map": "^0.6.0",
-                "through2": "^2.0.3"
-            },
+        "node_modules/@babel/plugin-syntax-import-meta": {
+            "version": "7.10.4",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+            "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
             "dependencies": {
-                "acorn": {
-                    "version": "5.7.3",
-                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-                    "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-                    "dev": true
-                },
-                "normalize-path": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-                    "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-                    "dev": true,
-                    "requires": {
-                        "remove-trailing-separator": "^1.0.1"
-                    }
-                },
-                "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
-                }
+                "@babel/helper-plugin-utils": "^7.10.4"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@gulp-sourcemaps/map-sources": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
-            "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
-            "dev": true,
-            "requires": {
-                "normalize-path": "^2.0.1",
-                "through2": "^2.0.3"
-            },
+        "node_modules/@babel/plugin-syntax-json-strings": {
+            "version": "7.8.3",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+            "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
             "dependencies": {
-                "normalize-path": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-                    "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-                    "dev": true,
-                    "requires": {
-                        "remove-trailing-separator": "^1.0.1"
-                    }
-                }
+                "@babel/helper-plugin-utils": "^7.8.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@hapi/address": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.2.tgz",
-            "integrity": "sha512-O4QDrx+JoGKZc6aN64L04vqa7e41tIiLU+OvKdcYaEMP97UttL0f9GIi9/0A4WAMx0uBd6SidDIhktZhgOcN8Q==",
-            "dev": true
-        },
-        "@hapi/bourne": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz",
-            "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==",
-            "dev": true
-        },
-        "@hapi/hoek": {
-            "version": "8.2.4",
-            "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.2.4.tgz",
-            "integrity": "sha512-Ze5SDNt325yZvNO7s5C4fXDscjJ6dcqLFXJQ/M7dZRQCewuDj2iDUuBi6jLQt+APbW9RjjVEvLr35FXuOEqjow==",
-            "dev": true
-        },
-        "@hapi/joi": {
-            "version": "15.1.1",
-            "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
-            "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
-            "dev": true,
-            "requires": {
-                "@hapi/address": "2.x.x",
-                "@hapi/bourne": "1.x.x",
-                "@hapi/hoek": "8.x.x",
-                "@hapi/topo": "3.x.x"
+        "node_modules/@babel/plugin-syntax-jsx": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz",
+            "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@hapi/topo": {
-            "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.4.tgz",
-            "integrity": "sha512-aVWQTOI9wBD6zawmOr6f+tdEIxQC8JXfQVLTjgGe8YEStAWGn/GNNVTobKJhbWKveQj2RyYF3oYbO9SC8/eOCA==",
-            "dev": true,
-            "requires": {
-                "@hapi/hoek": "8.x.x"
+        "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+            "version": "7.10.4",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+            "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.10.4"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@jest/console": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
-            "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
-            "dev": true,
-            "requires": {
-                "@jest/source-map": "^24.9.0",
-                "chalk": "^2.0.1",
-                "slash": "^2.0.0"
+        "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+            "version": "7.8.3",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+            "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.8.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@jest/core": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz",
-            "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==",
-            "dev": true,
-            "requires": {
-                "@jest/console": "^24.7.1",
-                "@jest/reporters": "^24.9.0",
-                "@jest/test-result": "^24.9.0",
-                "@jest/transform": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "ansi-escapes": "^3.0.0",
-                "chalk": "^2.0.1",
-                "exit": "^0.1.2",
-                "graceful-fs": "^4.1.15",
-                "jest-changed-files": "^24.9.0",
-                "jest-config": "^24.9.0",
-                "jest-haste-map": "^24.9.0",
-                "jest-message-util": "^24.9.0",
-                "jest-regex-util": "^24.3.0",
-                "jest-resolve": "^24.9.0",
-                "jest-resolve-dependencies": "^24.9.0",
-                "jest-runner": "^24.9.0",
-                "jest-runtime": "^24.9.0",
-                "jest-snapshot": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "jest-validate": "^24.9.0",
-                "jest-watcher": "^24.9.0",
-                "micromatch": "^3.1.10",
-                "p-each-series": "^1.0.0",
-                "realpath-native": "^1.1.0",
-                "rimraf": "^2.5.4",
-                "slash": "^2.0.0",
-                "strip-ansi": "^5.0.0"
-            },
-            "dependencies": {
-                "ansi-regex": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-                    "dev": true
-                },
-                "strip-ansi": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-                    "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^4.1.0"
-                    }
-                }
+        "node_modules/@babel/plugin-syntax-numeric-separator": {
+            "version": "7.10.4",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+            "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.10.4"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@jest/environment": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
-            "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==",
-            "dev": true,
-            "requires": {
-                "@jest/fake-timers": "^24.9.0",
-                "@jest/transform": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "jest-mock": "^24.9.0"
+        "node_modules/@babel/plugin-syntax-object-rest-spread": {
+            "version": "7.8.3",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+            "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.8.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@jest/fake-timers": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
-            "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
-            "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0",
-                "jest-message-util": "^24.9.0",
-                "jest-mock": "^24.9.0"
+        "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+            "version": "7.8.3",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+            "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.8.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@jest/reporters": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz",
-            "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==",
-            "dev": true,
-            "requires": {
-                "@jest/environment": "^24.9.0",
-                "@jest/test-result": "^24.9.0",
-                "@jest/transform": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "chalk": "^2.0.1",
-                "exit": "^0.1.2",
-                "glob": "^7.1.2",
-                "istanbul-lib-coverage": "^2.0.2",
-                "istanbul-lib-instrument": "^3.0.1",
-                "istanbul-lib-report": "^2.0.4",
-                "istanbul-lib-source-maps": "^3.0.1",
-                "istanbul-reports": "^2.2.6",
-                "jest-haste-map": "^24.9.0",
-                "jest-resolve": "^24.9.0",
-                "jest-runtime": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "jest-worker": "^24.6.0",
-                "node-notifier": "^5.4.2",
-                "slash": "^2.0.0",
-                "source-map": "^0.6.0",
-                "string-length": "^2.0.0"
-            },
+        "node_modules/@babel/plugin-syntax-optional-chaining": {
+            "version": "7.8.3",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+            "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
             "dependencies": {
-                "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
-                }
+                "@babel/helper-plugin-utils": "^7.8.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@jest/source-map": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
-            "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
-            "dev": true,
-            "requires": {
-                "callsites": "^3.0.0",
-                "graceful-fs": "^4.1.15",
-                "source-map": "^0.6.0"
-            },
+        "node_modules/@babel/plugin-syntax-private-property-in-object": {
+            "version": "7.14.5",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+            "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
             "dependencies": {
-                "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
-                }
+                "@babel/helper-plugin-utils": "^7.14.5"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@jest/test-result": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
-            "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
-            "dev": true,
-            "requires": {
-                "@jest/console": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "@types/istanbul-lib-coverage": "^2.0.0"
+        "node_modules/@babel/plugin-syntax-top-level-await": {
+            "version": "7.14.5",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+            "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.14.5"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@jest/test-sequencer": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz",
-            "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==",
-            "dev": true,
-            "requires": {
-                "@jest/test-result": "^24.9.0",
-                "jest-haste-map": "^24.9.0",
-                "jest-runner": "^24.9.0",
-                "jest-runtime": "^24.9.0"
+        "node_modules/@babel/plugin-syntax-typescript": {
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz",
+            "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@jest/transform": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
-            "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
-            "dev": true,
-            "requires": {
-                "@babel/core": "^7.1.0",
-                "@jest/types": "^24.9.0",
-                "babel-plugin-istanbul": "^5.1.0",
-                "chalk": "^2.0.1",
-                "convert-source-map": "^1.4.0",
-                "fast-json-stable-stringify": "^2.0.0",
-                "graceful-fs": "^4.1.15",
-                "jest-haste-map": "^24.9.0",
-                "jest-regex-util": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "micromatch": "^3.1.10",
-                "pirates": "^4.0.1",
-                "realpath-native": "^1.1.0",
-                "slash": "^2.0.0",
-                "source-map": "^0.6.1",
-                "write-file-atomic": "2.4.1"
-            },
+        "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+            "version": "7.18.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+            "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
             "dependencies": {
-                "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
-                }
+                "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+                "@babel/helper-plugin-utils": "^7.18.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "@jest/types": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
-            "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
-            "dev": true,
-            "requires": {
-                "@types/istanbul-lib-coverage": "^2.0.0",
-                "@types/istanbul-reports": "^1.1.1",
-                "@types/yargs": "^13.0.0"
+        "node_modules/@babel/plugin-transform-arrow-functions": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz",
+            "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@loadable/component": {
-            "version": "5.10.3",
-            "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.10.3.tgz",
-            "integrity": "sha512-/aSO+tXw4vFMwZ6fgLaNQgLuEa7bgTpoBE4PxNzf08/ewAjymrCS3J7v3SbGE7IjGmmKL6vVwkpb7S3cYrk+ag==",
-            "requires": {
-                "@babel/runtime": "^7.6.0",
-                "hoist-non-react-statics": "^3.3.0"
+        "node_modules/@babel/plugin-transform-async-generator-functions": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz",
+            "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==",
+            "dependencies": {
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-remap-async-to-generator": "^7.24.6",
+                "@babel/plugin-syntax-async-generators": "^7.8.4"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
+        },
+        "node_modules/@babel/plugin-transform-async-to-generator": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz",
+            "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==",
             "dependencies": {
-                "@babel/runtime": {
-                    "version": "7.6.3",
-                    "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz",
-                    "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==",
-                    "requires": {
-                        "regenerator-runtime": "^0.13.2"
-                    }
-                }
+                "@babel/helper-module-imports": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-remap-async-to-generator": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@mrmlnc/readdir-enhanced": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
-            "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
-            "dev": true,
-            "requires": {
-                "call-me-maybe": "^1.0.1",
-                "glob-to-regexp": "^0.3.0"
+        "node_modules/@babel/plugin-transform-block-scoped-functions": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz",
+            "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@nodelib/fs.scandir": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz",
-            "integrity": "sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w==",
-            "requires": {
-                "@nodelib/fs.stat": "2.0.2",
-                "run-parallel": "^1.1.9"
+        "node_modules/@babel/plugin-transform-block-scoping": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz",
+            "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@nodelib/fs.stat": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz",
-            "integrity": "sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw=="
+        "node_modules/@babel/plugin-transform-class-properties": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz",
+            "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==",
+            "dependencies": {
+                "@babel/helper-create-class-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@nodelib/fs.walk": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz",
-            "integrity": "sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA==",
-            "requires": {
-                "@nodelib/fs.scandir": "2.1.2",
-                "fastq": "^1.6.0"
+        "node_modules/@babel/plugin-transform-class-static-block": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz",
+            "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==",
+            "dependencies": {
+                "@babel/helper-create-class-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-class-static-block": "^7.14.5"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.12.0"
             }
         },
-        "@samverschueren/stream-to-observable": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz",
-            "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==",
-            "dev": true,
-            "requires": {
-                "any-observable": "^0.3.0"
+        "node_modules/@babel/plugin-transform-classes": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz",
+            "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-compilation-targets": "^7.24.6",
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-function-name": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-replace-supers": "^7.24.6",
+                "@babel/helper-split-export-declaration": "^7.24.6",
+                "globals": "^11.1.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/babel__core": {
-            "version": "7.1.3",
-            "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz",
-            "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==",
-            "dev": true,
-            "requires": {
-                "@babel/parser": "^7.1.0",
-                "@babel/types": "^7.0.0",
-                "@types/babel__generator": "*",
-                "@types/babel__template": "*",
-                "@types/babel__traverse": "*"
+        "node_modules/@babel/plugin-transform-computed-properties": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz",
+            "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/template": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/babel__generator": {
-            "version": "7.6.0",
-            "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz",
-            "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.0.0"
+        "node_modules/@babel/plugin-transform-destructuring": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz",
+            "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/babel__template": {
-            "version": "7.0.2",
-            "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
-            "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
-            "dev": true,
-            "requires": {
-                "@babel/parser": "^7.1.0",
-                "@babel/types": "^7.0.0"
+        "node_modules/@babel/plugin-transform-dotall-regex": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz",
+            "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==",
+            "dependencies": {
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/babel__traverse": {
-            "version": "7.0.7",
-            "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz",
-            "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.3.0"
+        "node_modules/@babel/plugin-transform-duplicate-keys": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz",
+            "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/events": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
-            "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g=="
+        "node_modules/@babel/plugin-transform-dynamic-import": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz",
+            "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@types/glob": {
-            "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
-            "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
-            "requires": {
-                "@types/events": "*",
-                "@types/minimatch": "*",
-                "@types/node": "*"
+        "node_modules/@babel/plugin-transform-exponentiation-operator": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz",
+            "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==",
+            "dependencies": {
+                "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/istanbul-lib-coverage": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
-            "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-export-namespace-from": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz",
+            "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@types/istanbul-lib-report": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz",
-            "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==",
-            "dev": true,
-            "requires": {
-                "@types/istanbul-lib-coverage": "*"
+        "node_modules/@babel/plugin-transform-for-of": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz",
+            "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/istanbul-reports": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
-            "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
-            "dev": true,
-            "requires": {
-                "@types/istanbul-lib-coverage": "*",
-                "@types/istanbul-lib-report": "*"
+        "node_modules/@babel/plugin-transform-function-name": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz",
+            "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==",
+            "dependencies": {
+                "@babel/helper-compilation-targets": "^7.24.6",
+                "@babel/helper-function-name": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/minimatch": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
-            "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
+        "node_modules/@babel/plugin-transform-json-strings": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz",
+            "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-json-strings": "^7.8.3"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@types/node": {
-            "version": "12.7.8",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.8.tgz",
-            "integrity": "sha512-FMdVn84tJJdV+xe+53sYiZS4R5yn1mAIxfj+DVoNiQjTYz1+OYmjwEZr1ev9nU0axXwda0QDbYl06QHanRVH3A=="
+        "node_modules/@babel/plugin-transform-literals": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz",
+            "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@types/normalize-package-data": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
-            "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz",
+            "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@types/stack-utils": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
-            "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-member-expression-literals": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz",
+            "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@types/unist": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
-            "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-modules-amd": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz",
+            "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==",
+            "dependencies": {
+                "@babel/helper-module-transforms": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@types/vfile": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz",
-            "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*",
-                "@types/unist": "*",
-                "@types/vfile-message": "*"
+        "node_modules/@babel/plugin-transform-modules-commonjs": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz",
+            "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==",
+            "dependencies": {
+                "@babel/helper-module-transforms": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-simple-access": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/vfile-message": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz",
-            "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*",
-                "@types/unist": "*"
+        "node_modules/@babel/plugin-transform-modules-systemjs": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz",
+            "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==",
+            "dependencies": {
+                "@babel/helper-hoist-variables": "^7.24.6",
+                "@babel/helper-module-transforms": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-validator-identifier": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/yargs": {
-            "version": "13.0.3",
-            "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz",
-            "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==",
-            "dev": true,
-            "requires": {
-                "@types/yargs-parser": "*"
+        "node_modules/@babel/plugin-transform-modules-umd": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz",
+            "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==",
+            "dependencies": {
+                "@babel/helper-module-transforms": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@types/yargs-parser": {
-            "version": "13.1.0",
-            "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz",
-            "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz",
+            "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==",
+            "dependencies": {
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
+            }
         },
-        "@webassemblyjs/ast": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
-            "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/helper-module-context": "1.8.5",
-                "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-                "@webassemblyjs/wast-parser": "1.8.5"
+        "node_modules/@babel/plugin-transform-new-target": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz",
+            "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@webassemblyjs/floating-point-hex-parser": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
-            "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz",
+            "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@webassemblyjs/helper-api-error": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
-            "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-numeric-separator": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz",
+            "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@webassemblyjs/helper-buffer": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
-            "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-object-rest-spread": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz",
+            "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==",
+            "dependencies": {
+                "@babel/helper-compilation-targets": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+                "@babel/plugin-transform-parameters": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@webassemblyjs/helper-code-frame": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
-            "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/wast-printer": "1.8.5"
+        "node_modules/@babel/plugin-transform-object-super": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz",
+            "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-replace-supers": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@webassemblyjs/helper-fsm": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
-            "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-optional-catch-binding": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz",
+            "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@webassemblyjs/helper-module-context": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
-            "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.8.5",
-                "mamacro": "^0.0.3"
+        "node_modules/@babel/plugin-transform-optional-chaining": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz",
+            "integrity": "sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
+                "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@webassemblyjs/helper-wasm-bytecode": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
-            "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-parameters": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz",
+            "integrity": "sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@webassemblyjs/helper-wasm-section": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
-            "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.8.5",
-                "@webassemblyjs/helper-buffer": "1.8.5",
-                "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-                "@webassemblyjs/wasm-gen": "1.8.5"
+        "node_modules/@babel/plugin-transform-private-methods": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz",
+            "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==",
+            "dependencies": {
+                "@babel/helper-create-class-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@webassemblyjs/ieee754": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
-            "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
-            "dev": true,
-            "requires": {
-                "@xtuc/ieee754": "^1.2.0"
+        "node_modules/@babel/plugin-transform-private-property-in-object": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz",
+            "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-create-class-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@webassemblyjs/leb128": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
-            "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
-            "dev": true,
-            "requires": {
-                "@xtuc/long": "4.2.2"
+        "node_modules/@babel/plugin-transform-property-literals": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz",
+            "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@webassemblyjs/utf8": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
-            "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-react-constant-elements": {
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.1.tgz",
+            "integrity": "sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@webassemblyjs/wasm-edit": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
-            "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.8.5",
-                "@webassemblyjs/helper-buffer": "1.8.5",
-                "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-                "@webassemblyjs/helper-wasm-section": "1.8.5",
-                "@webassemblyjs/wasm-gen": "1.8.5",
-                "@webassemblyjs/wasm-opt": "1.8.5",
-                "@webassemblyjs/wasm-parser": "1.8.5",
-                "@webassemblyjs/wast-printer": "1.8.5"
-            }
-        },
-        "@webassemblyjs/wasm-gen": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
-            "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.8.5",
-                "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-                "@webassemblyjs/ieee754": "1.8.5",
-                "@webassemblyjs/leb128": "1.8.5",
-                "@webassemblyjs/utf8": "1.8.5"
-            }
-        },
-        "@webassemblyjs/wasm-opt": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
-            "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.8.5",
-                "@webassemblyjs/helper-buffer": "1.8.5",
-                "@webassemblyjs/wasm-gen": "1.8.5",
-                "@webassemblyjs/wasm-parser": "1.8.5"
-            }
-        },
-        "@webassemblyjs/wasm-parser": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
-            "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.8.5",
-                "@webassemblyjs/helper-api-error": "1.8.5",
-                "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-                "@webassemblyjs/ieee754": "1.8.5",
-                "@webassemblyjs/leb128": "1.8.5",
-                "@webassemblyjs/utf8": "1.8.5"
-            }
-        },
-        "@webassemblyjs/wast-parser": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
-            "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.8.5",
-                "@webassemblyjs/floating-point-hex-parser": "1.8.5",
-                "@webassemblyjs/helper-api-error": "1.8.5",
-                "@webassemblyjs/helper-code-frame": "1.8.5",
-                "@webassemblyjs/helper-fsm": "1.8.5",
-                "@xtuc/long": "4.2.2"
+        "node_modules/@babel/plugin-transform-react-display-name": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz",
+            "integrity": "sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@webassemblyjs/wast-printer": {
-            "version": "1.8.5",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
-            "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.8.5",
-                "@webassemblyjs/wast-parser": "1.8.5",
-                "@xtuc/long": "4.2.2"
+        "node_modules/@babel/plugin-transform-react-jsx": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz",
+            "integrity": "sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-module-imports": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/plugin-syntax-jsx": "^7.24.6",
+                "@babel/types": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "@xtuc/ieee754": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-            "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-react-jsx-development": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz",
+            "integrity": "sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==",
+            "dependencies": {
+                "@babel/plugin-transform-react-jsx": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "@xtuc/long": {
-            "version": "4.2.2",
-            "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-            "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-react-pure-annotations": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz",
+            "integrity": "sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "abab": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz",
-            "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-regenerator": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz",
+            "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "regenerator-transform": "^0.15.2"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "abbrev": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-            "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-            "dev": true
+        "node_modules/@babel/plugin-transform-reserved-words": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz",
+            "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "accepts": {
-            "version": "1.3.7",
-            "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
-            "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
-            "requires": {
-                "mime-types": "~2.1.24",
-                "negotiator": "0.6.2"
-            }
-        },
-        "accord": {
-            "version": "0.29.0",
-            "resolved": "https://registry.npmjs.org/accord/-/accord-0.29.0.tgz",
-            "integrity": "sha512-3OOR92FTc2p5/EcOzPcXp+Cbo+3C15nV9RXHlOUBCBpHhcB+0frbSNR9ehED/o7sTcyGVtqGJpguToEdlXhD0w==",
-            "dev": true,
-            "requires": {
-                "convert-source-map": "^1.5.0",
-                "glob": "^7.0.5",
-                "indx": "^0.2.3",
-                "lodash.clone": "^4.3.2",
-                "lodash.defaults": "^4.0.1",
-                "lodash.flatten": "^4.2.0",
-                "lodash.merge": "^4.4.0",
-                "lodash.partialright": "^4.1.4",
-                "lodash.pick": "^4.2.1",
-                "lodash.uniq": "^4.3.0",
-                "resolve": "^1.5.0",
-                "semver": "^5.3.0",
-                "uglify-js": "^2.8.22",
-                "when": "^3.7.8"
-            },
-            "dependencies": {
-                "camelcase": {
-                    "version": "1.2.1",
-                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
-                    "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
-                    "dev": true
-                },
-                "cliui": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
-                    "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
-                    "dev": true,
-                    "requires": {
-                        "center-align": "^0.1.1",
-                        "right-align": "^0.1.1",
-                        "wordwrap": "0.0.2"
-                    }
-                },
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                },
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "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,
-                    "requires": {
-                        "source-map": "~0.5.1",
-                        "uglify-to-browserify": "~1.0.0",
-                        "yargs": "~3.10.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
-                },
-                "wordwrap": {
-                    "version": "0.0.2",
-                    "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
-                    "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
-                    "dev": true
-                },
-                "yargs": {
-                    "version": "3.10.0",
-                    "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
-                    "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^1.0.2",
-                        "cliui": "^2.1.0",
-                        "decamelize": "^1.0.0",
-                        "window-size": "0.1.0"
-                    }
-                }
+        "node_modules/@babel/plugin-transform-shorthand-properties": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz",
+            "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "acorn": {
-            "version": "6.3.0",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
-            "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
-            "dev": true
-        },
-        "acorn-globals": {
-            "version": "4.3.4",
-            "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
-            "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
-            "dev": true,
-            "requires": {
-                "acorn": "^6.0.1",
-                "acorn-walk": "^6.0.1"
+        "node_modules/@babel/plugin-transform-spread": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz",
+            "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "acorn-jsx": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
-            "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==",
-            "dev": true
-        },
-        "acorn-walk": {
-            "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
-            "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
-            "dev": true
-        },
-        "action-sequence": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/action-sequence/-/action-sequence-1.0.6.tgz",
-            "integrity": "sha512-bkMZrnbMaHk/DUwaafxzS3e/BE+C0GS22VHhYR5XQIlU535Az90rs++73URVJdYwElbVqVjXtTBeKOR8D25N3Q=="
-        },
-        "after": {
-            "version": "0.8.2",
-            "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
-            "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
-            "dev": true
-        },
-        "aggregate-error": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.0.tgz",
-            "integrity": "sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA==",
-            "dev": true,
-            "requires": {
-                "clean-stack": "^2.0.0",
-                "indent-string": "^3.2.0"
-            }
-        },
-        "airbnb-prop-types": {
-            "version": "2.15.0",
-            "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz",
-            "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==",
-            "dev": true,
-            "requires": {
-                "array.prototype.find": "^2.1.0",
-                "function.prototype.name": "^1.1.1",
-                "has": "^1.0.3",
-                "is-regex": "^1.0.4",
-                "object-is": "^1.0.1",
-                "object.assign": "^4.1.0",
-                "object.entries": "^1.1.0",
-                "prop-types": "^15.7.2",
-                "prop-types-exact": "^1.2.0",
-                "react-is": "^16.9.0"
+        "node_modules/@babel/plugin-transform-sticky-regex": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz",
+            "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "ajv": {
-            "version": "6.10.2",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
-            "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
-            "dev": true,
-            "requires": {
-                "fast-deep-equal": "^2.0.1",
-                "fast-json-stable-stringify": "^2.0.0",
-                "json-schema-traverse": "^0.4.1",
-                "uri-js": "^4.2.2"
+        "node_modules/@babel/plugin-transform-template-literals": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz",
+            "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "ajv-errors": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
-            "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
-            "dev": true
-        },
-        "ajv-keywords": {
-            "version": "3.4.1",
-            "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
-            "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
-            "dev": true
-        },
-        "align-text": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
-            "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
-            "dev": true,
-            "requires": {
-                "kind-of": "^3.0.2",
-                "longest": "^1.0.1",
-                "repeat-string": "^1.5.2"
-            },
-            "dependencies": {
-                "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.5"
-                    }
-                }
+        "node_modules/@babel/plugin-transform-typeof-symbol": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz",
+            "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.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/@babel/plugin-transform-typescript": {
+            "version": "7.24.5",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.5.tgz",
+            "integrity": "sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==",
+            "dependencies": {
+                "@babel/helper-annotate-as-pure": "^7.22.5",
+                "@babel/helper-create-class-features-plugin": "^7.24.5",
+                "@babel/helper-plugin-utils": "^7.24.5",
+                "@babel/plugin-syntax-typescript": "^7.24.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "ansi-align": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
-            "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
-            "dev": true,
-            "requires": {
-                "string-width": "^2.0.0"
+        "node_modules/@babel/plugin-transform-unicode-escapes": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz",
+            "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6"
             },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
+        },
+        "node_modules/@babel/plugin-transform-unicode-property-regex": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz",
+            "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==",
             "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
-                },
-                "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=",
-                    "dev": true
-                },
-                "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=",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^3.0.0"
-                    }
-                }
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "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
+        "node_modules/@babel/plugin-transform-unicode-regex": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz",
+            "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==",
+            "dependencies": {
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "ansi-cyan": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
-            "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
-            "dev": true,
-            "requires": {
-                "ansi-wrap": "0.1.0"
+        "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz",
+            "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==",
+            "dependencies": {
+                "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
             }
         },
-        "ansi-escapes": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
-            "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
-            "dev": true
+        "node_modules/@babel/preset-env": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.6.tgz",
+            "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==",
+            "dependencies": {
+                "@babel/compat-data": "^7.24.6",
+                "@babel/helper-compilation-targets": "^7.24.6",
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-validator-option": "^7.24.6",
+                "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.6",
+                "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.6",
+                "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.6",
+                "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.6",
+                "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+                "@babel/plugin-syntax-async-generators": "^7.8.4",
+                "@babel/plugin-syntax-class-properties": "^7.12.13",
+                "@babel/plugin-syntax-class-static-block": "^7.14.5",
+                "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+                "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+                "@babel/plugin-syntax-import-assertions": "^7.24.6",
+                "@babel/plugin-syntax-import-attributes": "^7.24.6",
+                "@babel/plugin-syntax-import-meta": "^7.10.4",
+                "@babel/plugin-syntax-json-strings": "^7.8.3",
+                "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+                "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+                "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+                "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+                "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+                "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+                "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+                "@babel/plugin-syntax-top-level-await": "^7.14.5",
+                "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+                "@babel/plugin-transform-arrow-functions": "^7.24.6",
+                "@babel/plugin-transform-async-generator-functions": "^7.24.6",
+                "@babel/plugin-transform-async-to-generator": "^7.24.6",
+                "@babel/plugin-transform-block-scoped-functions": "^7.24.6",
+                "@babel/plugin-transform-block-scoping": "^7.24.6",
+                "@babel/plugin-transform-class-properties": "^7.24.6",
+                "@babel/plugin-transform-class-static-block": "^7.24.6",
+                "@babel/plugin-transform-classes": "^7.24.6",
+                "@babel/plugin-transform-computed-properties": "^7.24.6",
+                "@babel/plugin-transform-destructuring": "^7.24.6",
+                "@babel/plugin-transform-dotall-regex": "^7.24.6",
+                "@babel/plugin-transform-duplicate-keys": "^7.24.6",
+                "@babel/plugin-transform-dynamic-import": "^7.24.6",
+                "@babel/plugin-transform-exponentiation-operator": "^7.24.6",
+                "@babel/plugin-transform-export-namespace-from": "^7.24.6",
+                "@babel/plugin-transform-for-of": "^7.24.6",
+                "@babel/plugin-transform-function-name": "^7.24.6",
+                "@babel/plugin-transform-json-strings": "^7.24.6",
+                "@babel/plugin-transform-literals": "^7.24.6",
+                "@babel/plugin-transform-logical-assignment-operators": "^7.24.6",
+                "@babel/plugin-transform-member-expression-literals": "^7.24.6",
+                "@babel/plugin-transform-modules-amd": "^7.24.6",
+                "@babel/plugin-transform-modules-commonjs": "^7.24.6",
+                "@babel/plugin-transform-modules-systemjs": "^7.24.6",
+                "@babel/plugin-transform-modules-umd": "^7.24.6",
+                "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.6",
+                "@babel/plugin-transform-new-target": "^7.24.6",
+                "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.6",
+                "@babel/plugin-transform-numeric-separator": "^7.24.6",
+                "@babel/plugin-transform-object-rest-spread": "^7.24.6",
+                "@babel/plugin-transform-object-super": "^7.24.6",
+                "@babel/plugin-transform-optional-catch-binding": "^7.24.6",
+                "@babel/plugin-transform-optional-chaining": "^7.24.6",
+                "@babel/plugin-transform-parameters": "^7.24.6",
+                "@babel/plugin-transform-private-methods": "^7.24.6",
+                "@babel/plugin-transform-private-property-in-object": "^7.24.6",
+                "@babel/plugin-transform-property-literals": "^7.24.6",
+                "@babel/plugin-transform-regenerator": "^7.24.6",
+                "@babel/plugin-transform-reserved-words": "^7.24.6",
+                "@babel/plugin-transform-shorthand-properties": "^7.24.6",
+                "@babel/plugin-transform-spread": "^7.24.6",
+                "@babel/plugin-transform-sticky-regex": "^7.24.6",
+                "@babel/plugin-transform-template-literals": "^7.24.6",
+                "@babel/plugin-transform-typeof-symbol": "^7.24.6",
+                "@babel/plugin-transform-unicode-escapes": "^7.24.6",
+                "@babel/plugin-transform-unicode-property-regex": "^7.24.6",
+                "@babel/plugin-transform-unicode-regex": "^7.24.6",
+                "@babel/plugin-transform-unicode-sets-regex": "^7.24.6",
+                "@babel/preset-modules": "0.1.6-no-external-plugins",
+                "babel-plugin-polyfill-corejs2": "^0.4.10",
+                "babel-plugin-polyfill-corejs3": "^0.10.4",
+                "babel-plugin-polyfill-regenerator": "^0.6.1",
+                "core-js-compat": "^3.31.0",
+                "semver": "^6.3.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "ansi-gray": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
-            "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
-            "dev": true,
-            "requires": {
-                "ansi-wrap": "0.1.0"
+        "node_modules/@babel/preset-env/node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "bin": {
+                "semver": "bin/semver.js"
             }
         },
-        "ansi-html": {
-            "version": "0.0.7",
-            "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
-            "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
-            "dev": true
+        "node_modules/@babel/preset-modules": {
+            "version": "0.1.6-no-external-plugins",
+            "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+            "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.0.0",
+                "@babel/types": "^7.4.4",
+                "esutils": "^2.0.2"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
+            }
         },
-        "ansi-red": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
-            "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
-            "dev": true,
-            "requires": {
-                "ansi-wrap": "0.1.0"
+        "node_modules/@babel/preset-react": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.6.tgz",
+            "integrity": "sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.6",
+                "@babel/helper-validator-option": "^7.24.6",
+                "@babel/plugin-transform-react-display-name": "^7.24.6",
+                "@babel/plugin-transform-react-jsx": "^7.24.6",
+                "@babel/plugin-transform-react-jsx-development": "^7.24.6",
+                "@babel/plugin-transform-react-pure-annotations": "^7.24.6"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "ansi-regex": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-            "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-            "dev": true
+        "node_modules/@babel/preset-typescript": {
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz",
+            "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-validator-option": "^7.23.5",
+                "@babel/plugin-syntax-jsx": "^7.24.1",
+                "@babel/plugin-transform-modules-commonjs": "^7.24.1",
+                "@babel/plugin-transform-typescript": "^7.24.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "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==",
-            "requires": {
-                "color-convert": "^1.9.0"
+        "node_modules/@babel/register": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz",
+            "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==",
+            "dependencies": {
+                "clone-deep": "^4.0.1",
+                "find-cache-dir": "^2.0.0",
+                "make-dir": "^2.1.0",
+                "pirates": "^4.0.6",
+                "source-map-support": "^0.5.16"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "ansi-wrap": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
-            "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
-            "dev": true
+        "node_modules/@babel/regjsgen": {
+            "version": "0.8.0",
+            "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+            "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
         },
-        "any-observable": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
-            "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
-            "dev": true
+        "node_modules/@babel/runtime": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz",
+            "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==",
+            "dependencies": {
+                "regenerator-runtime": "^0.14.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
         },
-        "any-promise": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
-            "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
-            "dev": true
+        "node_modules/@babel/runtime-corejs3": {
+            "version": "7.23.2",
+            "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.2.tgz",
+            "integrity": "sha512-54cIh74Z1rp4oIjsHjqN+WM4fMyCBYe+LpZ9jWm51CZ1fbH3SkAzQD/3XLoNkjbJ7YEmjobLXyvQrFypRHOrXw==",
+            "dependencies": {
+                "core-js-pure": "^3.30.2",
+                "regenerator-runtime": "^0.14.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
         },
-        "anymatch": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-            "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
-            "requires": {
-                "micromatch": "^3.1.4",
-                "normalize-path": "^2.1.1"
+        "node_modules/@babel/template": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz",
+            "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==",
+            "dependencies": {
+                "@babel/code-frame": "^7.24.6",
+                "@babel/parser": "^7.24.6",
+                "@babel/types": "^7.24.6"
             },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/traverse": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz",
+            "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==",
             "dependencies": {
-                "normalize-path": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-                    "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-                    "requires": {
-                        "remove-trailing-separator": "^1.0.1"
-                    }
-                }
+                "@babel/code-frame": "^7.24.6",
+                "@babel/generator": "^7.24.6",
+                "@babel/helper-environment-visitor": "^7.24.6",
+                "@babel/helper-function-name": "^7.24.6",
+                "@babel/helper-hoist-variables": "^7.24.6",
+                "@babel/helper-split-export-declaration": "^7.24.6",
+                "@babel/parser": "^7.24.6",
+                "@babel/types": "^7.24.6",
+                "debug": "^4.3.1",
+                "globals": "^11.1.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "apache-crypt": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.1.tgz",
-            "integrity": "sha1-1vxyqm0n2ZyVqU/RiNcx7v/6Zjw=",
-            "requires": {
-                "unix-crypt-td-js": "^1.0.0"
+        "node_modules/@babel/types": {
+            "version": "7.24.6",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz",
+            "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==",
+            "dependencies": {
+                "@babel/helper-string-parser": "^7.24.6",
+                "@babel/helper-validator-identifier": "^7.24.6",
+                "to-fast-properties": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "apache-md5": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.2.tgz",
-            "integrity": "sha1-7klza2ObTxCLbp5ibG2pkwa0FpI="
+        "node_modules/@bufbuild/protobuf": {
+            "version": "1.9.0",
+            "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.9.0.tgz",
+            "integrity": "sha512-W7gp8Q/v1NlCZLsv8pQ3Y0uCu/SHgXOVFK+eUluUKWXmsb6VHkpNx0apdOWWcDbB9sJoKeP8uPrjmehJz6xETQ==",
+            "dev": true
         },
-        "append-buffer": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
-            "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
+        "node_modules/@colors/colors": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz",
+            "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==",
             "dev": true,
-            "requires": {
-                "buffer-equal": "^1.0.0"
+            "engines": {
+                "node": ">=0.1.90"
             }
         },
-        "aproba": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-            "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
-            "dev": true
-        },
-        "archiver": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz",
-            "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==",
-            "dev": true,
-            "requires": {
-                "archiver-utils": "^2.1.0",
-                "async": "^2.6.3",
-                "buffer-crc32": "^0.2.1",
-                "glob": "^7.1.4",
-                "readable-stream": "^3.4.0",
-                "tar-stream": "^2.1.0",
-                "zip-stream": "^2.1.2"
-            },
-            "dependencies": {
-                "bl": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz",
-                    "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==",
-                    "dev": true,
-                    "requires": {
-                        "readable-stream": "^3.0.1"
-                    }
-                },
-                "readable-stream": {
-                    "version": "3.4.0",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
-                    "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "^2.0.3",
-                        "string_decoder": "^1.1.1",
-                        "util-deprecate": "^1.0.1"
-                    }
-                },
-                "tar-stream": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz",
-                    "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==",
-                    "dev": true,
-                    "requires": {
-                        "bl": "^3.0.0",
-                        "end-of-stream": "^1.4.1",
-                        "fs-constants": "^1.0.0",
-                        "inherits": "^2.0.3",
-                        "readable-stream": "^3.1.1"
-                    }
-                }
+        "node_modules/@dabh/diagnostics": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
+            "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
+            "dev": true,
+            "dependencies": {
+                "colorspace": "1.1.x",
+                "enabled": "2.0.x",
+                "kuler": "^2.0.0"
             }
         },
-        "archiver-utils": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
-            "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
+        "node_modules/@gulp-sourcemaps/identity-map": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz",
+            "integrity": "sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==",
             "dev": true,
-            "requires": {
-                "glob": "^7.1.4",
-                "graceful-fs": "^4.2.0",
-                "lazystream": "^1.0.0",
-                "lodash.defaults": "^4.2.0",
-                "lodash.difference": "^4.5.0",
-                "lodash.flatten": "^4.4.0",
-                "lodash.isplainobject": "^4.0.6",
-                "lodash.union": "^4.6.0",
+            "dependencies": {
+                "acorn": "^6.4.1",
                 "normalize-path": "^3.0.0",
-                "readable-stream": "^2.0.0"
+                "postcss": "^7.0.16",
+                "source-map": "^0.6.0",
+                "through2": "^3.0.1"
+            },
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "archy": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
-            "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+        "node_modules/@gulp-sourcemaps/identity-map/node_modules/picocolors": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+            "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
             "dev": true
         },
-        "are-we-there-yet": {
-            "version": "1.1.5",
-            "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
-            "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
-            "dev": true,
-            "requires": {
-                "delegates": "^1.0.0",
-                "readable-stream": "^2.0.6"
-            }
-        },
-        "argparse": {
-            "version": "1.0.10",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-            "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+        "node_modules/@gulp-sourcemaps/identity-map/node_modules/postcss": {
+            "version": "7.0.39",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+            "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
             "dev": true,
-            "requires": {
-                "sprintf-js": "~1.0.2"
+            "dependencies": {
+                "picocolors": "^0.2.1",
+                "source-map": "^0.6.1"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/postcss/"
             }
         },
-        "arr-diff": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-            "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
-        },
-        "arr-filter": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
-            "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=",
+        "node_modules/@gulp-sourcemaps/identity-map/node_modules/through2": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
+            "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
             "dev": true,
-            "requires": {
-                "make-iterator": "^1.0.0"
+            "dependencies": {
+                "inherits": "^2.0.4",
+                "readable-stream": "2 || 3"
             }
         },
-        "arr-flatten": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-            "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
-        },
-        "arr-map": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
-            "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=",
+        "node_modules/@gulp-sourcemaps/map-sources": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
+            "integrity": "sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==",
             "dev": true,
-            "requires": {
-                "make-iterator": "^1.0.0"
+            "dependencies": {
+                "normalize-path": "^2.0.1",
+                "through2": "^2.0.3"
+            },
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "arr-union": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-            "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
-        },
-        "array-differ": {
+        "node_modules/@gulp-sourcemaps/map-sources/node_modules/isarray": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
-            "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
-            "dev": true
-        },
-        "array-each": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
-            "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
             "dev": true
         },
-        "array-equal": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
-            "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
-            "dev": true
+        "node_modules/@gulp-sourcemaps/map-sources/node_modules/normalize-path": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+            "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+            "dev": true,
+            "dependencies": {
+                "remove-trailing-separator": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "array-filter": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
-            "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
-            "dev": true
+        "node_modules/@gulp-sourcemaps/map-sources/node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+            "dev": true,
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+            }
         },
-        "array-find-index": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
-            "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+        "node_modules/@gulp-sourcemaps/map-sources/node_modules/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
         },
-        "array-flatten": {
+        "node_modules/@gulp-sourcemaps/map-sources/node_modules/string_decoder": {
             "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-            "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+            "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+            "dev": true,
+            "dependencies": {
+                "safe-buffer": "~5.1.0"
+            }
         },
-        "array-includes": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
-            "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+        "node_modules/@gulp-sourcemaps/map-sources/node_modules/through2": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+            "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
             "dev": true,
-            "requires": {
-                "define-properties": "^1.1.2",
-                "es-abstract": "^1.7.0"
+            "dependencies": {
+                "readable-stream": "~2.3.6",
+                "xtend": "~4.0.1"
             }
         },
-        "array-initial": {
+        "node_modules/@gulpjs/messages": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
-            "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=",
+            "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz",
+            "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==",
             "dev": true,
-            "requires": {
-                "array-slice": "^1.0.0",
-                "is-number": "^4.0.0"
-            },
-            "dependencies": {
-                "is-number": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
-                    "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
-                    "dev": true
-                }
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "array-last": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
-            "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
+        "node_modules/@gulpjs/to-absolute-glob": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz",
+            "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==",
             "dev": true,
-            "requires": {
-                "is-number": "^4.0.0"
+            "dependencies": {
+                "is-negated-glob": "^1.0.0"
             },
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/@jridgewell/gen-mapping": {
+            "version": "0.3.5",
+            "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+            "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
             "dependencies": {
-                "is-number": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
-                    "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
-                    "dev": true
-                }
+                "@jridgewell/set-array": "^1.2.1",
+                "@jridgewell/sourcemap-codec": "^1.4.10",
+                "@jridgewell/trace-mapping": "^0.3.24"
+            },
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
-        "array-slice": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
-            "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
-            "dev": true
-        },
-        "array-sort": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
-            "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
-            "dev": true,
-            "requires": {
-                "default-compare": "^1.0.0",
-                "get-value": "^2.0.6",
-                "kind-of": "^5.0.2"
-            },
-            "dependencies": {
-                "kind-of": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-                    "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
-                    "dev": true
-                }
+        "node_modules/@jridgewell/resolve-uri": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+            "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
-        "array-union": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-            "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
-        },
-        "array-uniq": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
-            "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
-            "dev": true
-        },
-        "array-unique": {
-            "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-            "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
-        },
-        "array.prototype.find": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz",
-            "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==",
-            "dev": true,
-            "requires": {
-                "define-properties": "^1.1.3",
-                "es-abstract": "^1.13.0"
+        "node_modules/@jridgewell/set-array": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+            "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
-        "array.prototype.flat": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz",
-            "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==",
+        "node_modules/@jridgewell/source-map": {
+            "version": "0.3.6",
+            "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+            "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
             "dev": true,
-            "requires": {
-                "define-properties": "^1.1.2",
-                "es-abstract": "^1.10.0",
-                "function-bind": "^1.1.1"
+            "dependencies": {
+                "@jridgewell/gen-mapping": "^0.3.5",
+                "@jridgewell/trace-mapping": "^0.3.25"
             }
         },
-        "arraybuffer.slice": {
-            "version": "0.0.7",
-            "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
-            "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
-            "dev": true
+        "node_modules/@jridgewell/sourcemap-codec": {
+            "version": "1.4.15",
+            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+            "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
         },
-        "arrify": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
-            "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
-            "dev": true
+        "node_modules/@jridgewell/trace-mapping": {
+            "version": "0.3.25",
+            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+            "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+            "dependencies": {
+                "@jridgewell/resolve-uri": "^3.1.0",
+                "@jridgewell/sourcemap-codec": "^1.4.14"
+            }
         },
-        "asap": {
-            "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
-            "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
-            "dev": true,
+        "node_modules/@nicolo-ribaudo/chokidar-2": {
+            "version": "2.1.8-no-fsevents.3",
+            "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
+            "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
             "optional": true
         },
-        "asn1": {
-            "version": "0.2.4",
-            "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
-            "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
-            "dev": true,
-            "requires": {
-                "safer-buffer": "~2.1.0"
+        "node_modules/@nodelib/fs.scandir": {
+            "version": "2.1.5",
+            "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+            "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+            "dependencies": {
+                "@nodelib/fs.stat": "2.0.5",
+                "run-parallel": "^1.1.9"
+            },
+            "engines": {
+                "node": ">= 8"
             }
         },
-        "asn1.js": {
-            "version": "4.10.1",
-            "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
-            "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
-            "dev": true,
-            "requires": {
-                "bn.js": "^4.0.0",
-                "inherits": "^2.0.1",
-                "minimalistic-assert": "^1.0.0"
+        "node_modules/@nodelib/fs.stat": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+            "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+            "engines": {
+                "node": ">= 8"
             }
         },
-        "assert": {
-            "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
-            "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
-            "dev": true,
-            "requires": {
-                "object-assign": "^4.1.1",
-                "util": "0.10.3"
+        "node_modules/@nodelib/fs.walk": {
+            "version": "1.2.8",
+            "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+            "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+            "dependencies": {
+                "@nodelib/fs.scandir": "2.1.5",
+                "fastq": "^1.6.0"
             },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/@samverschueren/stream-to-observable": {
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz",
+            "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==",
+            "dev": true,
             "dependencies": {
-                "inherits": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-                    "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
-                    "dev": true
+                "any-observable": "^0.3.0"
+            },
+            "engines": {
+                "node": ">=6"
+            },
+            "peerDependenciesMeta": {
+                "rxjs": {
+                    "optional": true
                 },
-                "util": {
-                    "version": "0.10.3",
-                    "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
-                    "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "2.0.1"
-                    }
+                "zen-observable": {
+                    "optional": true
                 }
             }
         },
-        "assert-plus": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-            "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-            "dev": true
-        },
-        "assign-symbols": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-            "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
-        },
-        "astral-regex": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
-            "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
-            "dev": true
+        "node_modules/@socket.io/component-emitter": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+            "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
         },
-        "async": {
-            "version": "2.6.3",
-            "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
-            "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+        "node_modules/@stylelint/postcss-css-in-js": {
+            "version": "0.37.3",
+            "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz",
+            "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==",
+            "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
             "dev": true,
-            "requires": {
-                "lodash": "^4.17.14"
+            "dependencies": {
+                "@babel/core": "^7.17.9"
+            },
+            "peerDependencies": {
+                "postcss": ">=7.0.0",
+                "postcss-syntax": ">=0.36.2"
             }
         },
-        "async-done": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
-            "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
+        "node_modules/@stylelint/postcss-markdown": {
+            "version": "0.36.2",
+            "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz",
+            "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==",
+            "deprecated": "Use the original unforked package instead: postcss-markdown",
             "dev": true,
-            "requires": {
-                "end-of-stream": "^1.1.0",
-                "once": "^1.3.2",
-                "process-nextick-args": "^2.0.0",
-                "stream-exhaust": "^1.0.1"
+            "dependencies": {
+                "remark": "^13.0.0",
+                "unist-util-find-all-after": "^3.0.2"
+            },
+            "peerDependencies": {
+                "postcss": ">=7.0.0",
+                "postcss-syntax": ">=0.36.2"
             }
         },
-        "async-each": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
-            "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
-        },
-        "async-each-series": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
-            "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=",
-            "dev": true
-        },
-        "async-foreach": {
-            "version": "0.1.3",
-            "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
-            "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
-            "dev": true
-        },
-        "async-limiter": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
-            "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+        "node_modules/@svgr/babel-plugin-add-jsx-attribute": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz",
+            "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "async-settle": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
-            "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=",
-            "dev": true,
-            "requires": {
-                "async-done": "^1.2.2"
+        "node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
+            "version": "8.0.0",
+            "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz",
+            "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==",
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "asynckit": {
-            "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-            "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
-            "dev": true
+        "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
+            "version": "8.0.0",
+            "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz",
+            "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==",
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "atob": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
-            "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+        "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz",
+            "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "atomic-reactor-cli": {
-            "version": "2.1.12",
-            "resolved": "https://registry.npmjs.org/atomic-reactor-cli/-/atomic-reactor-cli-2.1.12.tgz",
-            "integrity": "sha512-abO4FuC96aXddlClZs9EnEiJuPGJhLclGQlRio9At1XXultOPvjeMEe2WYy9e0hY4rranks0EhFXo+1uW8uHxw==",
-            "dev": true,
-            "requires": {
-                "action-sequence": "^1.0.6",
-                "axios": "^0.19.0",
-                "camelcase": "^5.3.1",
-                "chalk": "^2.4.2",
-                "cli-spinners": "^2.2.0",
-                "commander": "^2.16.0",
-                "decamelize": "^2.0.0",
-                "decompress": "^4.2.0",
-                "folder-zipper": "^1.0.0",
-                "fs-extra": "^2.1.2",
-                "fs-readdir-recursive": "^1.1.0",
-                "globby": "^10.0.1",
-                "handlebars": "^4.3.0",
-                "moment": "^2.24.0",
-                "object-path": "^0.11.4",
-                "ora": "^1.2.0",
-                "prettier": "^1.14.3",
-                "prompt": "^1.0.0",
-                "request": "^2.88.0",
-                "semver": "^6.3.0",
-                "slugify": "^1.3.5",
-                "underscore": "^1.9.1"
-            },
-            "dependencies": {
-                "decamelize": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
-                    "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==",
-                    "dev": true,
-                    "requires": {
-                        "xregexp": "4.0.0"
-                    }
-                },
-                "fs-extra": {
-                    "version": "2.1.2",
-                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",
-                    "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "jsonfile": "^2.1.0"
-                    }
-                },
-                "jsonfile": {
-                    "version": "2.4.0",
-                    "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
-                    "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.6"
-                    }
-                },
-                "ora": {
-                    "version": "1.4.0",
-                    "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz",
-                    "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.1.0",
-                        "cli-cursor": "^2.1.0",
-                        "cli-spinners": "^1.0.1",
-                        "log-symbols": "^2.1.0"
-                    },
-                    "dependencies": {
-                        "cli-spinners": {
-                            "version": "1.3.1",
-                            "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
-                            "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
-                            "dev": true
-                        }
-                    }
-                }
+        "node_modules/@svgr/babel-plugin-svg-dynamic-title": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz",
+            "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "autoprefixer": {
-            "version": "9.6.1",
-            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz",
-            "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.6.3",
-                "caniuse-lite": "^1.0.30000980",
-                "chalk": "^2.4.2",
-                "normalize-range": "^0.1.2",
-                "num2fraction": "^1.2.2",
-                "postcss": "^7.0.17",
-                "postcss-value-parser": "^4.0.0"
+        "node_modules/@svgr/babel-plugin-svg-em-dimensions": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz",
+            "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "aws-sign2": {
-            "version": "0.7.0",
-            "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-            "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
-            "dev": true
+        "node_modules/@svgr/babel-plugin-transform-react-native-svg": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz",
+            "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "aws4": {
-            "version": "1.8.0",
-            "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
-            "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
-            "dev": true
+        "node_modules/@svgr/babel-plugin-transform-svg-component": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz",
+            "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
         },
-        "axios": {
-            "version": "0.19.0",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
-            "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==",
-            "requires": {
-                "follow-redirects": "1.5.10",
-                "is-buffer": "^2.0.2"
+        "node_modules/@svgr/babel-preset": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz",
+            "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==",
+            "dependencies": {
+                "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1",
+                "@svgr/babel-plugin-remove-jsx-attribute": "*",
+                "@svgr/babel-plugin-remove-jsx-empty-expression": "*",
+                "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1",
+                "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1",
+                "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1",
+                "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1",
+                "@svgr/babel-plugin-transform-svg-component": "^6.5.1"
             },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
+        },
+        "node_modules/@svgr/core": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz",
+            "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==",
             "dependencies": {
-                "is-buffer": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
-                    "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw=="
-                }
+                "@babel/core": "^7.19.6",
+                "@svgr/babel-preset": "^6.5.1",
+                "@svgr/plugin-jsx": "^6.5.1",
+                "camelcase": "^6.2.0",
+                "cosmiconfig": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
             }
         },
-        "babel-core": {
-            "version": "7.0.0-bridge.0",
-            "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
-            "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
-            "dev": true
+        "node_modules/@svgr/core/node_modules/camelcase": {
+            "version": "6.3.0",
+            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+            "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
         },
-        "babel-eslint": {
-            "version": "10.0.3",
-            "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz",
-            "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==",
-            "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.0.0",
-                "@babel/parser": "^7.0.0",
-                "@babel/traverse": "^7.0.0",
-                "@babel/types": "^7.0.0",
-                "eslint-visitor-keys": "^1.0.0",
-                "resolve": "^1.12.0"
+        "node_modules/@svgr/hast-util-to-babel-ast": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz",
+            "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==",
+            "dependencies": {
+                "@babel/types": "^7.20.0",
+                "entities": "^4.4.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
             }
         },
-        "babel-extract-comments": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz",
-            "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==",
-            "dev": true,
-            "requires": {
-                "babylon": "^6.18.0"
+        "node_modules/@svgr/plugin-jsx": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz",
+            "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==",
+            "dependencies": {
+                "@babel/core": "^7.19.6",
+                "@svgr/babel-preset": "^6.5.1",
+                "@svgr/hast-util-to-babel-ast": "^6.5.1",
+                "svg-parser": "^2.0.4"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@svgr/core": "^6.0.0"
             }
         },
-        "babel-jest": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz",
-            "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==",
-            "dev": true,
-            "requires": {
-                "@jest/transform": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "@types/babel__core": "^7.1.0",
-                "babel-plugin-istanbul": "^5.1.0",
-                "babel-preset-jest": "^24.9.0",
-                "chalk": "^2.4.2",
-                "slash": "^2.0.0"
+        "node_modules/@svgr/plugin-svgo": {
+            "version": "6.5.1",
+            "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz",
+            "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==",
+            "dependencies": {
+                "cosmiconfig": "^7.0.1",
+                "deepmerge": "^4.2.2",
+                "svgo": "^2.8.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
+            },
+            "peerDependencies": {
+                "@svgr/core": "*"
             }
         },
-        "babel-loader": {
-            "version": "8.0.6",
-            "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz",
-            "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==",
-            "dev": true,
-            "requires": {
-                "find-cache-dir": "^2.0.0",
-                "loader-utils": "^1.0.2",
-                "mkdirp": "^0.5.1",
-                "pify": "^4.0.1"
+        "node_modules/@svgr/webpack": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.3.1.tgz",
+            "integrity": "sha512-eODxwIUShLxSMaRjzJtrj9wg89D75JLczvWg9SaB5W+OtVTkiC1vdGd8+t+pf5fTlBOy4RRXAq7x1E3DUl3D0A==",
+            "dependencies": {
+                "@babel/core": "^7.18.5",
+                "@babel/plugin-transform-react-constant-elements": "^7.17.12",
+                "@babel/preset-env": "^7.18.2",
+                "@babel/preset-react": "^7.17.12",
+                "@babel/preset-typescript": "^7.17.12",
+                "@svgr/core": "^6.3.1",
+                "@svgr/plugin-jsx": "^6.3.1",
+                "@svgr/plugin-svgo": "^6.3.1"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/gregberge"
             }
         },
-        "babel-plugin-dynamic-import-node": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
-            "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
-            "dev": true,
-            "requires": {
-                "object.assign": "^4.1.0"
+        "node_modules/@trysound/sax": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+            "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "babel-plugin-istanbul": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz",
-            "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==",
+        "node_modules/@types/cookie": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+            "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
+            "dev": true
+        },
+        "node_modules/@types/cors": {
+            "version": "2.8.17",
+            "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+            "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "find-up": "^3.0.0",
-                "istanbul-lib-instrument": "^3.3.0",
-                "test-exclude": "^5.2.3"
+            "dependencies": {
+                "@types/node": "*"
             }
         },
-        "babel-plugin-jest-hoist": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz",
-            "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==",
+        "node_modules/@types/eslint": {
+            "version": "8.56.10",
+            "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
+            "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
             "dev": true,
-            "requires": {
-                "@types/babel__traverse": "^7.0.6"
+            "dependencies": {
+                "@types/estree": "*",
+                "@types/json-schema": "*"
             }
         },
-        "babel-plugin-module-resolver": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz",
-            "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==",
+        "node_modules/@types/eslint-scope": {
+            "version": "3.7.7",
+            "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+            "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
             "dev": true,
-            "requires": {
-                "find-babel-config": "^1.1.0",
-                "glob": "^7.1.2",
-                "pkg-up": "^2.0.0",
-                "reselect": "^3.0.1",
-                "resolve": "^1.4.0"
+            "dependencies": {
+                "@types/eslint": "*",
+                "@types/estree": "*"
             }
         },
-        "babel-plugin-syntax-object-rest-spread": {
-            "version": "6.13.0",
-            "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
-            "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+        "node_modules/@types/estree": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+            "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
             "dev": true
         },
-        "babel-plugin-transform-object-rest-spread": {
-            "version": "6.26.0",
-            "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
-            "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+        "node_modules/@types/glob": {
+            "version": "7.2.0",
+            "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+            "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
             "dev": true,
-            "requires": {
-                "babel-plugin-syntax-object-rest-spread": "^6.8.0",
-                "babel-runtime": "^6.26.0"
+            "dependencies": {
+                "@types/minimatch": "*",
+                "@types/node": "*"
             }
         },
-        "babel-preset-jest": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz",
-            "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==",
+        "node_modules/@types/json-schema": {
+            "version": "7.0.15",
+            "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+            "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+            "dev": true
+        },
+        "node_modules/@types/mdast": {
+            "version": "3.0.15",
+            "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz",
+            "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==",
             "dev": true,
-            "requires": {
-                "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
-                "babel-plugin-jest-hoist": "^24.9.0"
+            "dependencies": {
+                "@types/unist": "^2"
             }
         },
-        "babel-runtime": {
-            "version": "6.26.0",
-            "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-            "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-            "requires": {
-                "core-js": "^2.4.0",
-                "regenerator-runtime": "^0.11.0"
-            },
+        "node_modules/@types/minimatch": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+            "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+            "dev": true
+        },
+        "node_modules/@types/minimist": {
+            "version": "1.2.5",
+            "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
+            "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
+            "dev": true
+        },
+        "node_modules/@types/node": {
+            "version": "20.12.8",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz",
+            "integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==",
+            "dev": true,
             "dependencies": {
-                "core-js": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
-                    "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
-                },
-                "regenerator-runtime": {
-                    "version": "0.11.1",
-                    "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-                    "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
-                }
+                "undici-types": "~5.26.4"
             }
         },
-        "babylon": {
-            "version": "6.18.0",
-            "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
-            "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+        "node_modules/@types/normalize-package-data": {
+            "version": "2.4.4",
+            "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+            "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
             "dev": true
         },
-        "bach": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
-            "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=",
-            "dev": true,
-            "requires": {
-                "arr-filter": "^1.1.1",
-                "arr-flatten": "^1.0.1",
-                "arr-map": "^2.0.0",
-                "array-each": "^1.0.0",
-                "array-initial": "^1.0.0",
-                "array-last": "^1.1.1",
-                "async-done": "^1.2.2",
-                "async-settle": "^1.0.0",
-                "now-and-later": "^2.0.0"
-            }
-        },
-        "backo2": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
-            "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
-            "dev": true
+        "node_modules/@types/parse-json": {
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+            "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="
         },
-        "bail": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz",
-            "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==",
+        "node_modules/@types/parse5": {
+            "version": "5.0.3",
+            "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz",
+            "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==",
             "dev": true
         },
-        "balanced-match": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-            "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+        "node_modules/@types/prop-types": {
+            "version": "15.7.12",
+            "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
+            "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==",
+            "dev": true
         },
-        "base": {
-            "version": "0.11.2",
-            "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-            "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
-            "requires": {
-                "cache-base": "^1.0.1",
-                "class-utils": "^0.3.5",
-                "component-emitter": "^1.2.1",
-                "define-property": "^1.0.0",
-                "isobject": "^3.0.1",
-                "mixin-deep": "^1.2.0",
-                "pascalcase": "^0.1.1"
-            },
+        "node_modules/@types/react": {
+            "version": "18.3.3",
+            "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
+            "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
+            "dev": true,
             "dependencies": {
-                "define-property": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-                    "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-                    "requires": {
-                        "is-descriptor": "^1.0.0"
-                    }
-                },
-                "is-accessor-descriptor": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-                    "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-                    "requires": {
-                        "kind-of": "^6.0.0"
-                    }
-                },
-                "is-data-descriptor": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-                    "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-                    "requires": {
-                        "kind-of": "^6.0.0"
-                    }
-                },
-                "is-descriptor": {
-                    "version": "1.0.2",
-                    "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-                    "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-                    "requires": {
-                        "is-accessor-descriptor": "^1.0.0",
-                        "is-data-descriptor": "^1.0.0",
-                        "kind-of": "^6.0.2"
-                    }
-                }
+                "@types/prop-types": "*",
+                "csstype": "^3.0.2"
             }
         },
-        "base16": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz",
-            "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA="
+        "node_modules/@types/triple-beam": {
+            "version": "1.3.5",
+            "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz",
+            "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==",
+            "dev": true
         },
-        "base64-arraybuffer": {
-            "version": "0.1.5",
-            "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
-            "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+        "node_modules/@types/unist": {
+            "version": "2.0.10",
+            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
+            "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==",
             "dev": true
         },
-        "base64-js": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
-            "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+        "node_modules/@webassemblyjs/ast": {
+            "version": "1.12.1",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
+            "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
+            "dev": true,
+            "dependencies": {
+                "@webassemblyjs/helper-numbers": "1.11.6",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+            }
+        },
+        "node_modules/@webassemblyjs/floating-point-hex-parser": {
+            "version": "1.11.6",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+            "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
             "dev": true
         },
-        "base64id": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
-            "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+        "node_modules/@webassemblyjs/helper-api-error": {
+            "version": "1.11.6",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+            "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
             "dev": true
         },
-        "basic-auth": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
-            "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
-            "requires": {
-                "safe-buffer": "5.1.2"
-            }
-        },
-        "batch": {
-            "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-            "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+        "node_modules/@webassemblyjs/helper-buffer": {
+            "version": "1.12.1",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
+            "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
             "dev": true
         },
-        "bcrypt-pbkdf": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-            "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+        "node_modules/@webassemblyjs/helper-numbers": {
+            "version": "1.11.6",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+            "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
             "dev": true,
-            "requires": {
-                "tweetnacl": "^0.14.3"
+            "dependencies": {
+                "@webassemblyjs/floating-point-hex-parser": "1.11.6",
+                "@webassemblyjs/helper-api-error": "1.11.6",
+                "@xtuc/long": "4.2.2"
             }
         },
-        "bcryptjs": {
-            "version": "2.4.3",
-            "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
-            "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms="
-        },
-        "beeper": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
-            "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+        "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+            "version": "1.11.6",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+            "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
             "dev": true
         },
-        "better-assert": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
-            "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+        "node_modules/@webassemblyjs/helper-wasm-section": {
+            "version": "1.12.1",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
+            "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
             "dev": true,
-            "requires": {
-                "callsite": "1.0.0"
+            "dependencies": {
+                "@webassemblyjs/ast": "1.12.1",
+                "@webassemblyjs/helper-buffer": "1.12.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+                "@webassemblyjs/wasm-gen": "1.12.1"
             }
         },
-        "big.js": {
-            "version": "5.2.2",
-            "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-            "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
-            "dev": true
-        },
-        "binary-extensions": {
-            "version": "1.13.1",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
-            "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
-        },
-        "bl": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
-            "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+        "node_modules/@webassemblyjs/ieee754": {
+            "version": "1.11.6",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+            "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
             "dev": true,
-            "requires": {
-                "readable-stream": "^2.3.5",
-                "safe-buffer": "^5.1.1"
+            "dependencies": {
+                "@xtuc/ieee754": "^1.2.0"
             }
         },
-        "blob": {
-            "version": "0.0.5",
-            "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
-            "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
-            "dev": true
-        },
-        "block-stream": {
-            "version": "0.0.9",
-            "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
-            "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+        "node_modules/@webassemblyjs/leb128": {
+            "version": "1.11.6",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+            "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
             "dev": true,
-            "requires": {
-                "inherits": "~2.0.0"
+            "dependencies": {
+                "@xtuc/long": "4.2.2"
             }
         },
-        "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
-        },
-        "bn.js": {
-            "version": "4.11.8",
-            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
-            "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+        "node_modules/@webassemblyjs/utf8": {
+            "version": "1.11.6",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+            "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
             "dev": true
         },
-        "body-parser": {
-            "version": "1.19.0",
-            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
-            "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
-            "requires": {
-                "bytes": "3.1.0",
-                "content-type": "~1.0.4",
-                "debug": "2.6.9",
-                "depd": "~1.1.2",
-                "http-errors": "1.7.2",
-                "iconv-lite": "0.4.24",
-                "on-finished": "~2.3.0",
-                "qs": "6.7.0",
-                "raw-body": "2.4.0",
-                "type-is": "~1.6.17"
+        "node_modules/@webassemblyjs/wasm-edit": {
+            "version": "1.12.1",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
+            "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
+            "dev": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.12.1",
+                "@webassemblyjs/helper-buffer": "1.12.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+                "@webassemblyjs/helper-wasm-section": "1.12.1",
+                "@webassemblyjs/wasm-gen": "1.12.1",
+                "@webassemblyjs/wasm-opt": "1.12.1",
+                "@webassemblyjs/wasm-parser": "1.12.1",
+                "@webassemblyjs/wast-printer": "1.12.1"
             }
         },
-        "boolbase": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-            "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
-            "dev": true
+        "node_modules/@webassemblyjs/wasm-gen": {
+            "version": "1.12.1",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
+            "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
+            "dev": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.12.1",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+                "@webassemblyjs/ieee754": "1.11.6",
+                "@webassemblyjs/leb128": "1.11.6",
+                "@webassemblyjs/utf8": "1.11.6"
+            }
         },
-        "boxen": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
-            "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
-            "dev": true,
-            "requires": {
-                "ansi-align": "^2.0.0",
-                "camelcase": "^4.0.0",
-                "chalk": "^2.0.1",
-                "cli-boxes": "^1.0.0",
-                "string-width": "^2.0.0",
-                "term-size": "^1.2.0",
-                "widest-line": "^2.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
-                },
-                "camelcase": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
-                    "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
-                    "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=",
-                    "dev": true
-                },
-                "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=",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^3.0.0"
-                    }
-                }
+        "node_modules/@webassemblyjs/wasm-opt": {
+            "version": "1.12.1",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
+            "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
+            "dev": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.12.1",
+                "@webassemblyjs/helper-buffer": "1.12.1",
+                "@webassemblyjs/wasm-gen": "1.12.1",
+                "@webassemblyjs/wasm-parser": "1.12.1"
             }
         },
-        "brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-            "requires": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
+        "node_modules/@webassemblyjs/wasm-parser": {
+            "version": "1.12.1",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
+            "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
+            "dev": true,
+            "dependencies": {
+                "@webassemblyjs/ast": "1.12.1",
+                "@webassemblyjs/helper-api-error": "1.11.6",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+                "@webassemblyjs/ieee754": "1.11.6",
+                "@webassemblyjs/leb128": "1.11.6",
+                "@webassemblyjs/utf8": "1.11.6"
             }
         },
-        "braces": {
-            "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-            "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-            "requires": {
-                "arr-flatten": "^1.1.0",
-                "array-unique": "^0.3.2",
-                "extend-shallow": "^2.0.1",
-                "fill-range": "^4.0.0",
-                "isobject": "^3.0.1",
-                "repeat-element": "^1.1.2",
-                "snapdragon": "^0.8.1",
-                "snapdragon-node": "^2.0.1",
-                "split-string": "^3.0.2",
-                "to-regex": "^3.0.1"
-            },
+        "node_modules/@webassemblyjs/wast-printer": {
+            "version": "1.12.1",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
+            "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
+            "dev": true,
             "dependencies": {
-                "extend-shallow": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-                    "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-                    "requires": {
-                        "is-extendable": "^0.1.0"
-                    }
-                }
+                "@webassemblyjs/ast": "1.12.1",
+                "@xtuc/long": "4.2.2"
             }
         },
-        "brorand": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
-            "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+        "node_modules/@xtuc/ieee754": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+            "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
             "dev": true
         },
-        "browser-process-hrtime": {
-            "version": "0.1.3",
-            "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
-            "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==",
+        "node_modules/@xtuc/long": {
+            "version": "4.2.2",
+            "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+            "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+            "dev": true
+        },
+        "node_modules/abbrev": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+            "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
             "dev": true
         },
-        "browser-resolve": {
-            "version": "1.11.3",
-            "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
-            "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+        "node_modules/abort-controller": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+            "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
             "dev": true,
-            "requires": {
-                "resolve": "1.1.7"
+            "dependencies": {
+                "event-target-shim": "^5.0.0"
             },
+            "engines": {
+                "node": ">=6.5"
+            }
+        },
+        "node_modules/accepts": {
+            "version": "1.3.8",
+            "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+            "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
             "dependencies": {
-                "resolve": {
-                    "version": "1.1.7",
-                    "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
-                    "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
-                    "dev": true
-                }
+                "mime-types": "~2.1.34",
+                "negotiator": "0.6.3"
+            },
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "browser-sync": {
-            "version": "2.26.7",
-            "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.7.tgz",
-            "integrity": "sha512-lY3emme0OyvA2ujEMpRmyRy9LY6gHLuTr2/ABxhIm3lADOiRXzP4dgekvnDrQqZ/Ec2Fz19lEjm6kglSG5766w==",
+        "node_modules/acorn": {
+            "version": "6.4.2",
+            "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+            "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
             "dev": true,
-            "requires": {
-                "browser-sync-client": "^2.26.6",
-                "browser-sync-ui": "^2.26.4",
-                "bs-recipes": "1.3.4",
-                "bs-snippet-injector": "^2.0.1",
-                "chokidar": "^2.0.4",
-                "connect": "3.6.6",
-                "connect-history-api-fallback": "^1",
-                "dev-ip": "^1.0.1",
-                "easy-extender": "^2.3.4",
-                "eazy-logger": "^3",
-                "etag": "^1.8.1",
-                "fresh": "^0.5.2",
-                "fs-extra": "3.0.1",
-                "http-proxy": "1.15.2",
-                "immutable": "^3",
-                "localtunnel": "1.9.2",
-                "micromatch": "^3.1.10",
-                "opn": "5.3.0",
-                "portscanner": "2.1.1",
-                "qs": "6.2.3",
-                "raw-body": "^2.3.2",
-                "resp-modifier": "6.0.2",
-                "rx": "4.1.0",
-                "send": "0.16.2",
-                "serve-index": "1.9.1",
-                "serve-static": "1.13.2",
-                "server-destroy": "1.0.1",
-                "socket.io": "2.1.1",
-                "ua-parser-js": "0.7.17",
-                "yargs": "6.4.0"
+            "bin": {
+                "acorn": "bin/acorn"
             },
-            "dependencies": {
-                "camelcase": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-                    "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-                    "dev": true
-                },
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                },
-                "eventemitter3": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
-                    "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
-                    "dev": true
-                },
-                "find-up": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-                    "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-                    "dev": true,
-                    "requires": {
-                        "path-exists": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "fs-extra": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
-                    "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "jsonfile": "^3.0.0",
-                        "universalify": "^0.1.0"
-                    }
-                },
-                "http-errors": {
-                    "version": "1.6.3",
-                    "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-                    "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
-                    "dev": true,
-                    "requires": {
-                        "depd": "~1.1.2",
-                        "inherits": "2.0.3",
-                        "setprototypeof": "1.1.0",
-                        "statuses": ">= 1.4.0 < 2"
-                    }
-                },
-                "http-proxy": {
-                    "version": "1.15.2",
-                    "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz",
-                    "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=",
-                    "dev": true,
-                    "requires": {
-                        "eventemitter3": "1.x.x",
-                        "requires-port": "1.x.x"
-                    }
-                },
-                "inherits": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-                    "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-                    "dev": true
-                },
-                "jsonfile": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
-                    "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.6"
-                    }
-                },
-                "load-json-file": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-                    "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "parse-json": "^2.2.0",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0",
-                        "strip-bom": "^2.0.0"
-                    }
-                },
-                "mime": {
-                    "version": "1.4.1",
-                    "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
-                    "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
-                    "dev": true
-                },
-                "parse-json": {
-                    "version": "2.2.0",
-                    "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-                    "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-                    "dev": true,
-                    "requires": {
-                        "error-ex": "^1.2.0"
-                    }
-                },
-                "path-exists": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-                    "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-                    "dev": true,
-                    "requires": {
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "path-type": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-                    "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "pify": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                    "dev": true
-                },
-                "qs": {
-                    "version": "6.2.3",
-                    "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz",
-                    "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=",
-                    "dev": true
-                },
-                "read-pkg": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-                    "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-                    "dev": true,
-                    "requires": {
-                        "load-json-file": "^1.0.0",
-                        "normalize-package-data": "^2.3.2",
-                        "path-type": "^1.0.0"
-                    }
-                },
-                "read-pkg-up": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-                    "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-                    "dev": true,
-                    "requires": {
-                        "find-up": "^1.0.0",
-                        "read-pkg": "^1.0.0"
-                    }
-                },
-                "require-main-filename": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-                    "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
-                    "dev": true
-                },
-                "send": {
-                    "version": "0.16.2",
-                    "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
-                    "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
-                    "dev": true,
-                    "requires": {
-                        "debug": "2.6.9",
-                        "depd": "~1.1.2",
-                        "destroy": "~1.0.4",
-                        "encodeurl": "~1.0.2",
-                        "escape-html": "~1.0.3",
-                        "etag": "~1.8.1",
-                        "fresh": "0.5.2",
-                        "http-errors": "~1.6.2",
-                        "mime": "1.4.1",
-                        "ms": "2.0.0",
-                        "on-finished": "~2.3.0",
-                        "range-parser": "~1.2.0",
-                        "statuses": "~1.4.0"
-                    }
-                },
-                "serve-static": {
-                    "version": "1.13.2",
-                    "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
-                    "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
-                    "dev": true,
-                    "requires": {
-                        "encodeurl": "~1.0.2",
-                        "escape-html": "~1.0.3",
-                        "parseurl": "~1.3.2",
-                        "send": "0.16.2"
-                    }
-                },
-                "setprototypeof": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-                    "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-                    "dev": true
-                },
-                "statuses": {
-                    "version": "1.4.0",
-                    "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
-                    "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
-                    "dev": true
-                },
-                "strip-bom": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-                    "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-                    "dev": true,
-                    "requires": {
-                        "is-utf8": "^0.2.0"
-                    }
-                },
-                "yargs": {
-                    "version": "6.4.0",
-                    "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz",
-                    "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^3.0.0",
-                        "cliui": "^3.2.0",
-                        "decamelize": "^1.1.1",
-                        "get-caller-file": "^1.0.1",
-                        "os-locale": "^1.4.0",
-                        "read-pkg-up": "^1.0.1",
-                        "require-directory": "^2.1.1",
-                        "require-main-filename": "^1.0.1",
-                        "set-blocking": "^2.0.0",
-                        "string-width": "^1.0.2",
-                        "which-module": "^1.0.0",
-                        "window-size": "^0.2.0",
-                        "y18n": "^3.2.1",
-                        "yargs-parser": "^4.1.0"
-                    }
-                }
+            "engines": {
+                "node": ">=0.4.0"
             }
         },
-        "browser-sync-client": {
-            "version": "2.26.6",
-            "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.6.tgz",
-            "integrity": "sha512-mGrkZdNzttKdf/16I+y+2dTQxoMCIpKbVIMJ/uP8ZpnKu9f9qa/2CYVtLtbjZG8nsM14EwiCrjuFTGBEnT3Gjw==",
+        "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,
-            "requires": {
-                "etag": "1.8.1",
-                "fresh": "0.5.2",
-                "mitt": "^1.1.3",
-                "rxjs": "^5.5.6"
+            "peerDependencies": {
+                "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
             }
         },
-        "browser-sync-ui": {
-            "version": "2.26.4",
-            "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz",
-            "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==",
+        "node_modules/action-sequence": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/action-sequence/-/action-sequence-1.1.2.tgz",
+            "integrity": "sha512-i8bDSIewSmPWKAciwfem3NSmf8zdQ1HdPKGjruHTgoXiyk/kntuZUiUJRXDLO7ec5WcwCosTyJoiTMWPqLQ+9g=="
+        },
+        "node_modules/aggregate-error": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+            "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
             "dev": true,
-            "requires": {
-                "async-each-series": "0.1.1",
-                "connect-history-api-fallback": "^1",
-                "immutable": "^3",
-                "server-destroy": "1.0.1",
-                "socket.io-client": "^2.0.4",
-                "stream-throttle": "^0.1.3"
+            "dependencies": {
+                "clean-stack": "^2.0.0",
+                "indent-string": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "browserify-aes": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
-            "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+        "node_modules/aggregate-error/node_modules/indent-string": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+            "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
             "dev": true,
-            "requires": {
-                "buffer-xor": "^1.0.3",
-                "cipher-base": "^1.0.0",
-                "create-hash": "^1.1.0",
-                "evp_bytestokey": "^1.0.3",
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.0.1"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "browserify-cipher": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
-            "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+        "node_modules/ajv": {
+            "version": "8.14.0",
+            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz",
+            "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==",
             "dev": true,
-            "requires": {
-                "browserify-aes": "^1.0.4",
-                "browserify-des": "^1.0.0",
-                "evp_bytestokey": "^1.0.0"
+            "dependencies": {
+                "fast-deep-equal": "^3.1.3",
+                "json-schema-traverse": "^1.0.0",
+                "require-from-string": "^2.0.2",
+                "uri-js": "^4.4.1"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/epoberezkin"
             }
         },
-        "browserify-des": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
-            "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+        "node_modules/ajv-formats": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+            "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
             "dev": true,
-            "requires": {
-                "cipher-base": "^1.0.1",
-                "des.js": "^1.0.0",
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.1.2"
+            "dependencies": {
+                "ajv": "^8.0.0"
+            },
+            "peerDependencies": {
+                "ajv": "^8.0.0"
+            },
+            "peerDependenciesMeta": {
+                "ajv": {
+                    "optional": true
+                }
             }
         },
-        "browserify-rsa": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
-            "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+        "node_modules/ajv-keywords": {
+            "version": "5.1.0",
+            "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+            "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
             "dev": true,
-            "requires": {
-                "bn.js": "^4.1.0",
-                "randombytes": "^2.0.1"
+            "dependencies": {
+                "fast-deep-equal": "^3.1.3"
+            },
+            "peerDependencies": {
+                "ajv": "^8.8.2"
             }
         },
-        "browserify-sign": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
-            "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+        "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,
-            "requires": {
-                "bn.js": "^4.1.1",
-                "browserify-rsa": "^4.0.0",
-                "create-hash": "^1.1.0",
-                "create-hmac": "^1.1.2",
-                "elliptic": "^6.0.0",
-                "inherits": "^2.0.1",
-                "parse-asn1": "^5.0.0"
+            "engines": {
+                "node": ">=6"
             }
         },
-        "browserify-zlib": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
-            "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+        "node_modules/ansi-escapes": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+            "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
             "dev": true,
-            "requires": {
-                "pako": "~1.0.5"
+            "engines": {
+                "node": ">=4"
             }
         },
-        "browserslist": {
-            "version": "4.7.0",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz",
-            "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==",
+        "node_modules/ansi-gray": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+            "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==",
             "dev": true,
-            "requires": {
-                "caniuse-lite": "^1.0.30000989",
-                "electron-to-chromium": "^1.3.247",
-                "node-releases": "^1.1.29"
+            "dependencies": {
+                "ansi-wrap": "0.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "bs-recipes": {
-            "version": "1.3.4",
-            "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
-            "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=",
-            "dev": true
-        },
-        "bs-snippet-injector": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz",
-            "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=",
-            "dev": true
-        },
-        "bser": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz",
-            "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==",
+        "node_modules/ansi-html-community": {
+            "version": "0.0.8",
+            "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
+            "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
             "dev": true,
-            "requires": {
-                "node-int64": "^0.4.0"
+            "engines": [
+                "node >= 0.8.0"
+            ],
+            "bin": {
+                "ansi-html": "bin/ansi-html"
             }
         },
-        "buffer": {
-            "version": "5.4.3",
-            "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
-            "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
+        "node_modules/ansi-regex": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+            "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
             "dev": true,
-            "requires": {
-                "base64-js": "^1.0.2",
-                "ieee754": "^1.1.4"
+            "engines": {
+                "node": ">=4"
             }
         },
-        "buffer-alloc": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
-            "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+        "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==",
+            "dependencies": {
+                "color-convert": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+            }
+        },
+        "node_modules/ansi-wrap": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+            "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==",
             "dev": true,
-            "requires": {
-                "buffer-alloc-unsafe": "^1.1.0",
-                "buffer-fill": "^1.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "buffer-alloc-unsafe": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
-            "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
-            "dev": true
+        "node_modules/any-observable": {
+            "version": "0.3.0",
+            "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
+            "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "buffer-crc32": {
-            "version": "0.2.13",
-            "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
-            "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+        "node_modules/any-promise": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+            "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
             "dev": true
         },
-        "buffer-equal": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
-            "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
-            "dev": true
+        "node_modules/anymatch": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+            "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+            "devOptional": true,
+            "dependencies": {
+                "normalize-path": "^3.0.0",
+                "picomatch": "^2.0.4"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
         },
-        "buffer-fill": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
-            "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
-            "dev": true
+        "node_modules/apache-crypt": {
+            "version": "1.2.6",
+            "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz",
+            "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==",
+            "dependencies": {
+                "unix-crypt-td-js": "^1.1.4"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "buffer-from": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-            "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+        "node_modules/apache-md5": {
+            "version": "1.1.8",
+            "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz",
+            "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==",
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "buffer-xor": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
-            "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
-            "dev": true
-        },
-        "builtin-status-codes": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
-            "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
-            "dev": true
-        },
-        "bytes": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
-            "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
-        },
-        "cacache": {
-            "version": "11.3.3",
-            "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz",
-            "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==",
-            "dev": true,
-            "requires": {
-                "bluebird": "^3.5.5",
-                "chownr": "^1.1.1",
-                "figgy-pudding": "^3.5.1",
-                "glob": "^7.1.4",
-                "graceful-fs": "^4.1.15",
-                "lru-cache": "^5.1.1",
-                "mississippi": "^3.0.0",
-                "mkdirp": "^0.5.1",
-                "move-concurrently": "^1.0.1",
-                "promise-inflight": "^1.0.1",
-                "rimraf": "^2.6.3",
-                "ssri": "^6.0.1",
-                "unique-filename": "^1.1.1",
-                "y18n": "^4.0.0"
-            },
-            "dependencies": {
-                "y18n": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-                    "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-                    "dev": true
-                }
+        "node_modules/apidoc": {
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/apidoc/-/apidoc-0.25.0.tgz",
+            "integrity": "sha512-5g9fp8OffXZOdBTzm4BBvV5Vw54s+NmKnGZIUKuH+gRTqqJuRJpcGN6sz6WnjJ+NcvXhB7rIRp6FhtJahazx2Q==",
+            "dev": true,
+            "dependencies": {
+                "apidoc-core": "^0.12.0",
+                "commander": "^2.20.0",
+                "fs-extra": "^9.0.1",
+                "handlebars": "^4.7.6",
+                "lodash": "^4.17.20",
+                "markdown-it": "^11.0.0",
+                "nodemon": "^2.0.4",
+                "winston": "^3.3.3"
+            },
+            "bin": {
+                "apidoc": "bin/apidoc"
+            },
+            "engines": {
+                "node": ">= 0.10.0"
             }
         },
-        "cache-base": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-            "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
-            "requires": {
-                "collection-visit": "^1.0.0",
-                "component-emitter": "^1.2.1",
-                "get-value": "^2.0.6",
-                "has-value": "^1.0.0",
-                "isobject": "^3.0.1",
-                "set-value": "^2.0.0",
-                "to-object-path": "^0.3.0",
-                "union-value": "^1.0.0",
-                "unset-value": "^1.0.0"
+        "node_modules/apidoc-core": {
+            "version": "0.12.0",
+            "resolved": "https://registry.npmjs.org/apidoc-core/-/apidoc-core-0.12.0.tgz",
+            "integrity": "sha512-VMhkJWz5IAyvWM0RnEbKNi1qe8se+id3/Ki3H/ePM8ih0KYTfaaSDxqo2w4uIVB1UVVKFvrTWyYUyQs7CEcoKQ==",
+            "dev": true,
+            "dependencies": {
+                "fs-extra": "^9.0.1",
+                "glob": "^7.1.6",
+                "iconv-lite": "^0.6.2",
+                "klaw-sync": "^6.0.0",
+                "lodash": "^4.17.20",
+                "semver": "~7.3.2"
+            },
+            "engines": {
+                "node": ">= 0.10.0"
             }
         },
-        "call-me-maybe": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
-            "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
-            "dev": true
-        },
-        "caller-callsite": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
-            "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+        "node_modules/apidoc-core/node_modules/fs-extra": {
+            "version": "9.1.0",
+            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+            "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
             "dev": true,
-            "requires": {
-                "callsites": "^2.0.0"
-            },
             "dependencies": {
-                "callsites": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
-                    "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
-                    "dev": true
-                }
+                "at-least-node": "^1.0.0",
+                "graceful-fs": "^4.2.0",
+                "jsonfile": "^6.0.1",
+                "universalify": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10"
             }
         },
-        "caller-path": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
-            "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+        "node_modules/apidoc-core/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,
-            "requires": {
-                "caller-callsite": "^2.0.0"
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=10"
             }
         },
-        "callsite": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
-            "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
-            "dev": true
+        "node_modules/apidoc-core/node_modules/semver": {
+            "version": "7.3.8",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+            "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+            "dev": true,
+            "dependencies": {
+                "lru-cache": "^6.0.0"
+            },
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
         },
-        "callsites": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-            "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+        "node_modules/apidoc-core/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
         },
-        "camelcase": {
-            "version": "5.3.1",
-            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-            "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+        "node_modules/apidoc/node_modules/commander": {
+            "version": "2.20.3",
+            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
             "dev": true
         },
-        "camelcase-keys": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
-            "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+        "node_modules/apidoc/node_modules/fs-extra": {
+            "version": "9.1.0",
+            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+            "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
             "dev": true,
-            "requires": {
-                "camelcase": "^2.0.0",
-                "map-obj": "^1.0.0"
-            },
             "dependencies": {
-                "camelcase": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-                    "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
-                    "dev": true
-                }
+                "at-least-node": "^1.0.0",
+                "graceful-fs": "^4.2.0",
+                "jsonfile": "^6.0.1",
+                "universalify": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10"
             }
         },
-        "caniuse-lite": {
-            "version": "1.0.30000997",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000997.tgz",
-            "integrity": "sha512-BQLFPIdj2ntgBNWp9Q64LGUIEmvhKkzzHhUHR3CD5A9Lb7ZKF20/+sgadhFap69lk5XmK1fTUleDclaRFvgVUA==",
-            "dev": true
-        },
-        "capture-exit": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
-            "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
+        "node_modules/argparse": {
+            "version": "1.0.10",
+            "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+            "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
             "dev": true,
-            "requires": {
-                "rsvp": "^4.8.4"
+            "dependencies": {
+                "sprintf-js": "~1.0.2"
             }
         },
-        "capture-stack-trace": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
-            "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
-            "dev": true
-        },
-        "caseless": {
-            "version": "0.12.0",
-            "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-            "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
-            "dev": true
-        },
-        "ccount": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz",
-            "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==",
-            "dev": true
-        },
-        "center-align": {
-            "version": "0.1.3",
-            "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
-            "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+        "node_modules/arr-diff": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+            "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
             "dev": true,
-            "requires": {
-                "align-text": "^0.1.3",
-                "lazy-cache": "^1.0.3"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "chalk": {
-            "version": "2.4.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-            "requires": {
-                "ansi-styles": "^3.2.1",
-                "escape-string-regexp": "^1.0.5",
-                "supports-color": "^5.3.0"
+        "node_modules/arr-flatten": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+            "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "character-entities": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz",
-            "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w=="
-        },
-        "character-entities-html4": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz",
-            "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==",
-            "dev": true
+        "node_modules/arr-union": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+            "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "character-entities-legacy": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz",
-            "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww=="
+        "node_modules/array-buffer-byte-length": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+            "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+            "dependencies": {
+                "call-bind": "^1.0.5",
+                "is-array-buffer": "^3.0.4"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
-        "character-reference-invalid": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz",
-            "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg=="
+        "node_modules/array-each": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+            "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "chardet": {
-            "version": "0.7.0",
-            "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
-            "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
-            "dev": true
+        "node_modules/array-flatten": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+            "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
         },
-        "cheerio": {
-            "version": "1.0.0-rc.3",
-            "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
-            "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
+        "node_modules/array-includes": {
+            "version": "3.1.8",
+            "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+            "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
             "dev": true,
-            "requires": {
-                "css-select": "~1.2.0",
-                "dom-serializer": "~0.1.1",
-                "entities": "~1.1.1",
-                "htmlparser2": "^3.9.1",
-                "lodash": "^4.15.0",
-                "parse5": "^3.0.1"
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-object-atoms": "^1.0.0",
+                "get-intrinsic": "^1.2.4",
+                "is-string": "^1.0.7"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "chokidar": {
-            "version": "2.1.8",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
-            "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
-            "requires": {
-                "anymatch": "^2.0.0",
-                "async-each": "^1.0.1",
-                "braces": "^2.3.2",
-                "fsevents": "^1.2.7",
-                "glob-parent": "^3.1.0",
-                "inherits": "^2.0.3",
-                "is-binary-path": "^1.0.0",
-                "is-glob": "^4.0.0",
-                "normalize-path": "^3.0.0",
-                "path-is-absolute": "^1.0.0",
-                "readdirp": "^2.2.1",
-                "upath": "^1.1.1"
+        "node_modules/array-slice": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+            "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "chownr": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
-            "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
-            "dev": true
+        "node_modules/array-union": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+            "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "chrome-trace-event": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
-            "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+        "node_modules/array-unique": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+            "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
             "dev": true,
-            "requires": {
-                "tslib": "^1.9.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "ci-info": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-            "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-            "dev": true
-        },
-        "cipher-base": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
-            "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+        "node_modules/array.prototype.findlast": {
+            "version": "1.2.5",
+            "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+            "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.0.1"
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.0.0",
+                "es-shim-unscopables": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "class-utils": {
-            "version": "0.3.6",
-            "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-            "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
-            "requires": {
-                "arr-union": "^3.1.0",
-                "define-property": "^0.2.5",
-                "isobject": "^3.0.0",
-                "static-extend": "^0.1.1"
-            },
+        "node_modules/array.prototype.flat": {
+            "version": "1.3.2",
+            "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+            "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+            "dev": true,
             "dependencies": {
-                "define-property": {
-                    "version": "0.2.5",
-                    "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-                    "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-                    "requires": {
-                        "is-descriptor": "^0.1.0"
-                    }
-                }
+                "call-bind": "^1.0.2",
+                "define-properties": "^1.2.0",
+                "es-abstract": "^1.22.1",
+                "es-shim-unscopables": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "classnames": {
-            "version": "2.2.6",
-            "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-            "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-        },
-        "clean-css": {
-            "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
-            "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
+        "node_modules/array.prototype.flatmap": {
+            "version": "1.3.2",
+            "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+            "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
             "dev": true,
-            "requires": {
-                "source-map": "~0.6.0"
-            },
             "dependencies": {
-                "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
-                }
+                "call-bind": "^1.0.2",
+                "define-properties": "^1.2.0",
+                "es-abstract": "^1.22.1",
+                "es-shim-unscopables": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "clean-stack": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
-            "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
-            "dev": true
-        },
-        "cli-boxes": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
-            "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
-            "dev": true
+        "node_modules/array.prototype.reduce": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz",
+            "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-array-method-boxes-properly": "^1.0.0",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.0.0",
+                "is-string": "^1.0.7"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
-        "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=",
+        "node_modules/array.prototype.toreversed": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz",
+            "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==",
             "dev": true,
-            "requires": {
-                "restore-cursor": "^2.0.0"
+            "dependencies": {
+                "call-bind": "^1.0.2",
+                "define-properties": "^1.2.0",
+                "es-abstract": "^1.22.1",
+                "es-shim-unscopables": "^1.0.0"
             }
         },
-        "cli-spinners": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz",
-            "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==",
-            "dev": true
-        },
-        "cli-truncate": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
-            "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
+        "node_modules/array.prototype.tosorted": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz",
+            "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==",
             "dev": true,
-            "requires": {
-                "slice-ansi": "0.0.4",
-                "string-width": "^1.0.1"
-            },
             "dependencies": {
-                "slice-ansi": {
-                    "version": "0.0.4",
-                    "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
-                    "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
-                    "dev": true
-                }
+                "call-bind": "^1.0.5",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.22.3",
+                "es-errors": "^1.1.0",
+                "es-shim-unscopables": "^1.0.2"
             }
         },
-        "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
-        },
-        "clipboard": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz",
-            "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==",
-            "optional": true,
-            "requires": {
-                "good-listener": "^1.2.2",
-                "select": "^1.1.2",
-                "tiny-emitter": "^2.0.0"
+        "node_modules/arraybuffer.prototype.slice": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+            "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+            "dependencies": {
+                "array-buffer-byte-length": "^1.0.1",
+                "call-bind": "^1.0.5",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.22.3",
+                "es-errors": "^1.2.1",
+                "get-intrinsic": "^1.2.3",
+                "is-array-buffer": "^3.0.4",
+                "is-shared-array-buffer": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "cliui": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-            "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+        "node_modules/arrify": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+            "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
             "dev": true,
-            "requires": {
-                "string-width": "^1.0.1",
-                "strip-ansi": "^3.0.1",
-                "wrap-ansi": "^2.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "clone": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-            "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-            "dev": true
+        "node_modules/asn1.js": {
+            "version": "4.10.1",
+            "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+            "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+            "dev": true,
+            "dependencies": {
+                "bn.js": "^4.0.0",
+                "inherits": "^2.0.1",
+                "minimalistic-assert": "^1.0.0"
+            }
         },
-        "clone-buffer": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
-            "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+        "node_modules/asn1.js/node_modules/bn.js": {
+            "version": "4.12.0",
+            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+            "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
             "dev": true
         },
-        "clone-regexp": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
-            "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
+        "node_modules/assert": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+            "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
             "dev": true,
-            "requires": {
-                "is-regexp": "^2.0.0"
-            },
             "dependencies": {
-                "is-regexp": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
-                    "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
-                    "dev": true
-                }
+                "call-bind": "^1.0.2",
+                "is-nan": "^1.3.2",
+                "object-is": "^1.1.5",
+                "object.assign": "^4.1.4",
+                "util": "^0.12.5"
             }
         },
-        "clone-stats": {
+        "node_modules/assign-symbols": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
-            "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
-            "dev": true
-        },
-        "cloneable-readable": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
-            "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
+            "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+            "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "process-nextick-args": "^2.0.0",
-                "readable-stream": "^2.3.5"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "co": {
-            "version": "4.6.0",
-            "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-            "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-            "dev": true
-        },
-        "code-point-at": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-            "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-            "dev": true
-        },
-        "collapse-white-space": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz",
-            "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==",
-            "dev": true
-        },
-        "collection-map": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
-            "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=",
+        "node_modules/astral-regex": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+            "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
             "dev": true,
-            "requires": {
-                "arr-map": "^2.0.2",
-                "for-own": "^1.0.0",
-                "make-iterator": "^1.0.0"
-            }
-        },
-        "collection-visit": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-            "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
-            "requires": {
-                "map-visit": "^1.0.0",
-                "object-visit": "^1.0.0"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "color-convert": {
-            "version": "1.9.3",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-            "requires": {
-                "color-name": "1.1.3"
+        "node_modules/async": {
+            "version": "2.6.4",
+            "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+            "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+            "dev": true,
+            "dependencies": {
+                "lodash": "^4.17.14"
             }
         },
-        "color-name": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-            "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
-        },
-        "color-support": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
-            "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
-            "dev": true
-        },
-        "colors": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
-            "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
-            "dev": true
-        },
-        "combined-stream": {
-            "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-            "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+        "node_modules/async-done": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz",
+            "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==",
             "dev": true,
-            "requires": {
-                "delayed-stream": "~1.0.0"
+            "dependencies": {
+                "end-of-stream": "^1.4.4",
+                "once": "^1.4.0",
+                "stream-exhaust": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "comma-separated-tokens": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz",
-            "integrity": "sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ=="
-        },
-        "commander": {
-            "version": "2.20.0",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
-            "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
-        },
-        "common-tags": {
-            "version": "1.8.0",
-            "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
-            "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
-            "dev": true
-        },
-        "commondir": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-            "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
-        },
-        "component-bind": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
-            "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
-            "dev": true
-        },
-        "component-emitter": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
-            "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
-        },
-        "component-inherit": {
-            "version": "0.0.3",
-            "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
-            "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
-            "dev": true
+        "node_modules/async-each": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz",
+            "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "individual",
+                    "url": "https://paulmillr.com/funding/"
+                }
+            ]
         },
-        "compress-commons": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz",
-            "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==",
+        "node_modules/async-each-series": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
+            "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==",
             "dev": true,
-            "requires": {
-                "buffer-crc32": "^0.2.13",
-                "crc32-stream": "^3.0.1",
-                "normalize-path": "^3.0.0",
-                "readable-stream": "^2.3.6"
+            "engines": {
+                "node": ">=0.8.0"
             }
         },
-        "compression-webpack-plugin": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-3.0.0.tgz",
-            "integrity": "sha512-ls+oKw4eRbvaSv/hj9NmctihhBcR26j76JxV0bLRLcWhrUBdQFgd06z/Kgg7exyQvtWWP484wZxs0gIUX3NO0Q==",
-            "dev": true,
-            "requires": {
-                "cacache": "^11.2.0",
-                "find-cache-dir": "^3.0.0",
-                "neo-async": "^2.5.0",
-                "schema-utils": "^1.0.0",
-                "serialize-javascript": "^1.4.0",
-                "webpack-sources": "^1.0.1"
-            },
-            "dependencies": {
-                "find-cache-dir": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.0.0.tgz",
-                    "integrity": "sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw==",
-                    "dev": true,
-                    "requires": {
-                        "commondir": "^1.0.1",
-                        "make-dir": "^3.0.0",
-                        "pkg-dir": "^4.1.0"
-                    }
-                },
-                "find-up": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-                    "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-                    "dev": true,
-                    "requires": {
-                        "locate-path": "^5.0.0",
-                        "path-exists": "^4.0.0"
-                    }
-                },
-                "locate-path": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-                    "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-                    "dev": true,
-                    "requires": {
-                        "p-locate": "^4.1.0"
-                    }
-                },
-                "make-dir": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz",
-                    "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==",
-                    "dev": true,
-                    "requires": {
-                        "semver": "^6.0.0"
-                    }
-                },
-                "p-locate": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-                    "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-                    "dev": true,
-                    "requires": {
-                        "p-limit": "^2.2.0"
-                    }
-                },
-                "path-exists": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-                    "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-                    "dev": true
-                },
-                "pkg-dir": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-                    "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-                    "dev": true,
-                    "requires": {
-                        "find-up": "^4.0.0"
-                    }
-                },
-                "serialize-javascript": {
-                    "version": "1.9.1",
-                    "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
-                    "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
-                    "dev": true
-                }
+        "node_modules/async-settle": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz",
+            "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==",
+            "dev": true,
+            "dependencies": {
+                "async-done": "^2.0.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "concat-map": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-            "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+        "node_modules/asynckit": {
+            "version": "0.4.0",
+            "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+            "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
         },
-        "concat-stream": {
-            "version": "1.6.2",
-            "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-            "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+        "node_modules/at-least-node": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+            "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
             "dev": true,
-            "requires": {
-                "buffer-from": "^1.0.0",
-                "inherits": "^2.0.3",
-                "readable-stream": "^2.2.2",
-                "typedarray": "^0.0.6"
+            "engines": {
+                "node": ">= 4.0.0"
             }
         },
-        "concat-with-sourcemaps": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
-            "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
+        "node_modules/atob": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+            "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
             "dev": true,
-            "requires": {
-                "source-map": "^0.6.1"
+            "bin": {
+                "atob": "bin/atob.js"
             },
-            "dependencies": {
-                "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": ">= 4.5.0"
             }
         },
-        "configstore": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
-            "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
+        "node_modules/autoprefixer": {
+            "version": "10.4.19",
+            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
+            "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
             "dev": true,
-            "requires": {
-                "dot-prop": "^4.1.0",
-                "graceful-fs": "^4.1.2",
-                "make-dir": "^1.0.0",
-                "unique-string": "^1.0.0",
-                "write-file-atomic": "^2.0.0",
-                "xdg-basedir": "^3.0.0"
-            },
-            "dependencies": {
-                "make-dir": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
-                    "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
-                    "dev": true,
-                    "requires": {
-                        "pify": "^3.0.0"
-                    }
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/postcss/"
                 },
-                "pify": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-                    "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-                    "dev": true
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
                 }
+            ],
+            "dependencies": {
+                "browserslist": "^4.23.0",
+                "caniuse-lite": "^1.0.30001599",
+                "fraction.js": "^4.3.7",
+                "normalize-range": "^0.1.2",
+                "picocolors": "^1.0.0",
+                "postcss-value-parser": "^4.2.0"
+            },
+            "bin": {
+                "autoprefixer": "bin/autoprefixer"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14"
+            },
+            "peerDependencies": {
+                "postcss": "^8.1.0"
             }
         },
-        "connect": {
-            "version": "3.6.6",
-            "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
-            "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
-            "dev": true,
-            "requires": {
-                "debug": "2.6.9",
-                "finalhandler": "1.1.0",
-                "parseurl": "~1.3.2",
-                "utils-merge": "1.0.1"
-            },
+        "node_modules/available-typed-arrays": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+            "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
             "dependencies": {
-                "finalhandler": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
-                    "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
-                    "dev": true,
-                    "requires": {
-                        "debug": "2.6.9",
-                        "encodeurl": "~1.0.1",
-                        "escape-html": "~1.0.3",
-                        "on-finished": "~2.3.0",
-                        "parseurl": "~1.3.2",
-                        "statuses": "~1.3.1",
-                        "unpipe": "~1.0.0"
-                    }
-                },
-                "statuses": {
-                    "version": "1.3.1",
-                    "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
-                    "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
-                    "dev": true
-                }
+                "possible-typed-array-names": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "connect-history-api-fallback": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
-            "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
-            "dev": true
+        "node_modules/axios": {
+            "version": "1.7.2",
+            "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
+            "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
+            "dependencies": {
+                "follow-redirects": "^1.15.6",
+                "form-data": "^4.0.0",
+                "proxy-from-env": "^1.1.0"
+            }
         },
-        "console-browserify": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
-            "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
-            "dev": true,
-            "requires": {
-                "date-now": "^0.1.4"
+        "node_modules/axios-retry": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-4.3.0.tgz",
+            "integrity": "sha512-vUAQ3bi02Q++b8aAn3fuM03qRKFLZ6BPcqSVsOpgWeww2jrYFpu9SKb9VuctvxrJuRCWM/voDuuRAD7v3A1G5g==",
+            "dependencies": {
+                "is-retry-allowed": "^2.2.0"
+            },
+            "peerDependencies": {
+                "axios": "0.x || 1.x"
             }
         },
-        "console-control-strings": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-            "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
-            "dev": true
+        "node_modules/axios/node_modules/form-data": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+            "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+            "dependencies": {
+                "asynckit": "^0.4.0",
+                "combined-stream": "^1.0.8",
+                "mime-types": "^2.1.12"
+            },
+            "engines": {
+                "node": ">= 6"
+            }
         },
-        "constants-browserify": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
-            "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+        "node_modules/b4a": {
+            "version": "1.6.6",
+            "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
+            "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==",
             "dev": true
         },
-        "content-disposition": {
-            "version": "0.5.3",
-            "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
-            "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
-            "requires": {
-                "safe-buffer": "5.1.2"
+        "node_modules/babel-core": {
+            "version": "7.0.0-bridge.0",
+            "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+            "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
+            "dev": true,
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
             }
         },
-        "content-type": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-            "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
-        },
-        "convert-source-map": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
-            "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
-            "requires": {
-                "safe-buffer": "~5.1.1"
+        "node_modules/babel-eslint": {
+            "version": "10.1.0",
+            "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
+            "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
+            "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.",
+            "dev": true,
+            "dependencies": {
+                "@babel/code-frame": "^7.0.0",
+                "@babel/parser": "^7.7.0",
+                "@babel/traverse": "^7.7.0",
+                "@babel/types": "^7.7.0",
+                "eslint-visitor-keys": "^1.0.0",
+                "resolve": "^1.12.0"
+            },
+            "engines": {
+                "node": ">=6"
+            },
+            "peerDependencies": {
+                "eslint": ">= 4.12.1"
             }
         },
-        "cookie": {
-            "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
-            "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
-        },
-        "cookie-parser": {
-            "version": "1.4.4",
-            "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz",
-            "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==",
-            "requires": {
-                "cookie": "0.3.1",
-                "cookie-signature": "1.0.6"
+        "node_modules/babel-loader": {
+            "version": "9.1.3",
+            "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
+            "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
+            "dev": true,
+            "dependencies": {
+                "find-cache-dir": "^4.0.0",
+                "schema-utils": "^4.0.0"
+            },
+            "engines": {
+                "node": ">= 14.15.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.12.0",
+                "webpack": ">=5"
             }
         },
-        "cookie-session": {
-            "version": "2.0.0-beta.3",
-            "resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-2.0.0-beta.3.tgz",
-            "integrity": "sha512-zyqm5tA0z9yMEB/xyP7lnRnqp8eLR2e0dap+9+rBwVigla9yPKn8XTL1jJymog8xjfrowqW2o5LUjixQChkqrw==",
-            "requires": {
-                "cookies": "0.7.1",
-                "debug": "3.1.0",
-                "on-headers": "~1.0.1",
-                "safe-buffer": "5.1.1"
-            },
+        "node_modules/babel-loader/node_modules/find-cache-dir": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+            "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
+            "dev": true,
             "dependencies": {
-                "debug": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-                    "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "safe-buffer": {
-                    "version": "5.1.1",
-                    "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
-                    "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
-                }
+                "common-path-prefix": "^3.0.0",
+                "pkg-dir": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=14.16"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "cookie-signature": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-            "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
-        },
-        "cookies": {
-            "version": "0.7.1",
-            "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz",
-            "integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=",
-            "requires": {
-                "depd": "~1.1.1",
-                "keygrip": "~1.0.2"
+        "node_modules/babel-loader/node_modules/find-up": {
+            "version": "6.3.0",
+            "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+            "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
+            "dev": true,
+            "dependencies": {
+                "locate-path": "^7.1.0",
+                "path-exists": "^5.0.0"
+            },
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "copy-concurrently": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
-            "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+        "node_modules/babel-loader/node_modules/locate-path": {
+            "version": "7.2.0",
+            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+            "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
             "dev": true,
-            "requires": {
-                "aproba": "^1.1.1",
-                "fs-write-stream-atomic": "^1.0.8",
-                "iferr": "^0.1.5",
-                "mkdirp": "^0.5.1",
-                "rimraf": "^2.5.4",
-                "run-queue": "^1.0.0"
+            "dependencies": {
+                "p-locate": "^6.0.0"
+            },
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "copy-descriptor": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-            "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
-        },
-        "copy-props": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz",
-            "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==",
+        "node_modules/babel-loader/node_modules/p-limit": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+            "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
             "dev": true,
-            "requires": {
-                "each-props": "^1.3.0",
-                "is-plain-object": "^2.0.1"
+            "dependencies": {
+                "yocto-queue": "^1.0.0"
+            },
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "copy-to-clipboard": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.2.0.tgz",
-            "integrity": "sha512-eOZERzvCmxS8HWzugj4Uxl8OJxa7T2k1Gi0X5qavwydHIfuSHq2dTD09LOg/XyGq4Zpb5IsR/2OJ5lbOegz78w==",
-            "requires": {
-                "toggle-selection": "^1.0.6"
+        "node_modules/babel-loader/node_modules/p-locate": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+            "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+            "dev": true,
+            "dependencies": {
+                "p-limit": "^4.0.0"
+            },
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "core-js": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-            "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw=="
-        },
-        "core-js-compat": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz",
-            "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==",
+        "node_modules/babel-loader/node_modules/path-exists": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+            "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
             "dev": true,
-            "requires": {
-                "browserslist": "^4.6.6",
-                "semver": "^6.3.0"
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
             }
         },
-        "core-js-pure": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.2.1.tgz",
-            "integrity": "sha512-+qpvnYrsi/JDeQTArB7NnNc2VoMYLE1YSkziCDHgjexC2KH7OFiGhLUd3urxfyWmNjSwSW7NYXPWHMhuIJx9Ow=="
-        },
-        "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="
-        },
-        "cors": {
-            "version": "2.8.5",
-            "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-            "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
-            "requires": {
-                "object-assign": "^4",
-                "vary": "^1"
+        "node_modules/babel-loader/node_modules/pkg-dir": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+            "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
+            "dev": true,
+            "dependencies": {
+                "find-up": "^6.3.0"
+            },
+            "engines": {
+                "node": ">=14.16"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "cosmiconfig": {
-            "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
-            "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+        "node_modules/babel-plugin-module-resolver": {
+            "version": "5.0.2",
+            "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz",
+            "integrity": "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==",
             "dev": true,
-            "requires": {
-                "import-fresh": "^2.0.0",
-                "is-directory": "^0.3.1",
-                "js-yaml": "^3.13.1",
-                "parse-json": "^4.0.0"
-            },
             "dependencies": {
-                "import-fresh": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
-                    "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
-                    "dev": true,
-                    "requires": {
-                        "caller-path": "^2.0.0",
-                        "resolve-from": "^3.0.0"
-                    }
-                },
-                "resolve-from": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
-                    "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-                    "dev": true
-                }
+                "find-babel-config": "^2.1.1",
+                "glob": "^9.3.3",
+                "pkg-up": "^3.1.0",
+                "reselect": "^4.1.7",
+                "resolve": "^1.22.8"
             }
         },
-        "crc": {
-            "version": "3.8.0",
-            "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
-            "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
+        "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
             "dev": true,
-            "requires": {
-                "buffer": "^5.1.0"
+            "dependencies": {
+                "balanced-match": "^1.0.0"
             }
         },
-        "crc32-stream": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz",
-            "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==",
+        "node_modules/babel-plugin-module-resolver/node_modules/glob": {
+            "version": "9.3.5",
+            "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
+            "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
             "dev": true,
-            "requires": {
-                "crc": "^3.4.4",
-                "readable-stream": "^3.4.0"
-            },
             "dependencies": {
-                "readable-stream": {
-                    "version": "3.4.0",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
-                    "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "^2.0.3",
-                        "string_decoder": "^1.1.1",
-                        "util-deprecate": "^1.0.1"
-                    }
-                }
+                "fs.realpath": "^1.0.0",
+                "minimatch": "^8.0.2",
+                "minipass": "^4.2.4",
+                "path-scurry": "^1.6.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "create-ecdh": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
-            "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+        "node_modules/babel-plugin-module-resolver/node_modules/minimatch": {
+            "version": "8.0.4",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
+            "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
             "dev": true,
-            "requires": {
-                "bn.js": "^4.1.0",
-                "elliptic": "^6.0.0"
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "create-error-class": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
-            "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
-            "dev": true,
-            "requires": {
-                "capture-stack-trace": "^1.0.0"
+        "node_modules/babel-plugin-polyfill-corejs2": {
+            "version": "0.4.11",
+            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
+            "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
+            "dependencies": {
+                "@babel/compat-data": "^7.22.6",
+                "@babel/helper-define-polyfill-provider": "^0.6.2",
+                "semver": "^6.3.1"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
             }
         },
-        "create-hash": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
-            "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
-            "dev": true,
-            "requires": {
-                "cipher-base": "^1.0.1",
-                "inherits": "^2.0.1",
-                "md5.js": "^1.3.4",
-                "ripemd160": "^2.0.1",
-                "sha.js": "^2.4.0"
+        "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "bin": {
+                "semver": "bin/semver.js"
             }
         },
-        "create-hmac": {
-            "version": "1.1.7",
-            "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
-            "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
-            "dev": true,
-            "requires": {
-                "cipher-base": "^1.0.3",
-                "create-hash": "^1.1.0",
-                "inherits": "^2.0.1",
-                "ripemd160": "^2.0.0",
-                "safe-buffer": "^5.0.1",
-                "sha.js": "^2.4.8"
+        "node_modules/babel-plugin-polyfill-corejs3": {
+            "version": "0.10.4",
+            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
+            "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
+            "dependencies": {
+                "@babel/helper-define-polyfill-provider": "^0.6.1",
+                "core-js-compat": "^3.36.1"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
             }
         },
-        "cross-env": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-6.0.0.tgz",
-            "integrity": "sha512-G/B6gtkjgthT8AP/xN1wdj5Xe18fVyk58JepK8GxpUbqcz3hyWxegocMbvnZK+KoTslwd0ACZ3woi/DVUdVjyQ==",
-            "requires": {
-                "cross-spawn": "^7.0.0"
+        "node_modules/babel-plugin-polyfill-regenerator": {
+            "version": "0.6.2",
+            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
+            "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
+            "dependencies": {
+                "@babel/helper-define-polyfill-provider": "^0.6.2"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
             }
         },
-        "cross-spawn": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.0.tgz",
-            "integrity": "sha512-6U/8SMK2FBNnB21oQ4+6Nsodxanw1gTkntYA2zBdkFYFu3ZDx65P2ONEXGSvob/QS6REjVHQ9zxzdOafwFdstw==",
-            "requires": {
-                "path-key": "^3.1.0",
-                "shebang-command": "^1.2.0",
-                "which": "^1.2.9"
+        "node_modules/bach": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz",
+            "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==",
+            "dev": true,
+            "dependencies": {
+                "async-done": "^2.0.0",
+                "async-settle": "^2.0.0",
+                "now-and-later": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "crypto-browserify": {
-            "version": "3.12.0",
-            "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
-            "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+        "node_modules/bail": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
+            "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
             "dev": true,
-            "requires": {
-                "browserify-cipher": "^1.0.0",
-                "browserify-sign": "^4.0.0",
-                "create-ecdh": "^4.0.0",
-                "create-hash": "^1.1.0",
-                "create-hmac": "^1.1.0",
-                "diffie-hellman": "^5.0.0",
-                "inherits": "^2.0.1",
-                "pbkdf2": "^3.0.3",
-                "public-encrypt": "^4.0.0",
-                "randombytes": "^2.0.0",
-                "randomfill": "^1.0.3"
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
             }
         },
-        "crypto-random-string": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
-            "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
-            "dev": true
+        "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=="
         },
-        "css": {
-            "version": "2.2.4",
-            "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
-            "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
+        "node_modules/bare-events": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.3.1.tgz",
+            "integrity": "sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==",
+            "dev": true,
+            "optional": true
+        },
+        "node_modules/base": {
+            "version": "0.11.2",
+            "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+            "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.3",
-                "source-map": "^0.6.1",
-                "source-map-resolve": "^0.5.2",
-                "urix": "^0.1.0"
-            },
             "dependencies": {
-                "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
-                }
+                "cache-base": "^1.0.1",
+                "class-utils": "^0.3.5",
+                "component-emitter": "^1.2.1",
+                "define-property": "^1.0.0",
+                "isobject": "^3.0.1",
+                "mixin-deep": "^1.2.0",
+                "pascalcase": "^0.1.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "css-angle-units": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/css-angle-units/-/css-angle-units-1.0.1.tgz",
-            "integrity": "sha1-MobuZr323LBHAPaNrDzZZDJftjU=",
-            "dev": true
-        },
-        "css-frequency-units": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/css-frequency-units/-/css-frequency-units-1.0.1.tgz",
-            "integrity": "sha1-BXrFN/zR9I2/Kzn82i/5lURK9Ek=",
-            "dev": true
-        },
-        "css-length-units": {
+        "node_modules/base/node_modules/define-property": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/css-length-units/-/css-length-units-1.0.0.tgz",
-            "integrity": "sha1-R3Pdx5LEACDzzIYl/j2GkMS8M6c=",
-            "dev": true
-        },
-        "css-resolution-units": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/css-resolution-units/-/css-resolution-units-1.0.1.tgz",
-            "integrity": "sha1-xa/X0U4pyr070bOTftN1hIq3i3E=",
-            "dev": true
-        },
-        "css-select": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
-            "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+            "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+            "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
             "dev": true,
-            "requires": {
-                "boolbase": "~1.0.0",
-                "css-what": "2.1",
-                "domutils": "1.5.1",
-                "nth-check": "~1.0.1"
+            "dependencies": {
+                "is-descriptor": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "css-time-units": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/css-time-units/-/css-time-units-1.0.1.tgz",
-            "integrity": "sha1-w4KoKSnvhkWgg8SJ5dZ7+GbecUc=",
-            "dev": true
-        },
-        "css-what": {
-            "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
-            "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
-            "dev": true
-        },
-        "cssfilter": {
-            "version": "0.0.10",
-            "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
-            "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4="
+        "node_modules/base/node_modules/is-descriptor": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+            "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+            "dev": true,
+            "dependencies": {
+                "is-accessor-descriptor": "^1.0.1",
+                "is-data-descriptor": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
         },
-        "cssom": {
-            "version": "0.3.8",
-            "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
-            "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
-            "dev": true
+        "node_modules/base64-js": {
+            "version": "1.5.1",
+            "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+            "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/feross"
+                },
+                {
+                    "type": "patreon",
+                    "url": "https://www.patreon.com/feross"
+                },
+                {
+                    "type": "consulting",
+                    "url": "https://feross.org/support"
+                }
+            ]
         },
-        "cssstyle": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
-            "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
+        "node_modules/base64id": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+            "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
             "dev": true,
-            "requires": {
-                "cssom": "0.3.x"
+            "engines": {
+                "node": "^4.5.0 || >= 5.9"
             }
         },
-        "currently-unhandled": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
-            "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
-            "dev": true,
-            "requires": {
-                "array-find-index": "^1.0.1"
+        "node_modules/basic-auth": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+            "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+            "dependencies": {
+                "safe-buffer": "5.1.2"
+            },
+            "engines": {
+                "node": ">= 0.8"
             }
         },
-        "cycle": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
-            "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
-            "dev": true
+        "node_modules/basic-auth/node_modules/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=="
         },
-        "cyclist": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
-            "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
+        "node_modules/batch": {
+            "version": "0.6.1",
+            "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+            "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
             "dev": true
         },
-        "d": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
-            "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+        "node_modules/bcryptjs": {
+            "version": "2.4.3",
+            "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
+            "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ=="
+        },
+        "node_modules/binary-extensions": {
+            "version": "1.13.1",
+            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+            "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
             "dev": true,
-            "requires": {
-                "es5-ext": "^0.10.50",
-                "type": "^1.0.1"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "dashdash": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-            "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+        "node_modules/bindings": {
+            "version": "1.5.0",
+            "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+            "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
             "dev": true,
-            "requires": {
-                "assert-plus": "^1.0.0"
+            "optional": true,
+            "dependencies": {
+                "file-uri-to-path": "1.0.0"
             }
         },
-        "data-urls": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
-            "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
-            "dev": true,
-            "requires": {
-                "abab": "^2.0.0",
-                "whatwg-mimetype": "^2.2.0",
-                "whatwg-url": "^7.0.0"
-            },
-            "dependencies": {
-                "whatwg-url": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
-                    "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
-                    "dev": true,
-                    "requires": {
-                        "lodash.sortby": "^4.7.0",
-                        "tr46": "^1.0.1",
-                        "webidl-conversions": "^4.0.2"
-                    }
-                }
+        "node_modules/bl": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+            "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+            "dev": true,
+            "dependencies": {
+                "buffer": "^5.5.0",
+                "inherits": "^2.0.4",
+                "readable-stream": "^3.4.0"
             }
         },
-        "date-fns": {
-            "version": "1.30.1",
-            "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
-            "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
-            "dev": true
+        "node_modules/bl/node_modules/buffer": {
+            "version": "5.7.1",
+            "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+            "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/feross"
+                },
+                {
+                    "type": "patreon",
+                    "url": "https://www.patreon.com/feross"
+                },
+                {
+                    "type": "consulting",
+                    "url": "https://feross.org/support"
+                }
+            ],
+            "dependencies": {
+                "base64-js": "^1.3.1",
+                "ieee754": "^1.1.13"
+            }
         },
-        "date-now": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
-            "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+        "node_modules/bn.js": {
+            "version": "5.2.1",
+            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+            "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
             "dev": true
         },
-        "dateformat": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
-            "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
-            "dev": true
+        "node_modules/body-parser": {
+            "version": "1.20.2",
+            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
+            "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+            "dependencies": {
+                "bytes": "3.1.2",
+                "content-type": "~1.0.5",
+                "debug": "2.6.9",
+                "depd": "2.0.0",
+                "destroy": "1.2.0",
+                "http-errors": "2.0.0",
+                "iconv-lite": "0.4.24",
+                "on-finished": "2.4.1",
+                "qs": "6.11.0",
+                "raw-body": "2.5.2",
+                "type-is": "~1.6.18",
+                "unpipe": "1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.8",
+                "npm": "1.2.8000 || >= 1.4.16"
+            }
         },
-        "debug": {
+        "node_modules/body-parser/node_modules/debug": {
             "version": "2.6.9",
             "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
             "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-            "requires": {
+            "dependencies": {
                 "ms": "2.0.0"
             }
         },
-        "debug-fabulous": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz",
-            "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==",
-            "dev": true,
-            "requires": {
-                "debug": "3.X",
-                "memoizee": "0.4.X",
-                "object-assign": "4.X"
+        "node_modules/body-parser/node_modules/iconv-lite": {
+            "version": "0.4.24",
+            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+            "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+            "dependencies": {
+                "safer-buffer": ">= 2.1.2 < 3"
             },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/body-parser/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+        },
+        "node_modules/boolbase": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+            "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+        },
+        "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==",
             "dependencies": {
-                "debug": {
-                    "version": "3.2.6",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-                    "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "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
-                }
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
             }
         },
-        "decamelize": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-3.2.0.tgz",
-            "integrity": "sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==",
+        "node_modules/braces": {
+            "version": "2.3.2",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+            "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
             "dev": true,
-            "requires": {
-                "xregexp": "^4.2.4"
-            },
             "dependencies": {
-                "xregexp": {
-                    "version": "4.2.4",
-                    "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.2.4.tgz",
-                    "integrity": "sha512-sO0bYdYeJAJBcJA8g7MJJX7UrOZIfJPd8U2SC7B2Dd/J24U0aQNoGp33shCaBSWeb0rD5rh6VBUIXOkGal1TZA==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/runtime-corejs2": "^7.2.0"
-                    }
-                }
+                "arr-flatten": "^1.1.0",
+                "array-unique": "^0.3.2",
+                "extend-shallow": "^2.0.1",
+                "fill-range": "^4.0.0",
+                "isobject": "^3.0.1",
+                "repeat-element": "^1.1.2",
+                "snapdragon": "^0.8.1",
+                "snapdragon-node": "^2.0.1",
+                "split-string": "^3.0.2",
+                "to-regex": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "decamelize-keys": {
+        "node_modules/brorand": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
-            "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+            "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+            "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
+            "dev": true
+        },
+        "node_modules/browser-sync": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz",
+            "integrity": "sha512-PC9c7aWJFVR4IFySrJxOqLwB9ENn3/TaXCXtAa0SzLwocLN3qMjN+IatbjvtCX92BjNXsY6YWg9Eb7F3Wy255g==",
             "dev": true,
-            "requires": {
-                "decamelize": "^1.1.0",
-                "map-obj": "^1.0.0"
-            },
             "dependencies": {
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                }
+                "browser-sync-client": "^3.0.2",
+                "browser-sync-ui": "^3.0.2",
+                "bs-recipes": "1.3.4",
+                "chalk": "4.1.2",
+                "chokidar": "^3.5.1",
+                "connect": "3.6.6",
+                "connect-history-api-fallback": "^1",
+                "dev-ip": "^1.0.1",
+                "easy-extender": "^2.3.4",
+                "eazy-logger": "^4.0.1",
+                "etag": "^1.8.1",
+                "fresh": "^0.5.2",
+                "fs-extra": "3.0.1",
+                "http-proxy": "^1.18.1",
+                "immutable": "^3",
+                "micromatch": "^4.0.2",
+                "opn": "5.3.0",
+                "portscanner": "2.2.0",
+                "raw-body": "^2.3.2",
+                "resp-modifier": "6.0.2",
+                "rx": "4.1.0",
+                "send": "0.16.2",
+                "serve-index": "1.9.1",
+                "serve-static": "1.13.2",
+                "server-destroy": "1.0.1",
+                "socket.io": "^4.4.1",
+                "ua-parser-js": "^1.0.33",
+                "yargs": "^17.3.1"
+            },
+            "bin": {
+                "browser-sync": "dist/bin.js"
+            },
+            "engines": {
+                "node": ">= 8.0.0"
             }
         },
-        "decode-uri-component": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
-            "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
-        },
-        "decompress": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz",
-            "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=",
-            "dev": true,
-            "requires": {
-                "decompress-tar": "^4.0.0",
-                "decompress-tarbz2": "^4.0.0",
-                "decompress-targz": "^4.0.0",
-                "decompress-unzip": "^4.0.1",
-                "graceful-fs": "^4.1.10",
-                "make-dir": "^1.0.0",
-                "pify": "^2.3.0",
-                "strip-dirs": "^2.0.0"
-            },
-            "dependencies": {
-                "make-dir": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
-                    "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
-                    "dev": true,
-                    "requires": {
-                        "pify": "^3.0.0"
-                    },
-                    "dependencies": {
-                        "pify": {
-                            "version": "3.0.0",
-                            "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-                            "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-                            "dev": true
-                        }
-                    }
-                },
-                "pify": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                    "dev": true
-                }
+        "node_modules/browser-sync-client": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.2.tgz",
+            "integrity": "sha512-tBWdfn9L0wd2Pjuz/NWHtNEKthVb1Y67vg8/qyGNtCqetNz5lkDkFnrsx5UhPNPYUO8vci50IWC/BhYaQskDiQ==",
+            "dev": true,
+            "dependencies": {
+                "etag": "1.8.1",
+                "fresh": "0.5.2",
+                "mitt": "^1.1.3"
+            },
+            "engines": {
+                "node": ">=8.0.0"
             }
         },
-        "decompress-tar": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
-            "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+        "node_modules/browser-sync-ui": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.2.tgz",
+            "integrity": "sha512-V3FwWAI+abVbFLTyJjXJlCMBwjc3GXf/BPGfwO2fMFACWbIGW9/4SrBOFYEOOtqzCjQE0Di+U3VIb7eES4omNA==",
             "dev": true,
-            "requires": {
-                "file-type": "^5.2.0",
-                "is-stream": "^1.1.0",
-                "tar-stream": "^1.5.2"
+            "dependencies": {
+                "async-each-series": "0.1.1",
+                "chalk": "4.1.2",
+                "connect-history-api-fallback": "^1",
+                "immutable": "^3",
+                "server-destroy": "1.0.1",
+                "socket.io-client": "^4.4.1",
+                "stream-throttle": "^0.1.3"
             }
         },
-        "decompress-tarbz2": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
-            "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+        "node_modules/browser-sync/node_modules/binary-extensions": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
             "dev": true,
-            "requires": {
-                "decompress-tar": "^4.1.0",
-                "file-type": "^6.1.0",
-                "is-stream": "^1.1.0",
-                "seek-bzip": "^1.0.5",
-                "unbzip2-stream": "^1.0.9"
+            "engines": {
+                "node": ">=8"
             },
-            "dependencies": {
-                "file-type": {
-                    "version": "6.2.0",
-                    "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
-                    "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
-                    "dev": true
-                }
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "decompress-targz": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
-            "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+        "node_modules/browser-sync/node_modules/braces": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
             "dev": true,
-            "requires": {
-                "decompress-tar": "^4.1.1",
-                "file-type": "^5.2.0",
-                "is-stream": "^1.1.0"
+            "dependencies": {
+                "fill-range": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "decompress-unzip": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
-            "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+        "node_modules/browser-sync/node_modules/chokidar": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
             "dev": true,
-            "requires": {
-                "file-type": "^3.8.0",
-                "get-stream": "^2.2.0",
-                "pify": "^2.3.0",
-                "yauzl": "^2.4.2"
-            },
             "dependencies": {
-                "file-type": {
-                    "version": "3.9.0",
-                    "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
-                    "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
-                    "dev": true
-                },
-                "pify": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                    "dev": true
-                }
-            }
-        },
-        "dedent": {
-            "version": "0.7.0",
-            "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
-            "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
-            "dev": true
-        },
-        "deep-equal": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
-            "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=",
-            "dev": true
-        },
-        "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
-        },
-        "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=",
-            "dev": true
-        },
-        "default-compare": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
-            "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
-            "dev": true,
-            "requires": {
-                "kind-of": "^5.0.2"
+                "anymatch": "~3.1.2",
+                "braces": "~3.0.2",
+                "glob-parent": "~5.1.2",
+                "is-binary-path": "~2.1.0",
+                "is-glob": "~4.0.1",
+                "normalize-path": "~3.0.0",
+                "readdirp": "~3.6.0"
             },
-            "dependencies": {
-                "kind-of": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-                    "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
-                    "dev": true
-                }
+            "engines": {
+                "node": ">= 8.10.0"
+            },
+            "funding": {
+                "url": "https://paulmillr.com/funding/"
+            },
+            "optionalDependencies": {
+                "fsevents": "~2.3.2"
             }
         },
-        "default-resolution": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
-            "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=",
-            "dev": true
-        },
-        "defaults": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
-            "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+        "node_modules/browser-sync/node_modules/fill-range": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
             "dev": true,
-            "requires": {
-                "clone": "^1.0.2"
-            },
             "dependencies": {
-                "clone": {
-                    "version": "1.0.4",
-                    "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-                    "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-                    "dev": true
-                }
-            }
-        },
-        "define-properties": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-            "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-            "requires": {
-                "object-keys": "^1.0.12"
-            }
-        },
-        "define-property": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
-            "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
-            "requires": {
-                "is-descriptor": "^1.0.2",
-                "isobject": "^3.0.1"
+                "to-regex-range": "^5.0.1"
             },
-            "dependencies": {
-                "is-accessor-descriptor": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-                    "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-                    "requires": {
-                        "kind-of": "^6.0.0"
-                    }
-                },
-                "is-data-descriptor": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-                    "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-                    "requires": {
-                        "kind-of": "^6.0.0"
-                    }
-                },
-                "is-descriptor": {
-                    "version": "1.0.2",
-                    "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-                    "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-                    "requires": {
-                        "is-accessor-descriptor": "^1.0.0",
-                        "is-data-descriptor": "^1.0.0",
-                        "kind-of": "^6.0.2"
-                    }
-                }
+            "engines": {
+                "node": ">=8"
             }
         },
-        "del": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz",
-            "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==",
+        "node_modules/browser-sync/node_modules/fs-extra": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+            "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==",
             "dev": true,
-            "requires": {
-                "globby": "^10.0.1",
-                "graceful-fs": "^4.2.2",
-                "is-glob": "^4.0.1",
-                "is-path-cwd": "^2.2.0",
-                "is-path-inside": "^3.0.1",
-                "p-map": "^3.0.0",
-                "rimraf": "^3.0.0",
-                "slash": "^3.0.0"
-            },
             "dependencies": {
-                "rimraf": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz",
-                    "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==",
-                    "dev": true,
-                    "requires": {
-                        "glob": "^7.1.3"
-                    }
-                },
-                "slash": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-                    "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-                    "dev": true
-                }
+                "graceful-fs": "^4.1.2",
+                "jsonfile": "^3.0.0",
+                "universalify": "^0.1.0"
             }
         },
-        "delayed-stream": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-            "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-            "dev": true
-        },
-        "delegate": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
-            "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
-            "optional": true
-        },
-        "delegates": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-            "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
-            "dev": true
-        },
-        "depd": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-            "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "des.js": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
-            "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+        "node_modules/browser-sync/node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "minimalistic-assert": "^1.0.0"
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
             }
         },
-        "destroy": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
-            "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
-        },
-        "detect-file": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
-            "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
-            "dev": true
-        },
-        "detect-newline": {
+        "node_modules/browser-sync/node_modules/is-binary-path": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
-            "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
-            "dev": true
-        },
-        "dev-ip": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
-            "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=",
-            "dev": true
-        },
-        "diff-sequences": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz",
-            "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+            "dev": true,
+            "dependencies": {
+                "binary-extensions": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "diffie-hellman": {
-            "version": "5.0.3",
-            "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
-            "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+        "node_modules/browser-sync/node_modules/is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
             "dev": true,
-            "requires": {
-                "bn.js": "^4.1.0",
-                "miller-rabin": "^4.0.0",
-                "randombytes": "^2.0.0"
+            "engines": {
+                "node": ">=0.12.0"
             }
         },
-        "dir-glob": {
+        "node_modules/browser-sync/node_modules/jsonfile": {
             "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-            "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-            "requires": {
-                "path-type": "^4.0.0"
+            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+            "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==",
+            "dev": true,
+            "optionalDependencies": {
+                "graceful-fs": "^4.1.6"
             }
         },
-        "directory-tree": {
-            "version": "2.2.4",
-            "resolved": "https://registry.npmjs.org/directory-tree/-/directory-tree-2.2.4.tgz",
-            "integrity": "sha512-2N43msQptKbi3WMfIs+U09yi6bfyKL+MWyj5VMj8t1F/Tx04bt1cn/EEIU3o1JBltlJk7NQnzOEuTNa/KQvbWA=="
-        },
-        "discontinuous-range": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
-            "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=",
-            "dev": true
+        "node_modules/browser-sync/node_modules/readdirp": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "dev": true,
+            "dependencies": {
+                "picomatch": "^2.2.1"
+            },
+            "engines": {
+                "node": ">=8.10.0"
+            }
         },
-        "doctrine": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-            "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+        "node_modules/browser-sync/node_modules/to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
             "dev": true,
-            "requires": {
-                "esutils": "^2.0.2"
+            "dependencies": {
+                "is-number": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=8.0"
             }
         },
-        "dom-serializer": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
-            "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+        "node_modules/browser-sync/node_modules/universalify": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+            "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
             "dev": true,
-            "requires": {
-                "domelementtype": "^1.3.0",
-                "entities": "^1.1.1"
+            "engines": {
+                "node": ">= 4.0.0"
             }
         },
-        "domain-browser": {
+        "node_modules/browserify-aes": {
             "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
-            "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
-            "dev": true
-        },
-        "domelementtype": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
-            "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
-            "dev": true
-        },
-        "domexception": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
-            "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+            "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+            "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
             "dev": true,
-            "requires": {
-                "webidl-conversions": "^4.0.2"
+            "dependencies": {
+                "buffer-xor": "^1.0.3",
+                "cipher-base": "^1.0.0",
+                "create-hash": "^1.1.0",
+                "evp_bytestokey": "^1.0.3",
+                "inherits": "^2.0.1",
+                "safe-buffer": "^5.0.1"
             }
         },
-        "domhandler": {
-            "version": "2.4.2",
-            "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
-            "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+        "node_modules/browserify-cipher": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+            "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
             "dev": true,
-            "requires": {
-                "domelementtype": "1"
+            "dependencies": {
+                "browserify-aes": "^1.0.4",
+                "browserify-des": "^1.0.0",
+                "evp_bytestokey": "^1.0.0"
             }
         },
-        "domutils": {
-            "version": "1.5.1",
-            "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
-            "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+        "node_modules/browserify-des": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+            "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
             "dev": true,
-            "requires": {
-                "dom-serializer": "0",
-                "domelementtype": "1"
+            "dependencies": {
+                "cipher-base": "^1.0.1",
+                "des.js": "^1.0.0",
+                "inherits": "^2.0.1",
+                "safe-buffer": "^5.1.2"
             }
         },
-        "dot-prop": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
-            "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+        "node_modules/browserify-rsa": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+            "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
             "dev": true,
-            "requires": {
-                "is-obj": "^1.0.0"
+            "dependencies": {
+                "bn.js": "^5.0.0",
+                "randombytes": "^2.0.1"
             }
         },
-        "duplexer2": {
-            "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
-            "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+        "node_modules/browserify-sign": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz",
+            "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==",
             "dev": true,
-            "requires": {
-                "readable-stream": "~1.1.9"
-            },
             "dependencies": {
-                "isarray": {
-                    "version": "0.0.1",
-                    "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-                    "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
-                    "dev": true
-                },
-                "readable-stream": {
-                    "version": "1.1.14",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-                    "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-                    "dev": true,
-                    "requires": {
-                        "core-util-is": "~1.0.0",
-                        "inherits": "~2.0.1",
-                        "isarray": "0.0.1",
-                        "string_decoder": "~0.10.x"
-                    }
-                },
-                "string_decoder": {
-                    "version": "0.10.31",
-                    "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-                    "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
-                    "dev": true
-                }
+                "bn.js": "^5.2.1",
+                "browserify-rsa": "^4.1.0",
+                "create-hash": "^1.2.0",
+                "create-hmac": "^1.1.7",
+                "elliptic": "^6.5.5",
+                "hash-base": "~3.0",
+                "inherits": "^2.0.4",
+                "parse-asn1": "^5.1.7",
+                "readable-stream": "^2.3.8",
+                "safe-buffer": "^5.2.1"
+            },
+            "engines": {
+                "node": ">= 0.12"
             }
         },
-        "duplexer3": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
-            "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+        "node_modules/browserify-sign/node_modules/isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
             "dev": true
         },
-        "duplexify": {
-            "version": "3.7.1",
-            "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
-            "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+        "node_modules/browserify-sign/node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
             "dev": true,
-            "requires": {
-                "end-of-stream": "^1.0.0",
-                "inherits": "^2.0.1",
-                "readable-stream": "^2.0.0",
-                "stream-shift": "^1.0.0"
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
             }
         },
-        "each-props": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
-            "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
+        "node_modules/browserify-sign/node_modules/readable-stream/node_modules/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
+        },
+        "node_modules/browserify-sign/node_modules/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": {
-                "is-plain-object": "^2.0.1",
-                "object.defaults": "^1.1.0"
+            "dependencies": {
+                "safe-buffer": "~5.1.0"
             }
         },
-        "easy-extender": {
-            "version": "2.3.4",
-            "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
-            "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
+        "node_modules/browserify-sign/node_modules/string_decoder/node_modules/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
+        },
+        "node_modules/browserify-zlib": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+            "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
             "dev": true,
-            "requires": {
-                "lodash": "^4.17.10"
+            "dependencies": {
+                "pako": "~1.0.5"
             }
         },
-        "eazy-logger": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz",
-            "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=",
-            "dev": true,
-            "requires": {
-                "tfunk": "^3.0.1"
+        "node_modules/browserslist": {
+            "version": "4.23.0",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+            "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/browserslist"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/browserslist"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "dependencies": {
+                "caniuse-lite": "^1.0.30001587",
+                "electron-to-chromium": "^1.4.668",
+                "node-releases": "^2.0.14",
+                "update-browserslist-db": "^1.0.13"
+            },
+            "bin": {
+                "browserslist": "cli.js"
+            },
+            "engines": {
+                "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
             }
         },
-        "ecc-jsbn": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
-            "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+        "node_modules/bs-recipes": {
+            "version": "1.3.4",
+            "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
+            "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==",
+            "dev": true
+        },
+        "node_modules/buffer": {
+            "version": "6.0.3",
+            "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+            "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
             "dev": true,
-            "requires": {
-                "jsbn": "~0.1.0",
-                "safer-buffer": "^2.1.0"
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/feross"
+                },
+                {
+                    "type": "patreon",
+                    "url": "https://www.patreon.com/feross"
+                },
+                {
+                    "type": "consulting",
+                    "url": "https://feross.org/support"
+                }
+            ],
+            "dependencies": {
+                "base64-js": "^1.3.1",
+                "ieee754": "^1.2.1"
             }
         },
-        "ee-first": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-            "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
-        },
-        "electron-to-chromium": {
-            "version": "1.3.267",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.267.tgz",
-            "integrity": "sha512-9Q2ixAJC+oHjWNtJV0MQ4vJMCWSowIrC6V6vcr+bwPddTDHj2ddv9xxXCzf4jT/fy6HP7maPoW0gifXkRxCttQ==",
+        "node_modules/buffer-builder": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz",
+            "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==",
             "dev": true
         },
-        "elegant-spinner": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
-            "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
+        "node_modules/buffer-from": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+            "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+        },
+        "node_modules/buffer-xor": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+            "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
             "dev": true
         },
-        "elliptic": {
-            "version": "6.5.1",
-            "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz",
-            "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==",
+        "node_modules/bufferjs": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/bufferjs/-/bufferjs-3.0.1.tgz",
+            "integrity": "sha512-qrCIGPcd9ODawCNyqR2o55zgaC/r7XHZ7oUh2s99uk+NVBS3SjIHigxS1S2KXpt8wsoQxAN55iPi8GIH8TGMRg==",
             "dev": true,
-            "requires": {
-                "bn.js": "^4.4.0",
-                "brorand": "^1.0.1",
-                "hash.js": "^1.0.0",
-                "hmac-drbg": "^1.0.0",
-                "inherits": "^2.0.1",
-                "minimalistic-assert": "^1.0.0",
-                "minimalistic-crypto-utils": "^1.0.0"
+            "engines": {
+                "node": ">=0.2.0"
             }
         },
-        "emoji-regex": {
-            "version": "7.0.3",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-            "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+        "node_modules/builtin-status-codes": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+            "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
             "dev": true
         },
-        "emojis-list": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-            "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-            "dev": true
-        },
-        "encodeurl": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-            "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
-        },
-        "end-of-stream": {
-            "version": "1.4.4",
-            "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
-            "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
-            "dev": true,
-            "requires": {
-                "once": "^1.4.0"
+        "node_modules/bytes": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+            "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+            "engines": {
+                "node": ">= 0.8"
             }
         },
-        "engine.io": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
-            "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==",
+        "node_modules/cache-base": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+            "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
             "dev": true,
-            "requires": {
-                "accepts": "~1.3.4",
-                "base64id": "1.0.0",
-                "cookie": "0.3.1",
-                "debug": "~3.1.0",
-                "engine.io-parser": "~2.1.0",
-                "ws": "~3.3.1"
+            "dependencies": {
+                "collection-visit": "^1.0.0",
+                "component-emitter": "^1.2.1",
+                "get-value": "^2.0.6",
+                "has-value": "^1.0.0",
+                "isobject": "^3.0.1",
+                "set-value": "^2.0.0",
+                "to-object-path": "^0.3.0",
+                "union-value": "^1.0.0",
+                "unset-value": "^1.0.0"
             },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/call-bind": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+            "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
             "dependencies": {
-                "debug": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-                    "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "engine.io-parser": {
-                    "version": "2.1.3",
-                    "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
-                    "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
-                    "dev": true,
-                    "requires": {
-                        "after": "0.8.2",
-                        "arraybuffer.slice": "~0.0.7",
-                        "base64-arraybuffer": "0.1.5",
-                        "blob": "0.0.5",
-                        "has-binary2": "~1.0.2"
-                    }
-                },
-                "ws": {
-                    "version": "3.3.3",
-                    "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
-                    "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
-                    "dev": true,
-                    "requires": {
-                        "async-limiter": "~1.0.0",
-                        "safe-buffer": "~5.1.0",
-                        "ultron": "~1.1.0"
-                    }
-                }
+                "es-define-property": "^1.0.0",
+                "es-errors": "^1.3.0",
+                "function-bind": "^1.1.2",
+                "get-intrinsic": "^1.2.4",
+                "set-function-length": "^1.2.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "engine.io-client": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz",
-            "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==",
-            "dev": true,
-            "requires": {
-                "component-emitter": "1.2.1",
-                "component-inherit": "0.0.3",
-                "debug": "~4.1.0",
-                "engine.io-parser": "~2.2.0",
-                "has-cors": "1.1.0",
-                "indexof": "0.0.1",
-                "parseqs": "0.0.5",
-                "parseuri": "0.0.5",
-                "ws": "~6.1.0",
-                "xmlhttprequest-ssl": "~1.5.4",
-                "yeast": "0.1.2"
-            },
-            "dependencies": {
-                "component-emitter": {
-                    "version": "1.2.1",
-                    "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-                    "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
-                    "dev": true
-                },
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "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
-                },
-                "ws": {
-                    "version": "6.1.4",
-                    "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
-                    "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
-                    "dev": true,
-                    "requires": {
-                        "async-limiter": "~1.0.0"
-                    }
-                }
+        "node_modules/caller-callsite": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+            "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==",
+            "dev": true,
+            "dependencies": {
+                "callsites": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "engine.io-parser": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz",
-            "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==",
+        "node_modules/caller-callsite/node_modules/callsites": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+            "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==",
             "dev": true,
-            "requires": {
-                "after": "0.8.2",
-                "arraybuffer.slice": "~0.0.7",
-                "base64-arraybuffer": "0.1.5",
-                "blob": "0.0.5",
-                "has-binary2": "~1.0.2"
+            "engines": {
+                "node": ">=4"
             }
         },
-        "enhanced-resolve": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
-            "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+        "node_modules/caller-path": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+            "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==",
             "dev": true,
-            "requires": {
-                "graceful-fs": "^4.1.2",
-                "memory-fs": "^0.4.0",
-                "tapable": "^1.0.0"
+            "dependencies": {
+                "caller-callsite": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "entities": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-            "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
-            "dev": true
+        "node_modules/callsites": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+            "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "enzyme": {
-            "version": "3.10.0",
-            "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz",
-            "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==",
-            "dev": true,
-            "requires": {
-                "array.prototype.flat": "^1.2.1",
-                "cheerio": "^1.0.0-rc.2",
-                "function.prototype.name": "^1.1.0",
-                "has": "^1.0.3",
-                "html-element-map": "^1.0.0",
-                "is-boolean-object": "^1.0.0",
-                "is-callable": "^1.1.4",
-                "is-number-object": "^1.0.3",
-                "is-regex": "^1.0.4",
-                "is-string": "^1.0.4",
-                "is-subset": "^0.1.1",
-                "lodash.escape": "^4.0.1",
-                "lodash.isequal": "^4.5.0",
-                "object-inspect": "^1.6.0",
-                "object-is": "^1.0.1",
-                "object.assign": "^4.1.0",
-                "object.entries": "^1.0.4",
-                "object.values": "^1.0.4",
-                "raf": "^3.4.0",
-                "rst-selector-parser": "^2.2.3",
-                "string.prototype.trim": "^1.1.2"
-            }
-        },
-        "enzyme-adapter-react-16": {
-            "version": "1.14.0",
-            "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz",
-            "integrity": "sha512-7PcOF7pb4hJUvjY7oAuPGpq3BmlCig3kxXGi2kFx0YzJHppqX1K8IIV9skT1IirxXlu8W7bneKi+oQ10QRnhcA==",
-            "dev": true,
-            "requires": {
-                "enzyme-adapter-utils": "^1.12.0",
-                "has": "^1.0.3",
-                "object.assign": "^4.1.0",
-                "object.values": "^1.1.0",
-                "prop-types": "^15.7.2",
-                "react-is": "^16.8.6",
-                "react-test-renderer": "^16.0.0-0",
-                "semver": "^5.7.0"
+        "node_modules/camelcase": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
+            "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
+            "engines": {
+                "node": ">=14.16"
             },
-            "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "enzyme-adapter-utils": {
-            "version": "1.12.0",
-            "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.0.tgz",
-            "integrity": "sha512-wkZvE0VxcFx/8ZsBw0iAbk3gR1d9hK447ebnSYBf95+r32ezBq+XDSAvRErkc4LZosgH8J7et7H7/7CtUuQfBA==",
+        "node_modules/camelcase-keys": {
+            "version": "6.2.2",
+            "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+            "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
             "dev": true,
-            "requires": {
-                "airbnb-prop-types": "^2.13.2",
-                "function.prototype.name": "^1.1.0",
-                "object.assign": "^4.1.0",
-                "object.fromentries": "^2.0.0",
-                "prop-types": "^15.7.2",
-                "semver": "^5.6.0"
-            },
             "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
+                "camelcase": "^5.3.1",
+                "map-obj": "^4.0.0",
+                "quick-lru": "^4.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "errno": {
-            "version": "0.1.7",
-            "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
-            "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+        "node_modules/camelcase-keys/node_modules/camelcase": {
+            "version": "5.3.1",
+            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+            "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
             "dev": true,
-            "requires": {
-                "prr": "~1.0.1"
+            "engines": {
+                "node": ">=6"
             }
         },
-        "error-ex": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-            "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-            "requires": {
-                "is-arrayish": "^0.2.1"
-            }
+        "node_modules/caniuse-lite": {
+            "version": "1.0.30001615",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001615.tgz",
+            "integrity": "sha512-1IpazM5G3r38meiae0bHRnPhz+CBQ3ZLqbQMtrg+AsTPKAXgW38JNsXkyZ+v8waCsDmPq87lmfun5Q2AGysNEQ==",
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/browserslist"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ]
         },
-        "error-stack-parser": {
-            "version": "1.3.6",
-            "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz",
-            "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=",
-            "requires": {
-                "stackframe": "^0.3.1"
+        "node_modules/chalk": {
+            "version": "4.1.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+            "dependencies": {
+                "ansi-styles": "^4.1.0",
+                "supports-color": "^7.1.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "es-abstract": {
-            "version": "1.14.2",
-            "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz",
-            "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==",
-            "requires": {
-                "es-to-primitive": "^1.2.0",
-                "function-bind": "^1.1.1",
-                "has": "^1.0.3",
-                "has-symbols": "^1.0.0",
-                "is-callable": "^1.1.4",
-                "is-regex": "^1.0.4",
-                "object-inspect": "^1.6.0",
-                "object-keys": "^1.1.1",
-                "string.prototype.trimleft": "^2.0.0",
-                "string.prototype.trimright": "^2.0.0"
+        "node_modules/character-entities": {
+            "version": "1.2.4",
+            "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
+            "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
+            "dev": true,
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
             }
         },
-        "es-to-primitive": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
-            "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
-            "requires": {
-                "is-callable": "^1.1.4",
-                "is-date-object": "^1.0.1",
-                "is-symbol": "^1.0.2"
+        "node_modules/character-entities-legacy": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
+            "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
+            "dev": true,
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
             }
         },
-        "es5-ext": {
-            "version": "0.10.51",
-            "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz",
-            "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==",
+        "node_modules/character-reference-invalid": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
+            "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
             "dev": true,
-            "requires": {
-                "es6-iterator": "~2.0.3",
-                "es6-symbol": "~3.1.1",
-                "next-tick": "^1.0.0"
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
             }
         },
-        "es6-iterator": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
-            "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+        "node_modules/chardet": {
+            "version": "0.7.0",
+            "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+            "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+            "dev": true
+        },
+        "node_modules/chokidar": {
+            "version": "2.1.8",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+            "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+            "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
             "dev": true,
-            "requires": {
-                "d": "1",
-                "es5-ext": "^0.10.35",
-                "es6-symbol": "^3.1.1"
+            "dependencies": {
+                "anymatch": "^2.0.0",
+                "async-each": "^1.0.1",
+                "braces": "^2.3.2",
+                "glob-parent": "^3.1.0",
+                "inherits": "^2.0.3",
+                "is-binary-path": "^1.0.0",
+                "is-glob": "^4.0.0",
+                "normalize-path": "^3.0.0",
+                "path-is-absolute": "^1.0.0",
+                "readdirp": "^2.2.1",
+                "upath": "^1.1.1"
+            },
+            "optionalDependencies": {
+                "fsevents": "^1.2.7"
             }
         },
-        "es6-symbol": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz",
-            "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==",
+        "node_modules/chokidar/node_modules/anymatch": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+            "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
             "dev": true,
-            "requires": {
-                "d": "^1.0.1",
-                "es5-ext": "^0.10.51"
+            "dependencies": {
+                "micromatch": "^3.1.4",
+                "normalize-path": "^2.1.1"
             }
         },
-        "es6-weak-map": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
-            "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+        "node_modules/chokidar/node_modules/anymatch/node_modules/normalize-path": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+            "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
             "dev": true,
-            "requires": {
-                "d": "1",
-                "es5-ext": "^0.10.46",
-                "es6-iterator": "^2.0.3",
-                "es6-symbol": "^3.1.1"
+            "dependencies": {
+                "remove-trailing-separator": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "escape-html": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-            "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
-        },
-        "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="
-        },
-        "escodegen": {
-            "version": "1.12.0",
-            "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz",
-            "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==",
+        "node_modules/chokidar/node_modules/define-property": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+            "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
             "dev": true,
-            "requires": {
-                "esprima": "^3.1.3",
-                "estraverse": "^4.2.0",
-                "esutils": "^2.0.2",
-                "optionator": "^0.8.1",
-                "source-map": "~0.6.1"
-            },
             "dependencies": {
-                "esprima": {
-                    "version": "3.1.3",
-                    "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-                    "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-                    "dev": true
-                },
-                "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,
-                    "optional": true
-                }
+                "is-descriptor": "^1.0.2",
+                "isobject": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "eslint": {
-            "version": "5.16.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
-            "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
+        "node_modules/chokidar/node_modules/extend-shallow": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+            "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
             "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.0.0",
-                "ajv": "^6.9.1",
-                "chalk": "^2.1.0",
-                "cross-spawn": "^6.0.5",
-                "debug": "^4.0.1",
-                "doctrine": "^3.0.0",
-                "eslint-scope": "^4.0.3",
-                "eslint-utils": "^1.3.1",
-                "eslint-visitor-keys": "^1.0.0",
-                "espree": "^5.0.1",
-                "esquery": "^1.0.1",
-                "esutils": "^2.0.2",
-                "file-entry-cache": "^5.0.1",
-                "functional-red-black-tree": "^1.0.1",
-                "glob": "^7.1.2",
-                "globals": "^11.7.0",
-                "ignore": "^4.0.6",
-                "import-fresh": "^3.0.0",
-                "imurmurhash": "^0.1.4",
-                "inquirer": "^6.2.2",
-                "js-yaml": "^3.13.0",
-                "json-stable-stringify-without-jsonify": "^1.0.1",
-                "levn": "^0.3.0",
-                "lodash": "^4.17.11",
-                "minimatch": "^3.0.4",
-                "mkdirp": "^0.5.1",
-                "natural-compare": "^1.4.0",
-                "optionator": "^0.8.2",
-                "path-is-inside": "^1.0.2",
-                "progress": "^2.0.0",
-                "regexpp": "^2.0.1",
-                "semver": "^5.5.1",
-                "strip-ansi": "^4.0.0",
-                "strip-json-comments": "^2.0.1",
-                "table": "^5.2.3",
-                "text-table": "^0.2.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
-                },
-                "cross-spawn": {
-                    "version": "6.0.5",
-                    "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-                    "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-                    "dev": true,
-                    "requires": {
-                        "nice-try": "^1.0.4",
-                        "path-key": "^2.0.1",
-                        "semver": "^5.5.0",
-                        "shebang-command": "^1.2.0",
-                        "which": "^1.2.9"
-                    }
-                },
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "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
-                },
-                "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
-                },
-                "path-key": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-                    "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-                    "dev": true
-                },
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                },
-                "strip-ansi": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-                    "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^3.0.0"
-                    }
-                }
+                "assign-symbols": "^1.0.0",
+                "is-extendable": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "eslint-plugin-react": {
-            "version": "7.14.3",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz",
-            "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==",
+        "node_modules/chokidar/node_modules/glob-parent": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+            "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
             "dev": true,
-            "requires": {
-                "array-includes": "^3.0.3",
-                "doctrine": "^2.1.0",
-                "has": "^1.0.3",
-                "jsx-ast-utils": "^2.1.0",
-                "object.entries": "^1.1.0",
-                "object.fromentries": "^2.0.0",
-                "object.values": "^1.1.0",
-                "prop-types": "^15.7.2",
-                "resolve": "^1.10.1"
-            },
             "dependencies": {
-                "doctrine": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-                    "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-                    "dev": true,
-                    "requires": {
-                        "esutils": "^2.0.2"
-                    }
-                }
+                "is-glob": "^3.1.0",
+                "path-dirname": "^1.0.0"
             }
         },
-        "eslint-plugin-react-hooks": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.0.1.tgz",
-            "integrity": "sha512-xir+3KHKo86AasxlCV8AHRtIZPHljqCRRUYgASkbatmt0fad4+5GgC7zkT7o/06hdKM6MIwp8giHVXqBPaarHQ==",
-            "dev": true
-        },
-        "eslint-scope": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
-            "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+        "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+            "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
             "dev": true,
-            "requires": {
-                "esrecurse": "^4.1.0",
-                "estraverse": "^4.1.1"
+            "dependencies": {
+                "is-extglob": "^2.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "eslint-utils": {
-            "version": "1.4.2",
-            "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
-            "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+        "node_modules/chokidar/node_modules/is-descriptor": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+            "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
             "dev": true,
-            "requires": {
-                "eslint-visitor-keys": "^1.0.0"
+            "dependencies": {
+                "is-accessor-descriptor": "^1.0.1",
+                "is-data-descriptor": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "eslint-visitor-keys": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
-            "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
-            "dev": true
-        },
-        "espree": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
-            "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+        "node_modules/chokidar/node_modules/is-extendable": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+            "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
             "dev": true,
-            "requires": {
-                "acorn": "^6.0.7",
-                "acorn-jsx": "^5.0.0",
-                "eslint-visitor-keys": "^1.0.0"
+            "dependencies": {
+                "is-plain-object": "^2.0.4"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "esprima": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-            "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-            "dev": true
+        "node_modules/chokidar/node_modules/micromatch": {
+            "version": "3.1.10",
+            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+            "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+            "dev": true,
+            "dependencies": {
+                "arr-diff": "^4.0.0",
+                "array-unique": "^0.3.2",
+                "braces": "^2.3.1",
+                "define-property": "^2.0.2",
+                "extend-shallow": "^3.0.2",
+                "extglob": "^2.0.4",
+                "fragment-cache": "^0.2.1",
+                "kind-of": "^6.0.2",
+                "nanomatch": "^1.2.9",
+                "object.pick": "^1.3.0",
+                "regex-not": "^1.0.0",
+                "snapdragon": "^0.8.1",
+                "to-regex": "^3.0.2"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "esquery": {
+        "node_modules/chokidar/node_modules/path-is-absolute": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
-            "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+            "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
             "dev": true,
-            "requires": {
-                "estraverse": "^4.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "esrecurse": {
-            "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
-            "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+        "node_modules/chrome-trace-event": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+            "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
             "dev": true,
-            "requires": {
-                "estraverse": "^4.1.0"
+            "engines": {
+                "node": ">=6.0"
             }
         },
-        "estraverse": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-            "dev": true
-        },
-        "esutils": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-            "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+        "node_modules/ci-info": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+            "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
             "dev": true
         },
-        "etag": {
-            "version": "1.8.1",
-            "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-            "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
-        },
-        "event-emitter": {
-            "version": "0.3.5",
-            "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
-            "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+        "node_modules/cipher-base": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+            "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
             "dev": true,
-            "requires": {
-                "d": "1",
-                "es5-ext": "~0.10.14"
+            "dependencies": {
+                "inherits": "^2.0.1",
+                "safe-buffer": "^5.0.1"
             }
         },
-        "eventemitter3": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
-            "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg=="
-        },
-        "events": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
-            "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
-            "dev": true
-        },
-        "evp_bytestokey": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
-            "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+        "node_modules/class-utils": {
+            "version": "0.3.6",
+            "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+            "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
             "dev": true,
-            "requires": {
-                "md5.js": "^1.3.4",
-                "safe-buffer": "^5.1.1"
+            "dependencies": {
+                "arr-union": "^3.1.0",
+                "define-property": "^0.2.5",
+                "isobject": "^3.0.0",
+                "static-extend": "^0.1.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "exec-sh": {
-            "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz",
-            "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==",
-            "dev": true
+        "node_modules/classnames": {
+            "version": "2.5.1",
+            "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
+            "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
         },
-        "execa": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-            "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+        "node_modules/clean-css": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+            "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
             "dev": true,
-            "requires": {
-                "cross-spawn": "^6.0.0",
-                "get-stream": "^4.0.0",
-                "is-stream": "^1.1.0",
-                "npm-run-path": "^2.0.0",
-                "p-finally": "^1.0.0",
-                "signal-exit": "^3.0.0",
-                "strip-eof": "^1.0.0"
-            },
             "dependencies": {
-                "cross-spawn": {
-                    "version": "6.0.5",
-                    "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-                    "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-                    "dev": true,
-                    "requires": {
-                        "nice-try": "^1.0.4",
-                        "path-key": "^2.0.1",
-                        "semver": "^5.5.0",
-                        "shebang-command": "^1.2.0",
-                        "which": "^1.2.9"
-                    }
-                },
-                "get-stream": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-                    "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-                    "dev": true,
-                    "requires": {
-                        "pump": "^3.0.0"
-                    }
-                },
-                "path-key": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-                    "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-                    "dev": true
-                },
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
+                "source-map": "~0.6.0"
+            },
+            "engines": {
+                "node": ">= 4.0"
             }
         },
-        "execall": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
-            "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
+        "node_modules/clean-stack": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+            "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
             "dev": true,
-            "requires": {
-                "clone-regexp": "^2.1.0"
+            "engines": {
+                "node": ">=6"
             }
         },
-        "exit": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-            "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
-            "dev": true
-        },
-        "expand-brackets": {
-            "version": "2.1.4",
-            "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-            "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
-            "requires": {
-                "debug": "^2.3.3",
-                "define-property": "^0.2.5",
-                "extend-shallow": "^2.0.1",
-                "posix-character-classes": "^0.1.0",
-                "regex-not": "^1.0.0",
-                "snapdragon": "^0.8.1",
-                "to-regex": "^3.0.1"
-            },
+        "node_modules/cli-cursor": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+            "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
+            "dev": true,
             "dependencies": {
-                "define-property": {
-                    "version": "0.2.5",
-                    "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-                    "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-                    "requires": {
-                        "is-descriptor": "^0.1.0"
-                    }
-                },
-                "extend-shallow": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-                    "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-                    "requires": {
-                        "is-extendable": "^0.1.0"
-                    }
-                }
+                "restore-cursor": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "expand-tilde": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
-            "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+        "node_modules/cli-spinners": {
+            "version": "2.9.2",
+            "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+            "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
             "dev": true,
-            "requires": {
-                "homedir-polyfill": "^1.0.1"
+            "engines": {
+                "node": ">=6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "expect": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz",
-            "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==",
+        "node_modules/cli-truncate": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
+            "integrity": "sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==",
             "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0",
-                "ansi-styles": "^3.2.0",
-                "jest-get-type": "^24.9.0",
-                "jest-matcher-utils": "^24.9.0",
-                "jest-message-util": "^24.9.0",
-                "jest-regex-util": "^24.9.0"
-            }
-        },
-        "express": {
-            "version": "4.17.1",
-            "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
-            "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
-            "requires": {
-                "accepts": "~1.3.7",
-                "array-flatten": "1.1.1",
-                "body-parser": "1.19.0",
-                "content-disposition": "0.5.3",
-                "content-type": "~1.0.4",
-                "cookie": "0.4.0",
-                "cookie-signature": "1.0.6",
-                "debug": "2.6.9",
-                "depd": "~1.1.2",
-                "encodeurl": "~1.0.2",
-                "escape-html": "~1.0.3",
-                "etag": "~1.8.1",
-                "finalhandler": "~1.1.2",
-                "fresh": "0.5.2",
-                "merge-descriptors": "1.0.1",
-                "methods": "~1.1.2",
-                "on-finished": "~2.3.0",
-                "parseurl": "~1.3.3",
-                "path-to-regexp": "0.1.7",
-                "proxy-addr": "~2.0.5",
-                "qs": "6.7.0",
-                "range-parser": "~1.2.1",
-                "safe-buffer": "5.1.2",
-                "send": "0.17.1",
-                "serve-static": "1.14.1",
-                "setprototypeof": "1.1.1",
-                "statuses": "~1.5.0",
-                "type-is": "~1.6.18",
-                "utils-merge": "1.0.1",
-                "vary": "~1.1.2"
-            },
             "dependencies": {
-                "cookie": {
-                    "version": "0.4.0",
-                    "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
-                    "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
-                }
+                "slice-ansi": "0.0.4",
+                "string-width": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "express-static-gzip": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/express-static-gzip/-/express-static-gzip-2.0.5.tgz",
-            "integrity": "sha512-zoQcd2dPcYunUTa9x4iks5z7uVRZT/qRtAdFJFPqLqZBso0Axg01ghcJnp48yKUXZfRAJdII0FutOeCCnPPmkg==",
-            "requires": {
-                "serve-static": "^1.14.1"
+        "node_modules/cli-truncate/node_modules/ansi-regex": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+            "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "extend": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-            "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
-            "dev": true
-        },
-        "extend-shallow": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-            "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
-            "requires": {
-                "assign-symbols": "^1.0.0",
-                "is-extendable": "^1.0.1"
-            },
+        "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+            "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+            "dev": true,
             "dependencies": {
-                "is-extendable": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-                    "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-                    "requires": {
-                        "is-plain-object": "^2.0.4"
-                    }
-                }
+                "number-is-nan": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "external-editor": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
-            "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+        "node_modules/cli-truncate/node_modules/string-width": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+            "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
             "dev": true,
-            "requires": {
-                "chardet": "^0.7.0",
-                "iconv-lite": "^0.4.24",
-                "tmp": "^0.0.33"
-            }
-        },
-        "extglob": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-            "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-            "requires": {
-                "array-unique": "^0.3.2",
-                "define-property": "^1.0.0",
-                "expand-brackets": "^2.1.4",
-                "extend-shallow": "^2.0.1",
-                "fragment-cache": "^0.2.1",
-                "regex-not": "^1.0.0",
-                "snapdragon": "^0.8.1",
-                "to-regex": "^3.0.1"
-            },
             "dependencies": {
-                "define-property": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-                    "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-                    "requires": {
-                        "is-descriptor": "^1.0.0"
-                    }
-                },
-                "extend-shallow": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-                    "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-                    "requires": {
-                        "is-extendable": "^0.1.0"
-                    }
-                },
-                "is-accessor-descriptor": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-                    "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-                    "requires": {
-                        "kind-of": "^6.0.0"
-                    }
-                },
-                "is-data-descriptor": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-                    "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-                    "requires": {
-                        "kind-of": "^6.0.0"
-                    }
-                },
-                "is-descriptor": {
-                    "version": "1.0.2",
-                    "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-                    "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-                    "requires": {
-                        "is-accessor-descriptor": "^1.0.0",
-                        "is-data-descriptor": "^1.0.0",
-                        "kind-of": "^6.0.2"
-                    }
-                }
+                "code-point-at": "^1.0.0",
+                "is-fullwidth-code-point": "^1.0.0",
+                "strip-ansi": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "extsprintf": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-            "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
-            "dev": true
-        },
-        "eyes": {
-            "version": "0.1.8",
-            "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
-            "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
-            "dev": true
-        },
-        "fancy-log": {
-            "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
-            "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
+        "node_modules/cli-truncate/node_modules/strip-ansi": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+            "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
             "dev": true,
-            "requires": {
-                "ansi-gray": "^0.1.1",
-                "color-support": "^1.1.3",
-                "parse-node-version": "^1.0.0",
-                "time-stamp": "^1.0.0"
+            "dependencies": {
+                "ansi-regex": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "fast-deep-equal": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-            "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
-            "dev": true
-        },
-        "fast-diff": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
-            "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+        "node_modules/cli-width": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+            "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
             "dev": true
         },
-        "fast-glob": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.0.4.tgz",
-            "integrity": "sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg==",
-            "requires": {
-                "@nodelib/fs.stat": "^2.0.1",
-                "@nodelib/fs.walk": "^1.2.1",
-                "glob-parent": "^5.0.0",
-                "is-glob": "^4.0.1",
-                "merge2": "^1.2.3",
-                "micromatch": "^4.0.2"
-            },
+        "node_modules/cliui": {
+            "version": "8.0.1",
+            "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+            "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+            "dev": true,
             "dependencies": {
-                "braces": {
-                    "version": "3.0.2",
-                    "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-                    "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-                    "requires": {
-                        "fill-range": "^7.0.1"
-                    }
-                },
-                "fill-range": {
-                    "version": "7.0.1",
-                    "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-                    "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-                    "requires": {
-                        "to-regex-range": "^5.0.1"
-                    }
-                },
-                "glob-parent": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
-                    "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
-                    "requires": {
-                        "is-glob": "^4.0.1"
-                    }
-                },
-                "is-number": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-                    "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
-                },
-                "micromatch": {
-                    "version": "4.0.2",
-                    "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-                    "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-                    "requires": {
-                        "braces": "^3.0.1",
-                        "picomatch": "^2.0.5"
-                    }
-                },
-                "to-regex-range": {
-                    "version": "5.0.1",
-                    "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-                    "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-                    "requires": {
-                        "is-number": "^7.0.0"
-                    }
-                }
+                "string-width": "^4.2.0",
+                "strip-ansi": "^6.0.1",
+                "wrap-ansi": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=12"
             }
         },
-        "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=",
-            "dev": true
-        },
-        "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
-        },
-        "fastq": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz",
-            "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==",
-            "requires": {
-                "reusify": "^1.0.0"
+        "node_modules/cliui/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"
             }
         },
-        "fault": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.3.tgz",
-            "integrity": "sha512-sfFuP4X0hzrbGKjAUNXYvNqsZ5F6ohx/dZ9I0KQud/aiZNwg263r5L9yGB0clvXHCkzXh5W3t7RSHchggYIFmA==",
-            "requires": {
-                "format": "^0.2.2"
+        "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+            "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
             }
         },
-        "fb-watchman": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
-            "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
+        "node_modules/cliui/node_modules/string-width": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
             "dev": true,
-            "requires": {
-                "bser": "^2.0.0"
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "fd-slicer": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-            "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+        "node_modules/cliui/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,
-            "requires": {
-                "pend": "~1.2.0"
+            "dependencies": {
+                "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "figgy-pudding": {
-            "version": "3.5.1",
-            "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
-            "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
-            "dev": true
-        },
-        "figures": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
-            "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+        "node_modules/cliui/node_modules/wrap-ansi": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+            "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
             "dev": true,
-            "requires": {
-                "escape-string-regexp": "^1.0.5"
+            "dependencies": {
+                "ansi-styles": "^4.0.0",
+                "string-width": "^4.1.0",
+                "strip-ansi": "^6.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
             }
         },
-        "file-entry-cache": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
-            "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+        "node_modules/clone": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+            "integrity": "sha512-g62n3Kb9cszeZvmvBUqP/dsEJD/+80pDA8u8KqHnAPrVnQ2Je9rVV6opxkhuWCd1kCn2gOibzDKxCtBvD3q5kA==",
             "dev": true,
-            "requires": {
-                "flat-cache": "^2.0.1"
+            "engines": {
+                "node": "*"
             }
         },
-        "file-type": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
-            "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
-            "dev": true
-        },
-        "fill-range": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-            "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-            "requires": {
-                "extend-shallow": "^2.0.1",
-                "is-number": "^3.0.0",
-                "repeat-string": "^1.6.1",
-                "to-regex-range": "^2.1.0"
-            },
-            "dependencies": {
-                "extend-shallow": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-                    "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-                    "requires": {
-                        "is-extendable": "^0.1.0"
-                    }
-                }
+        "node_modules/clone-buffer": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+            "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==",
+            "dev": true,
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "finalhandler": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
-            "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
-            "requires": {
-                "debug": "2.6.9",
-                "encodeurl": "~1.0.2",
-                "escape-html": "~1.0.3",
-                "on-finished": "~2.3.0",
-                "parseurl": "~1.3.3",
-                "statuses": "~1.5.0",
-                "unpipe": "~1.0.0"
+        "node_modules/clone-deep": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+            "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+            "dependencies": {
+                "is-plain-object": "^2.0.4",
+                "kind-of": "^6.0.2",
+                "shallow-clone": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
             }
         },
-        "find-babel-config": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz",
-            "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==",
+        "node_modules/clone-regexp": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
+            "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
             "dev": true,
-            "requires": {
-                "json5": "^0.5.1",
-                "path-exists": "^3.0.0"
-            },
             "dependencies": {
-                "json5": {
-                    "version": "0.5.1",
-                    "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-                    "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-                    "dev": true
-                }
+                "is-regexp": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=6"
             }
         },
-        "find-cache-dir": {
+        "node_modules/clone-regexp/node_modules/is-regexp": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
-            "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
-            "requires": {
-                "commondir": "^1.0.1",
-                "make-dir": "^2.0.0",
-                "pkg-dir": "^3.0.0"
+            "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
+            "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
             }
         },
-        "find-parent-dir": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
-            "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
+        "node_modules/clone-stats": {
+            "version": "0.0.1",
+            "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+            "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==",
             "dev": true
         },
-        "find-up": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-            "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-            "requires": {
-                "locate-path": "^3.0.0"
-            }
-        },
-        "findup-sync": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
-            "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+        "node_modules/cloneable-readable": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
+            "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
             "dev": true,
-            "requires": {
-                "detect-file": "^1.0.0",
-                "is-glob": "^4.0.0",
-                "micromatch": "^3.0.4",
-                "resolve-dir": "^1.0.1"
+            "dependencies": {
+                "inherits": "^2.0.1",
+                "process-nextick-args": "^2.0.0",
+                "readable-stream": "^2.3.5"
             }
         },
-        "fined": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
-            "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
-            "dev": true,
-            "requires": {
-                "expand-tilde": "^2.0.2",
-                "is-plain-object": "^2.0.3",
-                "object.defaults": "^1.1.0",
-                "object.pick": "^1.2.0",
-                "parse-filepath": "^1.0.1"
-            }
+        "node_modules/cloneable-readable/node_modules/isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+            "dev": true
         },
-        "first-chunk-stream": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz",
-            "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=",
+        "node_modules/cloneable-readable/node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
             "dev": true,
-            "requires": {
-                "readable-stream": "^2.0.2"
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
             }
         },
-        "flagged-respawn": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
-            "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+        "node_modules/cloneable-readable/node_modules/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
         },
-        "flat-cache": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
-            "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+        "node_modules/cloneable-readable/node_modules/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": {
-                "flatted": "^2.0.0",
-                "rimraf": "2.6.3",
-                "write": "1.0.3"
-            },
             "dependencies": {
-                "rimraf": {
-                    "version": "2.6.3",
-                    "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-                    "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
-                    "dev": true,
-                    "requires": {
-                        "glob": "^7.1.3"
-                    }
-                }
+                "safe-buffer": "~5.1.0"
             }
         },
-        "flatted": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
-            "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
-            "dev": true
-        },
-        "flush-write-stream": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
-            "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+        "node_modules/code-point-at": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+            "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.3",
-                "readable-stream": "^2.3.6"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "folder-zipper": {
+        "node_modules/collection-visit": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/folder-zipper/-/folder-zipper-1.0.0.tgz",
-            "integrity": "sha512-Zwf4UfKy6fnV452UNglw3yQE1ny6/ULDcnG0E96Q71ZicCFDv7cFZumZxF7SEvOZPG5BnB/3WDQ9E0WjETtLmA==",
-            "dev": true,
-            "requires": {
-                "archiver": "^3.0.0",
-                "fs-extra": "^7.0.0"
-            },
-            "dependencies": {
-                "fs-extra": {
-                    "version": "7.0.1",
-                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
-                    "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "jsonfile": "^4.0.0",
-                        "universalify": "^0.1.0"
-                    }
-                }
+            "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+            "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
+            "dev": true,
+            "dependencies": {
+                "map-visit": "^1.0.0",
+                "object-visit": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/color": {
+            "version": "3.2.1",
+            "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+            "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+            "dev": true,
+            "dependencies": {
+                "color-convert": "^1.9.3",
+                "color-string": "^1.6.0"
             }
         },
-        "follow-redirects": {
-            "version": "1.5.10",
-            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
-            "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
-            "requires": {
-                "debug": "=3.1.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==",
+            "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=="
+        },
+        "node_modules/color-string": {
+            "version": "1.9.1",
+            "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+            "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+            "dev": true,
             "dependencies": {
-                "debug": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-                    "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                }
+                "color-name": "^1.0.0",
+                "simple-swizzle": "^0.2.2"
             }
         },
-        "for-in": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-            "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+        "node_modules/color-support": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+            "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+            "dev": true,
+            "bin": {
+                "color-support": "bin.js"
+            }
         },
-        "for-own": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
-            "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+        "node_modules/color/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
             "dev": true,
-            "requires": {
-                "for-in": "^1.0.1"
+            "dependencies": {
+                "color-name": "1.1.3"
             }
         },
-        "forever-agent": {
-            "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-            "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+        "node_modules/color/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
             "dev": true
         },
-        "fork-stream": {
-            "version": "0.0.4",
-            "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz",
-            "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=",
+        "node_modules/colorette": {
+            "version": "2.0.20",
+            "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+            "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
             "dev": true
         },
-        "form-data": {
-            "version": "2.3.3",
-            "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
-            "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+        "node_modules/colorspace": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
+            "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
             "dev": true,
-            "requires": {
-                "asynckit": "^0.4.0",
-                "combined-stream": "^1.0.6",
-                "mime-types": "^2.1.12"
+            "dependencies": {
+                "color": "^3.1.3",
+                "text-hex": "1.0.x"
             }
         },
-        "format": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
-            "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs="
-        },
-        "forwarded": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
-            "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+        "node_modules/combined-stream": {
+            "version": "1.0.8",
+            "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+            "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+            "dependencies": {
+                "delayed-stream": "~1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.8"
+            }
         },
-        "fragment-cache": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-            "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
-            "requires": {
-                "map-cache": "^0.2.2"
+        "node_modules/commander": {
+            "version": "6.2.1",
+            "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+            "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+            "engines": {
+                "node": ">= 6"
             }
         },
-        "fresh": {
-            "version": "0.5.2",
-            "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-            "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+        "node_modules/common-path-prefix": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+            "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
+            "dev": true
         },
-        "from2": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
-            "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+        "node_modules/commondir": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+            "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
+        },
+        "node_modules/component-emitter": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
+            "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "readable-stream": "^2.0.0"
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "fs-constants": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
-            "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
-            "dev": true
+        "node_modules/compression-webpack-plugin": {
+            "version": "10.0.0",
+            "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-10.0.0.tgz",
+            "integrity": "sha512-wLXLIBwpul/ALcm7Aj+69X0pYT3BYt6DdPn3qrgBIh9YejV9Bju9ShhlAsjujLyWMo6SAweFIWaUoFmXZNuNrg==",
+            "dev": true,
+            "dependencies": {
+                "schema-utils": "^4.0.0",
+                "serialize-javascript": "^6.0.0"
+            },
+            "engines": {
+                "node": ">= 14.15.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/webpack"
+            },
+            "peerDependencies": {
+                "webpack": "^5.1.0"
+            }
         },
-        "fs-extra": {
-            "version": "8.1.0",
-            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
-            "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+        "node_modules/concat-map": {
+            "version": "0.0.1",
+            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+            "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+        },
+        "node_modules/concat-with-sourcemaps": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
+            "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
             "dev": true,
-            "requires": {
-                "graceful-fs": "^4.2.0",
-                "jsonfile": "^4.0.0",
-                "universalify": "^0.1.0"
+            "dependencies": {
+                "source-map": "^0.6.1"
             }
         },
-        "fs-mkdirp-stream": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
-            "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
+        "node_modules/connect": {
+            "version": "3.6.6",
+            "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+            "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==",
             "dev": true,
-            "requires": {
-                "graceful-fs": "^4.1.11",
-                "through2": "^2.0.3"
+            "dependencies": {
+                "debug": "2.6.9",
+                "finalhandler": "1.1.0",
+                "parseurl": "~1.3.2",
+                "utils-merge": "1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.10.0"
             }
         },
-        "fs-readdir-recursive": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
-            "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA=="
+        "node_modules/connect-history-api-fallback": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+            "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.8"
+            }
         },
-        "fs-write-stream-atomic": {
-            "version": "1.0.10",
-            "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
-            "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+        "node_modules/connect/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
             "dev": true,
-            "requires": {
-                "graceful-fs": "^4.1.2",
-                "iferr": "^0.1.5",
-                "imurmurhash": "^0.1.4",
-                "readable-stream": "1 || 2"
+            "dependencies": {
+                "ms": "2.0.0"
             }
         },
-        "fs.realpath": {
+        "node_modules/connect/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+            "dev": true
+        },
+        "node_modules/console-browserify": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+            "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+            "dev": true
+        },
+        "node_modules/constants-browserify": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-            "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+            "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+            "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
+            "dev": true
         },
-        "fsevents": {
-            "version": "1.2.9",
-            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
-            "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
-            "optional": true,
-            "requires": {
-                "nan": "^2.12.1",
-                "node-pre-gyp": "^0.12.0"
-            },
+        "node_modules/content-disposition": {
+            "version": "0.5.4",
+            "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+            "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
             "dependencies": {
-                "abbrev": {
-                    "version": "1.1.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "ansi-regex": {
-                    "version": "2.1.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "aproba": {
-                    "version": "1.2.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "are-we-there-yet": {
-                    "version": "1.1.5",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "delegates": "^1.0.0",
-                        "readable-stream": "^2.0.6"
-                    }
-                },
-                "balanced-match": {
-                    "version": "1.0.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "brace-expansion": {
-                    "version": "1.1.11",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "balanced-match": "^1.0.0",
-                        "concat-map": "0.0.1"
-                    }
-                },
-                "chownr": {
-                    "version": "1.1.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "code-point-at": {
-                    "version": "1.1.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "concat-map": {
-                    "version": "0.0.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "console-control-strings": {
-                    "version": "1.1.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "core-util-is": {
-                    "version": "1.0.2",
-                    "bundled": true,
-                    "optional": true
-                },
-                "debug": {
-                    "version": "4.1.1",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "deep-extend": {
-                    "version": "0.6.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "delegates": {
-                    "version": "1.0.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "detect-libc": {
-                    "version": "1.0.3",
-                    "bundled": true,
-                    "optional": true
-                },
-                "fs-minipass": {
-                    "version": "1.2.5",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "minipass": "^2.2.1"
-                    }
-                },
-                "fs.realpath": {
-                    "version": "1.0.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "gauge": {
-                    "version": "2.7.4",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "aproba": "^1.0.3",
-                        "console-control-strings": "^1.0.0",
-                        "has-unicode": "^2.0.0",
-                        "object-assign": "^4.1.0",
-                        "signal-exit": "^3.0.0",
-                        "string-width": "^1.0.1",
-                        "strip-ansi": "^3.0.1",
-                        "wide-align": "^1.1.0"
-                    }
-                },
-                "glob": {
-                    "version": "7.1.3",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "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"
-                    }
-                },
-                "has-unicode": {
-                    "version": "2.0.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "iconv-lite": {
-                    "version": "0.4.24",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "safer-buffer": ">= 2.1.2 < 3"
-                    }
-                },
-                "ignore-walk": {
-                    "version": "3.0.1",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "minimatch": "^3.0.4"
-                    }
-                },
-                "inflight": {
-                    "version": "1.0.6",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "once": "^1.3.0",
-                        "wrappy": "1"
-                    }
-                },
-                "inherits": {
-                    "version": "2.0.3",
-                    "bundled": true,
-                    "optional": true
-                },
-                "ini": {
-                    "version": "1.3.5",
-                    "bundled": true,
-                    "optional": true
-                },
-                "is-fullwidth-code-point": {
-                    "version": "1.0.0",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "number-is-nan": "^1.0.0"
-                    }
-                },
-                "isarray": {
-                    "version": "1.0.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "minimatch": {
-                    "version": "3.0.4",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "brace-expansion": "^1.1.7"
-                    }
-                },
-                "minimist": {
-                    "version": "0.0.8",
-                    "bundled": true,
-                    "optional": true
-                },
-                "minipass": {
-                    "version": "2.3.5",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "safe-buffer": "^5.1.2",
-                        "yallist": "^3.0.0"
-                    }
-                },
-                "minizlib": {
-                    "version": "1.2.1",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "minipass": "^2.2.1"
-                    }
-                },
-                "mkdirp": {
-                    "version": "0.5.1",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "minimist": "0.0.8"
-                    }
-                },
-                "ms": {
-                    "version": "2.1.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "needle": {
-                    "version": "2.3.0",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "debug": "^4.1.0",
-                        "iconv-lite": "^0.4.4",
-                        "sax": "^1.2.4"
-                    }
-                },
-                "node-pre-gyp": {
-                    "version": "0.12.0",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "detect-libc": "^1.0.2",
-                        "mkdirp": "^0.5.1",
-                        "needle": "^2.2.1",
-                        "nopt": "^4.0.1",
-                        "npm-packlist": "^1.1.6",
-                        "npmlog": "^4.0.2",
-                        "rc": "^1.2.7",
-                        "rimraf": "^2.6.1",
-                        "semver": "^5.3.0",
-                        "tar": "^4"
-                    }
-                },
-                "nopt": {
-                    "version": "4.0.1",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "abbrev": "1",
-                        "osenv": "^0.1.4"
-                    }
-                },
-                "npm-bundled": {
-                    "version": "1.0.6",
-                    "bundled": true,
-                    "optional": true
-                },
-                "npm-packlist": {
-                    "version": "1.4.1",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "ignore-walk": "^3.0.1",
-                        "npm-bundled": "^1.0.1"
-                    }
-                },
-                "npmlog": {
-                    "version": "4.1.2",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "are-we-there-yet": "~1.1.2",
-                        "console-control-strings": "~1.1.0",
-                        "gauge": "~2.7.3",
-                        "set-blocking": "~2.0.0"
-                    }
-                },
-                "number-is-nan": {
-                    "version": "1.0.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "object-assign": {
-                    "version": "4.1.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "once": {
-                    "version": "1.4.0",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "wrappy": "1"
-                    }
-                },
-                "os-homedir": {
-                    "version": "1.0.2",
-                    "bundled": true,
-                    "optional": true
-                },
-                "os-tmpdir": {
-                    "version": "1.0.2",
-                    "bundled": true,
-                    "optional": true
-                },
-                "osenv": {
-                    "version": "0.1.5",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "os-homedir": "^1.0.0",
-                        "os-tmpdir": "^1.0.0"
-                    }
-                },
-                "path-is-absolute": {
-                    "version": "1.0.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "process-nextick-args": {
-                    "version": "2.0.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "rc": {
-                    "version": "1.2.8",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "deep-extend": "^0.6.0",
-                        "ini": "~1.3.0",
-                        "minimist": "^1.2.0",
-                        "strip-json-comments": "~2.0.1"
-                    },
-                    "dependencies": {
-                        "minimist": {
-                            "version": "1.2.0",
-                            "bundled": true,
-                            "optional": true
-                        }
-                    }
-                },
-                "readable-stream": {
-                    "version": "2.3.6",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "core-util-is": "~1.0.0",
-                        "inherits": "~2.0.3",
-                        "isarray": "~1.0.0",
-                        "process-nextick-args": "~2.0.0",
-                        "safe-buffer": "~5.1.1",
-                        "string_decoder": "~1.1.1",
-                        "util-deprecate": "~1.0.1"
-                    }
-                },
-                "rimraf": {
-                    "version": "2.6.3",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "glob": "^7.1.3"
-                    }
-                },
-                "safe-buffer": {
-                    "version": "5.1.2",
-                    "bundled": true,
-                    "optional": true
-                },
-                "safer-buffer": {
-                    "version": "2.1.2",
-                    "bundled": true,
-                    "optional": true
-                },
-                "sax": {
-                    "version": "1.2.4",
-                    "bundled": true,
-                    "optional": true
-                },
-                "semver": {
-                    "version": "5.7.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "set-blocking": {
-                    "version": "2.0.0",
-                    "bundled": true,
-                    "optional": true
-                },
-                "signal-exit": {
-                    "version": "3.0.2",
-                    "bundled": true,
-                    "optional": true
-                },
-                "string-width": {
-                    "version": "1.0.2",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "code-point-at": "^1.0.0",
-                        "is-fullwidth-code-point": "^1.0.0",
-                        "strip-ansi": "^3.0.0"
-                    }
-                },
-                "string_decoder": {
-                    "version": "1.1.1",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "safe-buffer": "~5.1.0"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "3.0.1",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "ansi-regex": "^2.0.0"
-                    }
-                },
-                "strip-json-comments": {
-                    "version": "2.0.1",
-                    "bundled": true,
-                    "optional": true
-                },
-                "tar": {
-                    "version": "4.4.8",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "chownr": "^1.1.1",
-                        "fs-minipass": "^1.2.5",
-                        "minipass": "^2.3.4",
-                        "minizlib": "^1.1.1",
-                        "mkdirp": "^0.5.0",
-                        "safe-buffer": "^5.1.2",
-                        "yallist": "^3.0.2"
-                    }
-                },
-                "util-deprecate": {
-                    "version": "1.0.2",
-                    "bundled": true,
-                    "optional": true
-                },
-                "wide-align": {
-                    "version": "1.1.3",
-                    "bundled": true,
-                    "optional": true,
-                    "requires": {
-                        "string-width": "^1.0.2 || 2"
-                    }
-                },
-                "wrappy": {
-                    "version": "1.0.2",
-                    "bundled": true,
-                    "optional": true
-                },
-                "yallist": {
-                    "version": "3.0.3",
-                    "bundled": true,
-                    "optional": true
+                "safe-buffer": "5.2.1"
+            },
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/content-type": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+            "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/convert-source-map": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+            "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+        },
+        "node_modules/cookie": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+            "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/cookie-parser": {
+            "version": "1.4.6",
+            "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
+            "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
+            "dependencies": {
+                "cookie": "0.4.1",
+                "cookie-signature": "1.0.6"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/cookie-session": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-2.1.0.tgz",
+            "integrity": "sha512-u73BDmR8QLGcs+Lprs0cfbcAPKl2HnPcjpwRXT41sEV4DRJ2+W0vJEEZkG31ofkx+HZflA70siRIjiTdIodmOQ==",
+            "dependencies": {
+                "cookies": "0.9.1",
+                "debug": "3.2.7",
+                "on-headers": "~1.0.2",
+                "safe-buffer": "5.2.1"
+            },
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
+        "node_modules/cookie-session/node_modules/debug": {
+            "version": "3.2.7",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+            "dependencies": {
+                "ms": "^2.1.1"
+            }
+        },
+        "node_modules/cookie-signature": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+            "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+        },
+        "node_modules/cookies": {
+            "version": "0.9.1",
+            "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz",
+            "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==",
+            "dependencies": {
+                "depd": "~2.0.0",
+                "keygrip": "~1.1.0"
+            },
+            "engines": {
+                "node": ">= 0.8"
+            }
+        },
+        "node_modules/copy-descriptor": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+            "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/copy-props": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz",
+            "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==",
+            "dev": true,
+            "dependencies": {
+                "each-props": "^3.0.0",
+                "is-plain-object": "^5.0.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/copy-props/node_modules/is-plain-object": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+            "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/copy-to-clipboard": {
+            "version": "3.3.3",
+            "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
+            "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
+            "dependencies": {
+                "toggle-selection": "^1.0.6"
+            }
+        },
+        "node_modules/core-js": {
+            "version": "3.37.1",
+            "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz",
+            "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==",
+            "hasInstallScript": true,
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/core-js"
+            }
+        },
+        "node_modules/core-js-compat": {
+            "version": "3.37.0",
+            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz",
+            "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==",
+            "dependencies": {
+                "browserslist": "^4.23.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/core-js"
+            }
+        },
+        "node_modules/core-js-pure": {
+            "version": "3.37.0",
+            "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.0.tgz",
+            "integrity": "sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==",
+            "hasInstallScript": true,
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/core-js"
+            }
+        },
+        "node_modules/core-util-is": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+            "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+        },
+        "node_modules/cors": {
+            "version": "2.8.5",
+            "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+            "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+            "dependencies": {
+                "object-assign": "^4",
+                "vary": "^1"
+            },
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
+        "node_modules/cosmiconfig": {
+            "version": "7.1.0",
+            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+            "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+            "dependencies": {
+                "@types/parse-json": "^4.0.0",
+                "import-fresh": "^3.2.1",
+                "parse-json": "^5.0.0",
+                "path-type": "^4.0.0",
+                "yaml": "^1.10.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/create-ecdh": {
+            "version": "4.0.4",
+            "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+            "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+            "dev": true,
+            "dependencies": {
+                "bn.js": "^4.1.0",
+                "elliptic": "^6.5.3"
+            }
+        },
+        "node_modules/create-ecdh/node_modules/bn.js": {
+            "version": "4.12.0",
+            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+            "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+            "dev": true
+        },
+        "node_modules/create-hash": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+            "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+            "dev": true,
+            "dependencies": {
+                "cipher-base": "^1.0.1",
+                "inherits": "^2.0.1",
+                "md5.js": "^1.3.4",
+                "ripemd160": "^2.0.1",
+                "sha.js": "^2.4.0"
+            }
+        },
+        "node_modules/create-hmac": {
+            "version": "1.1.7",
+            "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+            "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+            "dev": true,
+            "dependencies": {
+                "cipher-base": "^1.0.3",
+                "create-hash": "^1.1.0",
+                "inherits": "^2.0.1",
+                "ripemd160": "^2.0.0",
+                "safe-buffer": "^5.0.1",
+                "sha.js": "^2.4.8"
+            }
+        },
+        "node_modules/cross-env": {
+            "version": "7.0.3",
+            "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+            "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+            "dependencies": {
+                "cross-spawn": "^7.0.1"
+            },
+            "bin": {
+                "cross-env": "src/bin/cross-env.js",
+                "cross-env-shell": "src/bin/cross-env-shell.js"
+            },
+            "engines": {
+                "node": ">=10.14",
+                "npm": ">=6",
+                "yarn": ">=1"
+            }
+        },
+        "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==",
+            "dependencies": {
+                "path-key": "^3.1.0",
+                "shebang-command": "^2.0.0",
+                "which": "^2.0.1"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/crypto-browserify": {
+            "version": "3.12.0",
+            "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+            "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+            "dev": true,
+            "dependencies": {
+                "browserify-cipher": "^1.0.0",
+                "browserify-sign": "^4.0.0",
+                "create-ecdh": "^4.0.0",
+                "create-hash": "^1.1.0",
+                "create-hmac": "^1.1.0",
+                "diffie-hellman": "^5.0.0",
+                "inherits": "^2.0.1",
+                "pbkdf2": "^3.0.3",
+                "public-encrypt": "^4.0.0",
+                "randombytes": "^2.0.0",
+                "randomfill": "^1.0.3"
+            },
+            "engines": {
+                "node": "*"
+            }
+        },
+        "node_modules/crypto-js": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+            "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
+            "optional": true
+        },
+        "node_modules/css": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz",
+            "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==",
+            "dev": true,
+            "dependencies": {
+                "inherits": "^2.0.4",
+                "source-map": "^0.6.1",
+                "source-map-resolve": "^0.6.0"
+            }
+        },
+        "node_modules/css-select": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
+            "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+            "dependencies": {
+                "boolbase": "^1.0.0",
+                "css-what": "^6.0.1",
+                "domhandler": "^4.3.1",
+                "domutils": "^2.8.0",
+                "nth-check": "^2.0.1"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/fb55"
+            }
+        },
+        "node_modules/css-select/node_modules/dom-serializer": {
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+            "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+            "dependencies": {
+                "domelementtype": "^2.0.1",
+                "domhandler": "^4.2.0",
+                "entities": "^2.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+            }
+        },
+        "node_modules/css-select/node_modules/domelementtype": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+            "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/fb55"
                 }
+            ]
+        },
+        "node_modules/css-select/node_modules/domhandler": {
+            "version": "4.3.1",
+            "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+            "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+            "dependencies": {
+                "domelementtype": "^2.2.0"
+            },
+            "engines": {
+                "node": ">= 4"
+            },
+            "funding": {
+                "url": "https://github.com/fb55/domhandler?sponsor=1"
+            }
+        },
+        "node_modules/css-select/node_modules/domutils": {
+            "version": "2.8.0",
+            "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+            "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+            "dependencies": {
+                "dom-serializer": "^1.0.1",
+                "domelementtype": "^2.2.0",
+                "domhandler": "^4.2.0"
+            },
+            "funding": {
+                "url": "https://github.com/fb55/domutils?sponsor=1"
+            }
+        },
+        "node_modules/css-select/node_modules/entities": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+            "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+            "funding": {
+                "url": "https://github.com/fb55/entities?sponsor=1"
+            }
+        },
+        "node_modules/css-selector-parser": {
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz",
+            "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==",
+            "dev": true
+        },
+        "node_modules/css-tree": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+            "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+            "dependencies": {
+                "mdn-data": "2.0.14",
+                "source-map": "^0.6.1"
+            },
+            "engines": {
+                "node": ">=8.0.0"
+            }
+        },
+        "node_modules/css-what": {
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+            "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+            "engines": {
+                "node": ">= 6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/fb55"
+            }
+        },
+        "node_modules/cssesc": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+            "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+            "dev": true,
+            "bin": {
+                "cssesc": "bin/cssesc"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/cssfilter": {
+            "version": "0.0.10",
+            "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
+            "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw=="
+        },
+        "node_modules/csso": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+            "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+            "dependencies": {
+                "css-tree": "^1.1.2"
+            },
+            "engines": {
+                "node": ">=8.0.0"
+            }
+        },
+        "node_modules/csstype": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+            "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+            "dev": true
+        },
+        "node_modules/d": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
+            "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
+            "dev": true,
+            "dependencies": {
+                "es5-ext": "^0.10.64",
+                "type": "^2.7.2"
+            },
+            "engines": {
+                "node": ">=0.12"
+            }
+        },
+        "node_modules/data-view-buffer": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+            "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+            "dependencies": {
+                "call-bind": "^1.0.6",
+                "es-errors": "^1.3.0",
+                "is-data-view": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/data-view-byte-length": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+            "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "es-errors": "^1.3.0",
+                "is-data-view": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/data-view-byte-offset": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+            "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+            "dependencies": {
+                "call-bind": "^1.0.6",
+                "es-errors": "^1.3.0",
+                "is-data-view": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/date-fns": {
+            "version": "1.30.1",
+            "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
+            "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
+            "dev": true
+        },
+        "node_modules/dayjs": {
+            "version": "1.11.11",
+            "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz",
+            "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
+        },
+        "node_modules/debug": {
+            "version": "4.3.4",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+            "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+            "dependencies": {
+                "ms": "2.1.2"
+            },
+            "engines": {
+                "node": ">=6.0"
+            },
+            "peerDependenciesMeta": {
+                "supports-color": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/debug-fabulous": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz",
+            "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==",
+            "dev": true,
+            "dependencies": {
+                "debug": "3.X",
+                "memoizee": "0.4.X",
+                "object-assign": "4.X"
+            }
+        },
+        "node_modules/debug-fabulous/node_modules/debug": {
+            "version": "3.2.7",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+            "dev": true,
+            "dependencies": {
+                "ms": "^2.1.1"
+            }
+        },
+        "node_modules/decamelize": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-3.2.0.tgz",
+            "integrity": "sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==",
+            "dev": true,
+            "dependencies": {
+                "xregexp": "^4.2.4"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/decamelize-keys": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+            "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+            "dev": true,
+            "dependencies": {
+                "decamelize": "^1.1.0",
+                "map-obj": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/decamelize-keys/node_modules/decamelize": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+            "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/decamelize-keys/node_modules/map-obj": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+            "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/decode-uri-component": {
+            "version": "0.2.2",
+            "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
+            "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10"
+            }
+        },
+        "node_modules/dedent": {
+            "version": "0.7.0",
+            "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+            "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
+            "dev": true
+        },
+        "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/deepmerge": {
+            "version": "4.3.1",
+            "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+            "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/defaults": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+            "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
+            "dev": true,
+            "dependencies": {
+                "clone": "^1.0.2"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/defaults/node_modules/clone": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+            "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.8"
+            }
+        },
+        "node_modules/define-data-property": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+            "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+            "dependencies": {
+                "es-define-property": "^1.0.0",
+                "es-errors": "^1.3.0",
+                "gopd": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/define-lazy-prop": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+            "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/define-properties": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+            "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+            "dependencies": {
+                "define-data-property": "^1.0.1",
+                "has-property-descriptors": "^1.0.0",
+                "object-keys": "^1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/define-property": {
+            "version": "0.2.5",
+            "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+            "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+            "dev": true,
+            "dependencies": {
+                "is-descriptor": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/del": {
+            "version": "5.1.0",
+            "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz",
+            "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==",
+            "dev": true,
+            "dependencies": {
+                "globby": "^10.0.1",
+                "graceful-fs": "^4.2.2",
+                "is-glob": "^4.0.1",
+                "is-path-cwd": "^2.2.0",
+                "is-path-inside": "^3.0.1",
+                "p-map": "^3.0.0",
+                "rimraf": "^3.0.0",
+                "slash": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/del/node_modules/globby": {
+            "version": "10.0.2",
+            "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz",
+            "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==",
+            "dev": true,
+            "dependencies": {
+                "@types/glob": "^7.1.1",
+                "array-union": "^2.1.0",
+                "dir-glob": "^3.0.1",
+                "fast-glob": "^3.0.3",
+                "glob": "^7.1.3",
+                "ignore": "^5.1.1",
+                "merge2": "^1.2.3",
+                "slash": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/del/node_modules/ignore": {
+            "version": "5.3.1",
+            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+            "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+            "dev": true,
+            "engines": {
+                "node": ">= 4"
+            }
+        },
+        "node_modules/del/node_modules/slash": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/delayed-stream": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+            "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+            "engines": {
+                "node": ">=0.4.0"
+            }
+        },
+        "node_modules/depd": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+            "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+            "engines": {
+                "node": ">= 0.8"
+            }
+        },
+        "node_modules/des.js": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
+            "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
+            "dev": true,
+            "dependencies": {
+                "inherits": "^2.0.1",
+                "minimalistic-assert": "^1.0.0"
+            }
+        },
+        "node_modules/destroy": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+            "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+            "engines": {
+                "node": ">= 0.8",
+                "npm": "1.2.8000 || >= 1.4.16"
+            }
+        },
+        "node_modules/detect-file": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+            "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/detect-newline": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+            "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/detect-node": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+            "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
+        },
+        "node_modules/dev-ip": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
+            "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==",
+            "dev": true,
+            "bin": {
+                "dev-ip": "lib/dev-ip.js"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/diffie-hellman": {
+            "version": "5.0.3",
+            "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+            "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+            "dev": true,
+            "dependencies": {
+                "bn.js": "^4.1.0",
+                "miller-rabin": "^4.0.0",
+                "randombytes": "^2.0.0"
+            }
+        },
+        "node_modules/diffie-hellman/node_modules/bn.js": {
+            "version": "4.12.0",
+            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+            "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+            "dev": true
+        },
+        "node_modules/dir-glob": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+            "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+            "dependencies": {
+                "path-type": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/directory-tree": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmjs.org/directory-tree/-/directory-tree-2.3.1.tgz",
+            "integrity": "sha512-hxolIHCtQ/a56CUywaLzGD/V78zPwFihI+UK/4ZjOp7GoV4Mptmtv95yavOn/RlnTi7cCMjszvfcNrwCoWLH+Q==",
+            "engines": {
+                "node": ">=10.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/dom-serializer": {
+            "version": "0.2.2",
+            "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+            "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+            "dev": true,
+            "dependencies": {
+                "domelementtype": "^2.0.1",
+                "entities": "^2.0.0"
+            }
+        },
+        "node_modules/dom-serializer/node_modules/domelementtype": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+            "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/fb55"
+                }
+            ]
+        },
+        "node_modules/dom-serializer/node_modules/entities": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+            "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+            "dev": true,
+            "funding": {
+                "url": "https://github.com/fb55/entities?sponsor=1"
+            }
+        },
+        "node_modules/domain-browser": {
+            "version": "4.23.0",
+            "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz",
+            "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==",
+            "dev": true,
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://bevry.me/fund"
+            }
+        },
+        "node_modules/domelementtype": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+            "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+            "dev": true
+        },
+        "node_modules/domhandler": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+            "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+            "dev": true,
+            "dependencies": {
+                "domelementtype": "1"
+            }
+        },
+        "node_modules/domutils": {
+            "version": "1.7.0",
+            "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+            "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+            "dev": true,
+            "dependencies": {
+                "dom-serializer": "0",
+                "domelementtype": "1"
+            }
+        },
+        "node_modules/duplexify": {
+            "version": "4.1.3",
+            "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz",
+            "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==",
+            "dev": true,
+            "dependencies": {
+                "end-of-stream": "^1.4.1",
+                "inherits": "^2.0.3",
+                "readable-stream": "^3.1.1",
+                "stream-shift": "^1.0.2"
+            }
+        },
+        "node_modules/each-props": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz",
+            "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==",
+            "dev": true,
+            "dependencies": {
+                "is-plain-object": "^5.0.0",
+                "object.defaults": "^1.1.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/each-props/node_modules/is-plain-object": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+            "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/easy-extender": {
+            "version": "2.3.4",
+            "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
+            "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
+            "dev": true,
+            "dependencies": {
+                "lodash": "^4.17.10"
+            },
+            "engines": {
+                "node": ">= 4.0.0"
+            }
+        },
+        "node_modules/eazy-logger": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz",
+            "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==",
+            "dev": true,
+            "dependencies": {
+                "chalk": "4.1.2"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/ee-first": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+            "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+        },
+        "node_modules/electron-to-chromium": {
+            "version": "1.4.755",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.755.tgz",
+            "integrity": "sha512-9nop+3jZxSHIxe1EzEUcjDXzK+3qOv3fY5w0sE88nIZUntbv1aXWmoxGWlklX5XSO4txCpLssWkUSh8RQPovBg=="
+        },
+        "node_modules/elegant-spinner": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
+            "integrity": "sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/elliptic": {
+            "version": "6.5.5",
+            "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz",
+            "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==",
+            "dev": true,
+            "dependencies": {
+                "bn.js": "^4.11.9",
+                "brorand": "^1.1.0",
+                "hash.js": "^1.0.0",
+                "hmac-drbg": "^1.0.1",
+                "inherits": "^2.0.4",
+                "minimalistic-assert": "^1.0.1",
+                "minimalistic-crypto-utils": "^1.0.1"
+            }
+        },
+        "node_modules/elliptic/node_modules/bn.js": {
+            "version": "4.12.0",
+            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+            "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+            "dev": true
+        },
+        "node_modules/emoji-regex": {
+            "version": "8.0.0",
+            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+            "dev": true
+        },
+        "node_modules/enabled": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
+            "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==",
+            "dev": true
+        },
+        "node_modules/encodeurl": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+            "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+            "engines": {
+                "node": ">= 0.8"
+            }
+        },
+        "node_modules/encoding": {
+            "version": "0.1.13",
+            "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+            "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+            "dev": true,
+            "dependencies": {
+                "iconv-lite": "^0.6.2"
+            }
+        },
+        "node_modules/end-of-stream": {
+            "version": "1.4.4",
+            "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+            "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+            "dev": true,
+            "dependencies": {
+                "once": "^1.4.0"
+            }
+        },
+        "node_modules/engine.io": {
+            "version": "6.5.4",
+            "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz",
+            "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==",
+            "dev": true,
+            "dependencies": {
+                "@types/cookie": "^0.4.1",
+                "@types/cors": "^2.8.12",
+                "@types/node": ">=10.0.0",
+                "accepts": "~1.3.4",
+                "base64id": "2.0.0",
+                "cookie": "~0.4.1",
+                "cors": "~2.8.5",
+                "debug": "~4.3.1",
+                "engine.io-parser": "~5.2.1",
+                "ws": "~8.11.0"
+            },
+            "engines": {
+                "node": ">=10.2.0"
+            }
+        },
+        "node_modules/engine.io-client": {
+            "version": "6.5.3",
+            "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz",
+            "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==",
+            "dependencies": {
+                "@socket.io/component-emitter": "~3.1.0",
+                "debug": "~4.3.1",
+                "engine.io-parser": "~5.2.1",
+                "ws": "~8.11.0",
+                "xmlhttprequest-ssl": "~2.0.0"
+            }
+        },
+        "node_modules/engine.io-client/node_modules/ws": {
+            "version": "8.11.0",
+            "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+            "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+            "engines": {
+                "node": ">=10.0.0"
+            },
+            "peerDependencies": {
+                "bufferutil": "^4.0.1",
+                "utf-8-validate": "^5.0.2"
+            },
+            "peerDependenciesMeta": {
+                "bufferutil": {
+                    "optional": true
+                },
+                "utf-8-validate": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/engine.io-parser": {
+            "version": "5.2.2",
+            "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz",
+            "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==",
+            "engines": {
+                "node": ">=10.0.0"
+            }
+        },
+        "node_modules/engine.io/node_modules/ws": {
+            "version": "8.11.0",
+            "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+            "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+            "dev": true,
+            "engines": {
+                "node": ">=10.0.0"
+            },
+            "peerDependencies": {
+                "bufferutil": "^4.0.1",
+                "utf-8-validate": "^5.0.2"
+            },
+            "peerDependenciesMeta": {
+                "bufferutil": {
+                    "optional": true
+                },
+                "utf-8-validate": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/enhanced-resolve": {
+            "version": "5.16.0",
+            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
+            "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
+            "dev": true,
+            "dependencies": {
+                "graceful-fs": "^4.2.4",
+                "tapable": "^2.2.0"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/entities": {
+            "version": "4.5.0",
+            "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+            "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+            "engines": {
+                "node": ">=0.12"
+            },
+            "funding": {
+                "url": "https://github.com/fb55/entities?sponsor=1"
+            }
+        },
+        "node_modules/error-ex": {
+            "version": "1.3.2",
+            "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+            "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+            "dependencies": {
+                "is-arrayish": "^0.2.1"
+            }
+        },
+        "node_modules/es-abstract": {
+            "version": "1.23.3",
+            "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+            "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+            "dependencies": {
+                "array-buffer-byte-length": "^1.0.1",
+                "arraybuffer.prototype.slice": "^1.0.3",
+                "available-typed-arrays": "^1.0.7",
+                "call-bind": "^1.0.7",
+                "data-view-buffer": "^1.0.1",
+                "data-view-byte-length": "^1.0.1",
+                "data-view-byte-offset": "^1.0.0",
+                "es-define-property": "^1.0.0",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.0.0",
+                "es-set-tostringtag": "^2.0.3",
+                "es-to-primitive": "^1.2.1",
+                "function.prototype.name": "^1.1.6",
+                "get-intrinsic": "^1.2.4",
+                "get-symbol-description": "^1.0.2",
+                "globalthis": "^1.0.3",
+                "gopd": "^1.0.1",
+                "has-property-descriptors": "^1.0.2",
+                "has-proto": "^1.0.3",
+                "has-symbols": "^1.0.3",
+                "hasown": "^2.0.2",
+                "internal-slot": "^1.0.7",
+                "is-array-buffer": "^3.0.4",
+                "is-callable": "^1.2.7",
+                "is-data-view": "^1.0.1",
+                "is-negative-zero": "^2.0.3",
+                "is-regex": "^1.1.4",
+                "is-shared-array-buffer": "^1.0.3",
+                "is-string": "^1.0.7",
+                "is-typed-array": "^1.1.13",
+                "is-weakref": "^1.0.2",
+                "object-inspect": "^1.13.1",
+                "object-keys": "^1.1.1",
+                "object.assign": "^4.1.5",
+                "regexp.prototype.flags": "^1.5.2",
+                "safe-array-concat": "^1.1.2",
+                "safe-regex-test": "^1.0.3",
+                "string.prototype.trim": "^1.2.9",
+                "string.prototype.trimend": "^1.0.8",
+                "string.prototype.trimstart": "^1.0.8",
+                "typed-array-buffer": "^1.0.2",
+                "typed-array-byte-length": "^1.0.1",
+                "typed-array-byte-offset": "^1.0.2",
+                "typed-array-length": "^1.0.6",
+                "unbox-primitive": "^1.0.2",
+                "which-typed-array": "^1.1.15"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/es-array-method-boxes-properly": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
+            "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA=="
+        },
+        "node_modules/es-define-property": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+            "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+            "dependencies": {
+                "get-intrinsic": "^1.2.4"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/es-errors": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+            "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/es-iterator-helpers": {
+            "version": "1.0.19",
+            "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
+            "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
+            "dev": true,
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.3",
+                "es-errors": "^1.3.0",
+                "es-set-tostringtag": "^2.0.3",
+                "function-bind": "^1.1.2",
+                "get-intrinsic": "^1.2.4",
+                "globalthis": "^1.0.3",
+                "has-property-descriptors": "^1.0.2",
+                "has-proto": "^1.0.3",
+                "has-symbols": "^1.0.3",
+                "internal-slot": "^1.0.7",
+                "iterator.prototype": "^1.1.2",
+                "safe-array-concat": "^1.1.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/es-module-lexer": {
+            "version": "1.5.2",
+            "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz",
+            "integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==",
+            "dev": true
+        },
+        "node_modules/es-object-atoms": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+            "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+            "dependencies": {
+                "es-errors": "^1.3.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/es-set-tostringtag": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+            "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
+            "dependencies": {
+                "get-intrinsic": "^1.2.4",
+                "has-tostringtag": "^1.0.2",
+                "hasown": "^2.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/es-shim-unscopables": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+            "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+            "dev": true,
+            "dependencies": {
+                "hasown": "^2.0.0"
+            }
+        },
+        "node_modules/es-to-primitive": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+            "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+            "dependencies": {
+                "is-callable": "^1.1.4",
+                "is-date-object": "^1.0.1",
+                "is-symbol": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/es5-ext": {
+            "version": "0.10.64",
+            "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+            "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+            "dev": true,
+            "hasInstallScript": true,
+            "dependencies": {
+                "es6-iterator": "^2.0.3",
+                "es6-symbol": "^3.1.3",
+                "esniff": "^2.0.1",
+                "next-tick": "^1.1.0"
+            },
+            "engines": {
+                "node": ">=0.10"
+            }
+        },
+        "node_modules/es6-iterator": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+            "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+            "dev": true,
+            "dependencies": {
+                "d": "1",
+                "es5-ext": "^0.10.35",
+                "es6-symbol": "^3.1.1"
+            }
+        },
+        "node_modules/es6-symbol": {
+            "version": "3.1.4",
+            "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
+            "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
+            "dev": true,
+            "dependencies": {
+                "d": "^1.0.2",
+                "ext": "^1.7.0"
+            },
+            "engines": {
+                "node": ">=0.12"
+            }
+        },
+        "node_modules/es6-weak-map": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+            "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+            "dev": true,
+            "dependencies": {
+                "d": "1",
+                "es5-ext": "^0.10.46",
+                "es6-iterator": "^2.0.3",
+                "es6-symbol": "^3.1.1"
+            }
+        },
+        "node_modules/escalade": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+            "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/escape-html": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+            "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+        },
+        "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+            "engines": {
+                "node": ">=0.8.0"
+            }
+        },
+        "node_modules/eslint": {
+            "version": "5.16.0",
+            "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+            "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
+            "dev": true,
+            "dependencies": {
+                "@babel/code-frame": "^7.0.0",
+                "ajv": "^6.9.1",
+                "chalk": "^2.1.0",
+                "cross-spawn": "^6.0.5",
+                "debug": "^4.0.1",
+                "doctrine": "^3.0.0",
+                "eslint-scope": "^4.0.3",
+                "eslint-utils": "^1.3.1",
+                "eslint-visitor-keys": "^1.0.0",
+                "espree": "^5.0.1",
+                "esquery": "^1.0.1",
+                "esutils": "^2.0.2",
+                "file-entry-cache": "^5.0.1",
+                "functional-red-black-tree": "^1.0.1",
+                "glob": "^7.1.2",
+                "globals": "^11.7.0",
+                "ignore": "^4.0.6",
+                "import-fresh": "^3.0.0",
+                "imurmurhash": "^0.1.4",
+                "inquirer": "^6.2.2",
+                "js-yaml": "^3.13.0",
+                "json-stable-stringify-without-jsonify": "^1.0.1",
+                "levn": "^0.3.0",
+                "lodash": "^4.17.11",
+                "minimatch": "^3.0.4",
+                "mkdirp": "^0.5.1",
+                "natural-compare": "^1.4.0",
+                "optionator": "^0.8.2",
+                "path-is-inside": "^1.0.2",
+                "progress": "^2.0.0",
+                "regexpp": "^2.0.1",
+                "semver": "^5.5.1",
+                "strip-ansi": "^4.0.0",
+                "strip-json-comments": "^2.0.1",
+                "table": "^5.2.3",
+                "text-table": "^0.2.0"
+            },
+            "bin": {
+                "eslint": "bin/eslint.js"
+            },
+            "engines": {
+                "node": "^6.14.0 || ^8.10.0 || >=9.10.0"
+            }
+        },
+        "node_modules/eslint-plugin-react": {
+            "version": "7.34.1",
+            "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz",
+            "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==",
+            "dev": true,
+            "dependencies": {
+                "array-includes": "^3.1.7",
+                "array.prototype.findlast": "^1.2.4",
+                "array.prototype.flatmap": "^1.3.2",
+                "array.prototype.toreversed": "^1.1.2",
+                "array.prototype.tosorted": "^1.1.3",
+                "doctrine": "^2.1.0",
+                "es-iterator-helpers": "^1.0.17",
+                "estraverse": "^5.3.0",
+                "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+                "minimatch": "^3.1.2",
+                "object.entries": "^1.1.7",
+                "object.fromentries": "^2.0.7",
+                "object.hasown": "^1.1.3",
+                "object.values": "^1.1.7",
+                "prop-types": "^15.8.1",
+                "resolve": "^2.0.0-next.5",
+                "semver": "^6.3.1",
+                "string.prototype.matchall": "^4.0.10"
+            },
+            "engines": {
+                "node": ">=4"
+            },
+            "peerDependencies": {
+                "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+            }
+        },
+        "node_modules/eslint-plugin-react-hooks": {
+            "version": "2.5.1",
+            "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz",
+            "integrity": "sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==",
+            "dev": true,
+            "engines": {
+                "node": ">=7"
+            },
+            "peerDependencies": {
+                "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
+            }
+        },
+        "node_modules/eslint-plugin-react/node_modules/doctrine": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+            "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+            "dev": true,
+            "dependencies": {
+                "esutils": "^2.0.2"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/eslint-plugin-react/node_modules/resolve": {
+            "version": "2.0.0-next.5",
+            "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+            "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+            "dev": true,
+            "dependencies": {
+                "is-core-module": "^2.13.0",
+                "path-parse": "^1.0.7",
+                "supports-preserve-symlinks-flag": "^1.0.0"
+            },
+            "bin": {
+                "resolve": "bin/resolve"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/eslint-plugin-react/node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "dev": true,
+            "bin": {
+                "semver": "bin/semver.js"
+            }
+        },
+        "node_modules/eslint-scope": {
+            "version": "4.0.3",
+            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+            "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+            "dev": true,
+            "dependencies": {
+                "esrecurse": "^4.1.0",
+                "estraverse": "^4.1.1"
+            },
+            "engines": {
+                "node": ">=4.0.0"
+            }
+        },
+        "node_modules/eslint-scope/node_modules/estraverse": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4.0"
+            }
+        },
+        "node_modules/eslint-utils": {
+            "version": "1.4.3",
+            "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+            "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+            "dev": true,
+            "dependencies": {
+                "eslint-visitor-keys": "^1.1.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/eslint-visitor-keys": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+            "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/eslint/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/eslint/node_modules/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,
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/eslint/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/eslint/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "dev": true,
+            "dependencies": {
+                "color-name": "1.1.3"
+            }
+        },
+        "node_modules/eslint/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+            "dev": true
+        },
+        "node_modules/eslint/node_modules/cross-spawn": {
+            "version": "6.0.5",
+            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+            "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+            "dev": true,
+            "dependencies": {
+                "nice-try": "^1.0.4",
+                "path-key": "^2.0.1",
+                "semver": "^5.5.0",
+                "shebang-command": "^1.2.0",
+                "which": "^1.2.9"
+            },
+            "engines": {
+                "node": ">=4.8"
+            }
+        },
+        "node_modules/eslint/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/eslint/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/eslint/node_modules/path-key": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+            "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/eslint/node_modules/semver": {
+            "version": "5.7.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+            "dev": true,
+            "bin": {
+                "semver": "bin/semver"
+            }
+        },
+        "node_modules/eslint/node_modules/shebang-command": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+            "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+            "dev": true,
+            "dependencies": {
+                "shebang-regex": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/eslint/node_modules/shebang-regex": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+            "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/eslint/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dev": true,
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/eslint/node_modules/which": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+            "dev": true,
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "which": "bin/which"
+            }
+        },
+        "node_modules/esniff": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+            "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+            "dev": true,
+            "dependencies": {
+                "d": "^1.0.1",
+                "es5-ext": "^0.10.62",
+                "event-emitter": "^0.3.5",
+                "type": "^2.7.2"
+            },
+            "engines": {
+                "node": ">=0.10"
+            }
+        },
+        "node_modules/espree": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+            "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+            "dev": true,
+            "dependencies": {
+                "acorn": "^6.0.7",
+                "acorn-jsx": "^5.0.0",
+                "eslint-visitor-keys": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/esprima": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+            "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+            "dev": true,
+            "bin": {
+                "esparse": "bin/esparse.js",
+                "esvalidate": "bin/esvalidate.js"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/esquery": {
+            "version": "1.5.0",
+            "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+            "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+            "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==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/etag": {
+            "version": "1.8.1",
+            "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+            "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/event-emitter": {
+            "version": "0.3.5",
+            "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+            "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+            "dev": true,
+            "dependencies": {
+                "d": "1",
+                "es5-ext": "~0.10.14"
+            }
+        },
+        "node_modules/event-target-shim": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+            "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/eventemitter3": {
+            "version": "4.0.7",
+            "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+            "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+        },
+        "node_modules/events": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+            "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.8.x"
+            }
+        },
+        "node_modules/evp_bytestokey": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+            "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+            "dev": true,
+            "dependencies": {
+                "md5.js": "^1.3.4",
+                "safe-buffer": "^5.1.1"
+            }
+        },
+        "node_modules/execa": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+            "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+            "dev": true,
+            "dependencies": {
+                "cross-spawn": "^6.0.0",
+                "get-stream": "^4.0.0",
+                "is-stream": "^1.1.0",
+                "npm-run-path": "^2.0.0",
+                "p-finally": "^1.0.0",
+                "signal-exit": "^3.0.0",
+                "strip-eof": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/execa/node_modules/cross-spawn": {
+            "version": "6.0.5",
+            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+            "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+            "dev": true,
+            "dependencies": {
+                "nice-try": "^1.0.4",
+                "path-key": "^2.0.1",
+                "semver": "^5.5.0",
+                "shebang-command": "^1.2.0",
+                "which": "^1.2.9"
+            },
+            "engines": {
+                "node": ">=4.8"
+            }
+        },
+        "node_modules/execa/node_modules/path-key": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+            "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/execa/node_modules/semver": {
+            "version": "5.7.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+            "dev": true,
+            "bin": {
+                "semver": "bin/semver"
+            }
+        },
+        "node_modules/execa/node_modules/shebang-command": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+            "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+            "dev": true,
+            "dependencies": {
+                "shebang-regex": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/execa/node_modules/shebang-regex": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+            "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/execa/node_modules/which": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+            "dev": true,
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "which": "bin/which"
+            }
+        },
+        "node_modules/execall": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
+            "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
+            "dev": true,
+            "dependencies": {
+                "clone-regexp": "^2.1.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/expand-brackets": {
+            "version": "2.1.4",
+            "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+            "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
+            "dev": true,
+            "dependencies": {
+                "debug": "^2.3.3",
+                "define-property": "^0.2.5",
+                "extend-shallow": "^2.0.1",
+                "posix-character-classes": "^0.1.0",
+                "regex-not": "^1.0.0",
+                "snapdragon": "^0.8.1",
+                "to-regex": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/expand-brackets/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "dev": true,
+            "dependencies": {
+                "ms": "2.0.0"
+            }
+        },
+        "node_modules/expand-brackets/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+            "dev": true
+        },
+        "node_modules/expand-tilde": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+            "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
+            "dev": true,
+            "dependencies": {
+                "homedir-polyfill": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/express": {
+            "version": "4.19.2",
+            "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
+            "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+            "dependencies": {
+                "accepts": "~1.3.8",
+                "array-flatten": "1.1.1",
+                "body-parser": "1.20.2",
+                "content-disposition": "0.5.4",
+                "content-type": "~1.0.4",
+                "cookie": "0.6.0",
+                "cookie-signature": "1.0.6",
+                "debug": "2.6.9",
+                "depd": "2.0.0",
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "etag": "~1.8.1",
+                "finalhandler": "1.2.0",
+                "fresh": "0.5.2",
+                "http-errors": "2.0.0",
+                "merge-descriptors": "1.0.1",
+                "methods": "~1.1.2",
+                "on-finished": "2.4.1",
+                "parseurl": "~1.3.3",
+                "path-to-regexp": "0.1.7",
+                "proxy-addr": "~2.0.7",
+                "qs": "6.11.0",
+                "range-parser": "~1.2.1",
+                "safe-buffer": "5.2.1",
+                "send": "0.18.0",
+                "serve-static": "1.15.0",
+                "setprototypeof": "1.2.0",
+                "statuses": "2.0.1",
+                "type-is": "~1.6.18",
+                "utils-merge": "1.0.1",
+                "vary": "~1.1.2"
+            },
+            "engines": {
+                "node": ">= 0.10.0"
+            }
+        },
+        "node_modules/express-static-gzip": {
+            "version": "2.1.7",
+            "resolved": "https://registry.npmjs.org/express-static-gzip/-/express-static-gzip-2.1.7.tgz",
+            "integrity": "sha512-QOCZUC+lhPPCjIJKpQGu1Oa61Axg9Mq09Qvit8Of7kzpMuwDeMSqjjQteQS3OVw/GkENBoSBheuQDWPlngImvw==",
+            "dependencies": {
+                "serve-static": "^1.14.1"
+            }
+        },
+        "node_modules/express-static-gzip/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "dependencies": {
+                "ms": "2.0.0"
+            }
+        },
+        "node_modules/express-static-gzip/node_modules/debug/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+        },
+        "node_modules/express-static-gzip/node_modules/mime": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+            "bin": {
+                "mime": "cli.js"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/express-static-gzip/node_modules/ms": {
+            "version": "2.1.3",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+        },
+        "node_modules/express-static-gzip/node_modules/send": {
+            "version": "0.18.0",
+            "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+            "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+            "dependencies": {
+                "debug": "2.6.9",
+                "depd": "2.0.0",
+                "destroy": "1.2.0",
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "etag": "~1.8.1",
+                "fresh": "0.5.2",
+                "http-errors": "2.0.0",
+                "mime": "1.6.0",
+                "ms": "2.1.3",
+                "on-finished": "2.4.1",
+                "range-parser": "~1.2.1",
+                "statuses": "2.0.1"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/express-static-gzip/node_modules/serve-static": {
+            "version": "1.15.0",
+            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+            "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+            "dependencies": {
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "parseurl": "~1.3.3",
+                "send": "0.18.0"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/express/node_modules/cookie": {
+            "version": "0.6.0",
+            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+            "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/express/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "dependencies": {
+                "ms": "2.0.0"
+            }
+        },
+        "node_modules/express/node_modules/finalhandler": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+            "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+            "dependencies": {
+                "debug": "2.6.9",
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "on-finished": "2.4.1",
+                "parseurl": "~1.3.3",
+                "statuses": "2.0.1",
+                "unpipe": "~1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.8"
+            }
+        },
+        "node_modules/express/node_modules/mime": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+            "bin": {
+                "mime": "cli.js"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/express/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+        },
+        "node_modules/express/node_modules/send": {
+            "version": "0.18.0",
+            "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+            "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+            "dependencies": {
+                "debug": "2.6.9",
+                "depd": "2.0.0",
+                "destroy": "1.2.0",
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "etag": "~1.8.1",
+                "fresh": "0.5.2",
+                "http-errors": "2.0.0",
+                "mime": "1.6.0",
+                "ms": "2.1.3",
+                "on-finished": "2.4.1",
+                "range-parser": "~1.2.1",
+                "statuses": "2.0.1"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/express/node_modules/send/node_modules/ms": {
+            "version": "2.1.3",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+        },
+        "node_modules/express/node_modules/serve-static": {
+            "version": "1.15.0",
+            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+            "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+            "dependencies": {
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "parseurl": "~1.3.3",
+                "send": "0.18.0"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/ext": {
+            "version": "1.7.0",
+            "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+            "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+            "dev": true,
+            "dependencies": {
+                "type": "^2.7.2"
+            }
+        },
+        "node_modules/extend": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+            "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+            "dev": true
+        },
+        "node_modules/extend-shallow": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+            "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+            "dev": true,
+            "dependencies": {
+                "is-extendable": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/external-editor": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+            "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+            "dev": true,
+            "dependencies": {
+                "chardet": "^0.7.0",
+                "iconv-lite": "^0.4.24",
+                "tmp": "^0.0.33"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/external-editor/node_modules/iconv-lite": {
+            "version": "0.4.24",
+            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+            "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+            "dev": true,
+            "dependencies": {
+                "safer-buffer": ">= 2.1.2 < 3"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/extglob": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+            "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+            "dev": true,
+            "dependencies": {
+                "array-unique": "^0.3.2",
+                "define-property": "^1.0.0",
+                "expand-brackets": "^2.1.4",
+                "extend-shallow": "^2.0.1",
+                "fragment-cache": "^0.2.1",
+                "regex-not": "^1.0.0",
+                "snapdragon": "^0.8.1",
+                "to-regex": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/extglob/node_modules/define-property": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+            "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+            "dev": true,
+            "dependencies": {
+                "is-descriptor": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/extglob/node_modules/is-descriptor": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+            "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+            "dev": true,
+            "dependencies": {
+                "is-accessor-descriptor": "^1.0.1",
+                "is-data-descriptor": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/fancy-log": {
+            "version": "1.3.3",
+            "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
+            "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
+            "dev": true,
+            "dependencies": {
+                "ansi-gray": "^0.1.1",
+                "color-support": "^1.1.3",
+                "parse-node-version": "^1.0.0",
+                "time-stamp": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
+        "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-diff": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+            "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+            "dev": true
+        },
+        "node_modules/fast-fifo": {
+            "version": "1.3.2",
+            "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+            "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+            "dev": true
+        },
+        "node_modules/fast-glob": {
+            "version": "3.3.2",
+            "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+            "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+            "dependencies": {
+                "@nodelib/fs.stat": "^2.0.2",
+                "@nodelib/fs.walk": "^1.2.3",
+                "glob-parent": "^5.1.2",
+                "merge2": "^1.3.0",
+                "micromatch": "^4.0.4"
+            },
+            "engines": {
+                "node": ">=8.6.0"
+            }
+        },
+        "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": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+            "dev": true
+        },
+        "node_modules/fastest-levenshtein": {
+            "version": "1.0.16",
+            "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+            "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+            "dev": true,
+            "engines": {
+                "node": ">= 4.9.1"
+            }
+        },
+        "node_modules/fastq": {
+            "version": "1.17.1",
+            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+            "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+            "dependencies": {
+                "reusify": "^1.0.4"
+            }
+        },
+        "node_modules/fecha": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
+            "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==",
+            "dev": true
+        },
+        "node_modules/figures": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+            "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
+            "dev": true,
+            "dependencies": {
+                "escape-string-regexp": "^1.0.5"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/File": {
+            "version": "0.10.2",
+            "resolved": "https://registry.npmjs.org/File/-/File-0.10.2.tgz",
+            "integrity": "sha512-gomQVTq/10wIR399uhGTWtYcYneTXbfe3p2RO/NR0MPrLkIyOaE9DCEPXihAm+72epLtXaplitwfJ/wkmj88dg==",
+            "dev": true,
+            "dependencies": {
+                "mime": ">= 0.0.0"
+            }
+        },
+        "node_modules/file-api": {
+            "version": "0.10.4",
+            "resolved": "https://registry.npmjs.org/file-api/-/file-api-0.10.4.tgz",
+            "integrity": "sha512-RVBXJGmsnQxokdpy264pmsdBjbUuxE6QT2xxhOrO2pzwTetbTNoWVFgkONFWmopm5mellsXrQIQhMY9fjufi9g==",
+            "dev": true,
+            "dependencies": {
+                "bufferjs": "> 0.2.0",
+                "File": ">= 0.10.0",
+                "file-error": ">= 0.10.0",
+                "FileList": ">= 0.10.0",
+                "filereader": ">= 0.10.3",
+                "formdata": ">= 0.10.0",
+                "mime": ">= 1.2.11",
+                "remedial": ">= 1.0.7"
+            }
+        },
+        "node_modules/file-entry-cache": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+            "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+            "dev": true,
+            "dependencies": {
+                "flat-cache": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/file-error": {
+            "version": "0.10.2",
+            "resolved": "https://registry.npmjs.org/file-error/-/file-error-0.10.2.tgz",
+            "integrity": "sha512-hJsQ7sEz6dM4vuRS7cipKiixV6EymEXHe+TCf2XVWsGTOehzrmcqqKMgeYTmV24XhjWSj+pQj1e5yjPJ7DtQvw==",
+            "dev": true
+        },
+        "node_modules/file-uri-to-path": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+            "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+            "dev": true,
+            "optional": true
+        },
+        "node_modules/FileList": {
+            "version": "0.10.2",
+            "resolved": "https://registry.npmjs.org/FileList/-/FileList-0.10.2.tgz",
+            "integrity": "sha512-HCe9WvojxLiMEfa3l6jFkQJLzhzDXgQmfnKFoRvhEnsyVoIc5piAQNLyhOwsZsmf8IwDBfr5H71nB8Wi5w0XwA==",
+            "dev": true
+        },
+        "node_modules/filereader": {
+            "version": "0.10.3",
+            "resolved": "https://registry.npmjs.org/filereader/-/filereader-0.10.3.tgz",
+            "integrity": "sha512-7F8w6GSXuHLN80ukaVOcHgBaiTRHUZr8GeEhNdqfAECcnBoROg4i8hTl+KqtF4yUPffOJVHEFg4iDJb7xIYFng==",
+            "dev": true
+        },
+        "node_modules/fill-range": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+            "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+            "dev": true,
+            "dependencies": {
+                "extend-shallow": "^2.0.1",
+                "is-number": "^3.0.0",
+                "repeat-string": "^1.6.1",
+                "to-regex-range": "^2.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/filter-obj": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz",
+            "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/finalhandler": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+            "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==",
+            "dev": true,
+            "dependencies": {
+                "debug": "2.6.9",
+                "encodeurl": "~1.0.1",
+                "escape-html": "~1.0.3",
+                "on-finished": "~2.3.0",
+                "parseurl": "~1.3.2",
+                "statuses": "~1.3.1",
+                "unpipe": "~1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.8"
+            }
+        },
+        "node_modules/finalhandler/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "dev": true,
+            "dependencies": {
+                "ms": "2.0.0"
+            }
+        },
+        "node_modules/finalhandler/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+            "dev": true
+        },
+        "node_modules/finalhandler/node_modules/on-finished": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+            "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+            "dev": true,
+            "dependencies": {
+                "ee-first": "1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.8"
+            }
+        },
+        "node_modules/finalhandler/node_modules/statuses": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+            "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==",
+            "dev": true,
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/find-babel-config": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.1.1.tgz",
+            "integrity": "sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA==",
+            "dev": true,
+            "dependencies": {
+                "json5": "^2.2.3",
+                "path-exists": "^4.0.0"
+            }
+        },
+        "node_modules/find-babel-config/node_modules/path-exists": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+            "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/find-cache-dir": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+            "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+            "dependencies": {
+                "commondir": "^1.0.1",
+                "make-dir": "^2.0.0",
+                "pkg-dir": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/find-parent-dir": {
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz",
+            "integrity": "sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==",
+            "dev": true
+        },
+        "node_modules/find-up": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+            "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+            "dev": true,
+            "dependencies": {
+                "locate-path": "^5.0.0",
+                "path-exists": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/find-up/node_modules/path-exists": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+            "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/findup-sync": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz",
+            "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==",
+            "dev": true,
+            "dependencies": {
+                "detect-file": "^1.0.0",
+                "is-glob": "^4.0.3",
+                "micromatch": "^4.0.4",
+                "resolve-dir": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/fined": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz",
+            "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==",
+            "dev": true,
+            "dependencies": {
+                "expand-tilde": "^2.0.2",
+                "is-plain-object": "^5.0.0",
+                "object.defaults": "^1.1.0",
+                "object.pick": "^1.3.0",
+                "parse-filepath": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/fined/node_modules/is-plain-object": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+            "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/first-chunk-stream": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz",
+            "integrity": "sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==",
+            "dev": true,
+            "dependencies": {
+                "readable-stream": "^2.0.2"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/first-chunk-stream/node_modules/isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+            "dev": true
+        },
+        "node_modules/first-chunk-stream/node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+            "dev": true,
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+            }
+        },
+        "node_modules/first-chunk-stream/node_modules/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
+        },
+        "node_modules/first-chunk-stream/node_modules/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,
+            "dependencies": {
+                "safe-buffer": "~5.1.0"
+            }
+        },
+        "node_modules/flagged-respawn": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz",
+            "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==",
+            "dev": true,
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/flat-cache": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+            "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+            "dev": true,
+            "dependencies": {
+                "flatted": "^2.0.0",
+                "rimraf": "2.6.3",
+                "write": "1.0.3"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/flat-cache/node_modules/rimraf": {
+            "version": "2.6.3",
+            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+            "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+            "dev": true,
+            "dependencies": {
+                "glob": "^7.1.3"
+            },
+            "bin": {
+                "rimraf": "bin.js"
+            }
+        },
+        "node_modules/flatted": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+            "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
+            "dev": true
+        },
+        "node_modules/fn.name": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
+            "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==",
+            "dev": true
+        },
+        "node_modules/follow-redirects": {
+            "version": "1.15.6",
+            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+            "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+            "funding": [
+                {
+                    "type": "individual",
+                    "url": "https://github.com/sponsors/RubenVerborgh"
+                }
+            ],
+            "engines": {
+                "node": ">=4.0"
+            },
+            "peerDependenciesMeta": {
+                "debug": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/for-each": {
+            "version": "0.3.3",
+            "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+            "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+            "dependencies": {
+                "is-callable": "^1.1.3"
+            }
+        },
+        "node_modules/for-in": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+            "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/for-own": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+            "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==",
+            "dev": true,
+            "dependencies": {
+                "for-in": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/foreachasync": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz",
+            "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw==",
+            "dev": true
+        },
+        "node_modules/fork-stream": {
+            "version": "0.0.4",
+            "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz",
+            "integrity": "sha512-Pqq5NnT78ehvUnAk/We/Jr22vSvanRlFTpAmQ88xBY/M1TlHe+P0ILuEyXS595ysdGfaj22634LBkGMA2GTcpA==",
+            "dev": true
+        },
+        "node_modules/formdata": {
+            "version": "0.10.4",
+            "resolved": "https://registry.npmjs.org/formdata/-/formdata-0.10.4.tgz",
+            "integrity": "sha512-IsHa+GYLLXHx0RmpUmzQTdwxDjNinxD+1zKOYPLaRwiqTfex5caQhOzgPIjFgJkL0O884Ers76BSHzXJxHvPLw==",
+            "dev": true,
+            "dependencies": {
+                "bufferjs": "^2.0.0",
+                "File": "^0.10.2",
+                "FileList": "^0.10.2",
+                "filereader": "^0.10.3",
+                "foreachasync": "^3.0.0",
+                "remedial": "^1.0.7"
+            }
+        },
+        "node_modules/formdata/node_modules/bufferjs": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/bufferjs/-/bufferjs-2.0.0.tgz",
+            "integrity": "sha512-VnTCQKC+AJ61OFGe/hn3jRXoIt/B95NUcuxzAwiVT0PFB0KRZImkoDPYdFqDIs7xAs1eJ3yiKcHnuUiiYe7ucQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.2.0"
+            }
+        },
+        "node_modules/forwarded": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+            "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/fraction.js": {
+            "version": "4.3.7",
+            "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+            "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+            "dev": true,
+            "engines": {
+                "node": "*"
+            },
+            "funding": {
+                "type": "patreon",
+                "url": "https://github.com/sponsors/rawify"
+            }
+        },
+        "node_modules/fragment-cache": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+            "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
+            "dev": true,
+            "dependencies": {
+                "map-cache": "^0.2.2"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/fresh": {
+            "version": "0.5.2",
+            "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+            "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/fs-extra": {
+            "version": "10.1.0",
+            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+            "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+            "dependencies": {
+                "graceful-fs": "^4.2.0",
+                "jsonfile": "^6.0.1",
+                "universalify": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/fs-mkdirp-stream": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz",
+            "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==",
+            "dev": true,
+            "dependencies": {
+                "graceful-fs": "^4.2.8",
+                "streamx": "^2.12.0"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/fs-readdir-recursive": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+            "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA=="
+        },
+        "node_modules/fs.realpath": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+            "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+        },
+        "node_modules/fsevents": {
+            "version": "1.2.13",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+            "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+            "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2",
+            "dev": true,
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "dependencies": {
+                "bindings": "^1.5.0",
+                "nan": "^2.12.1"
+            },
+            "engines": {
+                "node": ">= 4.0"
+            }
+        },
+        "node_modules/function-bind": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+            "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/function.prototype.name": {
+            "version": "1.1.6",
+            "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+            "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+            "dependencies": {
+                "call-bind": "^1.0.2",
+                "define-properties": "^1.2.0",
+                "es-abstract": "^1.22.1",
+                "functions-have-names": "^1.2.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+            "dev": true
+        },
+        "node_modules/functions-have-names": {
+            "version": "1.2.3",
+            "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+            "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/gensync": {
+            "version": "1.0.0-beta.2",
+            "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+            "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/get-caller-file": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+            "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+            "dev": true,
+            "engines": {
+                "node": "6.* || 8.* || >= 10.*"
+            }
+        },
+        "node_modules/get-intrinsic": {
+            "version": "1.2.4",
+            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+            "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+            "dependencies": {
+                "es-errors": "^1.3.0",
+                "function-bind": "^1.1.2",
+                "has-proto": "^1.0.1",
+                "has-symbols": "^1.0.3",
+                "hasown": "^2.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/get-own-enumerable-property-symbols": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+            "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
+            "dev": true
+        },
+        "node_modules/get-stdin": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
+            "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/get-stream": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+            "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+            "dev": true,
+            "dependencies": {
+                "pump": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/get-symbol-description": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+            "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+            "dependencies": {
+                "call-bind": "^1.0.5",
+                "es-errors": "^1.3.0",
+                "get-intrinsic": "^1.2.4"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/get-value": {
+            "version": "2.0.6",
+            "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+            "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/gettext-extract": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/gettext-extract/-/gettext-extract-2.0.1.tgz",
+            "integrity": "sha512-k51R90txkCZeXQEDjK0e7gNHfBHJVCu8IQ3AbSVZoOL5nR3yl+C+7qpzp6hoZwOtiniaY+CKeLyvNulsEUM6MA==",
+            "dev": true,
+            "dependencies": {
+                "chalk": "^2.3.0",
+                "find-up": "^4.1.0",
+                "fs-extra": "^8.0.1",
+                "gettext-extractor": "^3.1.0",
+                "minimist": "^1.2.0"
+            },
+            "bin": {
+                "gettext-extract": "bin/gettext-extract"
+            },
+            "engines": {
+                "node": ">=8.0.0"
+            }
+        },
+        "node_modules/gettext-extract/node_modules/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,
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/gettext-extract/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/gettext-extract/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "dev": true,
+            "dependencies": {
+                "color-name": "1.1.3"
+            }
+        },
+        "node_modules/gettext-extract/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+            "dev": true
+        },
+        "node_modules/gettext-extract/node_modules/fs-extra": {
+            "version": "8.1.0",
+            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+            "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+            "dev": true,
+            "dependencies": {
+                "graceful-fs": "^4.2.0",
+                "jsonfile": "^4.0.0",
+                "universalify": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=6 <7 || >=8"
+            }
+        },
+        "node_modules/gettext-extract/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/gettext-extract/node_modules/jsonfile": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+            "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+            "dev": true,
+            "optionalDependencies": {
+                "graceful-fs": "^4.1.6"
+            }
+        },
+        "node_modules/gettext-extract/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dev": true,
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/gettext-extract/node_modules/universalify": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+            "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+            "dev": true,
+            "engines": {
+                "node": ">= 4.0.0"
+            }
+        },
+        "node_modules/gettext-extractor": {
+            "version": "3.8.0",
+            "resolved": "https://registry.npmjs.org/gettext-extractor/-/gettext-extractor-3.8.0.tgz",
+            "integrity": "sha512-i/3mDQufQoJd2/EKm/B+VlaYrt3yGjVfLZu8DQpESKH29klNiW6z2S89FVCIEB85bDNgtGCeM/3A/yR1njr/Lw==",
+            "dev": true,
+            "dependencies": {
+                "@types/glob": "5 - 7",
+                "@types/parse5": "^5",
+                "css-selector-parser": "^1.3",
+                "glob": "5 - 7",
+                "parse5": "5 - 6",
+                "pofile": "1.0.x",
+                "typescript": "4 - 5"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/gettext-parser": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.1.0.tgz",
+            "integrity": "sha512-zL3eayB0jF+cr6vogH/VJKoKcj7uQj2TPByaaj6a4k/3elk9iq7fiwCM2FqdzS/umo021RetSanVisarzeb9Wg==",
+            "dev": true,
+            "dependencies": {
+                "encoding": "^0.1.11"
+            }
+        },
+        "node_modules/glob": {
+            "version": "7.2.3",
+            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+            "dependencies": {
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.1.1",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
+            },
+            "engines": {
+                "node": "*"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/glob-parent": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+            "dependencies": {
+                "is-glob": "^4.0.1"
+            },
+            "engines": {
+                "node": ">= 6"
+            }
+        },
+        "node_modules/glob-stream": {
+            "version": "8.0.2",
+            "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz",
+            "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==",
+            "dev": true,
+            "dependencies": {
+                "@gulpjs/to-absolute-glob": "^4.0.0",
+                "anymatch": "^3.1.3",
+                "fastq": "^1.13.0",
+                "glob-parent": "^6.0.2",
+                "is-glob": "^4.0.3",
+                "is-negated-glob": "^1.0.0",
+                "normalize-path": "^3.0.0",
+                "streamx": "^2.12.5"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/glob-stream/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/glob-to-regexp": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+            "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+            "dev": true
+        },
+        "node_modules/glob-watcher": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz",
+            "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==",
+            "dev": true,
+            "dependencies": {
+                "async-done": "^2.0.0",
+                "chokidar": "^3.5.3"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/glob-watcher/node_modules/binary-extensions": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/glob-watcher/node_modules/braces": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+            "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+            "dev": true,
+            "dependencies": {
+                "fill-range": "^7.1.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/glob-watcher/node_modules/chokidar": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+            "dev": true,
+            "dependencies": {
+                "anymatch": "~3.1.2",
+                "braces": "~3.0.2",
+                "glob-parent": "~5.1.2",
+                "is-binary-path": "~2.1.0",
+                "is-glob": "~4.0.1",
+                "normalize-path": "~3.0.0",
+                "readdirp": "~3.6.0"
+            },
+            "engines": {
+                "node": ">= 8.10.0"
+            },
+            "funding": {
+                "url": "https://paulmillr.com/funding/"
+            },
+            "optionalDependencies": {
+                "fsevents": "~2.3.2"
+            }
+        },
+        "node_modules/glob-watcher/node_modules/fill-range": {
+            "version": "7.1.1",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+            "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+            "dev": true,
+            "dependencies": {
+                "to-regex-range": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/glob-watcher/node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+            "dev": true,
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+            }
+        },
+        "node_modules/glob-watcher/node_modules/is-binary-path": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+            "dev": true,
+            "dependencies": {
+                "binary-extensions": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/glob-watcher/node_modules/is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.12.0"
+            }
+        },
+        "node_modules/glob-watcher/node_modules/readdirp": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "dev": true,
+            "dependencies": {
+                "picomatch": "^2.2.1"
+            },
+            "engines": {
+                "node": ">=8.10.0"
+            }
+        },
+        "node_modules/glob-watcher/node_modules/to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+            "dev": true,
+            "dependencies": {
+                "is-number": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=8.0"
+            }
+        },
+        "node_modules/glob/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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/global-modules": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+            "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+            "dev": true,
+            "dependencies": {
+                "global-prefix": "^1.0.1",
+                "is-windows": "^1.0.1",
+                "resolve-dir": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/global-prefix": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+            "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
+            "dev": true,
+            "dependencies": {
+                "expand-tilde": "^2.0.2",
+                "homedir-polyfill": "^1.0.1",
+                "ini": "^1.3.4",
+                "is-windows": "^1.0.1",
+                "which": "^1.2.14"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/global-prefix/node_modules/which": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+            "dev": true,
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "which": "bin/which"
+            }
+        },
+        "node_modules/globals": {
+            "version": "11.12.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/globalthis": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+            "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+            "dependencies": {
+                "define-properties": "^1.2.1",
+                "gopd": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/globby": {
+            "version": "11.1.0",
+            "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+            "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+            "dev": true,
+            "dependencies": {
+                "array-union": "^2.1.0",
+                "dir-glob": "^3.0.1",
+                "fast-glob": "^3.2.9",
+                "ignore": "^5.2.0",
+                "merge2": "^1.4.1",
+                "slash": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/globby/node_modules/ignore": {
+            "version": "5.3.1",
+            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+            "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+            "dev": true,
+            "engines": {
+                "node": ">= 4"
+            }
+        },
+        "node_modules/globby/node_modules/slash": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/globjoin": {
+            "version": "0.1.4",
+            "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+            "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
+            "dev": true
+        },
+        "node_modules/glogg": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz",
+            "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==",
+            "dev": true,
+            "dependencies": {
+                "sparkles": "^2.1.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/gonzales-pe": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
+            "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
+            "dev": true,
+            "dependencies": {
+                "minimist": "^1.2.5"
+            },
+            "bin": {
+                "gonzales": "bin/gonzales.js"
+            },
+            "engines": {
+                "node": ">=0.6.0"
+            }
+        },
+        "node_modules/gopd": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+            "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+            "dependencies": {
+                "get-intrinsic": "^1.1.3"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/graceful-fs": {
+            "version": "4.2.11",
+            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+            "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+        },
+        "node_modules/gulp": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz",
+            "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==",
+            "dev": true,
+            "dependencies": {
+                "glob-watcher": "^6.0.0",
+                "gulp-cli": "^3.0.0",
+                "undertaker": "^2.0.0",
+                "vinyl-fs": "^4.0.0"
+            },
+            "bin": {
+                "gulp": "bin/gulp.js"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/gulp-autoprefixer": {
+            "version": "8.0.0",
+            "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-8.0.0.tgz",
+            "integrity": "sha512-sVR++PIaXpa81p52dmmA/jt50bw0egmylK5mjagfgOJ8uLDGaF9tHyzvetkY9Uo0gBZUS5sVqN3kX/GlUKOyog==",
+            "dev": true,
+            "dependencies": {
+                "autoprefixer": "^10.2.6",
+                "fancy-log": "^1.3.3",
+                "plugin-error": "^1.0.1",
+                "postcss": "^8.3.0",
+                "through2": "^4.0.2",
+                "vinyl-sourcemaps-apply": "^0.2.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "peerDependencies": {
+                "gulp": ">=4"
+            },
+            "peerDependenciesMeta": {
+                "gulp": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/gulp-clean-css": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-4.3.0.tgz",
+            "integrity": "sha512-mGyeT3qqFXTy61j0zOIciS4MkYziF2U594t2Vs9rUnpkEHqfu6aDITMp8xOvZcvdX61Uz3y1mVERRYmjzQF5fg==",
+            "dev": true,
+            "dependencies": {
+                "clean-css": "4.2.3",
+                "plugin-error": "1.0.1",
+                "through2": "3.0.1",
+                "vinyl-sourcemaps-apply": "0.2.1"
+            }
+        },
+        "node_modules/gulp-clean-css/node_modules/through2": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+            "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+            "dev": true,
+            "dependencies": {
+                "readable-stream": "2 || 3"
+            }
+        },
+        "node_modules/gulp-cli": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz",
+            "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==",
+            "dev": true,
+            "dependencies": {
+                "@gulpjs/messages": "^1.1.0",
+                "chalk": "^4.1.2",
+                "copy-props": "^4.0.0",
+                "gulplog": "^2.2.0",
+                "interpret": "^3.1.1",
+                "liftoff": "^5.0.0",
+                "mute-stdout": "^2.0.0",
+                "replace-homedir": "^2.0.0",
+                "semver-greatest-satisfied-range": "^2.0.0",
+                "string-width": "^4.2.3",
+                "v8flags": "^4.0.0",
+                "yargs": "^16.2.0"
+            },
+            "bin": {
+                "gulp": "bin/gulp.js"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/gulp-cli/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/gulp-cli/node_modules/cliui": {
+            "version": "7.0.4",
+            "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+            "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+            "dev": true,
+            "dependencies": {
+                "string-width": "^4.2.0",
+                "strip-ansi": "^6.0.0",
+                "wrap-ansi": "^7.0.0"
+            }
+        },
+        "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+            "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/gulp-cli/node_modules/string-width": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "dev": true,
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/gulp-cli/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/gulp-cli/node_modules/v8flags": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz",
+            "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==",
+            "dev": true,
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/gulp-cli/node_modules/wrap-ansi": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+            "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^4.0.0",
+                "string-width": "^4.1.0",
+                "strip-ansi": "^6.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+            }
+        },
+        "node_modules/gulp-cli/node_modules/yargs": {
+            "version": "16.2.0",
+            "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+            "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+            "dev": true,
+            "dependencies": {
+                "cliui": "^7.0.2",
+                "escalade": "^3.1.1",
+                "get-caller-file": "^2.0.5",
+                "require-directory": "^2.1.1",
+                "string-width": "^4.2.0",
+                "y18n": "^5.0.5",
+                "yargs-parser": "^20.2.2"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/gulp-concat": {
+            "version": "2.6.1",
+            "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
+            "integrity": "sha512-a2scActrQrDBpBbR3WUZGyGS1JEPLg5PZJdIa7/Bi3GuKAmPYDK6SFhy/NZq5R8KsKKFvtfR0fakbUCcKGCCjg==",
+            "dev": true,
+            "dependencies": {
+                "concat-with-sourcemaps": "^1.0.0",
+                "through2": "^2.0.0",
+                "vinyl": "^2.0.0"
+            },
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
+        "node_modules/gulp-concat/node_modules/clone": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+            "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.8"
+            }
+        },
+        "node_modules/gulp-concat/node_modules/clone-stats": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+            "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
+            "dev": true
+        },
+        "node_modules/gulp-concat/node_modules/isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+            "dev": true
+        },
+        "node_modules/gulp-concat/node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+            "dev": true,
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+            }
+        },
+        "node_modules/gulp-concat/node_modules/replace-ext": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+            "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+            "dev": true,
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
+        "node_modules/gulp-concat/node_modules/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
+        },
+        "node_modules/gulp-concat/node_modules/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,
+            "dependencies": {
+                "safe-buffer": "~5.1.0"
+            }
+        },
+        "node_modules/gulp-concat/node_modules/through2": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+            "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+            "dev": true,
+            "dependencies": {
+                "readable-stream": "~2.3.6",
+                "xtend": "~4.0.1"
+            }
+        },
+        "node_modules/gulp-concat/node_modules/vinyl": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+            "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+            "dev": true,
+            "dependencies": {
+                "clone": "^2.1.1",
+                "clone-buffer": "^1.0.0",
+                "clone-stats": "^1.0.0",
+                "cloneable-readable": "^1.0.0",
+                "remove-trailing-separator": "^1.0.1",
+                "replace-ext": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
+        "node_modules/gulp-gzip": {
+            "version": "1.4.2",
+            "resolved": "https://registry.npmjs.org/gulp-gzip/-/gulp-gzip-1.4.2.tgz",
+            "integrity": "sha512-ZIxfkUwk2XmZPTT9pPHrHUQlZMyp9nPhg2sfoeN27mBGpi7OaHnOD+WCN41NXjfJQ69lV1nQ9LLm1hYxx4h3UQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-colors": "^1.0.1",
+                "bytes": "^3.0.0",
+                "fancy-log": "^1.3.2",
+                "plugin-error": "^1.0.0",
+                "stream-to-array": "^2.3.0",
+                "through2": "^2.0.3"
+            },
+            "engines": {
+                "node": ">= 0.10.0"
+            }
+        },
+        "node_modules/gulp-gzip/node_modules/ansi-colors": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+            "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+            "dev": true,
+            "dependencies": {
+                "ansi-wrap": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/gulp-gzip/node_modules/isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+            "dev": true
+        },
+        "node_modules/gulp-gzip/node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+            "dev": true,
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+            }
+        },
+        "node_modules/gulp-gzip/node_modules/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
+        },
+        "node_modules/gulp-gzip/node_modules/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,
+            "dependencies": {
+                "safe-buffer": "~5.1.0"
+            }
+        },
+        "node_modules/gulp-gzip/node_modules/through2": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+            "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+            "dev": true,
+            "dependencies": {
+                "readable-stream": "~2.3.6",
+                "xtend": "~4.0.1"
+            }
+        },
+        "node_modules/gulp-if": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-3.0.0.tgz",
+            "integrity": "sha512-fCUEngzNiEZEK2YuPm+sdMpO6ukb8+/qzbGfJBXyNOXz85bCG7yBI+pPSl+N90d7gnLvMsarthsAImx0qy7BAw==",
+            "dev": true,
+            "dependencies": {
+                "gulp-match": "^1.1.0",
+                "ternary-stream": "^3.0.0",
+                "through2": "^3.0.1"
+            }
+        },
+        "node_modules/gulp-if/node_modules/through2": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
+            "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
+            "dev": true,
+            "dependencies": {
+                "inherits": "^2.0.4",
+                "readable-stream": "2 || 3"
+            }
+        },
+        "node_modules/gulp-match": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz",
+            "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==",
+            "dev": true,
+            "dependencies": {
+                "minimatch": "^3.0.3"
+            }
+        },
+        "node_modules/gulp-rename": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz",
+            "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/gulp-sass": {
+            "version": "5.1.0",
+            "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz",
+            "integrity": "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==",
+            "dev": true,
+            "dependencies": {
+                "lodash.clonedeep": "^4.5.0",
+                "picocolors": "^1.0.0",
+                "plugin-error": "^1.0.1",
+                "replace-ext": "^2.0.0",
+                "strip-ansi": "^6.0.1",
+                "vinyl-sourcemaps-apply": "^0.2.1"
+            },
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/gulp-sass/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/gulp-sass/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/gulp-sourcemaps": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz",
+            "integrity": "sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==",
+            "dev": true,
+            "dependencies": {
+                "@gulp-sourcemaps/identity-map": "^2.0.1",
+                "@gulp-sourcemaps/map-sources": "^1.0.0",
+                "acorn": "^6.4.1",
+                "convert-source-map": "^1.0.0",
+                "css": "^3.0.0",
+                "debug-fabulous": "^1.0.0",
+                "detect-newline": "^2.0.0",
+                "graceful-fs": "^4.0.0",
+                "source-map": "^0.6.0",
+                "strip-bom-string": "^1.0.0",
+                "through2": "^2.0.0"
+            },
+            "engines": {
+                "node": ">= 6"
+            }
+        },
+        "node_modules/gulp-sourcemaps/node_modules/convert-source-map": {
+            "version": "1.9.0",
+            "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+            "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+            "dev": true
+        },
+        "node_modules/gulp-sourcemaps/node_modules/isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+            "dev": true
+        },
+        "node_modules/gulp-sourcemaps/node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+            "dev": true,
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+            }
+        },
+        "node_modules/gulp-sourcemaps/node_modules/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
+        },
+        "node_modules/gulp-sourcemaps/node_modules/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,
+            "dependencies": {
+                "safe-buffer": "~5.1.0"
+            }
+        },
+        "node_modules/gulp-sourcemaps/node_modules/through2": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+            "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+            "dev": true,
+            "dependencies": {
+                "readable-stream": "~2.3.6",
+                "xtend": "~4.0.1"
+            }
+        },
+        "node_modules/gulp4-run-sequence": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/gulp4-run-sequence/-/gulp4-run-sequence-1.0.2.tgz",
+            "integrity": "sha512-WQyNBCwaXtN42elYqqF3mQP34Kwb42ukyyh7I3nU4T7fJHT+xkAp8Z3ts/BjSyvqWfGWNEBqZfMroPA/70pUiA==",
+            "dev": true
+        },
+        "node_modules/gulplog": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz",
+            "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==",
+            "dev": true,
+            "dependencies": {
+                "glogg": "^2.2.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/handle-thing": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+            "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="
+        },
+        "node_modules/handlebars": {
+            "version": "4.7.8",
+            "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+            "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+            "dev": true,
+            "dependencies": {
+                "minimist": "^1.2.5",
+                "neo-async": "^2.6.2",
+                "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/hard-rejection": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+            "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/has-ansi": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+            "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
+            "dev": true,
+            "dependencies": {
+                "ansi-regex": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/has-ansi/node_modules/ansi-regex": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+            "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/has-bigints": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+            "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/has-color": {
+            "version": "0.1.7",
+            "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
+            "integrity": "sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "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==",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/has-property-descriptors": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+            "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+            "dependencies": {
+                "es-define-property": "^1.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/has-proto": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+            "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/has-symbols": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+            "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/has-tostringtag": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+            "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+            "dependencies": {
+                "has-symbols": "^1.0.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/has-value": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+            "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
+            "dev": true,
+            "dependencies": {
+                "get-value": "^2.0.6",
+                "has-values": "^1.0.0",
+                "isobject": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/has-values": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+            "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
+            "dev": true,
+            "dependencies": {
+                "is-number": "^3.0.0",
+                "kind-of": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/has-values/node_modules/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
+        },
+        "node_modules/has-values/node_modules/kind-of": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+            "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
+            "dev": true,
+            "dependencies": {
+                "is-buffer": "^1.1.5"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/hash-base": {
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+            "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==",
+            "dev": true,
+            "dependencies": {
+                "inherits": "^2.0.1",
+                "safe-buffer": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/hash.js": {
+            "version": "1.1.7",
+            "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+            "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+            "dev": true,
+            "dependencies": {
+                "inherits": "^2.0.3",
+                "minimalistic-assert": "^1.0.1"
+            }
+        },
+        "node_modules/hasown": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+            "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+            "dependencies": {
+                "function-bind": "^1.1.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/history": {
+            "version": "4.10.1",
+            "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
+            "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
+            "dependencies": {
+                "@babel/runtime": "^7.1.2",
+                "loose-envify": "^1.2.0",
+                "resolve-pathname": "^3.0.0",
+                "tiny-invariant": "^1.0.2",
+                "tiny-warning": "^1.0.0",
+                "value-equal": "^1.0.1"
+            }
+        },
+        "node_modules/hmac-drbg": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+            "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+            "dev": true,
+            "dependencies": {
+                "hash.js": "^1.0.3",
+                "minimalistic-assert": "^1.0.0",
+                "minimalistic-crypto-utils": "^1.0.1"
+            }
+        },
+        "node_modules/hoist-non-react-statics": {
+            "version": "3.3.2",
+            "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+            "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+            "dependencies": {
+                "react-is": "^16.7.0"
+            }
+        },
+        "node_modules/homedir-polyfill": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+            "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+            "dependencies": {
+                "parse-passwd": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/hosted-git-info": {
+            "version": "2.8.9",
+            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+            "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
+        },
+        "node_modules/hpack.js": {
+            "version": "2.1.6",
+            "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+            "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
+            "dependencies": {
+                "inherits": "^2.0.1",
+                "obuf": "^1.0.0",
+                "readable-stream": "^2.0.1",
+                "wbuf": "^1.1.0"
+            }
+        },
+        "node_modules/hpack.js/node_modules/isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+        },
+        "node_modules/hpack.js/node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+            }
+        },
+        "node_modules/hpack.js/node_modules/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=="
+        },
+        "node_modules/hpack.js/node_modules/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==",
+            "dependencies": {
+                "safe-buffer": "~5.1.0"
+            }
+        },
+        "node_modules/html-entities": {
+            "version": "2.5.2",
+            "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
+            "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/mdevils"
+                },
+                {
+                    "type": "patreon",
+                    "url": "https://patreon.com/mdevils"
+                }
+            ]
+        },
+        "node_modules/html-tags": {
+            "version": "3.3.1",
+            "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
+            "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/htmlparser2": {
+            "version": "3.10.1",
+            "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+            "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+            "dev": true,
+            "dependencies": {
+                "domelementtype": "^1.3.1",
+                "domhandler": "^2.3.0",
+                "domutils": "^1.5.1",
+                "entities": "^1.1.1",
+                "inherits": "^2.0.1",
+                "readable-stream": "^3.1.1"
+            }
+        },
+        "node_modules/htmlparser2/node_modules/entities": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+            "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+            "dev": true
+        },
+        "node_modules/http-auth": {
+            "version": "3.2.4",
+            "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.2.4.tgz",
+            "integrity": "sha512-jeWAPP0UbI3dM6knyYbYbMvBoxwXGQp0eu70GGV9Ezo/pHmpv1dFLwM0CtaG+GFqUBkGZM/V8Jp/0gXFYwIOUQ==",
+            "dependencies": {
+                "apache-crypt": "^1.1.2",
+                "apache-md5": "^1.0.6",
+                "bcryptjs": "^2.3.0",
+                "uuid": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4.6.1"
+            }
+        },
+        "node_modules/http-deceiver": {
+            "version": "1.2.7",
+            "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+            "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw=="
+        },
+        "node_modules/http-errors": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+            "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+            "dependencies": {
+                "depd": "2.0.0",
+                "inherits": "2.0.4",
+                "setprototypeof": "1.2.0",
+                "statuses": "2.0.1",
+                "toidentifier": "1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.8"
+            }
+        },
+        "node_modules/http-proxy": {
+            "version": "1.18.1",
+            "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+            "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+            "dependencies": {
+                "eventemitter3": "^4.0.0",
+                "follow-redirects": "^1.0.0",
+                "requires-port": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=8.0.0"
+            }
+        },
+        "node_modules/http-proxy-middleware": {
+            "version": "0.20.0",
+            "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.20.0.tgz",
+            "integrity": "sha512-dNJAk71nEJhPiAczQH9hGvE/MT9kEs+zn2Dh+Hi94PGZe1GluQirC7mw5rdREUtWx6qGS1Gu0bZd4qEAg+REgw==",
+            "dependencies": {
+                "http-proxy": "^1.17.0",
+                "is-glob": "^4.0.1",
+                "lodash": "^4.17.14",
+                "micromatch": "^4.0.2"
+            },
+            "engines": {
+                "node": ">=8.0.0"
+            }
+        },
+        "node_modules/https-browserify": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+            "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
+            "dev": true
+        },
+        "node_modules/husky": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/husky/-/husky-3.1.0.tgz",
+            "integrity": "sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ==",
+            "dev": true,
+            "hasInstallScript": true,
+            "dependencies": {
+                "chalk": "^2.4.2",
+                "ci-info": "^2.0.0",
+                "cosmiconfig": "^5.2.1",
+                "execa": "^1.0.0",
+                "get-stdin": "^7.0.0",
+                "opencollective-postinstall": "^2.0.2",
+                "pkg-dir": "^4.2.0",
+                "please-upgrade-node": "^3.2.0",
+                "read-pkg": "^5.2.0",
+                "run-node": "^1.0.0",
+                "slash": "^3.0.0"
+            },
+            "bin": {
+                "husky-run": "run.js",
+                "husky-upgrade": "lib/upgrader/bin.js"
+            },
+            "engines": {
+                "node": ">=8.6.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/husky"
+            }
+        },
+        "node_modules/husky/node_modules/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,
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/husky/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/husky/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "dev": true,
+            "dependencies": {
+                "color-name": "1.1.3"
+            }
+        },
+        "node_modules/husky/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+            "dev": true
+        },
+        "node_modules/husky/node_modules/cosmiconfig": {
+            "version": "5.2.1",
+            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+            "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+            "dev": true,
+            "dependencies": {
+                "import-fresh": "^2.0.0",
+                "is-directory": "^0.3.1",
+                "js-yaml": "^3.13.1",
+                "parse-json": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/husky/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/husky/node_modules/import-fresh": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+            "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==",
+            "dev": true,
+            "dependencies": {
+                "caller-path": "^2.0.0",
+                "resolve-from": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/husky/node_modules/parse-json": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+            "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
+            "dev": true,
+            "dependencies": {
+                "error-ex": "^1.3.1",
+                "json-parse-better-errors": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/husky/node_modules/pkg-dir": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+            "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+            "dev": true,
+            "dependencies": {
+                "find-up": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/husky/node_modules/resolve-from": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+            "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/husky/node_modules/slash": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/husky/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dev": true,
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/hyperdyperid": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
+            "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
+            "dev": true,
+            "engines": {
+                "node": ">=10.18"
+            }
+        },
+        "node_modules/iconv-lite": {
+            "version": "0.6.3",
+            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+            "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+            "dev": true,
+            "dependencies": {
+                "safer-buffer": ">= 2.1.2 < 3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/idb-keyval": {
+            "version": "6.2.1",
+            "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz",
+            "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg=="
+        },
+        "node_modules/ieee754": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+            "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/feross"
+                },
+                {
+                    "type": "patreon",
+                    "url": "https://www.patreon.com/feross"
+                },
+                {
+                    "type": "consulting",
+                    "url": "https://feross.org/support"
+                }
+            ]
+        },
+        "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/ignore-by-default": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+            "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
+            "dev": true
+        },
+        "node_modules/immutable": {
+            "version": "3.8.2",
+            "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
+            "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "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==",
+            "dependencies": {
+                "parent-module": "^1.0.0",
+                "resolve-from": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/import-fresh/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==",
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/import-lazy": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
+            "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/imurmurhash": {
+            "version": "0.1.4",
+            "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+            "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.8.19"
+            }
+        },
+        "node_modules/indent-string": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+            "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/inflight": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+            "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+            "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=="
+        },
+        "node_modules/inherits-ex": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/inherits-ex/-/inherits-ex-1.6.0.tgz",
+            "integrity": "sha512-67sANrSoIvMmYDy0qyjmM/PvFdgBmWZVQoPBsRpDuP4tmlylEX1KdGN1bHvReG3eHBdaHY7WlZsrqys4y/cLVA==",
+            "dev": true
+        },
+        "node_modules/ini": {
+            "version": "1.3.8",
+            "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+            "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+            "dev": true
+        },
+        "node_modules/inquirer": {
+            "version": "6.5.2",
+            "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+            "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-escapes": "^3.2.0",
+                "chalk": "^2.4.2",
+                "cli-cursor": "^2.1.0",
+                "cli-width": "^2.0.0",
+                "external-editor": "^3.0.3",
+                "figures": "^2.0.0",
+                "lodash": "^4.17.12",
+                "mute-stream": "0.0.7",
+                "run-async": "^2.2.0",
+                "rxjs": "^6.4.0",
+                "string-width": "^2.1.0",
+                "strip-ansi": "^5.1.0",
+                "through": "^2.3.6"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/inquirer/node_modules/ansi-regex": {
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+            "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/inquirer/node_modules/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,
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/inquirer/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/inquirer/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "dev": true,
+            "dependencies": {
+                "color-name": "1.1.3"
+            }
+        },
+        "node_modules/inquirer/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+            "dev": true
+        },
+        "node_modules/inquirer/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/inquirer/node_modules/strip-ansi": {
+            "version": "5.2.0",
+            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+            "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+            "dev": true,
+            "dependencies": {
+                "ansi-regex": "^4.1.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/inquirer/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dev": true,
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/internal-slot": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+            "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+            "dependencies": {
+                "es-errors": "^1.3.0",
+                "hasown": "^2.0.0",
+                "side-channel": "^1.0.4"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/interpret": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
+            "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/ipaddr.js": {
+            "version": "1.9.1",
+            "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+            "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
+        "node_modules/is-absolute": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+            "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+            "dev": true,
+            "dependencies": {
+                "is-relative": "^1.0.0",
+                "is-windows": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-accessor-descriptor": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
+            "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
+            "dev": true,
+            "dependencies": {
+                "hasown": "^2.0.0"
+            },
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
+        "node_modules/is-alphabetical": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
+            "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
+            "dev": true,
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
+            }
+        },
+        "node_modules/is-alphanumerical": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
+            "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
+            "dev": true,
+            "dependencies": {
+                "is-alphabetical": "^1.0.0",
+                "is-decimal": "^1.0.0"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
+            }
+        },
+        "node_modules/is-arguments": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+            "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+            "dev": true,
+            "dependencies": {
+                "call-bind": "^1.0.2",
+                "has-tostringtag": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-array-buffer": {
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+            "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+            "dependencies": {
+                "call-bind": "^1.0.2",
+                "get-intrinsic": "^1.2.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-arrayish": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+            "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+        },
+        "node_modules/is-async-function": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
+            "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
+            "dev": true,
+            "dependencies": {
+                "has-tostringtag": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-bigint": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+            "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+            "dependencies": {
+                "has-bigints": "^1.0.1"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-binary-path": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+            "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
+            "dev": true,
+            "dependencies": {
+                "binary-extensions": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-boolean-object": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+            "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+            "dependencies": {
+                "call-bind": "^1.0.2",
+                "has-tostringtag": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-buffer": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+            "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/feross"
+                },
+                {
+                    "type": "patreon",
+                    "url": "https://www.patreon.com/feross"
+                },
+                {
+                    "type": "consulting",
+                    "url": "https://feross.org/support"
+                }
+            ],
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/is-callable": {
+            "version": "1.2.7",
+            "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+            "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-core-module": {
+            "version": "2.13.1",
+            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+            "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+            "dependencies": {
+                "hasown": "^2.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-data-descriptor": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
+            "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
+            "dev": true,
+            "dependencies": {
+                "hasown": "^2.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/is-data-view": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+            "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+            "dependencies": {
+                "is-typed-array": "^1.1.13"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-date-object": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+            "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+            "dependencies": {
+                "has-tostringtag": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-decimal": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
+            "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+            "dev": true,
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
+            }
+        },
+        "node_modules/is-descriptor": {
+            "version": "0.1.7",
+            "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+            "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+            "dev": true,
+            "dependencies": {
+                "is-accessor-descriptor": "^1.0.1",
+                "is-data-descriptor": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/is-directory": {
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+            "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-docker": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+            "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+            "dev": true,
+            "bin": {
+                "is-docker": "cli.js"
+            },
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/is-extendable": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+            "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-extglob": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+            "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-finalizationregistry": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
+            "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
+            "dev": true,
+            "dependencies": {
+                "call-bind": "^1.0.2"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/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": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/is-generator-function": {
+            "version": "1.0.10",
+            "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+            "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+            "dev": true,
+            "dependencies": {
+                "has-tostringtag": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "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==",
+            "dependencies": {
+                "is-extglob": "^2.1.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-hexadecimal": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
+            "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
+            "dev": true,
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
+            }
+        },
+        "node_modules/is-interactive": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+            "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/is-map": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+            "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+            "dev": true,
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-nan": {
+            "version": "1.3.2",
+            "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
+            "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
+            "dev": true,
+            "dependencies": {
+                "call-bind": "^1.0.0",
+                "define-properties": "^1.1.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-negated-glob": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
+            "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-negative-zero": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+            "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-number": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+            "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+            "dev": true,
+            "dependencies": {
+                "kind-of": "^3.0.2"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-number-like": {
+            "version": "1.0.8",
+            "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
+            "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
+            "dev": true,
+            "dependencies": {
+                "lodash.isfinite": "^3.3.2"
+            }
+        },
+        "node_modules/is-number-object": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+            "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+            "dependencies": {
+                "has-tostringtag": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-number/node_modules/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
+        },
+        "node_modules/is-number/node_modules/kind-of": {
+            "version": "3.2.2",
+            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+            "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+            "dev": true,
+            "dependencies": {
+                "is-buffer": "^1.1.5"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-obj": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+            "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-observable": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
+            "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==",
+            "dev": true,
+            "dependencies": {
+                "symbol-observable": "^1.1.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/is-path-cwd": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+            "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/is-path-inside": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+            "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/is-plain-obj": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+            "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-plain-object": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+            "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+            "dependencies": {
+                "isobject": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-promise": {
+            "version": "2.2.2",
+            "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
+            "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",
+            "dev": true
+        },
+        "node_modules/is-regex": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+            "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+            "dependencies": {
+                "call-bind": "^1.0.2",
+                "has-tostringtag": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-regexp": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+            "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-relative": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+            "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+            "dev": true,
+            "dependencies": {
+                "is-unc-path": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-retry-allowed": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz",
+            "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/is-set": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+            "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+            "dev": true,
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-shared-array-buffer": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+            "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
+            "dependencies": {
+                "call-bind": "^1.0.7"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-stream": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+            "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-string": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+            "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+            "dependencies": {
+                "has-tostringtag": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-symbol": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+            "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+            "dependencies": {
+                "has-symbols": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-typed-array": {
+            "version": "1.1.13",
+            "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+            "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+            "dependencies": {
+                "which-typed-array": "^1.1.14"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-typedarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+            "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+            "dev": true
+        },
+        "node_modules/is-unc-path": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+            "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+            "dev": true,
+            "dependencies": {
+                "unc-path-regex": "^0.1.2"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-unicode-supported": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+            "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+            "dev": true,
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/is-utf8": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+            "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
+            "dev": true
+        },
+        "node_modules/is-valid-glob": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+            "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-weakmap": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+            "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+            "dev": true,
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-weakref": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+            "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+            "dependencies": {
+                "call-bind": "^1.0.2"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-weakset": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
+            "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
+            "dev": true,
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "get-intrinsic": "^1.2.4"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-windows": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+            "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-wsl": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+            "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+            "dev": true,
+            "dependencies": {
+                "is-docker": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/isarray": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+            "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+        },
+        "node_modules/isexe": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+            "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+        },
+        "node_modules/isobject": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+            "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/iterator.prototype": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
+            "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
+            "dev": true,
+            "dependencies": {
+                "define-properties": "^1.2.1",
+                "get-intrinsic": "^1.2.1",
+                "has-symbols": "^1.0.3",
+                "reflect.getprototypeof": "^1.0.4",
+                "set-function-name": "^2.0.1"
+            }
+        },
+        "node_modules/jed": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz",
+            "integrity": "sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA=="
+        },
+        "node_modules/js-tokens": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+        },
+        "node_modules/js-yaml": {
+            "version": "3.14.1",
+            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+            "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+            "dev": true,
+            "dependencies": {
+                "argparse": "^1.0.7",
+                "esprima": "^4.0.0"
+            },
+            "bin": {
+                "js-yaml": "bin/js-yaml.js"
+            }
+        },
+        "node_modules/jsesc": {
+            "version": "2.5.2",
+            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+            "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+            "bin": {
+                "jsesc": "bin/jsesc"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/json-buffer": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+            "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+            "dev": true
+        },
+        "node_modules/json-parse-better-errors": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+            "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+        },
+        "node_modules/json-parse-even-better-errors": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+            "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+        },
+        "node_modules/json-schema-traverse": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+            "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+            "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+            "dev": true
+        },
+        "node_modules/json5": {
+            "version": "2.2.3",
+            "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+            "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+            "bin": {
+                "json5": "lib/cli.js"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/jsonfile": {
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+            "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+            "dependencies": {
+                "universalify": "^2.0.0"
+            },
+            "optionalDependencies": {
+                "graceful-fs": "^4.1.6"
+            }
+        },
+        "node_modules/jsx-ast-utils": {
+            "version": "3.3.5",
+            "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+            "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+            "dev": true,
+            "dependencies": {
+                "array-includes": "^3.1.6",
+                "array.prototype.flat": "^1.3.1",
+                "object.assign": "^4.1.4",
+                "object.values": "^1.1.6"
+            },
+            "engines": {
+                "node": ">=4.0"
+            }
+        },
+        "node_modules/keygrip": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
+            "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
+            "dependencies": {
+                "tsscmp": "1.0.6"
+            },
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/keyv": {
+            "version": "4.5.4",
+            "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+            "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+            "dev": true,
+            "dependencies": {
+                "json-buffer": "3.0.1"
+            }
+        },
+        "node_modules/kind-of": {
+            "version": "6.0.3",
+            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+            "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/klaw-sync": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
+            "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
+            "dev": true,
+            "dependencies": {
+                "graceful-fs": "^4.1.11"
+            }
+        },
+        "node_modules/known-css-properties": {
+            "version": "0.21.0",
+            "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz",
+            "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==",
+            "dev": true
+        },
+        "node_modules/kuler": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
+            "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==",
+            "dev": true
+        },
+        "node_modules/last-run": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz",
+            "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==",
+            "dev": true,
+            "engines": {
+                "node": ">= 10.13.0"
+            }
+        },
+        "node_modules/lead": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz",
+            "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==",
+            "dev": true,
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/levn": {
+            "version": "0.3.0",
+            "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+            "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+            "dev": true,
+            "dependencies": {
+                "prelude-ls": "~1.1.2",
+                "type-check": "~0.3.2"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/liftoff": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz",
+            "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==",
+            "dev": true,
+            "dependencies": {
+                "extend": "^3.0.2",
+                "findup-sync": "^5.0.0",
+                "fined": "^2.0.0",
+                "flagged-respawn": "^2.0.0",
+                "is-plain-object": "^5.0.0",
+                "rechoir": "^0.8.0",
+                "resolve": "^1.20.0"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            }
+        },
+        "node_modules/liftoff/node_modules/is-plain-object": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+            "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/limiter": {
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
+            "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==",
+            "dev": true
+        },
+        "node_modules/lines-and-columns": {
+            "version": "1.2.4",
+            "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+            "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+        },
+        "node_modules/linkify-it": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+            "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+            "dev": true,
+            "dependencies": {
+                "uc.micro": "^1.0.1"
+            }
+        },
+        "node_modules/lint-staged": {
+            "version": "9.5.0",
+            "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.5.0.tgz",
+            "integrity": "sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA==",
+            "dev": true,
+            "dependencies": {
+                "chalk": "^2.4.2",
+                "commander": "^2.20.0",
+                "cosmiconfig": "^5.2.1",
+                "debug": "^4.1.1",
+                "dedent": "^0.7.0",
+                "del": "^5.0.0",
+                "execa": "^2.0.3",
+                "listr": "^0.14.3",
+                "log-symbols": "^3.0.0",
+                "micromatch": "^4.0.2",
+                "normalize-path": "^3.0.0",
+                "please-upgrade-node": "^3.1.1",
+                "string-argv": "^0.3.0",
+                "stringify-object": "^3.3.0"
+            },
+            "bin": {
+                "lint-staged": "bin/lint-staged"
+            }
+        },
+        "node_modules/lint-staged/node_modules/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,
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/lint-staged/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/lint-staged/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "dev": true,
+            "dependencies": {
+                "color-name": "1.1.3"
+            }
+        },
+        "node_modules/lint-staged/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+            "dev": true
+        },
+        "node_modules/lint-staged/node_modules/commander": {
+            "version": "2.20.3",
+            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+            "dev": true
+        },
+        "node_modules/lint-staged/node_modules/cosmiconfig": {
+            "version": "5.2.1",
+            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+            "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+            "dev": true,
+            "dependencies": {
+                "import-fresh": "^2.0.0",
+                "is-directory": "^0.3.1",
+                "js-yaml": "^3.13.1",
+                "parse-json": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/lint-staged/node_modules/execa": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz",
+            "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==",
+            "dev": true,
+            "dependencies": {
+                "cross-spawn": "^7.0.0",
+                "get-stream": "^5.0.0",
+                "is-stream": "^2.0.0",
+                "merge-stream": "^2.0.0",
+                "npm-run-path": "^3.0.0",
+                "onetime": "^5.1.0",
+                "p-finally": "^2.0.0",
+                "signal-exit": "^3.0.2",
+                "strip-final-newline": "^2.0.0"
+            },
+            "engines": {
+                "node": "^8.12.0 || >=9.7.0"
+            }
+        },
+        "node_modules/lint-staged/node_modules/get-stream": {
+            "version": "5.2.0",
+            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+            "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+            "dev": true,
+            "dependencies": {
+                "pump": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/lint-staged/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/lint-staged/node_modules/import-fresh": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+            "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==",
+            "dev": true,
+            "dependencies": {
+                "caller-path": "^2.0.0",
+                "resolve-from": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/lint-staged/node_modules/is-stream": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+            "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/lint-staged/node_modules/mimic-fn": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+            "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/lint-staged/node_modules/npm-run-path": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz",
+            "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==",
+            "dev": true,
+            "dependencies": {
+                "path-key": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/lint-staged/node_modules/onetime": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+            "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+            "dev": true,
+            "dependencies": {
+                "mimic-fn": "^2.1.0"
+            },
+            "engines": {
+                "node": ">=6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/lint-staged/node_modules/p-finally": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
+            "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/lint-staged/node_modules/parse-json": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+            "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
+            "dev": true,
+            "dependencies": {
+                "error-ex": "^1.3.1",
+                "json-parse-better-errors": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/lint-staged/node_modules/resolve-from": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+            "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/lint-staged/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dev": true,
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/listr": {
+            "version": "0.14.3",
+            "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz",
+            "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==",
+            "dev": true,
+            "dependencies": {
+                "@samverschueren/stream-to-observable": "^0.3.0",
+                "is-observable": "^1.1.0",
+                "is-promise": "^2.1.0",
+                "is-stream": "^1.1.0",
+                "listr-silent-renderer": "^1.1.1",
+                "listr-update-renderer": "^0.5.0",
+                "listr-verbose-renderer": "^0.5.0",
+                "p-map": "^2.0.0",
+                "rxjs": "^6.3.3"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/listr-silent-renderer": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
+            "integrity": "sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
             }
         },
-        "fstream": {
-            "version": "1.0.12",
-            "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
-            "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+        "node_modules/listr-update-renderer": {
+            "version": "0.5.0",
+            "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz",
+            "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==",
             "dev": true,
-            "requires": {
-                "graceful-fs": "^4.1.2",
-                "inherits": "~2.0.0",
-                "mkdirp": ">=0.5 0",
-                "rimraf": "2"
+            "dependencies": {
+                "chalk": "^1.1.3",
+                "cli-truncate": "^0.2.1",
+                "elegant-spinner": "^1.0.1",
+                "figures": "^1.7.0",
+                "indent-string": "^3.0.0",
+                "log-symbols": "^1.0.2",
+                "log-update": "^2.3.0",
+                "strip-ansi": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=6"
+            },
+            "peerDependencies": {
+                "listr": "^0.14.2"
             }
         },
-        "function-bind": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+        "node_modules/listr-update-renderer/node_modules/ansi-regex": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+            "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "function.prototype.name": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.1.tgz",
-            "integrity": "sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==",
+        "node_modules/listr-update-renderer/node_modules/ansi-styles": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+            "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
             "dev": true,
-            "requires": {
-                "define-properties": "^1.1.3",
-                "function-bind": "^1.1.1",
-                "functions-have-names": "^1.1.1",
-                "is-callable": "^1.1.4"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "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=",
+        "node_modules/listr-update-renderer/node_modules/chalk": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+            "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^2.2.1",
+                "escape-string-regexp": "^1.0.2",
+                "has-ansi": "^2.0.0",
+                "strip-ansi": "^3.0.0",
+                "supports-color": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/listr-update-renderer/node_modules/figures": {
+            "version": "1.7.0",
+            "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+            "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==",
+            "dev": true,
+            "dependencies": {
+                "escape-string-regexp": "^1.0.5",
+                "object-assign": "^4.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/listr-update-renderer/node_modules/log-symbols": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+            "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==",
+            "dev": true,
+            "dependencies": {
+                "chalk": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/listr-update-renderer/node_modules/strip-ansi": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+            "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+            "dev": true,
+            "dependencies": {
+                "ansi-regex": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/listr-update-renderer/node_modules/supports-color": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+            "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.8.0"
+            }
+        },
+        "node_modules/listr-verbose-renderer": {
+            "version": "0.5.0",
+            "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz",
+            "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==",
+            "dev": true,
+            "dependencies": {
+                "chalk": "^2.4.1",
+                "cli-cursor": "^2.1.0",
+                "date-fns": "^1.27.2",
+                "figures": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/listr-verbose-renderer/node_modules/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,
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/listr-verbose-renderer/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/listr-verbose-renderer/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "dev": true,
+            "dependencies": {
+                "color-name": "1.1.3"
+            }
+        },
+        "node_modules/listr-verbose-renderer/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
             "dev": true
         },
-        "functions-have-names": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.1.1.tgz",
-            "integrity": "sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw==",
+        "node_modules/listr-verbose-renderer/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/listr-verbose-renderer/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dev": true,
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/listr/node_modules/p-map": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+            "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/loader-runner": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+            "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+            "dev": true,
+            "engines": {
+                "node": ">=6.11.5"
+            }
+        },
+        "node_modules/locate-path": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+            "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+            "dev": true,
+            "dependencies": {
+                "p-locate": "^4.1.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/lodash": {
+            "version": "4.17.21",
+            "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+            "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+        },
+        "node_modules/lodash._reinterpolate": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+            "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==",
+            "dev": true
+        },
+        "node_modules/lodash.clonedeep": {
+            "version": "4.5.0",
+            "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+            "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
+            "dev": true
+        },
+        "node_modules/lodash.debounce": {
+            "version": "4.0.8",
+            "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+            "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
+        },
+        "node_modules/lodash.defaults": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+            "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==",
+            "dev": true
+        },
+        "node_modules/lodash.isfinite": {
+            "version": "3.3.2",
+            "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
+            "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==",
             "dev": true
         },
-        "gauge": {
-            "version": "2.7.4",
-            "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
-            "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+        "node_modules/lodash.template": {
+            "version": "4.5.0",
+            "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+            "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
             "dev": true,
-            "requires": {
-                "aproba": "^1.0.3",
-                "console-control-strings": "^1.0.0",
-                "has-unicode": "^2.0.0",
-                "object-assign": "^4.1.0",
-                "signal-exit": "^3.0.0",
-                "string-width": "^1.0.1",
-                "strip-ansi": "^3.0.1",
-                "wide-align": "^1.1.0"
+            "dependencies": {
+                "lodash._reinterpolate": "^3.0.0",
+                "lodash.templatesettings": "^4.0.0"
             }
         },
-        "gaze": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
-            "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+        "node_modules/lodash.templatesettings": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+            "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
             "dev": true,
-            "requires": {
-                "globule": "^1.0.0"
+            "dependencies": {
+                "lodash._reinterpolate": "^3.0.0"
             }
         },
-        "get-caller-file": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
-            "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+        "node_modules/lodash.truncate": {
+            "version": "4.4.2",
+            "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+            "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
             "dev": true
         },
-        "get-own-enumerable-property-symbols": {
+        "node_modules/log-symbols": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz",
-            "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
+            "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
+            "dev": true,
+            "dependencies": {
+                "chalk": "^2.4.2"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "get-stdin": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
-            "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+        "node_modules/log-symbols/node_modules/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,
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/log-symbols/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/log-symbols/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "dev": true,
+            "dependencies": {
+                "color-name": "1.1.3"
+            }
+        },
+        "node_modules/log-symbols/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
             "dev": true
         },
-        "get-stream": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
-            "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+        "node_modules/log-symbols/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
             "dev": true,
-            "requires": {
-                "object-assign": "^4.0.1",
-                "pinkie-promise": "^2.0.0"
+            "engines": {
+                "node": ">=4"
             }
         },
-        "get-value": {
-            "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-            "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+        "node_modules/log-symbols/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dev": true,
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "getpass": {
-            "version": "0.1.7",
-            "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-            "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+        "node_modules/log-update": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
+            "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==",
+            "dev": true,
+            "dependencies": {
+                "ansi-escapes": "^3.0.0",
+                "cli-cursor": "^2.0.0",
+                "wrap-ansi": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/logform": {
+            "version": "2.6.0",
+            "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz",
+            "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==",
+            "dev": true,
+            "dependencies": {
+                "@colors/colors": "1.6.0",
+                "@types/triple-beam": "^1.3.2",
+                "fecha": "^4.2.0",
+                "ms": "^2.1.1",
+                "safe-stable-stringify": "^2.3.1",
+                "triple-beam": "^1.3.0"
+            },
+            "engines": {
+                "node": ">= 12.0.0"
+            }
+        },
+        "node_modules/longest-streak": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
+            "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
+            "dev": true,
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
+            }
+        },
+        "node_modules/loose-envify": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+            "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+            "dependencies": {
+                "js-tokens": "^3.0.0 || ^4.0.0"
+            },
+            "bin": {
+                "loose-envify": "cli.js"
+            }
+        },
+        "node_modules/lru-cache": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+            "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+            "dependencies": {
+                "yallist": "^3.0.2"
+            }
+        },
+        "node_modules/lru-queue": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+            "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==",
+            "dev": true,
+            "dependencies": {
+                "es5-ext": "~0.10.2"
+            }
+        },
+        "node_modules/make-dir": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+            "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+            "dependencies": {
+                "pify": "^4.0.1",
+                "semver": "^5.6.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/make-dir/node_modules/semver": {
+            "version": "5.7.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+            "bin": {
+                "semver": "bin/semver"
+            }
+        },
+        "node_modules/map-cache": {
+            "version": "0.2.2",
+            "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+            "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
             "dev": true,
-            "requires": {
-                "assert-plus": "^1.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "glob": {
-            "version": "7.1.4",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
-            "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
-            "requires": {
-                "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"
+        "node_modules/map-obj": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+            "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "glob-parent": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
-            "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-            "requires": {
-                "is-glob": "^3.1.0",
-                "path-dirname": "^1.0.0"
-            },
+        "node_modules/map-visit": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+            "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
+            "dev": true,
             "dependencies": {
-                "is-glob": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-                    "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-                    "requires": {
-                        "is-extglob": "^2.1.0"
-                    }
-                }
+                "object-visit": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "glob-stream": {
-            "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
-            "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
+        "node_modules/markdown-it": {
+            "version": "11.0.1",
+            "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-11.0.1.tgz",
+            "integrity": "sha512-aU1TzmBKcWNNYvH9pjq6u92BML+Hz3h5S/QpfTFwiQF852pLT+9qHsrhM9JYipkOXZxGn+sGH8oyJE9FD9WezQ==",
             "dev": true,
-            "requires": {
-                "extend": "^3.0.0",
-                "glob": "^7.1.1",
-                "glob-parent": "^3.1.0",
-                "is-negated-glob": "^1.0.0",
-                "ordered-read-streams": "^1.0.0",
-                "pumpify": "^1.3.5",
-                "readable-stream": "^2.1.5",
-                "remove-trailing-separator": "^1.0.1",
-                "to-absolute-glob": "^2.0.0",
-                "unique-stream": "^2.0.2"
+            "dependencies": {
+                "argparse": "^1.0.7",
+                "entities": "~2.0.0",
+                "linkify-it": "^3.0.1",
+                "mdurl": "^1.0.1",
+                "uc.micro": "^1.0.5"
+            },
+            "bin": {
+                "markdown-it": "bin/markdown-it.js"
             }
         },
-        "glob-to-regexp": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
-            "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+        "node_modules/markdown-it/node_modules/entities": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
+            "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==",
             "dev": true
         },
-        "glob-watcher": {
-            "version": "5.0.3",
-            "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz",
-            "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==",
+        "node_modules/mathml-tag-names": {
+            "version": "2.1.3",
+            "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+            "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
             "dev": true,
-            "requires": {
-                "anymatch": "^2.0.0",
-                "async-done": "^1.2.0",
-                "chokidar": "^2.0.0",
-                "is-negated-glob": "^1.0.0",
-                "just-debounce": "^1.0.0",
-                "object.defaults": "^1.1.0"
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
             }
         },
-        "global-dirs": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
-            "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+        "node_modules/md5.js": {
+            "version": "1.3.5",
+            "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+            "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
             "dev": true,
-            "requires": {
-                "ini": "^1.3.4"
+            "dependencies": {
+                "hash-base": "^3.0.0",
+                "inherits": "^2.0.1",
+                "safe-buffer": "^5.1.2"
             }
         },
-        "global-modules": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
-            "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+        "node_modules/mdast-util-from-markdown": {
+            "version": "0.8.5",
+            "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz",
+            "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==",
             "dev": true,
-            "requires": {
-                "global-prefix": "^1.0.1",
-                "is-windows": "^1.0.1",
-                "resolve-dir": "^1.0.0"
+            "dependencies": {
+                "@types/mdast": "^3.0.0",
+                "mdast-util-to-string": "^2.0.0",
+                "micromark": "~2.11.0",
+                "parse-entities": "^2.0.0",
+                "unist-util-stringify-position": "^2.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
             }
         },
-        "global-prefix": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
-            "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+        "node_modules/mdast-util-to-markdown": {
+            "version": "0.6.5",
+            "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
+            "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
             "dev": true,
-            "requires": {
-                "expand-tilde": "^2.0.2",
-                "homedir-polyfill": "^1.0.1",
-                "ini": "^1.3.4",
-                "is-windows": "^1.0.1",
-                "which": "^1.2.14"
+            "dependencies": {
+                "@types/unist": "^2.0.0",
+                "longest-streak": "^2.0.0",
+                "mdast-util-to-string": "^2.0.0",
+                "parse-entities": "^2.0.0",
+                "repeat-string": "^1.0.0",
+                "zwitch": "^1.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
             }
         },
-        "globals": {
-            "version": "11.12.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-            "dev": true
-        },
-        "globby": {
-            "version": "10.0.1",
-            "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
-            "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
-            "requires": {
-                "@types/glob": "^7.1.1",
-                "array-union": "^2.1.0",
-                "dir-glob": "^3.0.1",
-                "fast-glob": "^3.0.3",
-                "glob": "^7.1.3",
-                "ignore": "^5.1.1",
-                "merge2": "^1.2.3",
-                "slash": "^3.0.0"
-            },
-            "dependencies": {
-                "slash": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-                    "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
-                }
+        "node_modules/mdast-util-to-string": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
+            "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
+            "dev": true,
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
             }
         },
-        "globjoin": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
-            "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=",
+        "node_modules/mdn-data": {
+            "version": "2.0.14",
+            "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+            "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="
+        },
+        "node_modules/mdurl": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+            "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
             "dev": true
         },
-        "globule": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
-            "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
-            "dev": true,
-            "requires": {
-                "glob": "~7.1.1",
-                "lodash": "~4.17.10",
-                "minimatch": "~3.0.2"
+        "node_modules/media-typer": {
+            "version": "0.3.0",
+            "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+            "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "glogg": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
-            "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
+        "node_modules/memfs": {
+            "version": "4.9.2",
+            "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.2.tgz",
+            "integrity": "sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ==",
             "dev": true,
-            "requires": {
-                "sparkles": "^1.0.0"
+            "dependencies": {
+                "@jsonjoy.com/json-pack": "^1.0.3",
+                "@jsonjoy.com/util": "^1.1.2",
+                "sonic-forest": "^1.0.0",
+                "tslib": "^2.0.0"
+            },
+            "engines": {
+                "node": ">= 4.0.0"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/streamich"
             }
         },
-        "gonzales-pe": {
-            "version": "4.2.4",
-            "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.4.tgz",
-            "integrity": "sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ==",
+        "node_modules/memfs/node_modules/@jsonjoy.com/base64": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
+            "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
             "dev": true,
-            "requires": {
-                "minimist": "1.1.x"
+            "engines": {
+                "node": ">=10.0"
             },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/streamich"
+            },
+            "peerDependencies": {
+                "tslib": "2"
+            }
+        },
+        "node_modules/memfs/node_modules/@jsonjoy.com/json-pack": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz",
+            "integrity": "sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==",
+            "dev": true,
             "dependencies": {
-                "minimist": {
-                    "version": "1.1.3",
-                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
-                    "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=",
-                    "dev": true
-                }
+                "@jsonjoy.com/base64": "^1.1.1",
+                "@jsonjoy.com/util": "^1.1.2",
+                "hyperdyperid": "^1.2.0",
+                "thingies": "^1.20.0"
+            },
+            "engines": {
+                "node": ">=10.0"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/streamich"
+            },
+            "peerDependencies": {
+                "tslib": "2"
             }
         },
-        "good-listener": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
-            "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
-            "optional": true,
-            "requires": {
-                "delegate": "^3.1.2"
-            }
-        },
-        "got": {
-            "version": "6.7.1",
-            "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
-            "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
-            "dev": true,
-            "requires": {
-                "create-error-class": "^3.0.0",
-                "duplexer3": "^0.1.4",
-                "get-stream": "^3.0.0",
-                "is-redirect": "^1.0.0",
-                "is-retry-allowed": "^1.0.0",
-                "is-stream": "^1.0.0",
-                "lowercase-keys": "^1.0.0",
-                "safe-buffer": "^5.0.1",
-                "timed-out": "^4.0.0",
-                "unzip-response": "^2.0.1",
-                "url-parse-lax": "^1.0.0"
+        "node_modules/memfs/node_modules/@jsonjoy.com/util": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.1.3.tgz",
+            "integrity": "sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg==",
+            "dev": true,
+            "engines": {
+                "node": ">=10.0"
             },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/streamich"
+            },
+            "peerDependencies": {
+                "tslib": "2"
+            }
+        },
+        "node_modules/memfs/node_modules/sonic-forest": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/sonic-forest/-/sonic-forest-1.0.3.tgz",
+            "integrity": "sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ==",
+            "dev": true,
             "dependencies": {
-                "get-stream": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-                    "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
-                    "dev": true
-                }
+                "tree-dump": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=10.0"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/streamich"
+            },
+            "peerDependencies": {
+                "tslib": "2"
             }
         },
-        "graceful-fs": {
-            "version": "4.2.2",
-            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
-            "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q=="
+        "node_modules/memfs/node_modules/thingies": {
+            "version": "1.21.0",
+            "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
+            "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
+            "dev": true,
+            "engines": {
+                "node": ">=10.18"
+            },
+            "peerDependencies": {
+                "tslib": "^2"
+            }
         },
-        "graceful-readlink": {
+        "node_modules/memfs/node_modules/tree-dump": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
-            "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.1.tgz",
+            "integrity": "sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==",
+            "dev": true,
+            "engines": {
+                "node": ">=10.0"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/streamich"
+            },
+            "peerDependencies": {
+                "tslib": "2"
+            }
         },
-        "growly": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
-            "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+        "node_modules/memfs/node_modules/tslib": {
+            "version": "2.6.2",
+            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+            "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
             "dev": true
         },
-        "gsap": {
-            "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/gsap/-/gsap-2.1.3.tgz",
-            "integrity": "sha512-8RFASCqi2FOCBuv7X4o7M6bLdy+1hbR0azg+MG7zz+EVsI+OmJblYsTk0GEepQd2Jg/ItMPiVTibF7r3EVxjZQ=="
+        "node_modules/memoizee": {
+            "version": "0.4.15",
+            "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz",
+            "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==",
+            "dev": true,
+            "dependencies": {
+                "d": "^1.0.1",
+                "es5-ext": "^0.10.53",
+                "es6-weak-map": "^2.0.3",
+                "event-emitter": "^0.3.5",
+                "is-promise": "^2.2.2",
+                "lru-queue": "^0.1.0",
+                "next-tick": "^1.1.0",
+                "timers-ext": "^0.1.7"
+            }
         },
-        "gud": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz",
-            "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw=="
+        "node_modules/memory-cache": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz",
+            "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA=="
         },
-        "gulp": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
-            "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
-            "dev": true,
-            "requires": {
-                "glob-watcher": "^5.0.3",
-                "gulp-cli": "^2.2.0",
-                "undertaker": "^1.2.1",
-                "vinyl-fs": "^3.0.0"
-            },
-            "dependencies": {
-                "ansi-colors": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
-                    "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-wrap": "^0.1.0"
-                    }
-                },
-                "camelcase": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-                    "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-                    "dev": true
-                },
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                },
-                "find-up": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-                    "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-                    "dev": true,
-                    "requires": {
-                        "path-exists": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "gulp-cli": {
-                    "version": "2.2.0",
-                    "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz",
-                    "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-colors": "^1.0.1",
-                        "archy": "^1.0.0",
-                        "array-sort": "^1.0.0",
-                        "color-support": "^1.1.3",
-                        "concat-stream": "^1.6.0",
-                        "copy-props": "^2.0.1",
-                        "fancy-log": "^1.3.2",
-                        "gulplog": "^1.0.0",
-                        "interpret": "^1.1.0",
-                        "isobject": "^3.0.1",
-                        "liftoff": "^3.1.0",
-                        "matchdep": "^2.0.0",
-                        "mute-stdout": "^1.0.0",
-                        "pretty-hrtime": "^1.0.0",
-                        "replace-homedir": "^1.0.0",
-                        "semver-greatest-satisfied-range": "^1.1.0",
-                        "v8flags": "^3.0.1",
-                        "yargs": "^7.1.0"
-                    }
-                },
-                "load-json-file": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-                    "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "parse-json": "^2.2.0",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0",
-                        "strip-bom": "^2.0.0"
-                    }
-                },
-                "parse-json": {
-                    "version": "2.2.0",
-                    "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-                    "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-                    "dev": true,
-                    "requires": {
-                        "error-ex": "^1.2.0"
-                    }
-                },
-                "path-exists": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-                    "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-                    "dev": true,
-                    "requires": {
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "path-type": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-                    "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "pify": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                    "dev": true
-                },
-                "read-pkg": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-                    "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-                    "dev": true,
-                    "requires": {
-                        "load-json-file": "^1.0.0",
-                        "normalize-package-data": "^2.3.2",
-                        "path-type": "^1.0.0"
-                    }
-                },
-                "read-pkg-up": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-                    "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-                    "dev": true,
-                    "requires": {
-                        "find-up": "^1.0.0",
-                        "read-pkg": "^1.0.0"
-                    }
-                },
-                "require-main-filename": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-                    "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
-                    "dev": true
-                },
-                "strip-bom": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-                    "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-                    "dev": true,
-                    "requires": {
-                        "is-utf8": "^0.2.0"
-                    }
-                },
-                "yargs": {
-                    "version": "7.1.0",
-                    "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
-                    "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^3.0.0",
-                        "cliui": "^3.2.0",
-                        "decamelize": "^1.1.1",
-                        "get-caller-file": "^1.0.1",
-                        "os-locale": "^1.4.0",
-                        "read-pkg-up": "^1.0.1",
-                        "require-directory": "^2.1.1",
-                        "require-main-filename": "^1.0.1",
-                        "set-blocking": "^2.0.0",
-                        "string-width": "^1.0.2",
-                        "which-module": "^1.0.0",
-                        "y18n": "^3.2.1",
-                        "yargs-parser": "^5.0.0"
-                    }
-                },
-                "yargs-parser": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
-                    "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^3.0.0"
-                    }
-                }
+        "node_modules/memorystream": {
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+            "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
+            "engines": {
+                "node": ">= 0.10.0"
             }
         },
-        "gulp-autoprefixer": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-7.0.0.tgz",
-            "integrity": "sha512-ZGMA/9iPF7kfZIVhznd3eylivBcyLCgcV32cWtvM7j2IjEQzoRg1XaKgCeO5ytutq8XW3Rip+iM4EsVbNshoZw==",
+        "node_modules/meow": {
+            "version": "9.0.0",
+            "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+            "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
             "dev": true,
-            "requires": {
-                "autoprefixer": "^9.6.1",
-                "fancy-log": "^1.3.2",
-                "plugin-error": "^1.0.1",
-                "postcss": "^7.0.17",
-                "through2": "^3.0.1",
-                "vinyl-sourcemaps-apply": "^0.2.1"
-            },
             "dependencies": {
-                "through2": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
-                    "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
-                    "dev": true,
-                    "requires": {
-                        "readable-stream": "2 || 3"
-                    }
-                }
-            }
-        },
-        "gulp-clean-css": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-4.2.0.tgz",
-            "integrity": "sha512-r4zQsSOAK2UYUL/ipkAVCTRg/2CLZ2A+oPVORopBximRksJ6qy3EX1KGrIWT4ZrHxz3Hlobb1yyJtqiut7DNjA==",
-            "dev": true,
-            "requires": {
-                "clean-css": "4.2.1",
-                "plugin-error": "1.0.1",
-                "through2": "3.0.1",
-                "vinyl-sourcemaps-apply": "0.2.1"
+                "@types/minimist": "^1.2.0",
+                "camelcase-keys": "^6.2.2",
+                "decamelize": "^1.2.0",
+                "decamelize-keys": "^1.1.0",
+                "hard-rejection": "^2.1.0",
+                "minimist-options": "4.1.0",
+                "normalize-package-data": "^3.0.0",
+                "read-pkg-up": "^7.0.1",
+                "redent": "^3.0.0",
+                "trim-newlines": "^3.0.0",
+                "type-fest": "^0.18.0",
+                "yargs-parser": "^20.2.3"
             },
-            "dependencies": {
-                "through2": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
-                    "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
-                    "dev": true,
-                    "requires": {
-                        "readable-stream": "2 || 3"
-                    }
-                }
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "gulp-concat": {
-            "version": "2.6.1",
-            "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
-            "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=",
+        "node_modules/meow/node_modules/decamelize": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+            "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
             "dev": true,
-            "requires": {
-                "concat-with-sourcemaps": "^1.0.0",
-                "through2": "^2.0.0",
-                "vinyl": "^2.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "gulp-gzip": {
-            "version": "1.4.2",
-            "resolved": "https://registry.npmjs.org/gulp-gzip/-/gulp-gzip-1.4.2.tgz",
-            "integrity": "sha512-ZIxfkUwk2XmZPTT9pPHrHUQlZMyp9nPhg2sfoeN27mBGpi7OaHnOD+WCN41NXjfJQ69lV1nQ9LLm1hYxx4h3UQ==",
+        "node_modules/meow/node_modules/hosted-git-info": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+            "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
             "dev": true,
-            "requires": {
-                "ansi-colors": "^1.0.1",
-                "bytes": "^3.0.0",
-                "fancy-log": "^1.3.2",
-                "plugin-error": "^1.0.0",
-                "stream-to-array": "^2.3.0",
-                "through2": "^2.0.3"
-            },
             "dependencies": {
-                "ansi-colors": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
-                    "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-wrap": "^0.1.0"
-                    }
-                }
+                "lru-cache": "^6.0.0"
+            },
+            "engines": {
+                "node": ">=10"
             }
         },
-        "gulp-if": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-3.0.0.tgz",
-            "integrity": "sha512-fCUEngzNiEZEK2YuPm+sdMpO6ukb8+/qzbGfJBXyNOXz85bCG7yBI+pPSl+N90d7gnLvMsarthsAImx0qy7BAw==",
+        "node_modules/meow/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,
-            "requires": {
-                "gulp-match": "^1.1.0",
-                "ternary-stream": "^3.0.0",
-                "through2": "^3.0.1"
-            },
             "dependencies": {
-                "through2": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
-                    "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
-                    "dev": true,
-                    "requires": {
-                        "readable-stream": "2 || 3"
-                    }
-                }
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=10"
             }
         },
-        "gulp-less": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/gulp-less/-/gulp-less-4.0.1.tgz",
-            "integrity": "sha512-hmM2k0FfQp7Ptm3ZaqO2CkMX3hqpiIOn4OHtuSsCeFym63F7oWlEua5v6u1cIjVUKYsVIs9zPg9vbqTEb/udpA==",
-            "dev": true,
-            "requires": {
-                "accord": "^0.29.0",
-                "less": "2.6.x || ^3.7.1",
-                "object-assign": "^4.0.1",
-                "plugin-error": "^0.1.2",
-                "replace-ext": "^1.0.0",
-                "through2": "^2.0.0",
-                "vinyl-sourcemaps-apply": "^0.2.0"
-            },
-            "dependencies": {
-                "arr-diff": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
-                    "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
-                    "dev": true,
-                    "requires": {
-                        "arr-flatten": "^1.0.1",
-                        "array-slice": "^0.2.3"
-                    }
-                },
-                "arr-union": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
-                    "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
-                    "dev": true
-                },
-                "array-slice": {
-                    "version": "0.2.3",
-                    "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
-                    "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
-                    "dev": true
-                },
-                "extend-shallow": {
-                    "version": "1.1.4",
-                    "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
-                    "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
-                    "dev": true,
-                    "requires": {
-                        "kind-of": "^1.1.0"
-                    }
-                },
-                "kind-of": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
-                    "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
-                    "dev": true
-                },
-                "plugin-error": {
-                    "version": "0.1.2",
-                    "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
-                    "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
-                    "dev": true,
-                    "requires": {
-                        "ansi-cyan": "^0.1.1",
-                        "ansi-red": "^0.1.1",
-                        "arr-diff": "^1.0.1",
-                        "arr-union": "^2.0.1",
-                        "extend-shallow": "^1.1.2"
-                    }
-                }
+        "node_modules/meow/node_modules/normalize-package-data": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+            "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+            "dev": true,
+            "dependencies": {
+                "hosted-git-info": "^4.0.1",
+                "is-core-module": "^2.5.0",
+                "semver": "^7.3.4",
+                "validate-npm-package-license": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=10"
             }
         },
-        "gulp-match": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz",
-            "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==",
+        "node_modules/meow/node_modules/type-fest": {
+            "version": "0.18.1",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+            "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
             "dev": true,
-            "requires": {
-                "minimatch": "^3.0.3"
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "gulp-rename": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.4.0.tgz",
-            "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==",
+        "node_modules/meow/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
         },
-        "gulp-run": {
-            "version": "1.7.1",
-            "resolved": "https://registry.npmjs.org/gulp-run/-/gulp-run-1.7.1.tgz",
-            "integrity": "sha1-4XwKy3wwtuKu7iPAREKpbAys7/o=",
-            "dev": true,
-            "requires": {
-                "gulp-util": "^3.0.0",
-                "lodash.defaults": "^4.0.1",
-                "lodash.template": "^4.0.2",
-                "vinyl": "^0.4.6"
-            },
-            "dependencies": {
-                "clone": {
-                    "version": "0.2.0",
-                    "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
-                    "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
-                    "dev": true
-                },
-                "clone-stats": {
-                    "version": "0.0.1",
-                    "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
-                    "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
-                    "dev": true
-                },
-                "vinyl": {
-                    "version": "0.4.6",
-                    "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
-                    "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
-                    "dev": true,
-                    "requires": {
-                        "clone": "^0.2.0",
-                        "clone-stats": "^0.0.1"
-                    }
-                }
+        "node_modules/merge-descriptors": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+            "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+        },
+        "node_modules/merge-stream": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+            "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+            "dev": true
+        },
+        "node_modules/merge2": {
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+            "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+            "engines": {
+                "node": ">= 8"
             }
         },
-        "gulp-sass": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-4.0.2.tgz",
-            "integrity": "sha512-q8psj4+aDrblJMMtRxihNBdovfzGrXJp1l4JU0Sz4b/Mhsi2DPrKFYCGDwjIWRENs04ELVHxdOJQ7Vs98OFohg==",
+        "node_modules/methods": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+            "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+            "engines": {
+                "node": ">= 0.6"
+            }
+        },
+        "node_modules/micromark": {
+            "version": "2.11.4",
+            "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+            "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
             "dev": true,
-            "requires": {
-                "chalk": "^2.3.0",
-                "lodash.clonedeep": "^4.3.2",
-                "node-sass": "^4.8.3",
-                "plugin-error": "^1.0.1",
-                "replace-ext": "^1.0.0",
-                "strip-ansi": "^4.0.0",
-                "through2": "^2.0.0",
-                "vinyl-sourcemaps-apply": "^0.2.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
+            "funding": [
+                {
+                    "type": "GitHub Sponsors",
+                    "url": "https://github.com/sponsors/unifiedjs"
                 },
-                "strip-ansi": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-                    "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^3.0.0"
-                    }
+                {
+                    "type": "OpenCollective",
+                    "url": "https://opencollective.com/unified"
                 }
+            ],
+            "dependencies": {
+                "debug": "^4.0.0",
+                "parse-entities": "^2.0.0"
             }
         },
-        "gulp-sourcemaps": {
-            "version": "2.6.5",
-            "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz",
-            "integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==",
-            "dev": true,
-            "requires": {
-                "@gulp-sourcemaps/identity-map": "1.X",
-                "@gulp-sourcemaps/map-sources": "1.X",
-                "acorn": "5.X",
-                "convert-source-map": "1.X",
-                "css": "2.X",
-                "debug-fabulous": "1.X",
-                "detect-newline": "2.X",
-                "graceful-fs": "4.X",
-                "source-map": "~0.6.0",
-                "strip-bom-string": "1.X",
-                "through2": "2.X"
-            },
-            "dependencies": {
-                "acorn": {
-                    "version": "5.7.3",
-                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-                    "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-                    "dev": true
-                },
-                "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
-                }
+        "node_modules/micromatch": {
+            "version": "4.0.5",
+            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+            "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+            "dependencies": {
+                "braces": "^3.0.2",
+                "picomatch": "^2.3.1"
+            },
+            "engines": {
+                "node": ">=8.6"
             }
         },
-        "gulp-util": {
-            "version": "3.0.8",
-            "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
-            "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
-            "dev": true,
-            "requires": {
-                "array-differ": "^1.0.0",
-                "array-uniq": "^1.0.2",
-                "beeper": "^1.0.0",
-                "chalk": "^1.0.0",
-                "dateformat": "^2.0.0",
-                "fancy-log": "^1.1.0",
-                "gulplog": "^1.0.0",
-                "has-gulplog": "^0.1.0",
-                "lodash._reescape": "^3.0.0",
-                "lodash._reevaluate": "^3.0.0",
-                "lodash._reinterpolate": "^3.0.0",
-                "lodash.template": "^3.0.0",
-                "minimist": "^1.1.0",
-                "multipipe": "^0.1.2",
-                "object-assign": "^3.0.0",
-                "replace-ext": "0.0.1",
-                "through2": "^2.0.0",
-                "vinyl": "^0.5.0"
+        "node_modules/micromatch/node_modules/braces": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+            "dependencies": {
+                "fill-range": "^7.0.1"
             },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/micromatch/node_modules/fill-range": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
             "dependencies": {
-                "ansi-styles": {
-                    "version": "2.2.1",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-                    "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-                    "dev": true
-                },
-                "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.2",
-                        "has-ansi": "^2.0.0",
-                        "strip-ansi": "^3.0.0",
-                        "supports-color": "^2.0.0"
-                    }
-                },
-                "clone": {
-                    "version": "1.0.4",
-                    "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-                    "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-                    "dev": true
-                },
-                "clone-stats": {
-                    "version": "0.0.1",
-                    "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
-                    "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
-                    "dev": true
-                },
-                "lodash.escape": {
-                    "version": "3.2.0",
-                    "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
-                    "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
-                    "dev": true,
-                    "requires": {
-                        "lodash._root": "^3.0.0"
-                    }
-                },
-                "lodash.template": {
-                    "version": "3.6.2",
-                    "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
-                    "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
-                    "dev": true,
-                    "requires": {
-                        "lodash._basecopy": "^3.0.0",
-                        "lodash._basetostring": "^3.0.0",
-                        "lodash._basevalues": "^3.0.0",
-                        "lodash._isiterateecall": "^3.0.0",
-                        "lodash._reinterpolate": "^3.0.0",
-                        "lodash.escape": "^3.0.0",
-                        "lodash.keys": "^3.0.0",
-                        "lodash.restparam": "^3.0.0",
-                        "lodash.templatesettings": "^3.0.0"
-                    }
-                },
-                "minimist": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-                    "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-                    "dev": true
-                },
-                "object-assign": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
-                    "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
-                    "dev": true
-                },
-                "replace-ext": {
-                    "version": "0.0.1",
-                    "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
-                    "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
-                    "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
-                },
-                "vinyl": {
-                    "version": "0.5.3",
-                    "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
-                    "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
-                    "dev": true,
-                    "requires": {
-                        "clone": "^1.0.0",
-                        "clone-stats": "^0.0.1",
-                        "replace-ext": "0.0.1"
-                    }
-                }
+                "to-regex-range": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "gulp4-run-sequence": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/gulp4-run-sequence/-/gulp4-run-sequence-1.0.0.tgz",
-            "integrity": "sha512-CCjEe61wilbEKat9DwstjuMaiJxUK9gLzrwUIdGuWEQ/URNvnwiLAA/2FSQHb+SCluj5WrRoKdwMnCZ88g0l8g==",
-            "dev": true
+        "node_modules/micromatch/node_modules/is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+            "engines": {
+                "node": ">=0.12.0"
+            }
         },
-        "gulplog": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
-            "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
-            "dev": true,
-            "requires": {
-                "glogg": "^1.0.0"
+        "node_modules/micromatch/node_modules/to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+            "dependencies": {
+                "is-number": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=8.0"
             }
         },
-        "handlebars": {
-            "version": "4.3.3",
-            "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.3.3.tgz",
-            "integrity": "sha512-VupOxR91xcGojfINrzMqrvlyYbBs39sXIrWa7YdaQWeBudOlvKEGvCczMfJPgnuwHE/zyH1M6J+IUP6cgDVyxg==",
+        "node_modules/miller-rabin": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+            "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
             "dev": true,
-            "requires": {
-                "neo-async": "^2.6.0",
-                "optimist": "^0.6.1",
-                "source-map": "^0.6.1",
-                "uglify-js": "^3.1.4"
-            },
             "dependencies": {
-                "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
-                }
+                "bn.js": "^4.0.0",
+                "brorand": "^1.0.1"
+            },
+            "bin": {
+                "miller-rabin": "bin/miller-rabin"
             }
         },
-        "har-schema": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-            "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+        "node_modules/miller-rabin/node_modules/bn.js": {
+            "version": "4.12.0",
+            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+            "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
             "dev": true
         },
-        "har-validator": {
-            "version": "5.1.3",
-            "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-            "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
-            "dev": true,
-            "requires": {
-                "ajv": "^6.5.5",
-                "har-schema": "^2.0.0"
+        "node_modules/mime": {
+            "version": "4.0.3",
+            "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.3.tgz",
+            "integrity": "sha512-KgUb15Oorc0NEKPbvfa0wRU+PItIEZmiv+pyAO2i0oTIVTJhlzMclU7w4RXWQrSOVH5ax/p/CkIO7KI4OyFJTQ==",
+            "dev": true,
+            "funding": [
+                "https://github.com/sponsors/broofa"
+            ],
+            "bin": {
+                "mime": "bin/cli.js"
+            },
+            "engines": {
+                "node": ">=16"
             }
         },
-        "has": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-            "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-            "requires": {
-                "function-bind": "^1.1.1"
+        "node_modules/mime-db": {
+            "version": "1.52.0",
+            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+            "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "has-ansi": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-            "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+        "node_modules/mime-type": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/mime-type/-/mime-type-4.0.0.tgz",
+            "integrity": "sha512-1FCc9fsTg44pd7koB486WEepve+sc4847F0USUf08j4+bAU6/9ckIq4kHVEhCxbxHCyUZy++dxx/PtSR/m4XBQ==",
             "dev": true,
-            "requires": {
-                "ansi-regex": "^2.0.0"
+            "dependencies": {
+                "micromatch": "^4.0.2",
+                "path.js": "^1.0.7",
+                "util-ex": "^0.3.15"
+            },
+            "engines": {
+                "node": ">= 8.6"
             }
         },
-        "has-binary2": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
-            "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
-            "dev": true,
-            "requires": {
-                "isarray": "2.0.1"
-            },
+        "node_modules/mime-types": {
+            "version": "2.1.35",
+            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+            "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
             "dependencies": {
-                "isarray": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
-                    "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
-                    "dev": true
-                }
+                "mime-db": "1.52.0"
+            },
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "has-cors": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
-            "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
-            "dev": true
-        },
-        "has-flag": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-            "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+        "node_modules/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,
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "has-gulplog": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
-            "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+        "node_modules/min-indent": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+            "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
             "dev": true,
-            "requires": {
-                "sparkles": "^1.0.0"
+            "engines": {
+                "node": ">=4"
             }
         },
-        "has-symbols": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
-            "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+        "node_modules/minimalistic-assert": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+            "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
         },
-        "has-unicode": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
-            "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+        "node_modules/minimalistic-crypto-utils": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+            "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
             "dev": true
         },
-        "has-value": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-            "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-            "requires": {
-                "get-value": "^2.0.6",
-                "has-values": "^1.0.0",
-                "isobject": "^3.0.0"
-            }
-        },
-        "has-values": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-            "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-            "requires": {
-                "is-number": "^3.0.0",
-                "kind-of": "^4.0.0"
-            },
+        "node_modules/minimatch": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
             "dependencies": {
-                "kind-of": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-                    "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-                    "requires": {
-                        "is-buffer": "^1.1.5"
-                    }
-                }
+                "brace-expansion": "^1.1.7"
+            },
+            "engines": {
+                "node": "*"
             }
         },
-        "hash-base": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
-            "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+        "node_modules/minimist": {
+            "version": "1.2.8",
+            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+            "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.0.1"
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "hash.js": {
-            "version": "1.1.7",
-            "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
-            "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+        "node_modules/minimist-options": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+            "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.3",
-                "minimalistic-assert": "^1.0.1"
+            "dependencies": {
+                "arrify": "^1.0.1",
+                "is-plain-obj": "^1.1.0",
+                "kind-of": "^6.0.3"
+            },
+            "engines": {
+                "node": ">= 6"
             }
         },
-        "hast-util-parse-selector": {
-            "version": "2.2.2",
-            "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.2.tgz",
-            "integrity": "sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw=="
-        },
-        "hastscript": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.0.tgz",
-            "integrity": "sha512-7mOQX5VfVs/gmrOGlN8/EDfp1GqV6P3gTNVt+KnX4gbYhpASTM8bklFdFQCbFRAadURXAmw0R1QQdBdqp7jswQ==",
-            "requires": {
-                "comma-separated-tokens": "^1.0.0",
-                "hast-util-parse-selector": "^2.2.0",
-                "property-information": "^5.0.1",
-                "space-separated-tokens": "^1.0.0"
+        "node_modules/minipass": {
+            "version": "4.2.8",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
+            "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
             }
         },
-        "highlight.js": {
-            "version": "9.13.1",
-            "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz",
-            "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A=="
+        "node_modules/mitt": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz",
+            "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==",
+            "dev": true
         },
-        "history": {
-            "version": "4.10.1",
-            "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
-            "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
-            "requires": {
-                "@babel/runtime": "^7.1.2",
-                "loose-envify": "^1.2.0",
-                "resolve-pathname": "^3.0.0",
-                "tiny-invariant": "^1.0.2",
-                "tiny-warning": "^1.0.0",
-                "value-equal": "^1.0.1"
+        "node_modules/mixin-deep": {
+            "version": "1.3.2",
+            "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+            "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+            "dev": true,
+            "dependencies": {
+                "for-in": "^1.0.2",
+                "is-extendable": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "hmac-drbg": {
+        "node_modules/mixin-deep/node_modules/is-extendable": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
-            "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+            "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
             "dev": true,
-            "requires": {
-                "hash.js": "^1.0.3",
-                "minimalistic-assert": "^1.0.0",
-                "minimalistic-crypto-utils": "^1.0.1"
+            "dependencies": {
+                "is-plain-object": "^2.0.4"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "hoist-non-react-statics": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
-            "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
-            "requires": {
-                "react-is": "^16.7.0"
+        "node_modules/mkdirp": {
+            "version": "0.5.6",
+            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+            "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+            "dev": true,
+            "dependencies": {
+                "minimist": "^1.2.6"
+            },
+            "bin": {
+                "mkdirp": "bin/cmd.js"
             }
         },
-        "homedir-polyfill": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
-            "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
-            "requires": {
-                "parse-passwd": "^1.0.0"
+        "node_modules/module-alias": {
+            "version": "2.2.3",
+            "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz",
+            "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==",
+            "dev": true
+        },
+        "node_modules/morgan": {
+            "version": "1.10.0",
+            "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
+            "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
+            "dependencies": {
+                "basic-auth": "~2.0.1",
+                "debug": "2.6.9",
+                "depd": "~2.0.0",
+                "on-finished": "~2.3.0",
+                "on-headers": "~1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
             }
         },
-        "hosted-git-info": {
-            "version": "2.8.4",
-            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
-            "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ=="
+        "node_modules/morgan/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "dependencies": {
+                "ms": "2.0.0"
+            }
         },
-        "html-element-map": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.1.0.tgz",
-            "integrity": "sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==",
-            "dev": true,
-            "requires": {
-                "array-filter": "^1.0.0"
+        "node_modules/morgan/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+        },
+        "node_modules/morgan/node_modules/on-finished": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+            "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+            "dependencies": {
+                "ee-first": "1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.8"
             }
         },
-        "html-encoding-sniffer": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
-            "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+        "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=="
+        },
+        "node_modules/mute-stdout": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz",
+            "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==",
             "dev": true,
-            "requires": {
-                "whatwg-encoding": "^1.0.1"
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "html-entities": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
-            "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+        "node_modules/mute-stream": {
+            "version": "0.0.7",
+            "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+            "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==",
             "dev": true
         },
-        "html-tags": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
-            "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
-            "dev": true
+        "node_modules/nan": {
+            "version": "2.19.0",
+            "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz",
+            "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==",
+            "dev": true,
+            "optional": true
         },
-        "htmlparser2": {
-            "version": "3.10.1",
-            "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
-            "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+        "node_modules/nanoid": {
+            "version": "3.3.7",
+            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+            "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
             "dev": true,
-            "requires": {
-                "domelementtype": "^1.3.1",
-                "domhandler": "^2.3.0",
-                "domutils": "^1.5.1",
-                "entities": "^1.1.1",
-                "inherits": "^2.0.1",
-                "readable-stream": "^3.1.1"
-            },
-            "dependencies": {
-                "readable-stream": {
-                    "version": "3.4.0",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
-                    "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "^2.0.3",
-                        "string_decoder": "^1.1.1",
-                        "util-deprecate": "^1.0.1"
-                    }
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
                 }
+            ],
+            "bin": {
+                "nanoid": "bin/nanoid.cjs"
+            },
+            "engines": {
+                "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
             }
         },
-        "http-auth": {
-            "version": "3.2.3",
-            "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.2.3.tgz",
-            "integrity": "sha1-Y2hCtx1uHyyY26Ca9UQXof74thw=",
-            "requires": {
-                "apache-crypt": "^1.1.2",
-                "apache-md5": "^1.0.6",
-                "bcryptjs": "^2.3.0",
-                "uuid": "^3.0.0"
-            }
-        },
-        "http-errors": {
-            "version": "1.7.2",
-            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
-            "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
-            "requires": {
-                "depd": "~1.1.2",
-                "inherits": "2.0.3",
-                "setprototypeof": "1.1.1",
-                "statuses": ">= 1.5.0 < 2",
-                "toidentifier": "1.0.0"
-            },
+        "node_modules/nanomatch": {
+            "version": "1.2.13",
+            "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+            "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+            "dev": true,
             "dependencies": {
-                "inherits": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-                    "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-                }
+                "arr-diff": "^4.0.0",
+                "array-unique": "^0.3.2",
+                "define-property": "^2.0.2",
+                "extend-shallow": "^3.0.2",
+                "fragment-cache": "^0.2.1",
+                "is-windows": "^1.0.2",
+                "kind-of": "^6.0.2",
+                "object.pick": "^1.3.0",
+                "regex-not": "^1.0.0",
+                "snapdragon": "^0.8.1",
+                "to-regex": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "http-proxy": {
-            "version": "1.18.0",
-            "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
-            "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
-            "requires": {
-                "eventemitter3": "^4.0.0",
-                "follow-redirects": "^1.0.0",
-                "requires-port": "^1.0.0"
+        "node_modules/nanomatch/node_modules/define-property": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+            "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+            "dev": true,
+            "dependencies": {
+                "is-descriptor": "^1.0.2",
+                "isobject": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "http-proxy-middleware": {
-            "version": "0.20.0",
-            "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.20.0.tgz",
-            "integrity": "sha512-dNJAk71nEJhPiAczQH9hGvE/MT9kEs+zn2Dh+Hi94PGZe1GluQirC7mw5rdREUtWx6qGS1Gu0bZd4qEAg+REgw==",
-            "requires": {
-                "http-proxy": "^1.17.0",
-                "is-glob": "^4.0.1",
-                "lodash": "^4.17.14",
-                "micromatch": "^4.0.2"
-            },
+        "node_modules/nanomatch/node_modules/extend-shallow": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+            "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+            "dev": true,
             "dependencies": {
-                "braces": {
-                    "version": "3.0.2",
-                    "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-                    "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-                    "requires": {
-                        "fill-range": "^7.0.1"
-                    }
-                },
-                "fill-range": {
-                    "version": "7.0.1",
-                    "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-                    "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-                    "requires": {
-                        "to-regex-range": "^5.0.1"
-                    }
-                },
-                "is-number": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-                    "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
-                },
-                "micromatch": {
-                    "version": "4.0.2",
-                    "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-                    "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-                    "requires": {
-                        "braces": "^3.0.1",
-                        "picomatch": "^2.0.5"
-                    }
-                },
-                "to-regex-range": {
-                    "version": "5.0.1",
-                    "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-                    "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-                    "requires": {
-                        "is-number": "^7.0.0"
-                    }
-                }
+                "assign-symbols": "^1.0.0",
+                "is-extendable": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "http-signature": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-            "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+        "node_modules/nanomatch/node_modules/is-descriptor": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+            "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
             "dev": true,
-            "requires": {
-                "assert-plus": "^1.0.0",
-                "jsprim": "^1.2.2",
-                "sshpk": "^1.7.0"
+            "dependencies": {
+                "is-accessor-descriptor": "^1.0.1",
+                "is-data-descriptor": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "https-browserify": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
-            "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
-            "dev": true
-        },
-        "husky": {
-            "version": "3.0.5",
-            "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.5.tgz",
-            "integrity": "sha512-cKd09Jy9cDyNIvAdN2QQAP/oA21sle4FWXjIMDttailpLAYZuBE7WaPmhrkj+afS8Sj9isghAtFvWSQ0JiwOHg==",
+        "node_modules/nanomatch/node_modules/is-extendable": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+            "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
             "dev": true,
-            "requires": {
-                "chalk": "^2.4.2",
-                "cosmiconfig": "^5.2.1",
-                "execa": "^1.0.0",
-                "get-stdin": "^7.0.0",
-                "is-ci": "^2.0.0",
-                "opencollective-postinstall": "^2.0.2",
-                "pkg-dir": "^4.2.0",
-                "please-upgrade-node": "^3.2.0",
-                "read-pkg": "^5.1.1",
-                "run-node": "^1.0.0",
-                "slash": "^3.0.0"
-            },
             "dependencies": {
-                "find-up": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-                    "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-                    "dev": true,
-                    "requires": {
-                        "locate-path": "^5.0.0",
-                        "path-exists": "^4.0.0"
-                    }
-                },
-                "get-stdin": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
-                    "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
-                    "dev": true
-                },
-                "locate-path": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-                    "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-                    "dev": true,
-                    "requires": {
-                        "p-locate": "^4.1.0"
-                    }
-                },
-                "p-locate": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-                    "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-                    "dev": true,
-                    "requires": {
-                        "p-limit": "^2.2.0"
-                    }
-                },
-                "parse-json": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
-                    "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/code-frame": "^7.0.0",
-                        "error-ex": "^1.3.1",
-                        "json-parse-better-errors": "^1.0.1",
-                        "lines-and-columns": "^1.1.6"
-                    }
-                },
-                "path-exists": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-                    "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-                    "dev": true
-                },
-                "pkg-dir": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-                    "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-                    "dev": true,
-                    "requires": {
-                        "find-up": "^4.0.0"
-                    }
-                },
-                "read-pkg": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
-                    "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
-                    "dev": true,
-                    "requires": {
-                        "@types/normalize-package-data": "^2.4.0",
-                        "normalize-package-data": "^2.5.0",
-                        "parse-json": "^5.0.0",
-                        "type-fest": "^0.6.0"
-                    }
-                },
-                "slash": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-                    "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-                    "dev": true
-                }
+                "is-plain-object": "^2.0.4"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "i": {
-            "version": "0.3.6",
-            "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz",
-            "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=",
+        "node_modules/natural-compare": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+            "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
             "dev": true
         },
-        "iconv-lite": {
-            "version": "0.4.24",
-            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-            "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-            "requires": {
-                "safer-buffer": ">= 2.1.2 < 3"
+        "node_modules/negotiator": {
+            "version": "0.6.3",
+            "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+            "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "ieee754": {
-            "version": "1.1.13",
-            "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
-            "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+        "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
         },
-        "iferr": {
-            "version": "0.1.5",
-            "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
-            "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+        "node_modules/next-tick": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+            "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
             "dev": true
         },
-        "ignore": {
-            "version": "5.1.4",
-            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
-            "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A=="
+        "node_modules/nice-try": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+            "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
         },
-        "ignore-by-default": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
-            "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
-            "dev": true
+        "node_modules/node-environment-flags": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
+            "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
+            "dependencies": {
+                "object.getownpropertydescriptors": "^2.0.3",
+                "semver": "^5.7.0"
+            }
         },
-        "ignore-loader": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/ignore-loader/-/ignore-loader-0.1.2.tgz",
-            "integrity": "sha1-2B8kA3bQuk8Nd4lyw60lh0EXpGM=",
-            "dev": true
+        "node_modules/node-environment-flags/node_modules/semver": {
+            "version": "5.7.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+            "bin": {
+                "semver": "bin/semver"
+            }
         },
-        "image-size": {
-            "version": "0.5.5",
-            "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
-            "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+        "node_modules/node-polyfill-webpack-plugin": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-2.0.1.tgz",
+            "integrity": "sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==",
             "dev": true,
-            "optional": true
-        },
-        "immutable": {
-            "version": "3.8.2",
-            "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
-            "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=",
-            "dev": true
+            "dependencies": {
+                "assert": "^2.0.0",
+                "browserify-zlib": "^0.2.0",
+                "buffer": "^6.0.3",
+                "console-browserify": "^1.2.0",
+                "constants-browserify": "^1.0.0",
+                "crypto-browserify": "^3.12.0",
+                "domain-browser": "^4.22.0",
+                "events": "^3.3.0",
+                "filter-obj": "^2.0.2",
+                "https-browserify": "^1.0.0",
+                "os-browserify": "^0.3.0",
+                "path-browserify": "^1.0.1",
+                "process": "^0.11.10",
+                "punycode": "^2.1.1",
+                "querystring-es3": "^0.2.1",
+                "readable-stream": "^4.0.0",
+                "stream-browserify": "^3.0.0",
+                "stream-http": "^3.2.0",
+                "string_decoder": "^1.3.0",
+                "timers-browserify": "^2.0.12",
+                "tty-browserify": "^0.0.1",
+                "type-fest": "^2.14.0",
+                "url": "^0.11.0",
+                "util": "^0.12.4",
+                "vm-browserify": "^1.1.2"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "peerDependencies": {
+                "webpack": ">=5"
+            }
         },
-        "import-fresh": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
-            "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+        "node_modules/node-polyfill-webpack-plugin/node_modules/readable-stream": {
+            "version": "4.5.2",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
+            "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
             "dev": true,
-            "requires": {
-                "parent-module": "^1.0.0",
-                "resolve-from": "^4.0.0"
+            "dependencies": {
+                "abort-controller": "^3.0.0",
+                "buffer": "^6.0.3",
+                "events": "^3.3.0",
+                "process": "^0.11.10",
+                "string_decoder": "^1.3.0"
+            },
+            "engines": {
+                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
             }
         },
-        "import-lazy": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
-            "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
-            "dev": true
+        "node_modules/node-releases": {
+            "version": "2.0.14",
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+            "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
         },
-        "import-local": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
-            "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+        "node_modules/nodemon": {
+            "version": "2.0.22",
+            "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz",
+            "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==",
             "dev": true,
-            "requires": {
-                "pkg-dir": "^3.0.0",
-                "resolve-cwd": "^2.0.0"
+            "dependencies": {
+                "chokidar": "^3.5.2",
+                "debug": "^3.2.7",
+                "ignore-by-default": "^1.0.1",
+                "minimatch": "^3.1.2",
+                "pstree.remy": "^1.1.8",
+                "semver": "^5.7.1",
+                "simple-update-notifier": "^1.0.7",
+                "supports-color": "^5.5.0",
+                "touch": "^3.1.0",
+                "undefsafe": "^2.0.5"
+            },
+            "bin": {
+                "nodemon": "bin/nodemon.js"
+            },
+            "engines": {
+                "node": ">=8.10.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/nodemon"
             }
         },
-        "imurmurhash": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-            "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-            "dev": true
-        },
-        "in-publish": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
-            "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
-            "dev": true
-        },
-        "indent-string": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
-            "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
-            "dev": true
-        },
-        "indexes-of": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
-            "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
-            "dev": true
-        },
-        "indexof": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
-            "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
-            "dev": true
-        },
-        "indx": {
-            "version": "0.2.3",
-            "resolved": "https://registry.npmjs.org/indx/-/indx-0.2.3.tgz",
-            "integrity": "sha1-Fdz1bunPZcAjTFE8J/vVgOcPvFA=",
-            "dev": true
-        },
-        "infer-owner": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
-            "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
-            "dev": true
-        },
-        "inflight": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-            "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-            "requires": {
-                "once": "^1.3.0",
-                "wrappy": "1"
+        "node_modules/nodemon/node_modules/binary-extensions": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "inherits": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-            "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        },
-        "ini": {
-            "version": "1.3.5",
-            "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-            "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
-            "dev": true
+        "node_modules/nodemon/node_modules/braces": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+            "dev": true,
+            "dependencies": {
+                "fill-range": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "inquirer": {
-            "version": "6.5.2",
-            "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
-            "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
+        "node_modules/nodemon/node_modules/chokidar": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
             "dev": true,
-            "requires": {
-                "ansi-escapes": "^3.2.0",
-                "chalk": "^2.4.2",
-                "cli-cursor": "^2.1.0",
-                "cli-width": "^2.0.0",
-                "external-editor": "^3.0.3",
-                "figures": "^2.0.0",
-                "lodash": "^4.17.12",
-                "mute-stream": "0.0.7",
-                "run-async": "^2.2.0",
-                "rxjs": "^6.4.0",
-                "string-width": "^2.1.0",
-                "strip-ansi": "^5.1.0",
-                "through": "^2.3.6"
+            "dependencies": {
+                "anymatch": "~3.1.2",
+                "braces": "~3.0.2",
+                "glob-parent": "~5.1.2",
+                "is-binary-path": "~2.1.0",
+                "is-glob": "~4.0.1",
+                "normalize-path": "~3.0.0",
+                "readdirp": "~3.6.0"
             },
+            "engines": {
+                "node": ">= 8.10.0"
+            },
+            "funding": {
+                "url": "https://paulmillr.com/funding/"
+            },
+            "optionalDependencies": {
+                "fsevents": "~2.3.2"
+            }
+        },
+        "node_modules/nodemon/node_modules/debug": {
+            "version": "3.2.7",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+            "dev": true,
             "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
-                },
-                "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=",
-                    "dev": true
-                },
-                "mute-stream": {
-                    "version": "0.0.7",
-                    "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
-                    "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
-                    "dev": true
-                },
-                "rxjs": {
-                    "version": "6.5.3",
-                    "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
-                    "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
-                    "dev": true,
-                    "requires": {
-                        "tslib": "^1.9.0"
-                    }
-                },
-                "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"
-                    },
-                    "dependencies": {
-                        "strip-ansi": {
-                            "version": "4.0.0",
-                            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-                            "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-                            "dev": true,
-                            "requires": {
-                                "ansi-regex": "^3.0.0"
-                            }
-                        }
-                    }
-                },
-                "strip-ansi": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-                    "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^4.1.0"
-                    },
-                    "dependencies": {
-                        "ansi-regex": {
-                            "version": "4.1.0",
-                            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-                            "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-                            "dev": true
-                        }
-                    }
-                }
+                "ms": "^2.1.1"
             }
         },
-        "interpret": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
-            "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
-            "dev": true
+        "node_modules/nodemon/node_modules/fill-range": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+            "dev": true,
+            "dependencies": {
+                "to-regex-range": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "invariant": {
-            "version": "2.2.4",
-            "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-            "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-            "requires": {
-                "loose-envify": "^1.0.0"
+        "node_modules/nodemon/node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+            "dev": true,
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
             }
         },
-        "invert-kv": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
-            "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
-            "dev": true
+        "node_modules/nodemon/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "ipaddr.js": {
-            "version": "1.9.0",
-            "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
-            "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
+        "node_modules/nodemon/node_modules/is-binary-path": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+            "dev": true,
+            "dependencies": {
+                "binary-extensions": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "is-absolute": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
-            "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+        "node_modules/nodemon/node_modules/is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
             "dev": true,
-            "requires": {
-                "is-relative": "^1.0.0",
-                "is-windows": "^1.0.1"
+            "engines": {
+                "node": ">=0.12.0"
             }
         },
-        "is-accessor-descriptor": {
-            "version": "0.1.6",
-            "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-            "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-            "requires": {
-                "kind-of": "^3.0.2"
-            },
+        "node_modules/nodemon/node_modules/readdirp": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "dev": true,
             "dependencies": {
-                "kind-of": {
-                    "version": "3.2.2",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-                    "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-                    "requires": {
-                        "is-buffer": "^1.1.5"
-                    }
-                }
+                "picomatch": "^2.2.1"
+            },
+            "engines": {
+                "node": ">=8.10.0"
             }
         },
-        "is-alphabetical": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz",
-            "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA=="
-        },
-        "is-alphanumeric": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz",
-            "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=",
-            "dev": true
+        "node_modules/nodemon/node_modules/semver": {
+            "version": "5.7.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+            "dev": true,
+            "bin": {
+                "semver": "bin/semver"
+            }
         },
-        "is-alphanumerical": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz",
-            "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==",
-            "requires": {
-                "is-alphabetical": "^1.0.0",
-                "is-decimal": "^1.0.0"
+        "node_modules/nodemon/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dev": true,
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "is-arrayish": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-            "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+        "node_modules/nodemon/node_modules/to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+            "dev": true,
+            "dependencies": {
+                "is-number": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=8.0"
+            }
         },
-        "is-binary-path": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
-            "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-            "requires": {
-                "binary-extensions": "^1.0.0"
+        "node_modules/nomnom": {
+            "version": "1.8.1",
+            "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
+            "integrity": "sha512-5s0JxqhDx9/rksG2BTMVN1enjWSvPidpoSgViZU4ZXULyTe+7jxcCRLB6f42Z0l1xYJpleCBtSyY6Lwg3uu5CQ==",
+            "deprecated": "Package no longer supported. Contact support@npmjs.com for more info.",
+            "dev": true,
+            "dependencies": {
+                "chalk": "~0.4.0",
+                "underscore": "~1.6.0"
             }
         },
-        "is-boolean-object": {
+        "node_modules/nomnom/node_modules/ansi-styles": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz",
-            "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=",
-            "dev": true
-        },
-        "is-buffer": {
-            "version": "1.1.6",
-            "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-            "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
-        },
-        "is-callable": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
-            "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
-        },
-        "is-ci": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-            "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
+            "integrity": "sha512-3iF4FIKdxaVYT3JqQuY3Wat/T2t7TRbbQ94Fu50ZUCbLy4TFbTzr90NOHQodQkNqmeEGCw8WbeP78WNi6SKYUA==",
             "dev": true,
-            "requires": {
-                "ci-info": "^2.0.0"
+            "engines": {
+                "node": ">=0.8.0"
             }
         },
-        "is-css-color-hex": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/is-css-color-hex/-/is-css-color-hex-0.2.0.tgz",
-            "integrity": "sha1-NQ2Wu87JbfxyG8S6yzDpVhZ99h0=",
-            "dev": true
-        },
-        "is-data-descriptor": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-            "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
-            "requires": {
-                "kind-of": "^3.0.2"
-            },
+        "node_modules/nomnom/node_modules/chalk": {
+            "version": "0.4.0",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+            "integrity": "sha512-sQfYDlfv2DGVtjdoQqxS0cEZDroyG8h6TamA6rvxwlrU5BaSLDx9xhatBYl2pxZ7gmpNaPFVwBtdGdu5rQ+tYQ==",
+            "dev": true,
             "dependencies": {
-                "kind-of": {
-                    "version": "3.2.2",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-                    "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-                    "requires": {
-                        "is-buffer": "^1.1.5"
-                    }
-                }
+                "ansi-styles": "~1.0.0",
+                "has-color": "~0.1.0",
+                "strip-ansi": "~0.1.0"
+            },
+            "engines": {
+                "node": ">=0.8.0"
             }
         },
-        "is-date-object": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
-            "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
-        },
-        "is-decimal": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz",
-            "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ=="
-        },
-        "is-descriptor": {
-            "version": "0.1.6",
-            "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-            "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
-            "requires": {
-                "is-accessor-descriptor": "^0.1.6",
-                "is-data-descriptor": "^0.1.4",
-                "kind-of": "^5.0.0"
-            },
-            "dependencies": {
-                "kind-of": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-                    "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
-                }
+        "node_modules/nomnom/node_modules/strip-ansi": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
+            "integrity": "sha512-behete+3uqxecWlDAm5lmskaSaISA+ThQ4oNNBDTBJt0x2ppR6IPqfZNuj6BLaLJ/Sji4TPZlcRyOis8wXQTLg==",
+            "dev": true,
+            "bin": {
+                "strip-ansi": "cli.js"
+            },
+            "engines": {
+                "node": ">=0.8.0"
             }
         },
-        "is-directory": {
-            "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
-            "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+        "node_modules/nomnom/node_modules/underscore": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+            "integrity": "sha512-z4o1fvKUojIWh9XuaVLUDdf86RQiq13AC1dmHbTpoyuu+bquHms76v16CjycCbec87J7z0k//SiQVk0sMdFmpQ==",
             "dev": true
         },
-        "is-extendable": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-            "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+        "node_modules/nopt": {
+            "version": "1.0.10",
+            "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+            "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
+            "dev": true,
+            "dependencies": {
+                "abbrev": "1"
+            },
+            "bin": {
+                "nopt": "bin/nopt.js"
+            },
+            "engines": {
+                "node": "*"
+            }
+        },
+        "node_modules/normalize-package-data": {
+            "version": "2.5.0",
+            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+            "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+            "dependencies": {
+                "hosted-git-info": "^2.1.4",
+                "resolve": "^1.10.0",
+                "semver": "2 || 3 || 4 || 5",
+                "validate-npm-package-license": "^3.0.1"
+            }
         },
-        "is-extglob": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-            "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+        "node_modules/normalize-package-data/node_modules/semver": {
+            "version": "5.7.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+            "bin": {
+                "semver": "bin/semver"
+            }
         },
-        "is-finite": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
-            "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
-            "dev": true,
-            "requires": {
-                "number-is-nan": "^1.0.0"
+        "node_modules/normalize-path": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+            "devOptional": true,
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "is-fullwidth-code-point": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-            "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+        "node_modules/normalize-range": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+            "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
             "dev": true,
-            "requires": {
-                "number-is-nan": "^1.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "is-generator-fn": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
-            "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+        "node_modules/normalize-selector": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
+            "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==",
             "dev": true
         },
-        "is-glob": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-            "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
-            "requires": {
-                "is-extglob": "^2.1.1"
+        "node_modules/now-and-later": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz",
+            "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==",
+            "dev": true,
+            "dependencies": {
+                "once": "^1.4.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "is-hexadecimal": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz",
-            "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA=="
-        },
-        "is-installed-globally": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
-            "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
-            "dev": true,
-            "requires": {
-                "global-dirs": "^0.1.0",
-                "is-path-inside": "^1.0.0"
-            },
-            "dependencies": {
-                "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=",
-                    "dev": true,
-                    "requires": {
-                        "path-is-inside": "^1.0.1"
-                    }
-                }
+        "node_modules/npm-run-all": {
+            "version": "4.1.5",
+            "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
+            "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "chalk": "^2.4.1",
+                "cross-spawn": "^6.0.5",
+                "memorystream": "^0.3.1",
+                "minimatch": "^3.0.4",
+                "pidtree": "^0.3.0",
+                "read-pkg": "^3.0.0",
+                "shell-quote": "^1.6.1",
+                "string.prototype.padend": "^3.0.0"
+            },
+            "bin": {
+                "npm-run-all": "bin/npm-run-all/index.js",
+                "run-p": "bin/run-p/index.js",
+                "run-s": "bin/run-s/index.js"
+            },
+            "engines": {
+                "node": ">= 4"
             }
         },
-        "is-interactive": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
-            "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
-            "dev": true
+        "node_modules/npm-run-all/node_modules/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==",
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "is-natural-number": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
-            "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
-            "dev": true
+        "node_modules/npm-run-all/node_modules/chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "dependencies": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "is-negated-glob": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
-            "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=",
-            "dev": true
+        "node_modules/npm-run-all/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "dependencies": {
+                "color-name": "1.1.3"
+            }
         },
-        "is-npm": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
-            "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
-            "dev": true
+        "node_modules/npm-run-all/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
         },
-        "is-number": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-            "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-            "requires": {
-                "kind-of": "^3.0.2"
-            },
+        "node_modules/npm-run-all/node_modules/cross-spawn": {
+            "version": "6.0.5",
+            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+            "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
             "dependencies": {
-                "kind-of": {
-                    "version": "3.2.2",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-                    "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-                    "requires": {
-                        "is-buffer": "^1.1.5"
-                    }
-                }
+                "nice-try": "^1.0.4",
+                "path-key": "^2.0.1",
+                "semver": "^5.5.0",
+                "shebang-command": "^1.2.0",
+                "which": "^1.2.9"
+            },
+            "engines": {
+                "node": ">=4.8"
             }
         },
-        "is-number-like": {
-            "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
-            "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
-            "dev": true,
-            "requires": {
-                "lodash.isfinite": "^3.3.2"
+        "node_modules/npm-run-all/node_modules/has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "engines": {
+                "node": ">=4"
             }
         },
-        "is-number-object": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz",
-            "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=",
-            "dev": true
-        },
-        "is-obj": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
-            "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
-            "dev": true
-        },
-        "is-observable": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
-            "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==",
-            "dev": true,
-            "requires": {
-                "symbol-observable": "^1.1.0"
+        "node_modules/npm-run-all/node_modules/load-json-file": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+            "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
+            "dependencies": {
+                "graceful-fs": "^4.1.2",
+                "parse-json": "^4.0.0",
+                "pify": "^3.0.0",
+                "strip-bom": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "is-path-cwd": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
-            "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
-            "dev": true
+        "node_modules/npm-run-all/node_modules/parse-json": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+            "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
+            "dependencies": {
+                "error-ex": "^1.3.1",
+                "json-parse-better-errors": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "is-path-inside": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.1.tgz",
-            "integrity": "sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg==",
-            "dev": true
+        "node_modules/npm-run-all/node_modules/path-key": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+            "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "is-plain-obj": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-            "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+        "node_modules/npm-run-all/node_modules/path-type": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+            "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+            "dependencies": {
+                "pify": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "is-plain-object": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-            "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-            "requires": {
-                "isobject": "^3.0.1"
+        "node_modules/npm-run-all/node_modules/pify": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+            "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+            "engines": {
+                "node": ">=4"
             }
         },
-        "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
+        "node_modules/npm-run-all/node_modules/read-pkg": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+            "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
+            "dependencies": {
+                "load-json-file": "^4.0.0",
+                "normalize-package-data": "^2.3.2",
+                "path-type": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "is-redirect": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
-            "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
-            "dev": true
+        "node_modules/npm-run-all/node_modules/semver": {
+            "version": "5.7.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+            "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+            "bin": {
+                "semver": "bin/semver"
+            }
         },
-        "is-regex": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
-            "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
-            "requires": {
-                "has": "^1.0.1"
+        "node_modules/npm-run-all/node_modules/shebang-command": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+            "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+            "dependencies": {
+                "shebang-regex": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "is-regexp": {
+        "node_modules/npm-run-all/node_modules/shebang-regex": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
-            "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+            "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "is-relative": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
-            "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
-            "dev": true,
-            "requires": {
-                "is-unc-path": "^1.0.0"
+        "node_modules/npm-run-all/node_modules/strip-bom": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+            "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+            "engines": {
+                "node": ">=4"
             }
         },
-        "is-retry-allowed": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
-            "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
-            "dev": true
+        "node_modules/npm-run-all/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "is-stream": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-            "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
-            "dev": true
+        "node_modules/npm-run-all/node_modules/which": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "which": "bin/which"
+            }
         },
-        "is-string": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz",
-            "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=",
-            "dev": true
+        "node_modules/npm-run-path": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+            "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
+            "dev": true,
+            "dependencies": {
+                "path-key": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "is-subset": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
-            "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
-            "dev": true
+        "node_modules/npm-run-path/node_modules/path-key": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+            "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "is-symbol": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
-            "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
-            "requires": {
-                "has-symbols": "^1.0.0"
+        "node_modules/nth-check": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+            "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+            "dependencies": {
+                "boolbase": "^1.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/fb55/nth-check?sponsor=1"
             }
         },
-        "is-typedarray": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-            "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+        "node_modules/num2fraction": {
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+            "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==",
             "dev": true
         },
-        "is-unc-path": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
-            "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+        "node_modules/number-is-nan": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+            "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
             "dev": true,
-            "requires": {
-                "unc-path-regex": "^0.1.2"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "is-utf8": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-            "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-            "dev": true
+        "node_modules/object-assign": {
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+            "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "is-valid-glob": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
-            "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
-            "dev": true
+        "node_modules/object-copy": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+            "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
+            "dev": true,
+            "dependencies": {
+                "copy-descriptor": "^0.1.0",
+                "define-property": "^0.2.5",
+                "kind-of": "^3.0.3"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "is-whitespace-character": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz",
-            "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==",
+        "node_modules/object-copy/node_modules/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-windows": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-            "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+        "node_modules/object-copy/node_modules/kind-of": {
+            "version": "3.2.2",
+            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+            "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+            "dev": true,
+            "dependencies": {
+                "is-buffer": "^1.1.5"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "is-word-character": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz",
-            "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==",
-            "dev": true
+        "node_modules/object-inspect": {
+            "version": "1.13.1",
+            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+            "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
-        "is-wsl": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
-            "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
-            "dev": true
+        "node_modules/object-is": {
+            "version": "1.1.6",
+            "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
+            "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+            "dev": true,
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
-        "isarray": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-            "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+        "node_modules/object-keys": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+            "engines": {
+                "node": ">= 0.4"
+            }
         },
-        "isexe": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-            "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+        "node_modules/object-path": {
+            "version": "0.11.8",
+            "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz",
+            "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==",
+            "engines": {
+                "node": ">= 10.12.0"
+            }
         },
-        "isobject": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-            "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        "node_modules/object-visit": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+            "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
+            "dev": true,
+            "dependencies": {
+                "isobject": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "isstream": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-            "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
-            "dev": true
+        "node_modules/object.assign": {
+            "version": "4.1.5",
+            "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+            "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+            "dependencies": {
+                "call-bind": "^1.0.5",
+                "define-properties": "^1.2.1",
+                "has-symbols": "^1.0.3",
+                "object-keys": "^1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
-        "istanbul-lib-coverage": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
-            "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
-            "dev": true
+        "node_modules/object.defaults": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+            "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==",
+            "dev": true,
+            "dependencies": {
+                "array-each": "^1.0.1",
+                "array-slice": "^1.0.0",
+                "for-own": "^1.0.0",
+                "isobject": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "istanbul-lib-instrument": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
-            "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
+        "node_modules/object.entries": {
+            "version": "1.1.8",
+            "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+            "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
             "dev": true,
-            "requires": {
-                "@babel/generator": "^7.4.0",
-                "@babel/parser": "^7.4.3",
-                "@babel/template": "^7.4.0",
-                "@babel/traverse": "^7.4.3",
-                "@babel/types": "^7.4.0",
-                "istanbul-lib-coverage": "^2.0.5",
-                "semver": "^6.0.0"
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "istanbul-lib-report": {
+        "node_modules/object.fromentries": {
             "version": "2.0.8",
-            "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
-            "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
+            "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+            "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
             "dev": true,
-            "requires": {
-                "istanbul-lib-coverage": "^2.0.5",
-                "make-dir": "^2.1.0",
-                "supports-color": "^6.1.0"
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-object-atoms": "^1.0.0"
             },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/object.getownpropertydescriptors": {
+            "version": "2.1.8",
+            "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz",
+            "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==",
             "dependencies": {
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
+                "array.prototype.reduce": "^1.0.6",
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-object-atoms": "^1.0.0",
+                "gopd": "^1.0.1",
+                "safe-array-concat": "^1.1.2"
+            },
+            "engines": {
+                "node": ">= 0.8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "istanbul-lib-source-maps": {
-            "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
-            "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
+        "node_modules/object.hasown": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz",
+            "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==",
             "dev": true,
-            "requires": {
-                "debug": "^4.1.1",
-                "istanbul-lib-coverage": "^2.0.5",
-                "make-dir": "^2.1.0",
-                "rimraf": "^2.6.3",
-                "source-map": "^0.6.1"
-            },
             "dependencies": {
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "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
-                },
-                "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
-                }
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "istanbul-reports": {
-            "version": "2.2.6",
-            "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz",
-            "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==",
+        "node_modules/object.pick": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+            "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
             "dev": true,
-            "requires": {
-                "handlebars": "^4.1.2"
+            "dependencies": {
+                "isobject": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "jest": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz",
-            "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==",
+        "node_modules/object.values": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+            "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
             "dev": true,
-            "requires": {
-                "import-local": "^2.0.0",
-                "jest-cli": "^24.9.0"
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-object-atoms": "^1.0.0"
             },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/obuf": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+            "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
+        },
+        "node_modules/on-finished": {
+            "version": "2.4.1",
+            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+            "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
             "dependencies": {
-                "ansi-regex": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-                    "dev": true
-                },
-                "cliui": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-                    "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
-                    "dev": true,
-                    "requires": {
-                        "string-width": "^3.1.0",
-                        "strip-ansi": "^5.2.0",
-                        "wrap-ansi": "^5.1.0"
-                    }
-                },
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                },
-                "get-caller-file": {
-                    "version": "2.0.5",
-                    "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-                    "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-                    "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=",
-                    "dev": true
-                },
-                "jest-cli": {
-                    "version": "24.9.0",
-                    "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz",
-                    "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==",
-                    "dev": true,
-                    "requires": {
-                        "@jest/core": "^24.9.0",
-                        "@jest/test-result": "^24.9.0",
-                        "@jest/types": "^24.9.0",
-                        "chalk": "^2.0.1",
-                        "exit": "^0.1.2",
-                        "import-local": "^2.0.0",
-                        "is-ci": "^2.0.0",
-                        "jest-config": "^24.9.0",
-                        "jest-util": "^24.9.0",
-                        "jest-validate": "^24.9.0",
-                        "prompts": "^2.0.1",
-                        "realpath-native": "^1.1.0",
-                        "yargs": "^13.3.0"
-                    }
-                },
-                "string-width": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-                    "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-                    "dev": true,
-                    "requires": {
-                        "emoji-regex": "^7.0.1",
-                        "is-fullwidth-code-point": "^2.0.0",
-                        "strip-ansi": "^5.1.0"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-                    "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^4.1.0"
-                    }
-                },
-                "which-module": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-                    "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-                    "dev": true
-                },
-                "wrap-ansi": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
-                    "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^3.2.0",
-                        "string-width": "^3.0.0",
-                        "strip-ansi": "^5.0.0"
-                    }
-                },
-                "y18n": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-                    "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-                    "dev": true
-                },
-                "yargs": {
-                    "version": "13.3.0",
-                    "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
-                    "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
-                    "dev": true,
-                    "requires": {
-                        "cliui": "^5.0.0",
-                        "find-up": "^3.0.0",
-                        "get-caller-file": "^2.0.1",
-                        "require-directory": "^2.1.1",
-                        "require-main-filename": "^2.0.0",
-                        "set-blocking": "^2.0.0",
-                        "string-width": "^3.0.0",
-                        "which-module": "^2.0.0",
-                        "y18n": "^4.0.0",
-                        "yargs-parser": "^13.1.1"
-                    }
-                },
-                "yargs-parser": {
-                    "version": "13.1.1",
-                    "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
-                    "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^5.0.0",
-                        "decamelize": "^1.2.0"
-                    }
-                }
+                "ee-first": "1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.8"
             }
         },
-        "jest-changed-files": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz",
-            "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==",
-            "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0",
-                "execa": "^1.0.0",
-                "throat": "^4.0.0"
-            }
-        },
-        "jest-config": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz",
-            "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==",
-            "dev": true,
-            "requires": {
-                "@babel/core": "^7.1.0",
-                "@jest/test-sequencer": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "babel-jest": "^24.9.0",
-                "chalk": "^2.0.1",
-                "glob": "^7.1.1",
-                "jest-environment-jsdom": "^24.9.0",
-                "jest-environment-node": "^24.9.0",
-                "jest-get-type": "^24.9.0",
-                "jest-jasmine2": "^24.9.0",
-                "jest-regex-util": "^24.3.0",
-                "jest-resolve": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "jest-validate": "^24.9.0",
-                "micromatch": "^3.1.10",
-                "pretty-format": "^24.9.0",
-                "realpath-native": "^1.1.0"
+        "node_modules/on-headers": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+            "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+            "engines": {
+                "node": ">= 0.8"
             }
         },
-        "jest-diff": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz",
-            "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==",
-            "dev": true,
-            "requires": {
-                "chalk": "^2.0.1",
-                "diff-sequences": "^24.9.0",
-                "jest-get-type": "^24.9.0",
-                "pretty-format": "^24.9.0"
+        "node_modules/once": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+            "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+            "dependencies": {
+                "wrappy": "1"
             }
         },
-        "jest-docblock": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz",
-            "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==",
+        "node_modules/one-time": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
+            "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
             "dev": true,
-            "requires": {
-                "detect-newline": "^2.1.0"
+            "dependencies": {
+                "fn.name": "1.x.x"
             }
         },
-        "jest-each": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz",
-            "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==",
+        "node_modules/onetime": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+            "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
             "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0",
-                "chalk": "^2.0.1",
-                "jest-get-type": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "pretty-format": "^24.9.0"
+            "dependencies": {
+                "mimic-fn": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "jest-environment-jsdom": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz",
-            "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
+        "node_modules/open": {
+            "version": "8.4.2",
+            "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+            "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
             "dev": true,
-            "requires": {
-                "@jest/environment": "^24.9.0",
-                "@jest/fake-timers": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "jest-mock": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "jsdom": "^11.5.1"
+            "dependencies": {
+                "define-lazy-prop": "^2.0.0",
+                "is-docker": "^2.1.1",
+                "is-wsl": "^2.2.0"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "jest-environment-node": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz",
-            "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==",
+        "node_modules/opencollective-postinstall": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+            "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
             "dev": true,
-            "requires": {
-                "@jest/environment": "^24.9.0",
-                "@jest/fake-timers": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "jest-mock": "^24.9.0",
-                "jest-util": "^24.9.0"
+            "bin": {
+                "opencollective-postinstall": "index.js"
             }
         },
-        "jest-get-type": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz",
-            "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==",
-            "dev": true
-        },
-        "jest-haste-map": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
-            "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
+        "node_modules/opn": {
+            "version": "5.3.0",
+            "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
+            "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
             "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0",
-                "anymatch": "^2.0.0",
-                "fb-watchman": "^2.0.0",
-                "fsevents": "^1.2.7",
-                "graceful-fs": "^4.1.15",
-                "invariant": "^2.2.4",
-                "jest-serializer": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "jest-worker": "^24.9.0",
-                "micromatch": "^3.1.10",
-                "sane": "^4.0.3",
-                "walker": "^1.0.7"
-            }
-        },
-        "jest-jasmine2": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz",
-            "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==",
-            "dev": true,
-            "requires": {
-                "@babel/traverse": "^7.1.0",
-                "@jest/environment": "^24.9.0",
-                "@jest/test-result": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "chalk": "^2.0.1",
-                "co": "^4.6.0",
-                "expect": "^24.9.0",
-                "is-generator-fn": "^2.0.0",
-                "jest-each": "^24.9.0",
-                "jest-matcher-utils": "^24.9.0",
-                "jest-message-util": "^24.9.0",
-                "jest-runtime": "^24.9.0",
-                "jest-snapshot": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "pretty-format": "^24.9.0",
-                "throat": "^4.0.0"
-            }
-        },
-        "jest-leak-detector": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz",
-            "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==",
-            "dev": true,
-            "requires": {
-                "jest-get-type": "^24.9.0",
-                "pretty-format": "^24.9.0"
-            }
-        },
-        "jest-matcher-utils": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz",
-            "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==",
-            "dev": true,
-            "requires": {
-                "chalk": "^2.0.1",
-                "jest-diff": "^24.9.0",
-                "jest-get-type": "^24.9.0",
-                "pretty-format": "^24.9.0"
-            }
-        },
-        "jest-message-util": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
-            "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
-            "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.0.0",
-                "@jest/test-result": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "@types/stack-utils": "^1.0.1",
-                "chalk": "^2.0.1",
-                "micromatch": "^3.1.10",
-                "slash": "^2.0.0",
-                "stack-utils": "^1.0.1"
+            "dependencies": {
+                "is-wsl": "^1.1.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "jest-mock": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
-            "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
+        "node_modules/opn/node_modules/is-wsl": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+            "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
             "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0"
+            "engines": {
+                "node": ">=4"
             }
         },
-        "jest-pnp-resolver": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
-            "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==",
-            "dev": true
-        },
-        "jest-regex-util": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
-            "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==",
-            "dev": true
-        },
-        "jest-resolve": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
-            "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
+        "node_modules/optionator": {
+            "version": "0.8.3",
+            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+            "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
             "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0",
-                "browser-resolve": "^1.11.3",
-                "chalk": "^2.0.1",
-                "jest-pnp-resolver": "^1.2.1",
-                "realpath-native": "^1.1.0"
+            "dependencies": {
+                "deep-is": "~0.1.3",
+                "fast-levenshtein": "~2.0.6",
+                "levn": "~0.3.0",
+                "prelude-ls": "~1.1.2",
+                "type-check": "~0.3.2",
+                "word-wrap": "~1.2.3"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
             }
         },
-        "jest-resolve-dependencies": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz",
-            "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==",
+        "node_modules/ora": {
+            "version": "5.4.1",
+            "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+            "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
             "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0",
-                "jest-regex-util": "^24.3.0",
-                "jest-snapshot": "^24.9.0"
+            "dependencies": {
+                "bl": "^4.1.0",
+                "chalk": "^4.1.0",
+                "cli-cursor": "^3.1.0",
+                "cli-spinners": "^2.5.0",
+                "is-interactive": "^1.0.0",
+                "is-unicode-supported": "^0.1.0",
+                "log-symbols": "^4.1.0",
+                "strip-ansi": "^6.0.0",
+                "wcwidth": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "jest-runner": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz",
-            "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==",
+        "node_modules/ora/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,
-            "requires": {
-                "@jest/console": "^24.7.1",
-                "@jest/environment": "^24.9.0",
-                "@jest/test-result": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "chalk": "^2.4.2",
-                "exit": "^0.1.2",
-                "graceful-fs": "^4.1.15",
-                "jest-config": "^24.9.0",
-                "jest-docblock": "^24.3.0",
-                "jest-haste-map": "^24.9.0",
-                "jest-jasmine2": "^24.9.0",
-                "jest-leak-detector": "^24.9.0",
-                "jest-message-util": "^24.9.0",
-                "jest-resolve": "^24.9.0",
-                "jest-runtime": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "jest-worker": "^24.6.0",
-                "source-map-support": "^0.5.6",
-                "throat": "^4.0.0"
-            }
-        },
-        "jest-runtime": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz",
-            "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==",
-            "dev": true,
-            "requires": {
-                "@jest/console": "^24.7.1",
-                "@jest/environment": "^24.9.0",
-                "@jest/source-map": "^24.3.0",
-                "@jest/transform": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "@types/yargs": "^13.0.0",
-                "chalk": "^2.0.1",
-                "exit": "^0.1.2",
-                "glob": "^7.1.3",
-                "graceful-fs": "^4.1.15",
-                "jest-config": "^24.9.0",
-                "jest-haste-map": "^24.9.0",
-                "jest-message-util": "^24.9.0",
-                "jest-mock": "^24.9.0",
-                "jest-regex-util": "^24.3.0",
-                "jest-resolve": "^24.9.0",
-                "jest-snapshot": "^24.9.0",
-                "jest-util": "^24.9.0",
-                "jest-validate": "^24.9.0",
-                "realpath-native": "^1.1.0",
-                "slash": "^2.0.0",
-                "strip-bom": "^3.0.0",
-                "yargs": "^13.3.0"
-            },
-            "dependencies": {
-                "ansi-regex": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-                    "dev": true
-                },
-                "cliui": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-                    "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
-                    "dev": true,
-                    "requires": {
-                        "string-width": "^3.1.0",
-                        "strip-ansi": "^5.2.0",
-                        "wrap-ansi": "^5.1.0"
-                    }
-                },
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                },
-                "get-caller-file": {
-                    "version": "2.0.5",
-                    "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-                    "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-                    "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=",
-                    "dev": true
-                },
-                "string-width": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-                    "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-                    "dev": true,
-                    "requires": {
-                        "emoji-regex": "^7.0.1",
-                        "is-fullwidth-code-point": "^2.0.0",
-                        "strip-ansi": "^5.1.0"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-                    "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^4.1.0"
-                    }
-                },
-                "which-module": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-                    "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-                    "dev": true
-                },
-                "wrap-ansi": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
-                    "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^3.2.0",
-                        "string-width": "^3.0.0",
-                        "strip-ansi": "^5.0.0"
-                    }
-                },
-                "y18n": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-                    "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-                    "dev": true
-                },
-                "yargs": {
-                    "version": "13.3.0",
-                    "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
-                    "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
-                    "dev": true,
-                    "requires": {
-                        "cliui": "^5.0.0",
-                        "find-up": "^3.0.0",
-                        "get-caller-file": "^2.0.1",
-                        "require-directory": "^2.1.1",
-                        "require-main-filename": "^2.0.0",
-                        "set-blocking": "^2.0.0",
-                        "string-width": "^3.0.0",
-                        "which-module": "^2.0.0",
-                        "y18n": "^4.0.0",
-                        "yargs-parser": "^13.1.1"
-                    }
-                },
-                "yargs-parser": {
-                    "version": "13.1.1",
-                    "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
-                    "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^5.0.0",
-                        "decamelize": "^1.2.0"
-                    }
-                }
+            "engines": {
+                "node": ">=8"
             }
         },
-        "jest-serializer": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
-            "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==",
-            "dev": true
-        },
-        "jest-snapshot": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz",
-            "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.0.0",
-                "@jest/types": "^24.9.0",
-                "chalk": "^2.0.1",
-                "expect": "^24.9.0",
-                "jest-diff": "^24.9.0",
-                "jest-get-type": "^24.9.0",
-                "jest-matcher-utils": "^24.9.0",
-                "jest-message-util": "^24.9.0",
-                "jest-resolve": "^24.9.0",
-                "mkdirp": "^0.5.1",
-                "natural-compare": "^1.4.0",
-                "pretty-format": "^24.9.0",
-                "semver": "^6.2.0"
-            }
-        },
-        "jest-util": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
-            "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
-            "dev": true,
-            "requires": {
-                "@jest/console": "^24.9.0",
-                "@jest/fake-timers": "^24.9.0",
-                "@jest/source-map": "^24.9.0",
-                "@jest/test-result": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "callsites": "^3.0.0",
-                "chalk": "^2.0.1",
-                "graceful-fs": "^4.1.15",
-                "is-ci": "^2.0.0",
-                "mkdirp": "^0.5.1",
-                "slash": "^2.0.0",
-                "source-map": "^0.6.0"
-            },
+        "node_modules/ora/node_modules/cli-cursor": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+            "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+            "dev": true,
             "dependencies": {
-                "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
-                }
+                "restore-cursor": "^3.1.0"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "jest-validate": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz",
-            "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==",
+        "node_modules/ora/node_modules/log-symbols": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+            "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
             "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0",
-                "camelcase": "^5.3.1",
-                "chalk": "^2.0.1",
-                "jest-get-type": "^24.9.0",
-                "leven": "^3.1.0",
-                "pretty-format": "^24.9.0"
+            "dependencies": {
+                "chalk": "^4.1.0",
+                "is-unicode-supported": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "jest-watcher": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz",
-            "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==",
+        "node_modules/ora/node_modules/mimic-fn": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+            "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
             "dev": true,
-            "requires": {
-                "@jest/test-result": "^24.9.0",
-                "@jest/types": "^24.9.0",
-                "@types/yargs": "^13.0.0",
-                "ansi-escapes": "^3.0.0",
-                "chalk": "^2.0.1",
-                "jest-util": "^24.9.0",
-                "string-length": "^2.0.0"
+            "engines": {
+                "node": ">=6"
             }
         },
-        "jest-worker": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
-            "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
+        "node_modules/ora/node_modules/onetime": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+            "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
             "dev": true,
-            "requires": {
-                "merge-stream": "^2.0.0",
-                "supports-color": "^6.1.0"
+            "dependencies": {
+                "mimic-fn": "^2.1.0"
+            },
+            "engines": {
+                "node": ">=6"
             },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/ora/node_modules/restore-cursor": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+            "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+            "dev": true,
             "dependencies": {
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
+                "onetime": "^5.1.0",
+                "signal-exit": "^3.0.2"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "js-base64": {
-            "version": "2.5.1",
-            "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
-            "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==",
-            "dev": true
+        "node_modules/ora/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"
+            }
         },
-        "js-levenshtein": {
-            "version": "1.1.6",
-            "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
-            "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+        "node_modules/os-browserify": {
+            "version": "0.3.0",
+            "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+            "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
             "dev": true
         },
-        "js-tokens": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "js-yaml": {
-            "version": "3.13.1",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
-            "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+        "node_modules/os-tmpdir": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+            "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
             "dev": true,
-            "requires": {
-                "argparse": "^1.0.7",
-                "esprima": "^4.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "jsbn": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-            "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-            "dev": true
+        "node_modules/p-finally": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+            "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "jsdom": {
-            "version": "11.12.0",
-            "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
-            "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
-            "dev": true,
-            "requires": {
-                "abab": "^2.0.0",
-                "acorn": "^5.5.3",
-                "acorn-globals": "^4.1.0",
-                "array-equal": "^1.0.0",
-                "cssom": ">= 0.3.2 < 0.4.0",
-                "cssstyle": "^1.0.0",
-                "data-urls": "^1.0.0",
-                "domexception": "^1.0.1",
-                "escodegen": "^1.9.1",
-                "html-encoding-sniffer": "^1.0.2",
-                "left-pad": "^1.3.0",
-                "nwsapi": "^2.0.7",
-                "parse5": "4.0.0",
-                "pn": "^1.1.0",
-                "request": "^2.87.0",
-                "request-promise-native": "^1.0.5",
-                "sax": "^1.2.4",
-                "symbol-tree": "^3.2.2",
-                "tough-cookie": "^2.3.4",
-                "w3c-hr-time": "^1.0.1",
-                "webidl-conversions": "^4.0.2",
-                "whatwg-encoding": "^1.0.3",
-                "whatwg-mimetype": "^2.1.0",
-                "whatwg-url": "^6.4.1",
-                "ws": "^5.2.0",
-                "xml-name-validator": "^3.0.0"
-            },
-            "dependencies": {
-                "acorn": {
-                    "version": "5.7.3",
-                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-                    "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-                    "dev": true
-                },
-                "parse5": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
-                    "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
-                    "dev": true
-                },
-                "ws": {
-                    "version": "5.2.2",
-                    "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
-                    "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
-                    "dev": true,
-                    "requires": {
-                        "async-limiter": "~1.0.0"
-                    }
-                }
+        "node_modules/p-limit": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+            "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+            "dependencies": {
+                "p-try": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "jsesc": {
-            "version": "2.5.2",
-            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-            "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
-            "dev": true
+        "node_modules/p-locate": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+            "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+            "dev": true,
+            "dependencies": {
+                "p-limit": "^2.2.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "json-parse-better-errors": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-            "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+        "node_modules/p-map": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+            "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+            "dev": true,
+            "dependencies": {
+                "aggregate-error": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "json-schema": {
-            "version": "0.2.3",
-            "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-            "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
-            "dev": true
+        "node_modules/p-try": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+            "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "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==",
+        "node_modules/pako": {
+            "version": "1.0.11",
+            "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+            "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
             "dev": true
         },
-        "json-stable-stringify-without-jsonify": {
+        "node_modules/parent-module": {
             "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
+            "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+            "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+            "dependencies": {
+                "callsites": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "json-stringify-safe": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-            "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
-            "dev": true
+        "node_modules/parse": {
+            "version": "5.1.0",
+            "resolved": "https://registry.npmjs.org/parse/-/parse-5.1.0.tgz",
+            "integrity": "sha512-46gVRe1JHsh21Ht0/Ko6PeMDl6wELLMYxnZPFD6iZm2EWsWnzi2txNGE6PvnIv+G7yOufZIOD0BCZLYOFl3toA==",
+            "dependencies": {
+                "@babel/runtime-corejs3": "7.23.2",
+                "idb-keyval": "6.2.1",
+                "react-native-crypto-js": "1.0.0",
+                "uuid": "9.0.1",
+                "ws": "8.16.0",
+                "xmlhttprequest": "1.8.0"
+            },
+            "engines": {
+                "node": ">=18 <21"
+            },
+            "optionalDependencies": {
+                "crypto-js": "4.2.0"
+            }
         },
-        "json5": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
-            "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+        "node_modules/parse-asn1": {
+            "version": "5.1.7",
+            "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz",
+            "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==",
             "dev": true,
-            "requires": {
-                "minimist": "^1.2.0"
-            },
             "dependencies": {
-                "minimist": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-                    "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-                    "dev": true
-                }
+                "asn1.js": "^4.10.1",
+                "browserify-aes": "^1.2.0",
+                "evp_bytestokey": "^1.0.3",
+                "hash-base": "~3.0",
+                "pbkdf2": "^3.1.2",
+                "safe-buffer": "^5.2.1"
+            },
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "jsonfile": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
-            "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+        "node_modules/parse-entities": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
+            "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
             "dev": true,
-            "requires": {
-                "graceful-fs": "^4.1.6"
+            "dependencies": {
+                "character-entities": "^1.0.0",
+                "character-entities-legacy": "^1.0.0",
+                "character-reference-invalid": "^1.0.0",
+                "is-alphanumerical": "^1.0.0",
+                "is-decimal": "^1.0.0",
+                "is-hexadecimal": "^1.0.0"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
             }
         },
-        "jsprim": {
-            "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
-            "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+        "node_modules/parse-filepath": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+            "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==",
             "dev": true,
-            "requires": {
-                "assert-plus": "1.0.0",
-                "extsprintf": "1.3.0",
-                "json-schema": "0.2.3",
-                "verror": "1.10.0"
+            "dependencies": {
+                "is-absolute": "^1.0.0",
+                "map-cache": "^0.2.0",
+                "path-root": "^0.1.1"
+            },
+            "engines": {
+                "node": ">=0.8"
             }
         },
-        "jsx-ast-utils": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz",
-            "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==",
+        "node_modules/parse-json": {
+            "version": "5.2.0",
+            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+            "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+            "dependencies": {
+                "@babel/code-frame": "^7.0.0",
+                "error-ex": "^1.3.1",
+                "json-parse-even-better-errors": "^2.3.0",
+                "lines-and-columns": "^1.1.6"
+            },
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/parse-node-version": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+            "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
             "dev": true,
-            "requires": {
-                "array-includes": "^3.0.3",
-                "object.assign": "^4.1.0"
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "just-debounce": {
+        "node_modules/parse-passwd": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz",
-            "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=",
+            "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+            "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/parse/node_modules/uuid": {
+            "version": "9.0.1",
+            "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+            "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+            "funding": [
+                "https://github.com/sponsors/broofa",
+                "https://github.com/sponsors/ctavan"
+            ],
+            "bin": {
+                "uuid": "dist/bin/uuid"
+            }
+        },
+        "node_modules/parse/node_modules/ws": {
+            "version": "8.16.0",
+            "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
+            "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
+            "engines": {
+                "node": ">=10.0.0"
+            },
+            "peerDependencies": {
+                "bufferutil": "^4.0.1",
+                "utf-8-validate": ">=5.0.2"
+            },
+            "peerDependenciesMeta": {
+                "bufferutil": {
+                    "optional": true
+                },
+                "utf-8-validate": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/parse5": {
+            "version": "6.0.1",
+            "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+            "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
             "dev": true
         },
-        "keygrip": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.3.tgz",
-            "integrity": "sha512-/PpesirAIfaklxUzp4Yb7xBper9MwP6hNRA6BGGUFCgbJ+BM5CKBtsoxinNXkLHAr+GXS1/lSlF2rP7cv5Fl+g=="
+        "node_modules/parseurl": {
+            "version": "1.3.3",
+            "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+            "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+            "engines": {
+                "node": ">= 0.8"
+            }
         },
-        "kind-of": {
-            "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-            "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        "node_modules/pascalcase": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+            "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "kleur": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-            "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+        "node_modules/path-browserify": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+            "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
             "dev": true
         },
-        "known-css-properties": {
-            "version": "0.15.0",
-            "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.15.0.tgz",
-            "integrity": "sha512-TS0RCcQfHYsA+59uIHhnsA71NBkpILbqi0W+hde4R5FtESdzur0tCJFoko/1Pbhx+8rmdUc0R1VE4ixnnD+9xw==",
+        "node_modules/path-dirname": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+            "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
             "dev": true
         },
-        "last-run": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
-            "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=",
-            "dev": true,
-            "requires": {
-                "default-resolution": "^2.0.0",
-                "es6-weak-map": "^2.0.1"
+        "node_modules/path-exists": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+            "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+            "engines": {
+                "node": ">=4"
             }
         },
-        "latest-version": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
-            "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+        "node_modules/path-is-absolute": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-2.0.0.tgz",
+            "integrity": "sha512-ajROpjq1SLxJZsgSVCcVIt+ZebVH+PwJtPnVESjfg6JKwJGwAgHRC3zIcjvI0LnecjIHCJhtfNZ/Y/RregqyXg==",
+            "deprecated": "This package is no longer relevant as Node.js 0.12 is unmaintained.",
             "dev": true,
-            "requires": {
-                "package-json": "^4.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "lazy-cache": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
-            "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+        "node_modules/path-is-inside": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+            "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
             "dev": true
         },
-        "lazystream": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
-            "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
-            "dev": true,
-            "requires": {
-                "readable-stream": "^2.0.5"
+        "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==",
+            "engines": {
+                "node": ">=8"
             }
         },
-        "lcid": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
-            "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+        "node_modules/path-parse": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+            "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+        },
+        "node_modules/path-root": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+            "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==",
             "dev": true,
-            "requires": {
-                "invert-kv": "^1.0.0"
+            "dependencies": {
+                "path-root-regex": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "lead": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
-            "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
+        "node_modules/path-root-regex": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+            "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==",
             "dev": true,
-            "requires": {
-                "flush-write-stream": "^1.0.2"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "left-pad": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
-            "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
-            "dev": true
-        },
-        "less": {
-            "version": "3.10.3",
-            "resolved": "https://registry.npmjs.org/less/-/less-3.10.3.tgz",
-            "integrity": "sha512-vz32vqfgmoxF1h3K4J+yKCtajH0PWmjkIFgbs5d78E/c/e+UQTnI+lWK+1eQRE95PXM2mC3rJlLSSP9VQHnaow==",
+        "node_modules/path-scurry": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+            "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
             "dev": true,
-            "requires": {
-                "clone": "^2.1.2",
-                "errno": "^0.1.1",
-                "graceful-fs": "^4.1.2",
-                "image-size": "~0.5.0",
-                "mime": "^1.4.1",
-                "mkdirp": "^0.5.0",
-                "promise": "^7.1.1",
-                "request": "^2.83.0",
-                "source-map": "~0.6.0"
-            },
             "dependencies": {
-                "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,
-                    "optional": true
-                }
+                "lru-cache": "^10.2.0",
+                "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "leven": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
-            "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
-            "dev": true
-        },
-        "levn": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-            "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+        "node_modules/path-scurry/node_modules/lru-cache": {
+            "version": "10.2.2",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+            "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
             "dev": true,
-            "requires": {
-                "prelude-ls": "~1.1.2",
-                "type-check": "~0.3.2"
+            "engines": {
+                "node": "14 || >=16.14"
             }
         },
-        "liftoff": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
-            "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
+        "node_modules/path-scurry/node_modules/minipass": {
+            "version": "7.1.2",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+            "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
             "dev": true,
-            "requires": {
-                "extend": "^3.0.0",
-                "findup-sync": "^3.0.0",
-                "fined": "^1.0.1",
-                "flagged-respawn": "^1.0.0",
-                "is-plain-object": "^2.0.4",
-                "object.map": "^1.0.0",
-                "rechoir": "^0.6.2",
-                "resolve": "^1.1.7"
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
             }
         },
-        "limiter": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz",
-            "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==",
-            "dev": true
+        "node_modules/path-to-regexp": {
+            "version": "0.1.7",
+            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+            "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
         },
-        "lines-and-columns": {
-            "version": "1.1.6",
-            "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
-            "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
-            "dev": true
+        "node_modules/path-type": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+            "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "lint-staged": {
-            "version": "9.4.0",
-            "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.4.0.tgz",
-            "integrity": "sha512-jTu1KoGiGTSffM539wK+3igVqDGVsby3KwDBaXL471YndahkjnavLX+R5Nsk49JwklyMo0ZAXay1BaoyA6d2Jw==",
+        "node_modules/path.js": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/path.js/-/path.js-1.0.7.tgz",
+            "integrity": "sha512-DPX1vNSmckC3figW8xT/fEuF+XBg/96RUpXfW0yT6UGHgQI2mtTSADflz45bXKREbz+5GJa0qDQGNIpNr1skRQ==",
             "dev": true,
-            "requires": {
-                "chalk": "^2.4.2",
-                "commander": "^2.20.0",
-                "cosmiconfig": "^5.2.1",
-                "debug": "^4.1.1",
-                "dedent": "^0.7.0",
-                "del": "^5.0.0",
-                "execa": "^2.0.3",
-                "listr": "^0.14.3",
-                "log-symbols": "^3.0.0",
-                "micromatch": "^4.0.2",
-                "normalize-path": "^3.0.0",
-                "please-upgrade-node": "^3.1.1",
-                "string-argv": "^0.3.0",
-                "stringify-object": "^3.3.0"
-            },
             "dependencies": {
-                "braces": {
-                    "version": "3.0.2",
-                    "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-                    "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-                    "dev": true,
-                    "requires": {
-                        "fill-range": "^7.0.1"
-                    }
-                },
-                "cross-spawn": {
-                    "version": "6.0.5",
-                    "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-                    "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-                    "dev": true,
-                    "requires": {
-                        "nice-try": "^1.0.4",
-                        "path-key": "^2.0.1",
-                        "semver": "^5.5.0",
-                        "shebang-command": "^1.2.0",
-                        "which": "^1.2.9"
-                    }
-                },
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "execa": {
-                    "version": "2.0.4",
-                    "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.4.tgz",
-                    "integrity": "sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ==",
-                    "dev": true,
-                    "requires": {
-                        "cross-spawn": "^6.0.5",
-                        "get-stream": "^5.0.0",
-                        "is-stream": "^2.0.0",
-                        "merge-stream": "^2.0.0",
-                        "npm-run-path": "^3.0.0",
-                        "onetime": "^5.1.0",
-                        "p-finally": "^2.0.0",
-                        "signal-exit": "^3.0.2",
-                        "strip-final-newline": "^2.0.0"
-                    }
-                },
-                "fill-range": {
-                    "version": "7.0.1",
-                    "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-                    "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-                    "dev": true,
-                    "requires": {
-                        "to-regex-range": "^5.0.1"
-                    }
-                },
-                "get-stream": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
-                    "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
-                    "dev": true,
-                    "requires": {
-                        "pump": "^3.0.0"
-                    }
-                },
-                "is-number": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-                    "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-                    "dev": true
-                },
-                "is-stream": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
-                    "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
-                    "dev": true
-                },
-                "log-symbols": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
-                    "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2"
-                    }
-                },
-                "micromatch": {
-                    "version": "4.0.2",
-                    "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-                    "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-                    "dev": true,
-                    "requires": {
-                        "braces": "^3.0.1",
-                        "picomatch": "^2.0.5"
-                    }
-                },
-                "mimic-fn": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-                    "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-                    "dev": true
-                },
-                "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
-                },
-                "npm-run-path": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz",
-                    "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==",
-                    "dev": true,
-                    "requires": {
-                        "path-key": "^3.0.0"
-                    },
-                    "dependencies": {
-                        "path-key": {
-                            "version": "3.1.0",
-                            "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz",
-                            "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==",
-                            "dev": true
-                        }
-                    }
-                },
-                "onetime": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
-                    "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
-                    "dev": true,
-                    "requires": {
-                        "mimic-fn": "^2.1.0"
-                    }
-                },
-                "p-finally": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
-                    "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
-                    "dev": true
-                },
-                "path-key": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-                    "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-                    "dev": true
-                },
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                },
-                "to-regex-range": {
-                    "version": "5.0.1",
-                    "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-                    "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-                    "dev": true,
-                    "requires": {
-                        "is-number": "^7.0.0"
-                    }
-                }
+                "escape-string-regexp": "^1.0.3",
+                "inherits-ex": "^1.1.2",
+                "util-ex": "^0.3.10"
             }
         },
-        "listr": {
-            "version": "0.14.3",
-            "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz",
-            "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==",
+        "node_modules/pbkdf2": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+            "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
             "dev": true,
-            "requires": {
-                "@samverschueren/stream-to-observable": "^0.3.0",
-                "is-observable": "^1.1.0",
-                "is-promise": "^2.1.0",
-                "is-stream": "^1.1.0",
-                "listr-silent-renderer": "^1.1.1",
-                "listr-update-renderer": "^0.5.0",
-                "listr-verbose-renderer": "^0.5.0",
-                "p-map": "^2.0.0",
-                "rxjs": "^6.3.3"
-            },
             "dependencies": {
-                "p-map": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
-                    "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
-                    "dev": true
-                },
-                "rxjs": {
-                    "version": "6.5.3",
-                    "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
-                    "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
-                    "dev": true,
-                    "requires": {
-                        "tslib": "^1.9.0"
-                    }
-                }
+                "create-hash": "^1.1.2",
+                "create-hmac": "^1.1.4",
+                "ripemd160": "^2.0.1",
+                "safe-buffer": "^5.0.1",
+                "sha.js": "^2.4.8"
+            },
+            "engines": {
+                "node": ">=0.12"
             }
         },
-        "listr-silent-renderer": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
-            "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
-            "dev": true
+        "node_modules/picocolors": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
         },
-        "listr-update-renderer": {
-            "version": "0.5.0",
-            "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz",
-            "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==",
-            "dev": true,
-            "requires": {
-                "chalk": "^1.1.3",
-                "cli-truncate": "^0.2.1",
-                "elegant-spinner": "^1.0.1",
-                "figures": "^1.7.0",
-                "indent-string": "^3.0.0",
-                "log-symbols": "^1.0.2",
-                "log-update": "^2.3.0",
-                "strip-ansi": "^3.0.1"
+        "node_modules/picomatch": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+            "engines": {
+                "node": ">=8.6"
             },
-            "dependencies": {
-                "ansi-styles": {
-                    "version": "2.2.1",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-                    "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-                    "dev": true
-                },
-                "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.2",
-                        "has-ansi": "^2.0.0",
-                        "strip-ansi": "^3.0.0",
-                        "supports-color": "^2.0.0"
-                    }
-                },
-                "figures": {
-                    "version": "1.7.0",
-                    "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
-                    "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
-                    "dev": true,
-                    "requires": {
-                        "escape-string-regexp": "^1.0.5",
-                        "object-assign": "^4.1.0"
-                    }
-                },
-                "log-symbols": {
-                    "version": "1.0.2",
-                    "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
-                    "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^1.0.0"
-                    }
-                },
-                "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
-                }
-            }
-        },
-        "listr-verbose-renderer": {
-            "version": "0.5.0",
-            "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz",
-            "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==",
-            "dev": true,
-            "requires": {
-                "chalk": "^2.4.1",
-                "cli-cursor": "^2.1.0",
-                "date-fns": "^1.27.2",
-                "figures": "^2.0.0"
+            "funding": {
+                "url": "https://github.com/sponsors/jonschlinkert"
             }
         },
-        "load-json-file": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
-            "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
-            "requires": {
-                "graceful-fs": "^4.1.2",
-                "parse-json": "^4.0.0",
-                "pify": "^3.0.0",
-                "strip-bom": "^3.0.0"
+        "node_modules/pidtree": {
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
+            "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
+            "bin": {
+                "pidtree": "bin/pidtree.js"
             },
-            "dependencies": {
-                "pify": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-                    "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
-                }
+            "engines": {
+                "node": ">=0.10"
             }
         },
-        "loader-runner": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
-            "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
-            "dev": true
+        "node_modules/pify": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+            "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "loader-utils": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
-            "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
-            "dev": true,
-            "requires": {
-                "big.js": "^5.2.2",
-                "emojis-list": "^2.0.0",
-                "json5": "^1.0.1"
-            },
-            "dependencies": {
-                "json5": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-                    "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-                    "dev": true,
-                    "requires": {
-                        "minimist": "^1.2.0"
-                    }
-                },
-                "minimist": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-                    "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-                    "dev": true
-                }
+        "node_modules/pirates": {
+            "version": "4.0.6",
+            "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+            "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+            "engines": {
+                "node": ">= 6"
             }
         },
-        "localtunnel": {
-            "version": "1.9.2",
-            "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.2.tgz",
-            "integrity": "sha512-NEKF7bDJE9U3xzJu3kbayF0WTvng6Pww7tzqNb/XtEARYwqw7CKEX7BvOMg98FtE9es2CRizl61gkV3hS8dqYg==",
-            "dev": true,
-            "requires": {
-                "axios": "0.19.0",
-                "debug": "4.1.1",
-                "openurl": "1.1.1",
-                "yargs": "6.6.0"
-            },
+        "node_modules/pkg-dir": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+            "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
             "dependencies": {
-                "camelcase": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-                    "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-                    "dev": true
-                },
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                },
-                "find-up": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-                    "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-                    "dev": true,
-                    "requires": {
-                        "path-exists": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "load-json-file": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-                    "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "parse-json": "^2.2.0",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0",
-                        "strip-bom": "^2.0.0"
-                    }
-                },
-                "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
-                },
-                "parse-json": {
-                    "version": "2.2.0",
-                    "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-                    "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-                    "dev": true,
-                    "requires": {
-                        "error-ex": "^1.2.0"
-                    }
-                },
-                "path-exists": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-                    "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-                    "dev": true,
-                    "requires": {
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "path-type": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-                    "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "pify": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                    "dev": true
-                },
-                "read-pkg": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-                    "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-                    "dev": true,
-                    "requires": {
-                        "load-json-file": "^1.0.0",
-                        "normalize-package-data": "^2.3.2",
-                        "path-type": "^1.0.0"
-                    }
-                },
-                "read-pkg-up": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-                    "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-                    "dev": true,
-                    "requires": {
-                        "find-up": "^1.0.0",
-                        "read-pkg": "^1.0.0"
-                    }
-                },
-                "require-main-filename": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-                    "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
-                    "dev": true
-                },
-                "strip-bom": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-                    "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-                    "dev": true,
-                    "requires": {
-                        "is-utf8": "^0.2.0"
-                    }
-                },
-                "yargs": {
-                    "version": "6.6.0",
-                    "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
-                    "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^3.0.0",
-                        "cliui": "^3.2.0",
-                        "decamelize": "^1.1.1",
-                        "get-caller-file": "^1.0.1",
-                        "os-locale": "^1.4.0",
-                        "read-pkg-up": "^1.0.1",
-                        "require-directory": "^2.1.1",
-                        "require-main-filename": "^1.0.1",
-                        "set-blocking": "^2.0.0",
-                        "string-width": "^1.0.2",
-                        "which-module": "^1.0.0",
-                        "y18n": "^3.2.1",
-                        "yargs-parser": "^4.2.0"
-                    }
-                }
+                "find-up": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
             }
         },
-        "locate-path": {
+        "node_modules/pkg-dir/node_modules/find-up": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+            "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+            "dependencies": {
+                "locate-path": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/pkg-dir/node_modules/locate-path": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
             "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-            "requires": {
+            "dependencies": {
                 "p-locate": "^3.0.0",
                 "path-exists": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
             }
         },
-        "lodash": {
-            "version": "4.17.15",
-            "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-            "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
-        },
-        "lodash._basecopy": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
-            "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
-            "dev": true
-        },
-        "lodash._basetostring": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
-            "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
-            "dev": true
-        },
-        "lodash._basevalues": {
+        "node_modules/pkg-dir/node_modules/p-locate": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
-            "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
-            "dev": true
-        },
-        "lodash._getnative": {
-            "version": "3.9.1",
-            "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
-            "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U="
+            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+            "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+            "dependencies": {
+                "p-limit": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "lodash._isiterateecall": {
-            "version": "3.0.9",
-            "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
-            "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
-            "dev": true
+        "node_modules/pkg-up": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+            "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
+            "dev": true,
+            "dependencies": {
+                "find-up": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "lodash._reescape": {
+        "node_modules/pkg-up/node_modules/find-up": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
-            "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+            "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+            "dev": true,
+            "dependencies": {
+                "locate-path": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "lodash._reevaluate": {
+        "node_modules/pkg-up/node_modules/locate-path": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
-            "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+            "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+            "dev": true,
+            "dependencies": {
+                "p-locate": "^3.0.0",
+                "path-exists": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "lodash._reinterpolate": {
+        "node_modules/pkg-up/node_modules/p-locate": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
-            "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
-            "dev": true
-        },
-        "lodash._root": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
-            "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
-            "dev": true
-        },
-        "lodash.clone": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
-            "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
-            "dev": true
-        },
-        "lodash.clonedeep": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
-            "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
-            "dev": true
-        },
-        "lodash.curry": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz",
-            "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA="
+            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+            "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+            "dev": true,
+            "dependencies": {
+                "p-limit": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "lodash.debounce": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-3.1.1.tgz",
-            "integrity": "sha1-gSIRw3ipTMKdWqTjNGzwv846ffU=",
-            "requires": {
-                "lodash._getnative": "^3.0.0"
+        "node_modules/please-upgrade-node": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+            "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+            "dev": true,
+            "dependencies": {
+                "semver-compare": "^1.0.0"
             }
         },
-        "lodash.defaults": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
-            "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
-            "dev": true
+        "node_modules/plugin-error": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+            "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+            "dev": true,
+            "dependencies": {
+                "ansi-colors": "^1.0.1",
+                "arr-diff": "^4.0.0",
+                "arr-union": "^3.1.0",
+                "extend-shallow": "^3.0.2"
+            },
+            "engines": {
+                "node": ">= 0.10"
+            }
         },
-        "lodash.difference": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
-            "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=",
-            "dev": true
+        "node_modules/plugin-error/node_modules/ansi-colors": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+            "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+            "dev": true,
+            "dependencies": {
+                "ansi-wrap": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "lodash.escape": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
-            "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=",
-            "dev": true
+        "node_modules/plugin-error/node_modules/extend-shallow": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+            "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+            "dev": true,
+            "dependencies": {
+                "assign-symbols": "^1.0.0",
+                "is-extendable": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "lodash.fill": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/lodash.fill/-/lodash.fill-3.4.0.tgz",
-            "integrity": "sha1-o8dK5kDQU63w3CB5+HIHiOi/74U=",
-            "dev": true
+        "node_modules/plugin-error/node_modules/is-extendable": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+            "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+            "dev": true,
+            "dependencies": {
+                "is-plain-object": "^2.0.4"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "lodash.flatten": {
-            "version": "4.4.0",
-            "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
-            "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
-            "dev": true
+        "node_modules/po2json": {
+            "version": "0.4.5",
+            "resolved": "https://registry.npmjs.org/po2json/-/po2json-0.4.5.tgz",
+            "integrity": "sha512-JH0hgi1fC0t9UvdiyS7kcVly0N1WNey4R2YZ/jPaxQKYm6Cfej7ZTgiEy8LP2JwoEhONceiNS8JH5mWPQkiXeA==",
+            "dev": true,
+            "dependencies": {
+                "gettext-parser": "1.1.0",
+                "nomnom": "1.8.1"
+            },
+            "bin": {
+                "po2json": "bin/po2json"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
         },
-        "lodash.flattendeep": {
-            "version": "4.4.0",
-            "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
-            "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
+        "node_modules/pofile": {
+            "version": "1.0.11",
+            "resolved": "https://registry.npmjs.org/pofile/-/pofile-1.0.11.tgz",
+            "integrity": "sha512-Vy9eH1dRD9wHjYt/QqXcTz+RnX/zg53xK+KljFSX30PvdDMb2z+c6uDUeblUGqqJgz3QFsdlA0IJvHziPmWtQg==",
             "dev": true
         },
-        "lodash.flow": {
-            "version": "3.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz",
-            "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o="
-        },
-        "lodash.isarguments": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
-            "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
-            "dev": true
+        "node_modules/portscanner": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz",
+            "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==",
+            "dev": true,
+            "dependencies": {
+                "async": "^2.6.0",
+                "is-number-like": "^1.0.3"
+            },
+            "engines": {
+                "node": ">=0.4",
+                "npm": ">=1.0.0"
+            }
         },
-        "lodash.isarray": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
-            "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
-            "dev": true
+        "node_modules/posix-character-classes": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+            "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "lodash.isequal": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
-            "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
-            "dev": true
+        "node_modules/possible-typed-array-names": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+            "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+            "engines": {
+                "node": ">= 0.4"
+            }
         },
-        "lodash.isfinite": {
-            "version": "3.3.2",
-            "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
-            "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=",
-            "dev": true
+        "node_modules/postcss": {
+            "version": "8.4.38",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+            "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/postcss/"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/postcss"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "dependencies": {
+                "nanoid": "^3.3.7",
+                "picocolors": "^1.0.0",
+                "source-map-js": "^1.2.0"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14"
+            }
         },
-        "lodash.isplainobject": {
-            "version": "4.0.6",
-            "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
-            "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
-            "dev": true
+        "node_modules/postcss-html": {
+            "version": "0.36.0",
+            "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz",
+            "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==",
+            "dev": true,
+            "dependencies": {
+                "htmlparser2": "^3.10.0"
+            },
+            "peerDependencies": {
+                "postcss": ">=5.0.0",
+                "postcss-syntax": ">=0.36.0"
+            }
         },
-        "lodash.keys": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
-            "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+        "node_modules/postcss-less": {
+            "version": "3.1.4",
+            "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz",
+            "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==",
             "dev": true,
-            "requires": {
-                "lodash._getnative": "^3.0.0",
-                "lodash.isarguments": "^3.0.0",
-                "lodash.isarray": "^3.0.0"
+            "dependencies": {
+                "postcss": "^7.0.14"
+            },
+            "engines": {
+                "node": ">=6.14.4"
             }
         },
-        "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==",
+        "node_modules/postcss-less/node_modules/picocolors": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+            "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
             "dev": true
         },
-        "lodash.partialright": {
-            "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz",
-            "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=",
-            "dev": true
+        "node_modules/postcss-less/node_modules/postcss": {
+            "version": "7.0.39",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+            "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+            "dev": true,
+            "dependencies": {
+                "picocolors": "^0.2.1",
+                "source-map": "^0.6.1"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/postcss/"
+            }
         },
-        "lodash.pick": {
-            "version": "4.4.0",
-            "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
-            "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+        "node_modules/postcss-media-query-parser": {
+            "version": "0.2.3",
+            "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+            "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
             "dev": true
         },
-        "lodash.restparam": {
-            "version": "3.6.1",
-            "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
-            "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+        "node_modules/postcss-resolve-nested-selector": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
+            "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
             "dev": true
         },
-        "lodash.round": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/lodash.round/-/lodash.round-4.0.4.tgz",
-            "integrity": "sha1-EBtrpcbOzJmPKrvoC2Apr/0l0mI=",
-            "dev": true
+        "node_modules/postcss-safe-parser": {
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz",
+            "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==",
+            "dev": true,
+            "dependencies": {
+                "postcss": "^7.0.26"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            }
         },
-        "lodash.sortby": {
-            "version": "4.7.0",
-            "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
-            "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+        "node_modules/postcss-safe-parser/node_modules/picocolors": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+            "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
             "dev": true
         },
-        "lodash.template": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
-            "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+        "node_modules/postcss-safe-parser/node_modules/postcss": {
+            "version": "7.0.39",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+            "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
             "dev": true,
-            "requires": {
-                "lodash._reinterpolate": "^3.0.0",
-                "lodash.templatesettings": "^4.0.0"
-            },
             "dependencies": {
-                "lodash.templatesettings": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
-                    "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
-                    "dev": true,
-                    "requires": {
-                        "lodash._reinterpolate": "^3.0.0"
-                    }
-                }
+                "picocolors": "^0.2.1",
+                "source-map": "^0.6.1"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/postcss/"
             }
         },
-        "lodash.templatesettings": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
-            "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+        "node_modules/postcss-sass": {
+            "version": "0.4.4",
+            "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz",
+            "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==",
             "dev": true,
-            "requires": {
-                "lodash._reinterpolate": "^3.0.0",
-                "lodash.escape": "^3.0.0"
-            },
             "dependencies": {
-                "lodash.escape": {
-                    "version": "3.2.0",
-                    "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
-                    "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
-                    "dev": true,
-                    "requires": {
-                        "lodash._root": "^3.0.0"
-                    }
-                }
+                "gonzales-pe": "^4.3.0",
+                "postcss": "^7.0.21"
             }
         },
-        "lodash.union": {
-            "version": "4.6.0",
-            "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
-            "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=",
-            "dev": true
-        },
-        "lodash.uniq": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-            "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
-            "dev": true
-        },
-        "lodash.zipobject": {
-            "version": "4.1.3",
-            "resolved": "https://registry.npmjs.org/lodash.zipobject/-/lodash.zipobject-4.1.3.tgz",
-            "integrity": "sha1-s5n1q6j/YqdG9peb8gshT5ZNvvg=",
+        "node_modules/postcss-sass/node_modules/picocolors": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+            "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
             "dev": true
         },
-        "log-symbols": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
-            "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+        "node_modules/postcss-sass/node_modules/postcss": {
+            "version": "7.0.39",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+            "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
             "dev": true,
-            "requires": {
-                "chalk": "^2.0.1"
+            "dependencies": {
+                "picocolors": "^0.2.1",
+                "source-map": "^0.6.1"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/postcss/"
             }
         },
-        "log-update": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
-            "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=",
+        "node_modules/postcss-scss": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz",
+            "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==",
             "dev": true,
-            "requires": {
-                "ansi-escapes": "^3.0.0",
-                "cli-cursor": "^2.0.0",
-                "wrap-ansi": "^3.0.1"
-            },
             "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
-                },
-                "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=",
-                    "dev": true
-                },
-                "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=",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^3.0.0"
-                    }
-                },
-                "wrap-ansi": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
-                    "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=",
-                    "dev": true,
-                    "requires": {
-                        "string-width": "^2.1.1",
-                        "strip-ansi": "^4.0.0"
-                    }
-                }
+                "postcss": "^7.0.6"
+            },
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
-        "longest": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
-            "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
-            "dev": true
-        },
-        "longest-streak": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz",
-            "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==",
+        "node_modules/postcss-scss/node_modules/picocolors": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+            "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
             "dev": true
         },
-        "loose-envify": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-            "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-            "requires": {
-                "js-tokens": "^3.0.0 || ^4.0.0"
-            }
-        },
-        "loud-rejection": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
-            "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+        "node_modules/postcss-scss/node_modules/postcss": {
+            "version": "7.0.39",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+            "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
             "dev": true,
-            "requires": {
-                "currently-unhandled": "^0.4.1",
-                "signal-exit": "^3.0.0"
+            "dependencies": {
+                "picocolors": "^0.2.1",
+                "source-map": "^0.6.1"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/postcss/"
             }
         },
-        "lowercase-keys": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
-            "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
-            "dev": true
-        },
-        "lowlight": {
-            "version": "1.11.0",
-            "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.11.0.tgz",
-            "integrity": "sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A==",
-            "requires": {
-                "fault": "^1.0.2",
-                "highlight.js": "~9.13.0"
+        "node_modules/postcss-selector-parser": {
+            "version": "6.0.16",
+            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
+            "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
+            "dev": true,
+            "dependencies": {
+                "cssesc": "^3.0.0",
+                "util-deprecate": "^1.0.2"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "lru-cache": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-            "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+        "node_modules/postcss-syntax": {
+            "version": "0.36.2",
+            "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz",
+            "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==",
             "dev": true,
-            "requires": {
-                "yallist": "^3.0.2"
+            "peerDependencies": {
+                "postcss": ">=5.0.0"
             }
         },
-        "lru-queue": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
-            "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
+        "node_modules/postcss-value-parser": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+            "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+            "dev": true
+        },
+        "node_modules/prelude-ls": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+            "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
             "dev": true,
-            "requires": {
-                "es5-ext": "~0.10.2"
+            "engines": {
+                "node": ">= 0.8.0"
             }
         },
-        "make-dir": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
-            "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
-            "requires": {
-                "pify": "^4.0.1",
-                "semver": "^5.6.0"
+        "node_modules/prettier": {
+            "version": "1.19.1",
+            "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+            "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+            "bin": {
+                "prettier": "bin-prettier.js"
             },
-            "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
-                }
+            "engines": {
+                "node": ">=4"
             }
         },
-        "make-iterator": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
-            "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+        "node_modules/process": {
+            "version": "0.11.10",
+            "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+            "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
             "dev": true,
-            "requires": {
-                "kind-of": "^6.0.2"
+            "engines": {
+                "node": ">= 0.6.0"
             }
         },
-        "makeerror": {
-            "version": "1.0.11",
-            "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
-            "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+        "node_modules/process-nextick-args": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+            "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+        },
+        "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,
-            "requires": {
-                "tmpl": "1.0.x"
+            "engines": {
+                "node": ">=0.4.0"
             }
         },
-        "mamacro": {
-            "version": "0.0.3",
-            "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
-            "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==",
-            "dev": true
-        },
-        "map-cache": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-            "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
-        },
-        "map-obj": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-            "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
-            "dev": true
+        "node_modules/prop-types": {
+            "version": "15.8.1",
+            "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+            "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+            "dependencies": {
+                "loose-envify": "^1.4.0",
+                "object-assign": "^4.1.1",
+                "react-is": "^16.13.1"
+            }
         },
-        "map-visit": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-            "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
-            "requires": {
-                "object-visit": "^1.0.0"
+        "node_modules/proxy-addr": {
+            "version": "2.0.7",
+            "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+            "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+            "dependencies": {
+                "forwarded": "0.2.0",
+                "ipaddr.js": "1.9.1"
+            },
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "markdown-escapes": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz",
-            "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==",
-            "dev": true
+        "node_modules/proxy-from-env": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+            "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
         },
-        "markdown-table": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz",
-            "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==",
+        "node_modules/pstree.remy": {
+            "version": "1.1.8",
+            "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
+            "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
             "dev": true
         },
-        "marked": {
-            "version": "0.7.0",
-            "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
-            "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg=="
-        },
-        "matchdep": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
-            "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
-            "dev": true,
-            "requires": {
-                "findup-sync": "^2.0.0",
-                "micromatch": "^3.0.4",
-                "resolve": "^1.4.0",
-                "stack-trace": "0.0.10"
-            },
-            "dependencies": {
-                "findup-sync": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
-                    "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
-                    "dev": true,
-                    "requires": {
-                        "detect-file": "^1.0.0",
-                        "is-glob": "^3.1.0",
-                        "micromatch": "^3.0.4",
-                        "resolve-dir": "^1.0.1"
-                    }
-                },
-                "is-glob": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-                    "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-                    "dev": true,
-                    "requires": {
-                        "is-extglob": "^2.1.0"
-                    }
-                }
+        "node_modules/public-encrypt": {
+            "version": "4.0.3",
+            "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+            "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+            "dev": true,
+            "dependencies": {
+                "bn.js": "^4.1.0",
+                "browserify-rsa": "^4.0.0",
+                "create-hash": "^1.1.0",
+                "parse-asn1": "^5.0.0",
+                "randombytes": "^2.0.1",
+                "safe-buffer": "^5.1.2"
             }
         },
-        "mathml-tag-names": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz",
-            "integrity": "sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==",
+        "node_modules/public-encrypt/node_modules/bn.js": {
+            "version": "4.12.0",
+            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+            "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
             "dev": true
         },
-        "md5.js": {
-            "version": "1.3.5",
-            "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
-            "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+        "node_modules/pump": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+            "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
             "dev": true,
-            "requires": {
-                "hash-base": "^3.0.0",
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.1.2"
+            "dependencies": {
+                "end-of-stream": "^1.1.0",
+                "once": "^1.3.1"
             }
         },
-        "mdast-util-compact": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz",
-            "integrity": "sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w==",
+        "node_modules/punycode": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+            "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
             "dev": true,
-            "requires": {
-                "unist-util-visit": "^1.1.0"
+            "engines": {
+                "node": ">=6"
             }
         },
-        "media-typer": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-            "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
-        },
-        "memoizee": {
-            "version": "0.4.14",
-            "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz",
-            "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==",
-            "dev": true,
-            "requires": {
-                "d": "1",
-                "es5-ext": "^0.10.45",
-                "es6-weak-map": "^2.0.2",
-                "event-emitter": "^0.3.5",
-                "is-promise": "^2.1",
-                "lru-queue": "0.1",
-                "next-tick": "1",
-                "timers-ext": "^0.1.5"
+        "node_modules/qs": {
+            "version": "6.11.0",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+            "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+            "dependencies": {
+                "side-channel": "^1.0.4"
+            },
+            "engines": {
+                "node": ">=0.6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "memory-fs": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
-            "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+        "node_modules/querystring-browser": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/querystring-browser/-/querystring-browser-1.0.4.tgz",
+            "integrity": "sha512-oqPm3iZO4r4lEFM2YAJyMwCqAMIL0r3jO36ZohmHLUs9NpAfEGee7G5+PllGec/TkAnfI85FMmkPaW8UbZI0Uw=="
+        },
+        "node_modules/querystring-es3": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+            "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
             "dev": true,
-            "requires": {
-                "errno": "^0.1.3",
-                "readable-stream": "^2.0.1"
+            "engines": {
+                "node": ">=0.4.x"
             }
         },
-        "memorystream": {
-            "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
-            "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI="
-        },
-        "meow": {
-            "version": "3.7.0",
-            "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
-            "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
-            "dev": true,
-            "requires": {
-                "camelcase-keys": "^2.0.0",
-                "decamelize": "^1.1.2",
-                "loud-rejection": "^1.0.0",
-                "map-obj": "^1.0.1",
-                "minimist": "^1.1.3",
-                "normalize-package-data": "^2.3.4",
-                "object-assign": "^4.0.1",
-                "read-pkg-up": "^1.0.1",
-                "redent": "^1.0.0",
-                "trim-newlines": "^1.0.0"
-            },
-            "dependencies": {
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                },
-                "find-up": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-                    "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-                    "dev": true,
-                    "requires": {
-                        "path-exists": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "load-json-file": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-                    "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "parse-json": "^2.2.0",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0",
-                        "strip-bom": "^2.0.0"
-                    }
-                },
-                "minimist": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-                    "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-                    "dev": true
-                },
-                "parse-json": {
-                    "version": "2.2.0",
-                    "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-                    "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-                    "dev": true,
-                    "requires": {
-                        "error-ex": "^1.2.0"
-                    }
-                },
-                "path-exists": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-                    "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-                    "dev": true,
-                    "requires": {
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "path-type": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-                    "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "pify": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                    "dev": true
-                },
-                "read-pkg": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-                    "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-                    "dev": true,
-                    "requires": {
-                        "load-json-file": "^1.0.0",
-                        "normalize-package-data": "^2.3.2",
-                        "path-type": "^1.0.0"
-                    }
-                },
-                "read-pkg-up": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-                    "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-                    "dev": true,
-                    "requires": {
-                        "find-up": "^1.0.0",
-                        "read-pkg": "^1.0.0"
-                    }
-                },
-                "strip-bom": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-                    "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-                    "dev": true,
-                    "requires": {
-                        "is-utf8": "^0.2.0"
-                    }
+        "node_modules/queue-microtask": {
+            "version": "1.2.3",
+            "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+            "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/feross"
+                },
+                {
+                    "type": "patreon",
+                    "url": "https://www.patreon.com/feross"
+                },
+                {
+                    "type": "consulting",
+                    "url": "https://feross.org/support"
                 }
-            }
+            ]
         },
-        "merge-descriptors": {
+        "node_modules/queue-tick": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-            "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
-        },
-        "merge-stream": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-            "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+            "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
+            "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
             "dev": true
         },
-        "merge2": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
-            "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw=="
-        },
-        "methods": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-            "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+        "node_modules/quick-lru": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+            "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "micromatch": {
-            "version": "3.1.10",
-            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-            "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-            "requires": {
-                "arr-diff": "^4.0.0",
-                "array-unique": "^0.3.2",
-                "braces": "^2.3.1",
-                "define-property": "^2.0.2",
-                "extend-shallow": "^3.0.2",
-                "extglob": "^2.0.4",
-                "fragment-cache": "^0.2.1",
-                "kind-of": "^6.0.2",
-                "nanomatch": "^1.2.9",
-                "object.pick": "^1.3.0",
-                "regex-not": "^1.0.0",
-                "snapdragon": "^0.8.1",
-                "to-regex": "^3.0.2"
+        "node_modules/randombytes": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+            "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+            "dependencies": {
+                "safe-buffer": "^5.1.0"
             }
         },
-        "miller-rabin": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
-            "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+        "node_modules/randomfill": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+            "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
             "dev": true,
-            "requires": {
-                "bn.js": "^4.0.0",
-                "brorand": "^1.0.1"
+            "dependencies": {
+                "randombytes": "^2.0.5",
+                "safe-buffer": "^5.1.0"
             }
         },
-        "mime": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
-        },
-        "mime-db": {
-            "version": "1.40.0",
-            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
-            "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
+        "node_modules/range-parser": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+            "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+            "engines": {
+                "node": ">= 0.6"
+            }
         },
-        "mime-types": {
-            "version": "2.1.24",
-            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
-            "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
-            "requires": {
-                "mime-db": "1.40.0"
+        "node_modules/raw-body": {
+            "version": "2.5.2",
+            "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+            "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+            "dependencies": {
+                "bytes": "3.1.2",
+                "http-errors": "2.0.0",
+                "iconv-lite": "0.4.24",
+                "unpipe": "1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.8"
             }
         },
-        "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
+        "node_modules/raw-body/node_modules/iconv-lite": {
+            "version": "0.4.24",
+            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+            "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+            "dependencies": {
+                "safer-buffer": ">= 2.1.2 < 3"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "mini-create-react-context": {
-            "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz",
-            "integrity": "sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==",
-            "requires": {
-                "@babel/runtime": "^7.4.0",
-                "gud": "^1.0.0",
-                "tiny-warning": "^1.0.2"
+        "node_modules/react": {
+            "version": "18.3.1",
+            "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+            "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+            "dependencies": {
+                "loose-envify": "^1.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "minimalistic-assert": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-            "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
-            "dev": true
+        "node_modules/react-dom": {
+            "version": "18.3.1",
+            "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+            "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+            "dependencies": {
+                "loose-envify": "^1.1.0",
+                "scheduler": "^0.23.2"
+            },
+            "peerDependencies": {
+                "react": "^18.3.1"
+            }
         },
-        "minimalistic-crypto-utils": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
-            "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
-            "dev": true
+        "node_modules/react-fast-compare": {
+            "version": "3.2.2",
+            "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
+            "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
         },
-        "minimatch": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-            "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-            "requires": {
-                "brace-expansion": "^1.1.7"
+        "node_modules/react-helmet": {
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz",
+            "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==",
+            "dependencies": {
+                "object-assign": "^4.1.1",
+                "prop-types": "^15.7.2",
+                "react-fast-compare": "^3.1.1",
+                "react-side-effect": "^2.1.0"
+            },
+            "peerDependencies": {
+                "react": ">=16.3.0"
             }
         },
-        "minimist": {
-            "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-            "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+        "node_modules/react-is": {
+            "version": "16.13.1",
+            "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+            "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
         },
-        "minimist-options": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
-            "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
-            "dev": true,
-            "requires": {
-                "arrify": "^1.0.1",
-                "is-plain-obj": "^1.1.0"
+        "node_modules/react-native-crypto-js": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/react-native-crypto-js/-/react-native-crypto-js-1.0.0.tgz",
+            "integrity": "sha512-FNbLuG/HAdapQoybeZSoes1PWdOj0w242gb+e1R0hicf3Gyj/Mf8M9NaED2AnXVOX01b2FXomwUiw1xP1K+8sA=="
+        },
+        "node_modules/react-router": {
+            "version": "5.3.4",
+            "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
+            "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==",
+            "dependencies": {
+                "@babel/runtime": "^7.12.13",
+                "history": "^4.9.0",
+                "hoist-non-react-statics": "^3.1.0",
+                "loose-envify": "^1.3.1",
+                "path-to-regexp": "^1.7.0",
+                "prop-types": "^15.6.2",
+                "react-is": "^16.6.0",
+                "tiny-invariant": "^1.0.2",
+                "tiny-warning": "^1.0.0"
+            },
+            "peerDependencies": {
+                "react": ">=15"
             }
         },
-        "mississippi": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
-            "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
-            "dev": true,
-            "requires": {
-                "concat-stream": "^1.5.0",
-                "duplexify": "^3.4.2",
-                "end-of-stream": "^1.1.0",
-                "flush-write-stream": "^1.0.0",
-                "from2": "^2.1.0",
-                "parallel-transform": "^1.1.0",
-                "pump": "^3.0.0",
-                "pumpify": "^1.3.3",
-                "stream-each": "^1.1.0",
-                "through2": "^2.0.0"
+        "node_modules/react-router-dom": {
+            "version": "5.3.4",
+            "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz",
+            "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==",
+            "dependencies": {
+                "@babel/runtime": "^7.12.13",
+                "history": "^4.9.0",
+                "loose-envify": "^1.3.1",
+                "prop-types": "^15.6.2",
+                "react-router": "5.3.4",
+                "tiny-invariant": "^1.0.2",
+                "tiny-warning": "^1.0.0"
+            },
+            "peerDependencies": {
+                "react": ">=15"
             }
         },
-        "mitt": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz",
-            "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==",
-            "dev": true
+        "node_modules/react-router/node_modules/isarray": {
+            "version": "0.0.1",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+            "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
         },
-        "mixin-deep": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
-            "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
-            "requires": {
-                "for-in": "^1.0.2",
-                "is-extendable": "^1.0.1"
+        "node_modules/react-router/node_modules/path-to-regexp": {
+            "version": "1.8.0",
+            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+            "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+            "dependencies": {
+                "isarray": "0.0.1"
+            }
+        },
+        "node_modules/react-side-effect": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz",
+            "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==",
+            "peerDependencies": {
+                "react": "^16.3.0 || ^17.0.0 || ^18.0.0"
+            }
+        },
+        "node_modules/read-pkg": {
+            "version": "5.2.0",
+            "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+            "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+            "dev": true,
+            "dependencies": {
+                "@types/normalize-package-data": "^2.4.0",
+                "normalize-package-data": "^2.5.0",
+                "parse-json": "^5.0.0",
+                "type-fest": "^0.6.0"
             },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/read-pkg-up": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+            "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+            "dev": true,
             "dependencies": {
-                "is-extendable": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-                    "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-                    "requires": {
-                        "is-plain-object": "^2.0.4"
-                    }
-                }
+                "find-up": "^4.1.0",
+                "read-pkg": "^5.2.0",
+                "type-fest": "^0.8.1"
+            },
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "mkdirp": {
-            "version": "0.5.1",
-            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-            "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
-            "requires": {
-                "minimist": "0.0.8"
+        "node_modules/read-pkg-up/node_modules/type-fest": {
+            "version": "0.8.1",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+            "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
             }
         },
-        "module-alias": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.1.tgz",
-            "integrity": "sha512-LTez0Eo+YtfUhgzhu/LqxkUzOpD+k5C0wXBLun0L1qE2BhHf6l09dqam8e7BnoMYA6mAlP0vSsGFQ8QHhGN/aQ==",
-            "dev": true
+        "node_modules/read-pkg/node_modules/type-fest": {
+            "version": "0.6.0",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+            "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "moment": {
-            "version": "2.24.0",
-            "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
-            "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+        "node_modules/readable-stream": {
+            "version": "3.6.2",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+            "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+            "dependencies": {
+                "inherits": "^2.0.3",
+                "string_decoder": "^1.1.1",
+                "util-deprecate": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 6"
+            }
         },
-        "moo": {
-            "version": "0.4.3",
-            "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz",
-            "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==",
+        "node_modules/readdir-recursive": {
+            "version": "0.0.4",
+            "resolved": "https://registry.npmjs.org/readdir-recursive/-/readdir-recursive-0.0.4.tgz",
+            "integrity": "sha512-ssr08dEAwee07WjMz6OmTqlYYhQScrOwfA2DZglCe2WoVTXXz0AMqy5D27llh8dU7ISEzjgdtHoCHBp2ZnxklQ==",
             "dev": true
         },
-        "morgan": {
-            "version": "1.9.1",
-            "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
-            "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
-            "requires": {
-                "basic-auth": "~2.0.0",
-                "debug": "2.6.9",
-                "depd": "~1.1.2",
-                "on-finished": "~2.3.0",
-                "on-headers": "~1.0.1"
+        "node_modules/readdirp": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+            "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+            "dev": true,
+            "dependencies": {
+                "graceful-fs": "^4.1.11",
+                "micromatch": "^3.1.10",
+                "readable-stream": "^2.0.2"
+            },
+            "engines": {
+                "node": ">=0.10"
             }
         },
-        "move-concurrently": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
-            "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+        "node_modules/readdirp/node_modules/define-property": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+            "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
             "dev": true,
-            "requires": {
-                "aproba": "^1.1.1",
-                "copy-concurrently": "^1.0.0",
-                "fs-write-stream-atomic": "^1.0.8",
-                "mkdirp": "^0.5.1",
-                "rimraf": "^2.5.4",
-                "run-queue": "^1.0.3"
+            "dependencies": {
+                "is-descriptor": "^1.0.2",
+                "isobject": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "ms": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-            "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        "node_modules/readdirp/node_modules/extend-shallow": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+            "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+            "dev": true,
+            "dependencies": {
+                "assign-symbols": "^1.0.0",
+                "is-extendable": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "multipipe": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
-            "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+        "node_modules/readdirp/node_modules/is-descriptor": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+            "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
             "dev": true,
-            "requires": {
-                "duplexer2": "0.0.2"
+            "dependencies": {
+                "is-accessor-descriptor": "^1.0.1",
+                "is-data-descriptor": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "mute-stdout": {
+        "node_modules/readdirp/node_modules/is-extendable": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
-            "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+            "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+            "dev": true,
+            "dependencies": {
+                "is-plain-object": "^2.0.4"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "mute-stream": {
-            "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
-            "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+        "node_modules/readdirp/node_modules/isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
             "dev": true
         },
-        "nan": {
-            "version": "2.14.0",
-            "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
-            "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
-        },
-        "nanomatch": {
-            "version": "1.2.13",
-            "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
-            "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
-            "requires": {
+        "node_modules/readdirp/node_modules/micromatch": {
+            "version": "3.1.10",
+            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+            "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+            "dev": true,
+            "dependencies": {
                 "arr-diff": "^4.0.0",
                 "array-unique": "^0.3.2",
+                "braces": "^2.3.1",
                 "define-property": "^2.0.2",
                 "extend-shallow": "^3.0.2",
+                "extglob": "^2.0.4",
                 "fragment-cache": "^0.2.1",
-                "is-windows": "^1.0.2",
                 "kind-of": "^6.0.2",
+                "nanomatch": "^1.2.9",
                 "object.pick": "^1.3.0",
                 "regex-not": "^1.0.0",
                 "snapdragon": "^0.8.1",
-                "to-regex": "^3.0.1"
-            }
-        },
-        "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
-        },
-        "ncp": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz",
-            "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=",
-            "dev": true
-        },
-        "nearley": {
-            "version": "2.19.0",
-            "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.0.tgz",
-            "integrity": "sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA==",
-            "dev": true,
-            "requires": {
-                "commander": "^2.19.0",
-                "moo": "^0.4.3",
-                "railroad-diagrams": "^1.0.0",
-                "randexp": "0.4.6",
-                "semver": "^5.4.1"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
-            }
-        },
-        "negotiator": {
-            "version": "0.6.2",
-            "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
-            "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
-        },
-        "neo-async": {
-            "version": "2.6.1",
-            "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
-            "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
-            "dev": true
-        },
-        "next-tick": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
-            "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
-            "dev": true
-        },
-        "nice-try": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-            "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
-        },
-        "node-environment-flags": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
-            "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
-            "requires": {
-                "object.getownpropertydescriptors": "^2.0.3",
-                "semver": "^5.7.0"
+                "to-regex": "^3.0.2"
             },
-            "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
-                }
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "node-gyp": {
-            "version": "3.8.0",
-            "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
-            "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
+        "node_modules/readdirp/node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
             "dev": true,
-            "requires": {
-                "fstream": "^1.0.0",
-                "glob": "^7.0.3",
-                "graceful-fs": "^4.1.2",
-                "mkdirp": "^0.5.0",
-                "nopt": "2 || 3",
-                "npmlog": "0 || 1 || 2 || 3 || 4",
-                "osenv": "0",
-                "request": "^2.87.0",
-                "rimraf": "2",
-                "semver": "~5.3.0",
-                "tar": "^2.0.0",
-                "which": "1"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "5.3.0",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
-                    "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
-                    "dev": true
-                }
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
             }
         },
-        "node-int64": {
-            "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-            "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+        "node_modules/readdirp/node_modules/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
         },
-        "node-libs-browser": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
-            "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
-            "dev": true,
-            "requires": {
-                "assert": "^1.1.1",
-                "browserify-zlib": "^0.2.0",
-                "buffer": "^4.3.0",
-                "console-browserify": "^1.1.0",
-                "constants-browserify": "^1.0.0",
-                "crypto-browserify": "^3.11.0",
-                "domain-browser": "^1.1.1",
-                "events": "^3.0.0",
-                "https-browserify": "^1.0.0",
-                "os-browserify": "^0.3.0",
-                "path-browserify": "0.0.1",
-                "process": "^0.11.10",
-                "punycode": "^1.2.4",
-                "querystring-es3": "^0.2.0",
-                "readable-stream": "^2.3.3",
-                "stream-browserify": "^2.0.1",
-                "stream-http": "^2.7.2",
-                "string_decoder": "^1.0.0",
-                "timers-browserify": "^2.0.4",
-                "tty-browserify": "0.0.0",
-                "url": "^0.11.0",
-                "util": "^0.11.0",
-                "vm-browserify": "^1.0.1"
-            },
-            "dependencies": {
-                "buffer": {
-                    "version": "4.9.1",
-                    "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
-                    "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
-                    "dev": true,
-                    "requires": {
-                        "base64-js": "^1.0.2",
-                        "ieee754": "^1.1.4",
-                        "isarray": "^1.0.0"
-                    }
-                },
-                "punycode": {
-                    "version": "1.4.1",
-                    "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-                    "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-                    "dev": true
-                }
-            }
-        },
-        "node-modules-regexp": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
-            "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA="
-        },
-        "node-notifier": {
-            "version": "5.4.3",
-            "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz",
-            "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==",
+        "node_modules/readdirp/node_modules/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": {
-                "growly": "^1.3.0",
-                "is-wsl": "^1.1.0",
-                "semver": "^5.5.0",
-                "shellwords": "^0.1.1",
-                "which": "^1.3.0"
-            },
             "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
+                "safe-buffer": "~5.1.0"
             }
         },
-        "node-releases": {
-            "version": "1.1.32",
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.32.tgz",
-            "integrity": "sha512-VhVknkitq8dqtWoluagsGPn3dxTvN9fwgR59fV3D7sLBHe0JfDramsMI8n8mY//ccq/Kkrf8ZRHRpsyVZ3qw1A==",
+        "node_modules/rechoir": {
+            "version": "0.8.0",
+            "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
+            "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
             "dev": true,
-            "requires": {
-                "semver": "^5.3.0"
-            },
             "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
-            }
-        },
-        "node-sass": {
-            "version": "4.12.0",
-            "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz",
-            "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==",
-            "dev": true,
-            "requires": {
-                "async-foreach": "^0.1.3",
-                "chalk": "^1.1.1",
-                "cross-spawn": "^3.0.0",
-                "gaze": "^1.0.0",
-                "get-stdin": "^4.0.1",
-                "glob": "^7.0.3",
-                "in-publish": "^2.0.0",
-                "lodash": "^4.17.11",
-                "meow": "^3.7.0",
-                "mkdirp": "^0.5.1",
-                "nan": "^2.13.2",
-                "node-gyp": "^3.8.0",
-                "npmlog": "^4.0.0",
-                "request": "^2.88.0",
-                "sass-graph": "^2.2.4",
-                "stdout-stream": "^1.4.0",
-                "true-case-path": "^1.0.2"
-            },
-            "dependencies": {
-                "ansi-styles": {
-                    "version": "2.2.1",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-                    "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-                    "dev": true
-                },
-                "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.2",
-                        "has-ansi": "^2.0.0",
-                        "strip-ansi": "^3.0.0",
-                        "supports-color": "^2.0.0"
-                    }
-                },
-                "cross-spawn": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
-                    "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
-                    "dev": true,
-                    "requires": {
-                        "lru-cache": "^4.0.1",
-                        "which": "^1.2.9"
-                    }
-                },
-                "lru-cache": {
-                    "version": "4.1.5",
-                    "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-                    "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-                    "dev": true,
-                    "requires": {
-                        "pseudomap": "^1.0.2",
-                        "yallist": "^2.1.2"
-                    }
-                },
-                "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
-                },
-                "yallist": {
-                    "version": "2.1.2",
-                    "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-                    "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
-                    "dev": true
-                }
+                "resolve": "^1.20.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "node-sass-functions-json": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/node-sass-functions-json/-/node-sass-functions-json-1.0.0.tgz",
-            "integrity": "sha1-AxL/uqbU8VybBdTI/w12m4VjXT4=",
+        "node_modules/redent": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+            "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
             "dev": true,
-            "requires": {
-                "lodash.round": "^4.0.4",
-                "parse-color": "^1.0.0",
-                "parse-css-dimension": "^1.1.0",
-                "rgb-hex": "^2.1.0",
-                "shorten-css-hex": "^1.1.0"
+            "dependencies": {
+                "indent-string": "^4.0.0",
+                "strip-indent": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "node-sass-tilde-importer": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz",
-            "integrity": "sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg==",
+        "node_modules/redent/node_modules/indent-string": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+            "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
             "dev": true,
-            "requires": {
-                "find-parent-dir": "^0.3.0"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "nodemon": {
-            "version": "1.19.2",
-            "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.2.tgz",
-            "integrity": "sha512-hRLYaw5Ihyw9zK7NF+9EUzVyS6Cvgc14yh8CAYr38tPxJa6UrOxwAQ351GwrgoanHCF0FalQFn6w5eoX/LGdJw==",
+        "node_modules/reflect.getprototypeof": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
+            "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
             "dev": true,
-            "requires": {
-                "chokidar": "^2.1.5",
-                "debug": "^3.1.0",
-                "ignore-by-default": "^1.0.1",
-                "minimatch": "^3.0.4",
-                "pstree.remy": "^1.1.6",
-                "semver": "^5.5.0",
-                "supports-color": "^5.2.0",
-                "touch": "^3.1.0",
-                "undefsafe": "^2.0.2",
-                "update-notifier": "^2.5.0"
-            },
             "dependencies": {
-                "debug": {
-                    "version": "3.2.6",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-                    "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "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
-                },
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.1",
+                "es-errors": "^1.3.0",
+                "get-intrinsic": "^1.2.4",
+                "globalthis": "^1.0.3",
+                "which-builtin-type": "^1.1.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "nopt": {
-            "version": "3.0.6",
-            "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-            "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
-            "dev": true,
-            "requires": {
-                "abbrev": "1"
-            }
+        "node_modules/regenerate": {
+            "version": "1.4.2",
+            "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+            "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
         },
-        "normalize-package-data": {
-            "version": "2.5.0",
-            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-            "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
-            "requires": {
-                "hosted-git-info": "^2.1.4",
-                "resolve": "^1.10.0",
-                "semver": "2 || 3 || 4 || 5",
-                "validate-npm-package-license": "^3.0.1"
-            },
+        "node_modules/regenerate-unicode-properties": {
+            "version": "10.1.1",
+            "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
+            "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
             "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
-                }
+                "regenerate": "^1.4.2"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "normalize-path": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
-        },
-        "normalize-range": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-            "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
-            "dev": true
-        },
-        "normalize-selector": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
-            "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
-            "dev": true
-        },
-        "now-and-later": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
-            "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
-            "dev": true,
-            "requires": {
-                "once": "^1.3.2"
-            }
+        "node_modules/regenerator-runtime": {
+            "version": "0.14.1",
+            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+            "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
         },
-        "npm-run-all": {
-            "version": "4.1.5",
-            "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
-            "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
-            "requires": {
-                "ansi-styles": "^3.2.1",
-                "chalk": "^2.4.1",
-                "cross-spawn": "^6.0.5",
-                "memorystream": "^0.3.1",
-                "minimatch": "^3.0.4",
-                "pidtree": "^0.3.0",
-                "read-pkg": "^3.0.0",
-                "shell-quote": "^1.6.1",
-                "string.prototype.padend": "^3.0.0"
-            },
+        "node_modules/regenerator-transform": {
+            "version": "0.15.2",
+            "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+            "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
             "dependencies": {
-                "cross-spawn": {
-                    "version": "6.0.5",
-                    "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-                    "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-                    "requires": {
-                        "nice-try": "^1.0.4",
-                        "path-key": "^2.0.1",
-                        "semver": "^5.5.0",
-                        "shebang-command": "^1.2.0",
-                        "which": "^1.2.9"
-                    }
-                },
-                "path-key": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-                    "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
-                },
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
-                }
+                "@babel/runtime": "^7.8.4"
             }
         },
-        "npm-run-path": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-            "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+        "node_modules/regex-not": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+            "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
             "dev": true,
-            "requires": {
-                "path-key": "^2.0.0"
-            },
             "dependencies": {
-                "path-key": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-                    "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-                    "dev": true
-                }
-            }
-        },
-        "npmlog": {
-            "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
-            "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
-            "dev": true,
-            "requires": {
-                "are-we-there-yet": "~1.1.2",
-                "console-control-strings": "~1.1.0",
-                "gauge": "~2.7.3",
-                "set-blocking": "~2.0.0"
+                "extend-shallow": "^3.0.2",
+                "safe-regex": "^1.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "nth-check": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
-            "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+        "node_modules/regex-not/node_modules/extend-shallow": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+            "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
             "dev": true,
-            "requires": {
-                "boolbase": "~1.0.0"
+            "dependencies": {
+                "assign-symbols": "^1.0.0",
+                "is-extendable": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "num2fraction": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
-            "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
-            "dev": true
-        },
-        "number-is-nan": {
+        "node_modules/regex-not/node_modules/is-extendable": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-            "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-            "dev": true
-        },
-        "nwsapi": {
-            "version": "2.1.4",
-            "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
-            "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==",
-            "dev": true
-        },
-        "oauth-sign": {
-            "version": "0.9.0",
-            "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-            "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
-            "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="
-        },
-        "object-component": {
-            "version": "0.0.3",
-            "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
-            "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+            "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+            "dev": true,
+            "dependencies": {
+                "is-plain-object": "^2.0.4"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "object-copy": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-            "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-            "requires": {
-                "copy-descriptor": "^0.1.0",
-                "define-property": "^0.2.5",
-                "kind-of": "^3.0.3"
+        "node_modules/regexp.prototype.flags": {
+            "version": "1.5.2",
+            "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+            "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+            "dependencies": {
+                "call-bind": "^1.0.6",
+                "define-properties": "^1.2.1",
+                "es-errors": "^1.3.0",
+                "set-function-name": "^2.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
             },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/regexpp": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+            "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+            "dev": true,
+            "engines": {
+                "node": ">=6.5.0"
+            }
+        },
+        "node_modules/regexpu-core": {
+            "version": "5.3.2",
+            "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
+            "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
             "dependencies": {
-                "define-property": {
-                    "version": "0.2.5",
-                    "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-                    "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-                    "requires": {
-                        "is-descriptor": "^0.1.0"
-                    }
-                },
-                "kind-of": {
-                    "version": "3.2.2",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-                    "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-                    "requires": {
-                        "is-buffer": "^1.1.5"
-                    }
-                }
+                "@babel/regjsgen": "^0.8.0",
+                "regenerate": "^1.4.2",
+                "regenerate-unicode-properties": "^10.1.0",
+                "regjsparser": "^0.9.1",
+                "unicode-match-property-ecmascript": "^2.0.0",
+                "unicode-match-property-value-ecmascript": "^2.1.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "object-inspect": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
-            "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ=="
+        "node_modules/regjsparser": {
+            "version": "0.9.1",
+            "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+            "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+            "dependencies": {
+                "jsesc": "~0.5.0"
+            },
+            "bin": {
+                "regjsparser": "bin/parser"
+            }
         },
-        "object-is": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
-            "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
-            "dev": true
+        "node_modules/regjsparser/node_modules/jsesc": {
+            "version": "0.5.0",
+            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+            "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+            "bin": {
+                "jsesc": "bin/jsesc"
+            }
         },
-        "object-keys": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+        "node_modules/remark": {
+            "version": "13.0.0",
+            "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz",
+            "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==",
+            "dev": true,
+            "dependencies": {
+                "remark-parse": "^9.0.0",
+                "remark-stringify": "^9.0.0",
+                "unified": "^9.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
+            }
         },
-        "object-path": {
-            "version": "0.11.4",
-            "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz",
-            "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk="
+        "node_modules/remark-parse": {
+            "version": "9.0.0",
+            "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz",
+            "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==",
+            "dev": true,
+            "dependencies": {
+                "mdast-util-from-markdown": "^0.8.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
+            }
         },
-        "object-visit": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-            "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-            "requires": {
-                "isobject": "^3.0.0"
+        "node_modules/remark-stringify": {
+            "version": "9.0.1",
+            "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz",
+            "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==",
+            "dev": true,
+            "dependencies": {
+                "mdast-util-to-markdown": "^0.6.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
             }
         },
-        "object.assign": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
-            "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+        "node_modules/remedial": {
+            "version": "1.0.8",
+            "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz",
+            "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==",
             "dev": true,
-            "requires": {
-                "define-properties": "^1.1.2",
-                "function-bind": "^1.1.1",
-                "has-symbols": "^1.0.0",
-                "object-keys": "^1.0.11"
+            "engines": {
+                "node": "*"
             }
         },
-        "object.defaults": {
+        "node_modules/remove-trailing-separator": {
             "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
-            "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+            "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+            "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+            "dev": true
+        },
+        "node_modules/repeat-element": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+            "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
             "dev": true,
-            "requires": {
-                "array-each": "^1.0.1",
-                "array-slice": "^1.0.0",
-                "for-own": "^1.0.0",
-                "isobject": "^3.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "object.entries": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz",
-            "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==",
+        "node_modules/repeat-string": {
+            "version": "1.6.1",
+            "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+            "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
             "dev": true,
-            "requires": {
-                "define-properties": "^1.1.3",
-                "es-abstract": "^1.12.0",
-                "function-bind": "^1.1.1",
-                "has": "^1.0.3"
+            "engines": {
+                "node": ">=0.10"
             }
         },
-        "object.fromentries": {
+        "node_modules/replace-ext": {
             "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz",
-            "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==",
+            "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+            "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
             "dev": true,
-            "requires": {
-                "define-properties": "^1.1.2",
-                "es-abstract": "^1.11.0",
-                "function-bind": "^1.1.1",
-                "has": "^1.0.1"
+            "engines": {
+                "node": ">= 10"
             }
         },
-        "object.getownpropertydescriptors": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
-            "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
-            "requires": {
-                "define-properties": "^1.1.2",
-                "es-abstract": "^1.5.1"
+        "node_modules/replace-homedir": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz",
+            "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==",
+            "dev": true,
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "object.map": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
-            "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+        "node_modules/require-directory": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+            "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
             "dev": true,
-            "requires": {
-                "for-own": "^1.0.0",
-                "make-iterator": "^1.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "object.pick": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-            "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
-            "requires": {
-                "isobject": "^3.0.1"
+        "node_modules/require-from-string": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+            "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/requires-port": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+            "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+        },
+        "node_modules/reselect": {
+            "version": "4.1.8",
+            "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
+            "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==",
+            "dev": true
+        },
+        "node_modules/resolve": {
+            "version": "1.22.8",
+            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+            "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+            "dependencies": {
+                "is-core-module": "^2.13.0",
+                "path-parse": "^1.0.7",
+                "supports-preserve-symlinks-flag": "^1.0.0"
+            },
+            "bin": {
+                "resolve": "bin/resolve"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "object.reduce": {
+        "node_modules/resolve-dir": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
-            "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=",
+            "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+            "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
             "dev": true,
-            "requires": {
-                "for-own": "^1.0.0",
-                "make-iterator": "^1.0.0"
+            "dependencies": {
+                "expand-tilde": "^2.0.0",
+                "global-modules": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "object.values": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
-            "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+        "node_modules/resolve-from": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+            "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
             "dev": true,
-            "requires": {
-                "define-properties": "^1.1.3",
-                "es-abstract": "^1.12.0",
-                "function-bind": "^1.1.1",
-                "has": "^1.0.3"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "on-finished": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-            "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
-            "requires": {
-                "ee-first": "1.1.1"
+        "node_modules/resolve-options": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz",
+            "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==",
+            "dev": true,
+            "dependencies": {
+                "value-or-function": "^4.0.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "on-headers": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
-            "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+        "node_modules/resolve-pathname": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
+            "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
         },
-        "once": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-            "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-            "requires": {
-                "wrappy": "1"
-            }
+        "node_modules/resolve-url": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+            "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
+            "deprecated": "https://github.com/lydell/resolve-url#deprecated",
+            "dev": true
         },
-        "onetime": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
-            "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+        "node_modules/resp-modifier": {
+            "version": "6.0.2",
+            "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
+            "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==",
             "dev": true,
-            "requires": {
-                "mimic-fn": "^1.0.0"
+            "dependencies": {
+                "debug": "^2.2.0",
+                "minimatch": "^3.0.2"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
             }
         },
-        "opencollective-postinstall": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
-            "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==",
-            "dev": true
+        "node_modules/resp-modifier/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "dev": true,
+            "dependencies": {
+                "ms": "2.0.0"
+            }
         },
-        "openurl": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
-            "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=",
+        "node_modules/resp-modifier/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
             "dev": true
         },
-        "opn": {
-            "version": "5.3.0",
-            "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
-            "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
+        "node_modules/restore-cursor": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+            "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
             "dev": true,
-            "requires": {
-                "is-wsl": "^1.1.0"
+            "dependencies": {
+                "onetime": "^2.0.0",
+                "signal-exit": "^3.0.2"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "optimist": {
-            "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
-            "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+        "node_modules/ret": {
+            "version": "0.1.15",
+            "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+            "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
             "dev": true,
-            "requires": {
-                "minimist": "~0.0.1",
-                "wordwrap": "~0.0.2"
+            "engines": {
+                "node": ">=0.12"
             }
         },
-        "optionator": {
-            "version": "0.8.2",
-            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
-            "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+        "node_modules/reusify": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+            "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+            "engines": {
+                "iojs": ">=1.0.0",
+                "node": ">=0.10.0"
+            }
+        },
+        "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,
-            "requires": {
-                "deep-is": "~0.1.3",
-                "fast-levenshtein": "~2.0.4",
-                "levn": "~0.3.0",
-                "prelude-ls": "~1.1.2",
-                "type-check": "~0.3.2",
-                "wordwrap": "~1.0.0"
-            },
             "dependencies": {
-                "wordwrap": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-                    "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
-                    "dev": true
-                }
+                "glob": "^7.1.3"
+            },
+            "bin": {
+                "rimraf": "bin.js"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "ora": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.1.tgz",
-            "integrity": "sha512-yQv2q0GO8rqP2wzdOxpu0FxUmRg4z/Lw0m6uSpukPJXoOMaQzrIpl+STKHzjryFP5ExQC56+y8+yXPar2iezaw==",
+        "node_modules/ripemd160": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+            "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
             "dev": true,
-            "requires": {
-                "chalk": "^2.4.2",
-                "cli-cursor": "^3.1.0",
-                "cli-spinners": "^2.2.0",
-                "is-interactive": "^1.0.0",
-                "log-symbols": "^3.0.0",
-                "strip-ansi": "^5.2.0",
-                "wcwidth": "^1.0.1"
-            },
             "dependencies": {
-                "ansi-regex": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-                    "dev": true
-                },
-                "cli-cursor": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-                    "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
-                    "dev": true,
-                    "requires": {
-                        "restore-cursor": "^3.1.0"
-                    }
-                },
-                "log-symbols": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
-                    "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2"
-                    }
-                },
-                "mimic-fn": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-                    "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-                    "dev": true
-                },
-                "onetime": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
-                    "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
-                    "dev": true,
-                    "requires": {
-                        "mimic-fn": "^2.1.0"
-                    }
-                },
-                "restore-cursor": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-                    "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
-                    "dev": true,
-                    "requires": {
-                        "onetime": "^5.1.0",
-                        "signal-exit": "^3.0.2"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-                    "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^4.1.0"
-                    }
-                }
+                "hash-base": "^3.0.0",
+                "inherits": "^2.0.1"
             }
         },
-        "ordered-read-streams": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
-            "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
+        "node_modules/run-async": {
+            "version": "2.4.1",
+            "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+            "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
             "dev": true,
-            "requires": {
-                "readable-stream": "^2.0.1"
+            "engines": {
+                "node": ">=0.12.0"
             }
         },
-        "os-browserify": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
-            "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
-            "dev": true
+        "node_modules/run-node": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz",
+            "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==",
+            "dev": true,
+            "bin": {
+                "run-node": "run-node"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "os-homedir": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-            "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-            "dev": true
+        "node_modules/run-parallel": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+            "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/feross"
+                },
+                {
+                    "type": "patreon",
+                    "url": "https://www.patreon.com/feross"
+                },
+                {
+                    "type": "consulting",
+                    "url": "https://feross.org/support"
+                }
+            ],
+            "dependencies": {
+                "queue-microtask": "^1.2.2"
+            }
         },
-        "os-locale": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
-            "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-            "dev": true,
-            "requires": {
-                "lcid": "^1.0.0"
+        "node_modules/run-script-os": {
+            "version": "1.1.6",
+            "resolved": "https://registry.npmjs.org/run-script-os/-/run-script-os-1.1.6.tgz",
+            "integrity": "sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==",
+            "bin": {
+                "run-os": "index.js",
+                "run-script-os": "index.js"
             }
         },
-        "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=",
+        "node_modules/rx": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+            "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==",
             "dev": true
         },
-        "osenv": {
-            "version": "0.1.5",
-            "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-            "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+        "node_modules/rxjs": {
+            "version": "6.6.7",
+            "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+            "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
             "dev": true,
-            "requires": {
-                "os-homedir": "^1.0.0",
-                "os-tmpdir": "^1.0.0"
+            "dependencies": {
+                "tslib": "^1.9.0"
+            },
+            "engines": {
+                "npm": ">=2.0.0"
             }
         },
-        "output-file-sync": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz",
-            "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==",
-            "requires": {
-                "graceful-fs": "^4.1.11",
-                "is-plain-obj": "^1.1.0",
-                "mkdirp": "^0.5.1"
+        "node_modules/safe-array-concat": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+            "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "get-intrinsic": "^1.2.4",
+                "has-symbols": "^1.0.3",
+                "isarray": "^2.0.5"
+            },
+            "engines": {
+                "node": ">=0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "p-each-series": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz",
-            "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=",
+        "node_modules/safe-buffer": {
+            "version": "5.2.1",
+            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+            "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/feross"
+                },
+                {
+                    "type": "patreon",
+                    "url": "https://www.patreon.com/feross"
+                },
+                {
+                    "type": "consulting",
+                    "url": "https://feross.org/support"
+                }
+            ]
+        },
+        "node_modules/safe-regex": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+            "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
             "dev": true,
-            "requires": {
-                "p-reduce": "^1.0.0"
+            "dependencies": {
+                "ret": "~0.1.10"
             }
         },
-        "p-finally": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-            "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
-            "dev": true
-        },
-        "p-limit": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
-            "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
-            "requires": {
-                "p-try": "^2.0.0"
+        "node_modules/safe-regex-test": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+            "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+            "dependencies": {
+                "call-bind": "^1.0.6",
+                "es-errors": "^1.3.0",
+                "is-regex": "^1.1.4"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "p-locate": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-            "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-            "requires": {
-                "p-limit": "^2.0.0"
+        "node_modules/safe-stable-stringify": {
+            "version": "2.4.3",
+            "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
+            "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
+            "dev": true,
+            "engines": {
+                "node": ">=10"
             }
         },
-        "p-map": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
-            "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+        "node_modules/safer-buffer": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+            "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+        },
+        "node_modules/sass": {
+            "version": "1.77.4",
+            "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.4.tgz",
+            "integrity": "sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==",
             "dev": true,
-            "requires": {
-                "aggregate-error": "^3.0.0"
+            "dependencies": {
+                "chokidar": ">=3.0.0 <4.0.0",
+                "immutable": "^4.0.0",
+                "source-map-js": ">=0.6.2 <2.0.0"
+            },
+            "bin": {
+                "sass": "sass.js"
+            },
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "p-reduce": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
-            "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
-            "dev": true
-        },
-        "p-try": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-            "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+        "node_modules/sass-embedded": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.77.2.tgz",
+            "integrity": "sha512-luiDeWNZ0tKs1jCiSFbuz8wFVQxYqN+vh+yfm9v7kW42yPtwEF8+z2ROaDJluSUZ7vhFmsXuqoKg9qBxc7SCnw==",
+            "dev": true,
+            "dependencies": {
+                "@bufbuild/protobuf": "^1.0.0",
+                "buffer-builder": "^0.2.0",
+                "immutable": "^4.0.0",
+                "rxjs": "^7.4.0",
+                "supports-color": "^8.1.1",
+                "varint": "^6.0.0"
+            },
+            "engines": {
+                "node": ">=16.0.0"
+            },
+            "optionalDependencies": {
+                "sass-embedded-android-arm": "1.77.2",
+                "sass-embedded-android-arm64": "1.77.2",
+                "sass-embedded-android-ia32": "1.77.2",
+                "sass-embedded-android-x64": "1.77.2",
+                "sass-embedded-darwin-arm64": "1.77.2",
+                "sass-embedded-darwin-x64": "1.77.2",
+                "sass-embedded-linux-arm": "1.77.2",
+                "sass-embedded-linux-arm64": "1.77.2",
+                "sass-embedded-linux-ia32": "1.77.2",
+                "sass-embedded-linux-musl-arm": "1.77.2",
+                "sass-embedded-linux-musl-arm64": "1.77.2",
+                "sass-embedded-linux-musl-ia32": "1.77.2",
+                "sass-embedded-linux-musl-x64": "1.77.2",
+                "sass-embedded-linux-x64": "1.77.2",
+                "sass-embedded-win32-arm64": "1.77.2",
+                "sass-embedded-win32-ia32": "1.77.2",
+                "sass-embedded-win32-x64": "1.77.2"
+            }
+        },
+        "node_modules/sass-embedded-android-arm": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.77.2.tgz",
+            "integrity": "sha512-rMuIMZ/FstMrT9Y23LDgQGpCyfe3i10dJnmW+DVJ9Gqz4dR7qpysEBIQXU35mHVq8ppNZ0yGiFlFZTSiiVMdzQ==",
+            "cpu": [
+                "arm"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
+            },
+            "engines": {
+                "node": ">=14.0.0"
+            }
         },
-        "package-json": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
-            "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+        "node_modules/sass-embedded-android-arm64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.77.2.tgz",
+            "integrity": "sha512-7DiFMros5iRYrkPlNqUBfzZ/DCgsI199pRF8xuBsPf9yuB8SLDOqvNk3QOnUCMAbpjW5VW1JgdfGFFlHTCnJQA==",
+            "cpu": [
+                "arm64"
+            ],
             "dev": true,
-            "requires": {
-                "got": "^6.7.1",
-                "registry-auth-token": "^3.0.1",
-                "registry-url": "^3.0.3",
-                "semver": "^5.1.0"
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
             },
-            "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "pako": {
-            "version": "1.0.10",
-            "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
-            "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
-            "dev": true
-        },
-        "parallel-transform": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
-            "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+        "node_modules/sass-embedded-android-ia32": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.77.2.tgz",
+            "integrity": "sha512-qN0laKrAjuvBLFdUogGz8jQlbHs6tgH91tKQeE7ZE4AO9zzDRlXtaEJP1x6B6AGVc8UOEkvQyR3Nej4qwWprhA==",
+            "cpu": [
+                "ia32"
+            ],
             "dev": true,
-            "requires": {
-                "cyclist": "^1.0.1",
-                "inherits": "^2.0.3",
-                "readable-stream": "^2.1.5"
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
+            },
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "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==",
+        "node_modules/sass-embedded-android-x64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.77.2.tgz",
+            "integrity": "sha512-HByqtC5g5hOaJenWs4Klx6gFEIZYx+IEFh5K56U+wB+jd6EU32Lrnbdxy1+i/p/kZrd+23HrVHQPv8zpmxucaw==",
+            "cpu": [
+                "x64"
+            ],
             "dev": true,
-            "requires": {
-                "callsites": "^3.0.0"
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
+            },
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parse": {
-            "version": "2.7.1",
-            "resolved": "https://registry.npmjs.org/parse/-/parse-2.7.1.tgz",
-            "integrity": "sha512-JmargoFb20Z1u28Coz6tNlRlinD1aRj1fCTNaTVjJJXTGvorbIHLYSNWDKmbOM+uUSM1LBjxK2/1GgLR3FAQAw==",
-            "requires": {
-                "@babel/runtime": "7.5.5",
-                "@babel/runtime-corejs3": "7.5.5",
-                "uuid": "3.3.3",
-                "ws": "7.1.2",
-                "xmlhttprequest": "1.8.0"
+        "node_modules/sass-embedded-darwin-arm64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.77.2.tgz",
+            "integrity": "sha512-0jkL/FwbAStqqxFSjHfhElEAWrKRRvFz2JeXOxskUdzMehDMv5LaewqSRCijyeKBO3KgurvndmSfrOizdU6WAw==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
+            },
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parse-asn1": {
-            "version": "5.1.5",
-            "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
-            "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
+        "node_modules/sass-embedded-darwin-x64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.77.2.tgz",
+            "integrity": "sha512-8Sy36IxOOFPWA5TdhC87SvOkrXUSis51CGKlIsM8yZISQiY9y8b+wrNJM1f3oHvs641xZBaeIuwibJXaY6hNBg==",
+            "cpu": [
+                "x64"
+            ],
             "dev": true,
-            "requires": {
-                "asn1.js": "^4.0.0",
-                "browserify-aes": "^1.0.0",
-                "create-hash": "^1.1.0",
-                "evp_bytestokey": "^1.0.0",
-                "pbkdf2": "^3.0.3",
-                "safe-buffer": "^5.1.1"
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
+            },
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parse-color": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz",
-            "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=",
+        "node_modules/sass-embedded-linux-arm": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.77.2.tgz",
+            "integrity": "sha512-/gtCseBkGCBw61p6MG2BqeYy8rblffw2KXUzMKjo9Hlqj/KajWDk7j1B+mVnqrHOPB/KBbm8Ym/2ooCYpnMIkQ==",
+            "cpu": [
+                "arm"
+            ],
             "dev": true,
-            "requires": {
-                "color-convert": "~0.5.0"
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
             },
-            "dependencies": {
-                "color-convert": {
-                    "version": "0.5.3",
-                    "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz",
-                    "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=",
-                    "dev": true
-                }
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parse-css-dimension": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/parse-css-dimension/-/parse-css-dimension-1.1.0.tgz",
-            "integrity": "sha1-jheiTkwtD+Q3RWpi8Mks+hW4o34=",
+        "node_modules/sass-embedded-linux-arm64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.77.2.tgz",
+            "integrity": "sha512-hlfNFu1IWHI0cOsbpFWPrJlx7IFZfXuI3iEhwa4oljM21y72E6tETUFmTr4f9Ka9qDLXkUxUoYaTH2SqGU9dDA==",
+            "cpu": [
+                "arm64"
+            ],
             "dev": true,
-            "requires": {
-                "css-angle-units": "^1.0.1",
-                "css-frequency-units": "^1.0.1",
-                "css-length-units": "^1.0.0",
-                "css-resolution-units": "^1.0.1",
-                "css-time-units": "^1.0.1",
-                "lodash.fill": "^3.4.0",
-                "lodash.merge": "^4.6.0",
-                "lodash.zipobject": "^4.1.3"
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
+            },
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parse-entities": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz",
-            "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==",
-            "requires": {
-                "character-entities": "^1.0.0",
-                "character-entities-legacy": "^1.0.0",
-                "character-reference-invalid": "^1.0.0",
-                "is-alphanumerical": "^1.0.0",
-                "is-decimal": "^1.0.0",
-                "is-hexadecimal": "^1.0.0"
+        "node_modules/sass-embedded-linux-ia32": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.77.2.tgz",
+            "integrity": "sha512-JSIqGIeAKlrMw/oMFFFxZ10F3QUJVdjeGVI83h6mwNHTYgrX6PuOngcAYleIpYR5XicQgfueC5pPVPbP5CArBQ==",
+            "cpu": [
+                "ia32"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
+            },
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parse-filepath": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
-            "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+        "node_modules/sass-embedded-linux-musl-arm": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.77.2.tgz",
+            "integrity": "sha512-LZTSnfHPlfvkdQ8orpnEUCEx40qhKpMjxN3Ggi8kgQqv5jvtqn0ECdWl0n4WI5CrlkmtdS3VeFcsf078bt/f8Q==",
+            "cpu": [
+                "arm"
+            ],
             "dev": true,
-            "requires": {
-                "is-absolute": "^1.0.0",
-                "map-cache": "^0.2.0",
-                "path-root": "^0.1.1"
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parse-json": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-            "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
-            "requires": {
-                "error-ex": "^1.3.1",
-                "json-parse-better-errors": "^1.0.1"
+        "node_modules/sass-embedded-linux-musl-arm64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.77.2.tgz",
+            "integrity": "sha512-JQZuONuhIurKjc/qE9cTiJXSLixL8hGkalWN3LJHasYHVAU92QA/t8rv0T51vIzf/I2F59He3bapkPme60dwSw==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parse-key": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/parse-key/-/parse-key-0.2.1.tgz",
-            "integrity": "sha1-e892WVU242B1Zkvk1ofkvdkQII8="
-        },
-        "parse-node-version": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
-            "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
-            "dev": true
-        },
-        "parse-passwd": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
-            "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+        "node_modules/sass-embedded-linux-musl-ia32": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.77.2.tgz",
+            "integrity": "sha512-6F1GHBgPkcTXtfM0MK3PofozagNF8IawdfIG4RNzGeSZRhGBRgZLOS+vdre4xubTLSaa6xjbI47YfaD43z8URQ==",
+            "cpu": [
+                "ia32"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=14.0.0"
+            }
         },
-        "parse5": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
-            "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+        "node_modules/sass-embedded-linux-musl-x64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.77.2.tgz",
+            "integrity": "sha512-8BiqLA1NJeN3rCaX6t747GWMMdH5YUFYuytXU8waDC/u+FSGoOHRxfrsB8BEWHVgSPDxhwZklanPCXXzbzB2lw==",
+            "cpu": [
+                "x64"
+            ],
             "dev": true,
-            "requires": {
-                "@types/node": "*"
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parseqs": {
-            "version": "0.0.5",
-            "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
-            "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+        "node_modules/sass-embedded-linux-x64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.77.2.tgz",
+            "integrity": "sha512-czQOxGOX4U47jW9k+cbFBgSt/6FVx2WGLPqPvrgDiEToLJdZyvzUqrkpqQYfJ6hN1koqatCPEpDrUZBcTPGUGg==",
+            "cpu": [
+                "x64"
+            ],
             "dev": true,
-            "requires": {
-                "better-assert": "~1.0.0"
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass"
+            },
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parseuri": {
-            "version": "0.0.5",
-            "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
-            "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+        "node_modules/sass-embedded-win32-arm64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.77.2.tgz",
+            "integrity": "sha512-NA+4Y5PO04YQGtKNCyLrUjQU2nijskVA3Er/UYGtx66BBlWZ/ttbnlk+dU05SF5Jhjb3HtThGGH1meb7pKA+OQ==",
+            "cpu": [
+                "arm64"
+            ],
             "dev": true,
-            "requires": {
-                "better-assert": "~1.0.0"
+            "optional": true,
+            "os": [
+                "win32"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass.bat"
+            },
+            "engines": {
+                "node": ">=14.0.0"
             }
         },
-        "parseurl": {
-            "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-            "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+        "node_modules/sass-embedded-win32-ia32": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.77.2.tgz",
+            "integrity": "sha512-/3hGz4GefhVuuUu2gSOdsxBYym5Di0co0tZbtiokCU/8VhYhcAQ3v2Lni49VV6OnsyJLb1nUx+rbpd8cKO1U4w==",
+            "cpu": [
+                "ia32"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "win32"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass.bat"
+            },
+            "engines": {
+                "node": ">=14.0.0"
+            }
         },
-        "pascalcase": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-            "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+        "node_modules/sass-embedded-win32-x64": {
+            "version": "1.77.2",
+            "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.77.2.tgz",
+            "integrity": "sha512-joHLDICWmnR9Ca+LT9B+Fp85sCvV9F3gdtHtXLSuQAEulG5Ip1Z9euB3FUw+Z0s0Vz4MjNea+JD+TwO9eMrpyw==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "win32"
+            ],
+            "bin": {
+                "sass": "dart-sass/sass.bat"
+            },
+            "engines": {
+                "node": ">=14.0.0"
+            }
         },
-        "path-browserify": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
-            "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+        "node_modules/sass-embedded/node_modules/immutable": {
+            "version": "4.3.5",
+            "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
+            "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
             "dev": true
         },
-        "path-dirname": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
-            "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
-        },
-        "path-exists": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-            "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+        "node_modules/sass-embedded/node_modules/rxjs": {
+            "version": "7.8.1",
+            "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+            "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+            "dev": true,
+            "dependencies": {
+                "tslib": "^2.1.0"
+            }
         },
-        "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="
+        "node_modules/sass-embedded/node_modules/supports-color": {
+            "version": "8.1.1",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+            "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+            "dev": true,
+            "dependencies": {
+                "has-flag": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/supports-color?sponsor=1"
+            }
         },
-        "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=",
+        "node_modules/sass-embedded/node_modules/tslib": {
+            "version": "2.6.2",
+            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+            "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
             "dev": true
         },
-        "path-key": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz",
-            "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg=="
-        },
-        "path-parse": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-            "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
-        },
-        "path-root": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
-            "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+        "node_modules/sass/node_modules/binary-extensions": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
             "dev": true,
-            "requires": {
-                "path-root-regex": "^0.1.0"
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "path-root-regex": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
-            "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
-            "dev": true
+        "node_modules/sass/node_modules/braces": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+            "dev": true,
+            "dependencies": {
+                "fill-range": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "path-to-regexp": {
-            "version": "0.1.7",
-            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-            "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+        "node_modules/sass/node_modules/chokidar": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+            "dev": true,
+            "dependencies": {
+                "anymatch": "~3.1.2",
+                "braces": "~3.0.2",
+                "glob-parent": "~5.1.2",
+                "is-binary-path": "~2.1.0",
+                "is-glob": "~4.0.1",
+                "normalize-path": "~3.0.0",
+                "readdirp": "~3.6.0"
+            },
+            "engines": {
+                "node": ">= 8.10.0"
+            },
+            "funding": {
+                "url": "https://paulmillr.com/funding/"
+            },
+            "optionalDependencies": {
+                "fsevents": "~2.3.2"
+            }
         },
-        "path-type": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-            "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+        "node_modules/sass/node_modules/fill-range": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+            "dev": true,
+            "dependencies": {
+                "to-regex-range": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "pbkdf2": {
-            "version": "3.0.17",
-            "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
-            "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+        "node_modules/sass/node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
             "dev": true,
-            "requires": {
-                "create-hash": "^1.1.2",
-                "create-hmac": "^1.1.4",
-                "ripemd160": "^2.0.1",
-                "safe-buffer": "^5.0.1",
-                "sha.js": "^2.4.8"
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
             }
         },
-        "pend": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-            "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+        "node_modules/sass/node_modules/immutable": {
+            "version": "4.3.5",
+            "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
+            "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
             "dev": true
         },
-        "performance-now": {
+        "node_modules/sass/node_modules/is-binary-path": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-            "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
-            "dev": true
-        },
-        "picomatch": {
-            "version": "2.0.7",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz",
-            "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA=="
-        },
-        "pidtree": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz",
-            "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg=="
-        },
-        "pify": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-            "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-        },
-        "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=",
+            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
             "dev": true,
-            "requires": {
-                "pinkie": "^2.0.0"
+            "dependencies": {
+                "binary-extensions": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "pirates": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
-            "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
-            "requires": {
-                "node-modules-regexp": "^1.0.0"
+        "node_modules/sass/node_modules/is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.12.0"
             }
         },
-        "pkg-dir": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-            "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
-            "requires": {
-                "find-up": "^3.0.0"
+        "node_modules/sass/node_modules/readdirp": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "dev": true,
+            "dependencies": {
+                "picomatch": "^2.2.1"
+            },
+            "engines": {
+                "node": ">=8.10.0"
             }
         },
-        "pkg-up": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
-            "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
+        "node_modules/sass/node_modules/to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
             "dev": true,
-            "requires": {
-                "find-up": "^2.1.0"
-            },
             "dependencies": {
-                "find-up": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-                    "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-                    "dev": true,
-                    "requires": {
-                        "locate-path": "^2.0.0"
-                    }
-                },
-                "locate-path": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-                    "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
-                    "dev": true,
-                    "requires": {
-                        "p-locate": "^2.0.0",
-                        "path-exists": "^3.0.0"
-                    }
-                },
-                "p-limit": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-                    "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-                    "dev": true,
-                    "requires": {
-                        "p-try": "^1.0.0"
-                    }
-                },
-                "p-locate": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-                    "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-                    "dev": true,
-                    "requires": {
-                        "p-limit": "^1.1.0"
-                    }
-                },
-                "p-try": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-                    "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-                    "dev": true
-                }
+                "is-number": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=8.0"
             }
         },
-        "pkginfo": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz",
-            "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=",
-            "dev": true
+        "node_modules/scheduler": {
+            "version": "0.23.2",
+            "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+            "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+            "dependencies": {
+                "loose-envify": "^1.1.0"
+            }
         },
-        "please-upgrade-node": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
-            "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+        "node_modules/schema-utils": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
+            "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
             "dev": true,
-            "requires": {
-                "semver-compare": "^1.0.0"
+            "dependencies": {
+                "@types/json-schema": "^7.0.9",
+                "ajv": "^8.9.0",
+                "ajv-formats": "^2.1.1",
+                "ajv-keywords": "^5.1.0"
+            },
+            "engines": {
+                "node": ">= 12.13.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/webpack"
             }
         },
-        "plugin-error": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
-            "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
-            "dev": true,
-            "requires": {
-                "ansi-colors": "^1.0.1",
-                "arr-diff": "^4.0.0",
-                "arr-union": "^3.1.0",
-                "extend-shallow": "^3.0.2"
+        "node_modules/select-hose": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+            "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg=="
+        },
+        "node_modules/semver": {
+            "version": "7.6.2",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "bin": {
+                "semver": "bin/semver.js"
             },
-            "dependencies": {
-                "ansi-colors": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
-                    "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-wrap": "^0.1.0"
-                    }
-                }
+            "engines": {
+                "node": ">=10"
             }
         },
-        "pn": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
-            "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
+        "node_modules/semver-compare": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+            "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
             "dev": true
         },
-        "portscanner": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz",
-            "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=",
+        "node_modules/semver-greatest-satisfied-range": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz",
+            "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==",
             "dev": true,
-            "requires": {
-                "async": "1.5.2",
-                "is-number-like": "^1.0.3"
-            },
             "dependencies": {
-                "async": {
-                    "version": "1.5.2",
-                    "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-                    "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
-                    "dev": true
-                }
+                "sver": "^1.8.3"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "posix-character-classes": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-            "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
-        },
-        "postcss": {
-            "version": "7.0.18",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz",
-            "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
+        "node_modules/send": {
+            "version": "0.16.2",
+            "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+            "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
             "dev": true,
-            "requires": {
-                "chalk": "^2.4.2",
-                "source-map": "^0.6.1",
-                "supports-color": "^6.1.0"
-            },
             "dependencies": {
-                "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
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
+                "debug": "2.6.9",
+                "depd": "~1.1.2",
+                "destroy": "~1.0.4",
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "etag": "~1.8.1",
+                "fresh": "0.5.2",
+                "http-errors": "~1.6.2",
+                "mime": "1.4.1",
+                "ms": "2.0.0",
+                "on-finished": "~2.3.0",
+                "range-parser": "~1.2.0",
+                "statuses": "~1.4.0"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
             }
         },
-        "postcss-html": {
-            "version": "0.36.0",
-            "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz",
-            "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==",
+        "node_modules/send/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
             "dev": true,
-            "requires": {
-                "htmlparser2": "^3.10.0"
+            "dependencies": {
+                "ms": "2.0.0"
             }
         },
-        "postcss-jsx": {
-            "version": "0.36.3",
-            "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.3.tgz",
-            "integrity": "sha512-yV8Ndo6KzU8eho5mCn7LoLUGPkXrRXRjhMpX4AaYJ9wLJPv099xbtpbRQ8FrPnzVxb/cuMebbPR7LweSt+hTfA==",
+        "node_modules/send/node_modules/depd": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+            "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
             "dev": true,
-            "requires": {
-                "@babel/core": ">=7.2.2"
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "postcss-less": {
-            "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz",
-            "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==",
+        "node_modules/send/node_modules/destroy": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+            "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
+            "dev": true
+        },
+        "node_modules/send/node_modules/http-errors": {
+            "version": "1.6.3",
+            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+            "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
             "dev": true,
-            "requires": {
-                "postcss": "^7.0.14"
+            "dependencies": {
+                "depd": "~1.1.2",
+                "inherits": "2.0.3",
+                "setprototypeof": "1.1.0",
+                "statuses": ">= 1.4.0 < 2"
+            },
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "postcss-markdown": {
-            "version": "0.36.0",
-            "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz",
-            "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==",
+        "node_modules/send/node_modules/inherits": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+            "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+            "dev": true
+        },
+        "node_modules/send/node_modules/mime": {
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+            "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
             "dev": true,
-            "requires": {
-                "remark": "^10.0.1",
-                "unist-util-find-all-after": "^1.0.2"
+            "bin": {
+                "mime": "cli.js"
             }
         },
-        "postcss-media-query-parser": {
-            "version": "0.2.3",
-            "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
-            "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=",
+        "node_modules/send/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
             "dev": true
         },
-        "postcss-reporter": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz",
-            "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==",
+        "node_modules/send/node_modules/on-finished": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+            "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
             "dev": true,
-            "requires": {
-                "chalk": "^2.4.1",
-                "lodash": "^4.17.11",
-                "log-symbols": "^2.2.0",
-                "postcss": "^7.0.7"
+            "dependencies": {
+                "ee-first": "1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.8"
             }
         },
-        "postcss-resolve-nested-selector": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
-            "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=",
+        "node_modules/send/node_modules/setprototypeof": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+            "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
             "dev": true
         },
-        "postcss-safe-parser": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
-            "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
+        "node_modules/send/node_modules/statuses": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+            "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
             "dev": true,
-            "requires": {
-                "postcss": "^7.0.0"
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "postcss-sass": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.1.tgz",
-            "integrity": "sha512-YDdykeDHylqiD2CdXuP7K1aDz7hCflGVB6H6lqabWVab5mVOWhguUuWZYpFU22/E12AEGiMlOfZnLqr343zhVA==",
+        "node_modules/serialize-javascript": {
+            "version": "6.0.2",
+            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+            "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+            "dependencies": {
+                "randombytes": "^2.1.0"
+            }
+        },
+        "node_modules/serve-index": {
+            "version": "1.9.1",
+            "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+            "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
             "dev": true,
-            "requires": {
-                "gonzales-pe": "^4.2.4",
-                "postcss": "^7.0.14"
+            "dependencies": {
+                "accepts": "~1.3.4",
+                "batch": "0.6.1",
+                "debug": "2.6.9",
+                "escape-html": "~1.0.3",
+                "http-errors": "~1.6.2",
+                "mime-types": "~2.1.17",
+                "parseurl": "~1.3.2"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
             }
         },
-        "postcss-scss": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.0.0.tgz",
-            "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==",
+        "node_modules/serve-index/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
             "dev": true,
-            "requires": {
-                "postcss": "^7.0.0"
+            "dependencies": {
+                "ms": "2.0.0"
             }
         },
-        "postcss-selector-parser": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
-            "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+        "node_modules/serve-index/node_modules/depd": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+            "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
             "dev": true,
-            "requires": {
-                "dot-prop": "^4.1.1",
-                "indexes-of": "^1.0.1",
-                "uniq": "^1.0.1"
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "postcss-syntax": {
-            "version": "0.36.2",
-            "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz",
-            "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==",
-            "dev": true
+        "node_modules/serve-index/node_modules/http-errors": {
+            "version": "1.6.3",
+            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+            "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
+            "dev": true,
+            "dependencies": {
+                "depd": "~1.1.2",
+                "inherits": "2.0.3",
+                "setprototypeof": "1.1.0",
+                "statuses": ">= 1.4.0 < 2"
+            },
+            "engines": {
+                "node": ">= 0.6"
+            }
         },
-        "postcss-value-parser": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
-            "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==",
+        "node_modules/serve-index/node_modules/inherits": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+            "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
             "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=",
+        "node_modules/serve-index/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
             "dev": true
         },
-        "prepend-http": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
-            "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+        "node_modules/serve-index/node_modules/setprototypeof": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+            "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
             "dev": true
         },
-        "prettier": {
-            "version": "1.18.2",
-            "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
-            "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw=="
-        },
-        "pretty-bytes": {
-            "version": "5.3.0",
-            "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz",
-            "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==",
-            "dev": true
+        "node_modules/serve-index/node_modules/statuses": {
+            "version": "1.5.0",
+            "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+            "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+            "dev": true,
+            "engines": {
+                "node": ">= 0.6"
+            }
         },
-        "pretty-format": {
-            "version": "24.9.0",
-            "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz",
-            "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==",
+        "node_modules/serve-static": {
+            "version": "1.13.2",
+            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+            "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
             "dev": true,
-            "requires": {
-                "@jest/types": "^24.9.0",
-                "ansi-regex": "^4.0.0",
-                "ansi-styles": "^3.2.0",
-                "react-is": "^16.8.4"
-            },
             "dependencies": {
-                "ansi-regex": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-                    "dev": true
-                }
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "parseurl": "~1.3.2",
+                "send": "0.16.2"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
             }
         },
-        "pretty-hrtime": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
-            "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+        "node_modules/server-destroy": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+            "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==",
             "dev": true
         },
-        "prismjs": {
-            "version": "1.17.1",
-            "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz",
-            "integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==",
-            "requires": {
-                "clipboard": "^2.0.0"
+        "node_modules/set-function-length": {
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+            "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+            "dependencies": {
+                "define-data-property": "^1.1.4",
+                "es-errors": "^1.3.0",
+                "function-bind": "^1.1.2",
+                "get-intrinsic": "^1.2.4",
+                "gopd": "^1.0.1",
+                "has-property-descriptors": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "private": {
-            "version": "0.1.8",
-            "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
-            "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
-            "dev": true
-        },
-        "process": {
-            "version": "0.11.10",
-            "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-            "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
-            "dev": true
+        "node_modules/set-function-name": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+            "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+            "dependencies": {
+                "define-data-property": "^1.1.4",
+                "es-errors": "^1.3.0",
+                "functions-have-names": "^1.2.3",
+                "has-property-descriptors": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
         },
-        "process-nextick-args": {
+        "node_modules/set-value": {
             "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-            "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
-        },
-        "progress": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-            "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
-            "dev": true
-        },
-        "promise": {
-            "version": "7.3.1",
-            "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
-            "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+            "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+            "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
             "dev": true,
-            "optional": true,
-            "requires": {
-                "asap": "~2.0.3"
+            "dependencies": {
+                "extend-shallow": "^2.0.1",
+                "is-extendable": "^0.1.1",
+                "is-plain-object": "^2.0.3",
+                "split-string": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "promise-inflight": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
-            "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+        "node_modules/setimmediate": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+            "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
             "dev": true
         },
-        "prompt": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz",
-            "integrity": "sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=",
+        "node_modules/setprototypeof": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+            "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+        },
+        "node_modules/sha.js": {
+            "version": "2.4.11",
+            "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+            "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
             "dev": true,
-            "requires": {
-                "colors": "^1.1.2",
-                "pkginfo": "0.x.x",
-                "read": "1.0.x",
-                "revalidator": "0.1.x",
-                "utile": "0.3.x",
-                "winston": "2.1.x"
+            "dependencies": {
+                "inherits": "^2.0.1",
+                "safe-buffer": "^5.0.1"
+            },
+            "bin": {
+                "sha.js": "bin.js"
             }
         },
-        "prompts": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz",
-            "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==",
-            "dev": true,
-            "requires": {
-                "kleur": "^3.0.3",
-                "sisteransi": "^1.0.3"
+        "node_modules/shallow-clone": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+            "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+            "dependencies": {
+                "kind-of": "^6.0.2"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "prop-types": {
-            "version": "15.7.2",
-            "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-            "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-            "requires": {
-                "loose-envify": "^1.4.0",
-                "object-assign": "^4.1.1",
-                "react-is": "^16.8.1"
+        "node_modules/shallow-equals": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/shallow-equals/-/shallow-equals-1.0.0.tgz",
+            "integrity": "sha512-xd/FKcdmfmMbyYCca3QTVEJtqUOGuajNzvAX6nt8dXILwjAIEkfHc4hI8/JMGApAmb7VeULO0Q30NTxnbH/15g=="
+        },
+        "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==",
+            "dependencies": {
+                "shebang-regex": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "prop-types-exact": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz",
-            "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==",
-            "dev": true,
-            "requires": {
-                "has": "^1.0.3",
-                "object.assign": "^4.1.0",
-                "reflect.ownkeys": "^0.2.0"
+        "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==",
+            "engines": {
+                "node": ">=8"
             }
         },
-        "property-information": {
-            "version": "5.2.2",
-            "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.2.2.tgz",
-            "integrity": "sha512-N2moasZmjn2mjVGIWpaqz5qnz6QyeQSGgGvMtl81gA9cPTWa6wpesRSe/quNnOjUHpvSH1oZx0pdz0EEckLFnA==",
-            "requires": {
-                "xtend": "^4.0.1"
+        "node_modules/shell-quote": {
+            "version": "1.8.1",
+            "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+            "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "proxy-addr": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
-            "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
-            "requires": {
-                "forwarded": "~0.1.2",
-                "ipaddr.js": "1.9.0"
+        "node_modules/side-channel": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+            "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "es-errors": "^1.3.0",
+                "get-intrinsic": "^1.2.4",
+                "object-inspect": "^1.13.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "prr": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-            "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+        "node_modules/signal-exit": {
+            "version": "3.0.7",
+            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+            "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
             "dev": true
         },
-        "pseudomap": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-            "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-            "dev": true
+        "node_modules/simple-swizzle": {
+            "version": "0.2.2",
+            "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+            "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+            "dev": true,
+            "dependencies": {
+                "is-arrayish": "^0.3.1"
+            }
         },
-        "psl": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
-            "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==",
+        "node_modules/simple-swizzle/node_modules/is-arrayish": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+            "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
             "dev": true
         },
-        "pstree.remy": {
-            "version": "1.1.7",
-            "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz",
-            "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==",
-            "dev": true
+        "node_modules/simple-update-notifier": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
+            "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
+            "dev": true,
+            "dependencies": {
+                "semver": "~7.0.0"
+            },
+            "engines": {
+                "node": ">=8.10.0"
+            }
         },
-        "public-encrypt": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
-            "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+        "node_modules/simple-update-notifier/node_modules/semver": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+            "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
             "dev": true,
-            "requires": {
-                "bn.js": "^4.1.0",
-                "browserify-rsa": "^4.0.0",
-                "create-hash": "^1.1.0",
-                "parse-asn1": "^5.0.0",
-                "randombytes": "^2.0.1",
-                "safe-buffer": "^5.1.2"
+            "bin": {
+                "semver": "bin/semver.js"
             }
         },
-        "pump": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-            "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+        "node_modules/slash": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+            "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/slice-ansi": {
+            "version": "0.0.4",
+            "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+            "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==",
             "dev": true,
-            "requires": {
-                "end-of-stream": "^1.1.0",
-                "once": "^1.3.1"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "pumpify": {
-            "version": "1.5.1",
-            "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
-            "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+        "node_modules/slugify": {
+            "version": "1.6.6",
+            "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
+            "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==",
             "dev": true,
-            "requires": {
-                "duplexify": "^3.6.0",
-                "inherits": "^2.0.3",
-                "pump": "^2.0.0"
-            },
-            "dependencies": {
-                "pump": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
-                    "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
-                    "dev": true,
-                    "requires": {
-                        "end-of-stream": "^1.1.0",
-                        "once": "^1.3.1"
-                    }
-                }
+            "engines": {
+                "node": ">=8.0.0"
             }
         },
-        "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
+        "node_modules/snapdragon": {
+            "version": "0.8.2",
+            "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+            "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+            "dev": true,
+            "dependencies": {
+                "base": "^0.11.1",
+                "debug": "^2.2.0",
+                "define-property": "^0.2.5",
+                "extend-shallow": "^2.0.1",
+                "map-cache": "^0.2.2",
+                "source-map": "^0.5.6",
+                "source-map-resolve": "^0.5.0",
+                "use": "^3.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "pure-color": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz",
-            "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4="
+        "node_modules/snapdragon-node": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+            "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+            "dev": true,
+            "dependencies": {
+                "define-property": "^1.0.0",
+                "isobject": "^3.0.0",
+                "snapdragon-util": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "qs": {
-            "version": "6.7.0",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
-            "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+        "node_modules/snapdragon-node/node_modules/define-property": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+            "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+            "dev": true,
+            "dependencies": {
+                "is-descriptor": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "querystring": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-            "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
-            "dev": true
+        "node_modules/snapdragon-node/node_modules/is-descriptor": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+            "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+            "dev": true,
+            "dependencies": {
+                "is-accessor-descriptor": "^1.0.1",
+                "is-data-descriptor": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
         },
-        "querystring-browser": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/querystring-browser/-/querystring-browser-1.0.4.tgz",
-            "integrity": "sha1-8uNYgYQKgZvHsb9Zf68JeeZiLcY="
+        "node_modules/snapdragon-util": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+            "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+            "dev": true,
+            "dependencies": {
+                "kind-of": "^3.2.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "querystring-es3": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
-            "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+        "node_modules/snapdragon-util/node_modules/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
         },
-        "quick-lru": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
-            "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
-            "dev": true
+        "node_modules/snapdragon-util/node_modules/kind-of": {
+            "version": "3.2.2",
+            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+            "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+            "dev": true,
+            "dependencies": {
+                "is-buffer": "^1.1.5"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "raf": {
-            "version": "3.4.1",
-            "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
-            "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+        "node_modules/snapdragon/node_modules/debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
             "dev": true,
-            "requires": {
-                "performance-now": "^2.1.0"
+            "dependencies": {
+                "ms": "2.0.0"
             }
         },
-        "railroad-diagrams": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
-            "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=",
+        "node_modules/snapdragon/node_modules/ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
             "dev": true
         },
-        "randexp": {
-            "version": "0.4.6",
-            "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
-            "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
+        "node_modules/snapdragon/node_modules/source-map": {
+            "version": "0.5.7",
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+            "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
             "dev": true,
-            "requires": {
-                "discontinuous-range": "1.0.0",
-                "ret": "~0.1.10"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "randombytes": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-            "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+        "node_modules/snapdragon/node_modules/source-map-resolve": {
+            "version": "0.5.3",
+            "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+            "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+            "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
             "dev": true,
-            "requires": {
-                "safe-buffer": "^5.1.0"
+            "dependencies": {
+                "atob": "^2.1.2",
+                "decode-uri-component": "^0.2.0",
+                "resolve-url": "^0.2.1",
+                "source-map-url": "^0.4.0",
+                "urix": "^0.1.0"
             }
         },
-        "randomfill": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
-            "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+        "node_modules/socket.io": {
+            "version": "4.7.5",
+            "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz",
+            "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==",
             "dev": true,
-            "requires": {
-                "randombytes": "^2.0.5",
-                "safe-buffer": "^5.1.0"
+            "dependencies": {
+                "accepts": "~1.3.4",
+                "base64id": "~2.0.0",
+                "cors": "~2.8.5",
+                "debug": "~4.3.2",
+                "engine.io": "~6.5.2",
+                "socket.io-adapter": "~2.5.2",
+                "socket.io-parser": "~4.2.4"
+            },
+            "engines": {
+                "node": ">=10.2.0"
             }
         },
-        "range-parser": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-            "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
-        },
-        "raw-body": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
-            "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
-            "requires": {
-                "bytes": "3.1.0",
-                "http-errors": "1.7.2",
-                "iconv-lite": "0.4.24",
-                "unpipe": "1.0.0"
+        "node_modules/socket.io-adapter": {
+            "version": "2.5.4",
+            "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz",
+            "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==",
+            "dev": true,
+            "dependencies": {
+                "debug": "~4.3.4",
+                "ws": "~8.11.0"
             }
         },
-        "rc": {
-            "version": "1.2.8",
-            "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
-            "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+        "node_modules/socket.io-adapter/node_modules/ws": {
+            "version": "8.11.0",
+            "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+            "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
             "dev": true,
-            "requires": {
-                "deep-extend": "^0.6.0",
-                "ini": "~1.3.0",
-                "minimist": "^1.2.0",
-                "strip-json-comments": "~2.0.1"
+            "engines": {
+                "node": ">=10.0.0"
             },
-            "dependencies": {
-                "minimist": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-                    "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-                    "dev": true
+            "peerDependencies": {
+                "bufferutil": "^4.0.1",
+                "utf-8-validate": "^5.0.2"
+            },
+            "peerDependenciesMeta": {
+                "bufferutil": {
+                    "optional": true
+                },
+                "utf-8-validate": {
+                    "optional": true
                 }
             }
         },
-        "react": {
-            "version": "16.9.0",
-            "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz",
-            "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==",
-            "requires": {
-                "loose-envify": "^1.1.0",
-                "object-assign": "^4.1.1",
-                "prop-types": "^15.6.2"
+        "node_modules/socket.io-client": {
+            "version": "4.7.5",
+            "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz",
+            "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==",
+            "dependencies": {
+                "@socket.io/component-emitter": "~3.1.0",
+                "debug": "~4.3.2",
+                "engine.io-client": "~6.5.2",
+                "socket.io-parser": "~4.2.4"
+            },
+            "engines": {
+                "node": ">=10.0.0"
             }
         },
-        "react-base16-styling": {
-            "version": "0.5.3",
-            "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.5.3.tgz",
-            "integrity": "sha1-OFjyTpxN2MvT9wLz901YHKKRcmk=",
-            "requires": {
-                "base16": "^1.0.0",
-                "lodash.curry": "^4.0.1",
-                "lodash.flow": "^3.3.0",
-                "pure-color": "^1.2.0"
-            }
-        },
-        "react-dock": {
-            "version": "0.2.4",
-            "resolved": "https://registry.npmjs.org/react-dock/-/react-dock-0.2.4.tgz",
-            "integrity": "sha1-5yfcdVCztzEWY13LnA4E0Lev4Xw=",
-            "requires": {
-                "lodash.debounce": "^3.1.1",
-                "prop-types": "^15.5.8"
-            }
-        },
-        "react-dom": {
-            "version": "16.9.0",
-            "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz",
-            "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==",
-            "requires": {
-                "loose-envify": "^1.1.0",
-                "object-assign": "^4.1.1",
-                "prop-types": "^15.6.2",
-                "scheduler": "^0.15.0"
+        "node_modules/socket.io-parser": {
+            "version": "4.2.4",
+            "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+            "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
+            "dependencies": {
+                "@socket.io/component-emitter": "~3.1.0",
+                "debug": "~4.3.1"
+            },
+            "engines": {
+                "node": ">=10.0.0"
             }
         },
-        "react-fast-compare": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
-            "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
-        },
-        "react-frame-component": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/react-frame-component/-/react-frame-component-4.1.1.tgz",
-            "integrity": "sha512-NfJp90AvYA1R6+uSYafQ+n+UM2HjHqi4WGHeprVXa6quU9d8o6ZFRzQ36uemY82dlkZFzf2jigFx6E4UzNFajA=="
+        "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==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "react-helmet": {
-            "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-5.2.1.tgz",
-            "integrity": "sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA==",
-            "requires": {
-                "object-assign": "^4.1.1",
-                "prop-types": "^15.5.4",
-                "react-fast-compare": "^2.0.2",
-                "react-side-effect": "^1.1.0"
+        "node_modules/source-map-js": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+            "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "react-is": {
-            "version": "16.9.0",
-            "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
-            "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw=="
+        "node_modules/source-map-resolve": {
+            "version": "0.6.0",
+            "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
+            "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
+            "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
+            "dev": true,
+            "dependencies": {
+                "atob": "^2.1.2",
+                "decode-uri-component": "^0.2.0"
+            }
         },
-        "react-json-tree": {
-            "version": "0.11.2",
-            "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.11.2.tgz",
-            "integrity": "sha512-aYhUPj1y5jR3ZQ+G3N7aL8FbTyO03iLwnVvvEikLcNFqNTyabdljo9xDftZndUBFyyyL0aK3qGO9+8EilILHUw==",
-            "requires": {
-                "babel-runtime": "^6.6.1",
-                "prop-types": "^15.5.8",
-                "react-base16-styling": "^0.5.1"
+        "node_modules/source-map-support": {
+            "version": "0.5.21",
+            "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+            "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+            "dependencies": {
+                "buffer-from": "^1.0.0",
+                "source-map": "^0.6.0"
             }
         },
-        "react-pure-render": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/react-pure-render/-/react-pure-render-1.0.2.tgz",
-            "integrity": "sha1-nYqSjH8sN1E8LQZOV7Pjw1bp+rs="
+        "node_modules/source-map-url": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+            "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+            "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
+            "dev": true
         },
-        "react-redux": {
-            "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.1.1.tgz",
-            "integrity": "sha512-QsW0vcmVVdNQzEkrgzh2W3Ksvr8cqpAv5FhEk7tNEft+5pp7rXxAudTz3VOPawRkLIepItpkEIyLcN/VVXzjTg==",
-            "requires": {
-                "@babel/runtime": "^7.5.5",
-                "hoist-non-react-statics": "^3.3.0",
-                "invariant": "^2.2.4",
-                "loose-envify": "^1.4.0",
-                "prop-types": "^15.7.2",
-                "react-is": "^16.9.0"
+        "node_modules/sparkles": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz",
+            "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==",
+            "dev": true,
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "react-router": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.0.tgz",
-            "integrity": "sha512-n9HXxaL/6yRlig9XPfGyagI8+bUNdqcu7FUAx0/Z+Us22Z8iHsbkyJ21Inebn9HOxI5Nxlfc8GNabkNSeXfhqw==",
-            "requires": {
-                "@babel/runtime": "^7.1.2",
-                "history": "^4.9.0",
-                "hoist-non-react-statics": "^3.1.0",
-                "loose-envify": "^1.3.1",
-                "mini-create-react-context": "^0.3.0",
-                "path-to-regexp": "^1.7.0",
-                "prop-types": "^15.6.2",
-                "react-is": "^16.6.0",
-                "tiny-invariant": "^1.0.2",
-                "tiny-warning": "^1.0.0"
-            },
+        "node_modules/spdx-correct": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+            "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
             "dependencies": {
-                "isarray": {
-                    "version": "0.0.1",
-                    "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-                    "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
-                },
-                "path-to-regexp": {
-                    "version": "1.7.0",
-                    "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
-                    "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
-                    "requires": {
-                        "isarray": "0.0.1"
-                    }
-                }
+                "spdx-expression-parse": "^3.0.0",
+                "spdx-license-ids": "^3.0.0"
             }
         },
-        "react-router-config": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.0.tgz",
-            "integrity": "sha512-nEQSwKsvyrDMlxrULjjMJz9TxUuZNuJmzZbaUr65i8HM9wqdJOwksLwrWGds7ZdVBOtXWXFNx+CHMVutBzgGeA==",
-            "requires": {
-                "@babel/runtime": "^7.1.2"
+        "node_modules/spdx-exceptions": {
+            "version": "2.5.0",
+            "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+            "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="
+        },
+        "node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+            "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
             }
         },
-        "react-router-dom": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.1.0.tgz",
-            "integrity": "sha512-OkxKbMKjO7IkYqnoaZNX19MnwgjhxwZE871cPUTq0YU2wpIw7QwGxSnSoNRMOa7wO1TwvJJMFpgiEB4C/gVhTw==",
-            "requires": {
-                "@babel/runtime": "^7.1.2",
-                "history": "^4.9.0",
-                "loose-envify": "^1.3.1",
-                "prop-types": "^15.6.2",
-                "react-router": "5.1.0",
-                "tiny-invariant": "^1.0.2",
-                "tiny-warning": "^1.0.0"
+        "node_modules/spdx-license-ids": {
+            "version": "3.0.17",
+            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
+            "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg=="
+        },
+        "node_modules/spdy": {
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+            "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
+            "dependencies": {
+                "debug": "^4.1.0",
+                "handle-thing": "^2.0.0",
+                "http-deceiver": "^1.2.7",
+                "select-hose": "^2.0.0",
+                "spdy-transport": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
-        "react-side-effect": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.2.0.tgz",
-            "integrity": "sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w==",
-            "requires": {
-                "shallowequal": "^1.0.1"
-            }
-        },
-        "react-syntax-highlighter": {
-            "version": "11.0.2",
-            "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz",
-            "integrity": "sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww==",
-            "requires": {
-                "@babel/runtime": "^7.3.1",
-                "highlight.js": "~9.13.0",
-                "lowlight": "~1.11.0",
-                "prismjs": "^1.8.4",
-                "refractor": "^2.4.1"
-            }
-        },
-        "react-test-renderer": {
-            "version": "16.9.0",
-            "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.9.0.tgz",
-            "integrity": "sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ==",
-            "dev": true,
-            "requires": {
-                "object-assign": "^4.1.1",
-                "prop-types": "^15.6.2",
-                "react-is": "^16.9.0",
-                "scheduler": "^0.15.0"
+        "node_modules/spdy-transport": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+            "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+            "dependencies": {
+                "debug": "^4.1.0",
+                "detect-node": "^2.0.4",
+                "hpack.js": "^2.1.6",
+                "obuf": "^1.1.2",
+                "readable-stream": "^3.0.6",
+                "wbuf": "^1.7.3"
             }
         },
-        "read": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
-            "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+        "node_modules/specificity": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
+            "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
             "dev": true,
-            "requires": {
-                "mute-stream": "~0.0.4"
+            "bin": {
+                "specificity": "bin/specificity"
             }
         },
-        "read-pkg": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
-            "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
-            "requires": {
-                "load-json-file": "^4.0.0",
-                "normalize-package-data": "^2.3.2",
-                "path-type": "^3.0.0"
-            },
+        "node_modules/split-string": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+            "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+            "dev": true,
             "dependencies": {
-                "path-type": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-                    "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
-                    "requires": {
-                        "pify": "^3.0.0"
-                    }
-                },
-                "pify": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-                    "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
-                }
+                "extend-shallow": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "read-pkg-up": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
-            "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
+        "node_modules/split-string/node_modules/extend-shallow": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+            "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
             "dev": true,
-            "requires": {
-                "find-up": "^3.0.0",
-                "read-pkg": "^3.0.0"
+            "dependencies": {
+                "assign-symbols": "^1.0.0",
+                "is-extendable": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "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==",
-            "requires": {
-                "core-util-is": "~1.0.0",
-                "inherits": "~2.0.3",
-                "isarray": "~1.0.0",
-                "process-nextick-args": "~2.0.0",
-                "safe-buffer": "~5.1.1",
-                "string_decoder": "~1.1.1",
-                "util-deprecate": "~1.0.1"
+        "node_modules/split-string/node_modules/is-extendable": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+            "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+            "dev": true,
+            "dependencies": {
+                "is-plain-object": "^2.0.4"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "readdir-recursive": {
-            "version": "0.0.4",
-            "resolved": "https://registry.npmjs.org/readdir-recursive/-/readdir-recursive-0.0.4.tgz",
-            "integrity": "sha1-mvQ1q6nFi9gNvclIi025up8SMB8=",
+        "node_modules/sprintf-js": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+            "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
             "dev": true
         },
-        "readdirp": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
-            "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
-            "requires": {
-                "graceful-fs": "^4.1.11",
-                "micromatch": "^3.1.10",
-                "readable-stream": "^2.0.2"
-            }
+        "node_modules/stable": {
+            "version": "0.1.8",
+            "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+            "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+            "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility"
         },
-        "realpath-native": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
-            "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
+        "node_modules/stack-trace": {
+            "version": "0.0.10",
+            "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+            "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
             "dev": true,
-            "requires": {
-                "util.promisify": "^1.0.0"
+            "engines": {
+                "node": "*"
             }
         },
-        "rechoir": {
-            "version": "0.6.2",
-            "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
-            "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+        "node_modules/static-extend": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+            "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
             "dev": true,
-            "requires": {
-                "resolve": "^1.1.6"
+            "dependencies": {
+                "define-property": "^0.2.5",
+                "object-copy": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "redbox-react": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/redbox-react/-/redbox-react-1.6.0.tgz",
-            "integrity": "sha512-mLjM5eYR41yOp5YKHpd3syFeGq6B4Wj5vZr64nbLvTZW5ZLff4LYk7VE4ITpVxkZpCY6OZuqh0HiP3A3uEaCpg==",
-            "requires": {
-                "error-stack-parser": "^1.3.6",
-                "object-assign": "^4.0.1",
-                "prop-types": "^15.5.4",
-                "sourcemapped-stacktrace": "^1.1.6"
+        "node_modules/statuses": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+            "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+            "engines": {
+                "node": ">= 0.8"
             }
         },
-        "redent": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
-            "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
-            "dev": true,
-            "requires": {
-                "indent-string": "^2.1.0",
-                "strip-indent": "^1.0.1"
-            },
-            "dependencies": {
-                "indent-string": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
-                    "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
-                    "dev": true,
-                    "requires": {
-                        "repeating": "^2.0.0"
-                    }
-                }
+        "node_modules/stream-browserify": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
+            "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
+            "dev": true,
+            "dependencies": {
+                "inherits": "~2.0.4",
+                "readable-stream": "^3.5.0"
             }
         },
-        "redux": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.4.tgz",
-            "integrity": "sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==",
-            "requires": {
-                "loose-envify": "^1.4.0",
-                "symbol-observable": "^1.2.0"
+        "node_modules/stream-composer": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz",
+            "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==",
+            "dev": true,
+            "dependencies": {
+                "streamx": "^2.13.2"
             }
         },
-        "redux-devtools": {
-            "version": "3.5.0",
-            "resolved": "https://registry.npmjs.org/redux-devtools/-/redux-devtools-3.5.0.tgz",
-            "integrity": "sha512-pGU8TZNvWxPaCCE432AGm6H6alQbAz80gQM5CzM3SjX9/oSNu/HPF17xFdPQJOXasqyih1Gv167kZDTRe7r0iQ==",
-            "requires": {
-                "lodash": "^4.2.0",
-                "prop-types": "^15.5.7",
-                "redux-devtools-instrument": "^1.9.0"
-            }
+        "node_modules/stream-exhaust": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
+            "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
+            "dev": true
         },
-        "redux-devtools-dock-monitor": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/redux-devtools-dock-monitor/-/redux-devtools-dock-monitor-1.1.3.tgz",
-            "integrity": "sha512-yAXzoI0lpjv19CxVuw8RECeFWUVdyzayqnkX8ePZyeXV2ZgIk4T+rKx82Wk+REP1y3rl8o1/oFDq4B7EobOqMg==",
-            "requires": {
-                "babel-runtime": "^6.2.0",
-                "parse-key": "^0.2.1",
-                "prop-types": "^15.5.8",
-                "react-dock": "^0.2.4",
-                "react-pure-render": "^1.0.2"
-            }
-        },
-        "redux-devtools-instrument": {
-            "version": "1.9.6",
-            "resolved": "https://registry.npmjs.org/redux-devtools-instrument/-/redux-devtools-instrument-1.9.6.tgz",
-            "integrity": "sha512-MwvY4cLEB2tIfWWBzrUR02UM9qRG2i7daNzywRvabOSVdvAY7s9BxSwMmVRH1Y/7QWjplNtOwgT0apKhHg2Qew==",
-            "requires": {
-                "lodash": "^4.2.0",
-                "symbol-observable": "^1.0.2"
-            }
-        },
-        "redux-devtools-log-monitor": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.4.0.tgz",
-            "integrity": "sha1-cWuVgO2iozHNNZo2qgnjoWAqhUs=",
-            "requires": {
-                "lodash.debounce": "^4.0.4",
-                "prop-types": "^15.0.0",
-                "react-json-tree": "^0.11.0",
-                "react-pure-render": "^1.0.2",
-                "redux-devtools-themes": "^1.0.0"
-            },
-            "dependencies": {
-                "lodash.debounce": {
-                    "version": "4.0.8",
-                    "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-                    "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
-                }
+        "node_modules/stream-http": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz",
+            "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==",
+            "dev": true,
+            "dependencies": {
+                "builtin-status-codes": "^3.0.0",
+                "inherits": "^2.0.4",
+                "readable-stream": "^3.6.0",
+                "xtend": "^4.0.2"
             }
         },
-        "redux-devtools-themes": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/redux-devtools-themes/-/redux-devtools-themes-1.0.0.tgz",
-            "integrity": "sha1-xILc48U3OXYEX0ATSQfZ3LOuPV0=",
-            "requires": {
-                "base16": "^1.0.0"
-            }
+        "node_modules/stream-shift": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
+            "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
+            "dev": true
         },
-        "redux-local-persist": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/redux-local-persist/-/redux-local-persist-0.1.0.tgz",
-            "integrity": "sha512-bR6StAN29g6TmixOnI8hki4JRC+sFiKpzbzbAWsFG7V7Bi6pDZgwi/IzSvPWbqFgyX5ZMlV1/UJluJV7AXFCDw==",
-            "requires": {
-                "moment": "^2.23.0",
-                "object-path": "^0.11.4",
-                "underscore": "^1.9.1"
+        "node_modules/stream-throttle": {
+            "version": "0.1.3",
+            "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
+            "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==",
+            "dev": true,
+            "dependencies": {
+                "commander": "^2.2.0",
+                "limiter": "^1.0.5"
+            },
+            "bin": {
+                "throttleproxy": "bin/throttleproxy.js"
+            },
+            "engines": {
+                "node": ">= 0.10.0"
             }
         },
-        "redux-super-thunk": {
-            "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/redux-super-thunk/-/redux-super-thunk-0.0.8.tgz",
-            "integrity": "sha512-7MBfzdUCeNAyE+R8adRDtwdzSznmDQfzWFRSey+TMrdwLIxWyHeRZt/z6L/RD7uFOscp7vZVhGJW0TeXJby+5A=="
-        },
-        "reflect.ownkeys": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz",
-            "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=",
+        "node_modules/stream-throttle/node_modules/commander": {
+            "version": "2.20.3",
+            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
             "dev": true
         },
-        "refractor": {
-            "version": "2.10.0",
-            "resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.0.tgz",
-            "integrity": "sha512-maW2ClIkm9IYruuFYGTqKzj+m31heq92wlheW4h7bOstP+gf8bocmMec+j7ljLcaB1CAID85LMB3moye31jH1g==",
-            "requires": {
-                "hastscript": "^5.0.0",
-                "parse-entities": "^1.1.2",
-                "prismjs": "~1.17.0"
+        "node_modules/stream-to-array": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
+            "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==",
+            "dev": true,
+            "dependencies": {
+                "any-promise": "^1.1.0"
             }
         },
-        "regenerate": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
-            "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
-            "dev": true
+        "node_modules/streamx": {
+            "version": "2.18.0",
+            "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
+            "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==",
+            "dev": true,
+            "dependencies": {
+                "fast-fifo": "^1.3.2",
+                "queue-tick": "^1.0.1",
+                "text-decoder": "^1.1.0"
+            },
+            "optionalDependencies": {
+                "bare-events": "^2.2.0"
+            }
         },
-        "regenerate-unicode-properties": {
-            "version": "8.1.0",
-            "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
-            "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
+        "node_modules/string_decoder": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+            "dependencies": {
+                "safe-buffer": "~5.2.0"
+            }
+        },
+        "node_modules/string-argv": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+            "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
             "dev": true,
-            "requires": {
-                "regenerate": "^1.4.0"
+            "engines": {
+                "node": ">=0.6.19"
             }
         },
-        "regenerator-runtime": {
-            "version": "0.13.3",
-            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
-            "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
+        "node_modules/string-width": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+            "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+            "dev": true,
+            "dependencies": {
+                "is-fullwidth-code-point": "^2.0.0",
+                "strip-ansi": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "regenerator-transform": {
-            "version": "0.14.1",
-            "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
-            "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
+        "node_modules/string.prototype.matchall": {
+            "version": "4.0.11",
+            "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
+            "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
             "dev": true,
-            "requires": {
-                "private": "^0.1.6"
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.0.0",
+                "get-intrinsic": "^1.2.4",
+                "gopd": "^1.0.1",
+                "has-symbols": "^1.0.3",
+                "internal-slot": "^1.0.7",
+                "regexp.prototype.flags": "^1.5.2",
+                "set-function-name": "^2.0.2",
+                "side-channel": "^1.0.6"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "regex-not": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
-            "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
-            "requires": {
-                "extend-shallow": "^3.0.2",
-                "safe-regex": "^1.1.0"
+        "node_modules/string.prototype.padend": {
+            "version": "3.1.6",
+            "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz",
+            "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "regexpp": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-            "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
-            "dev": true
+        "node_modules/string.prototype.trim": {
+            "version": "1.2.9",
+            "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+            "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.0",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
-        "regexpu-core": {
-            "version": "4.6.0",
-            "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
-            "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
-            "dev": true,
-            "requires": {
-                "regenerate": "^1.4.0",
-                "regenerate-unicode-properties": "^8.1.0",
-                "regjsgen": "^0.5.0",
-                "regjsparser": "^0.6.0",
-                "unicode-match-property-ecmascript": "^1.0.4",
-                "unicode-match-property-value-ecmascript": "^1.1.0"
+        "node_modules/string.prototype.trimend": {
+            "version": "1.0.8",
+            "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+            "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-object-atoms": "^1.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "registry-auth-token": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
-            "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
-            "dev": true,
-            "requires": {
-                "rc": "^1.1.6",
-                "safe-buffer": "^5.0.1"
+        "node_modules/string.prototype.trimstart": {
+            "version": "1.0.8",
+            "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+            "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "registry-url": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
-            "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+        "node_modules/stringify-object": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+            "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
             "dev": true,
-            "requires": {
-                "rc": "^1.0.1"
+            "dependencies": {
+                "get-own-enumerable-property-symbols": "^3.0.0",
+                "is-obj": "^1.0.1",
+                "is-regexp": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "regjsgen": {
-            "version": "0.5.0",
-            "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
-            "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
-            "dev": true
-        },
-        "regjsparser": {
-            "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
-            "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+        "node_modules/strip-ansi": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+            "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
             "dev": true,
-            "requires": {
-                "jsesc": "~0.5.0"
-            },
             "dependencies": {
-                "jsesc": {
-                    "version": "0.5.0",
-                    "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-                    "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
-                    "dev": true
-                }
+                "ansi-regex": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "remark": {
-            "version": "10.0.1",
-            "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz",
-            "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==",
+        "node_modules/strip-bom": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+            "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
             "dev": true,
-            "requires": {
-                "remark-parse": "^6.0.0",
-                "remark-stringify": "^6.0.0",
-                "unified": "^7.0.0"
+            "dependencies": {
+                "is-utf8": "^0.2.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "remark-parse": {
-            "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz",
-            "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==",
-            "dev": true,
-            "requires": {
-                "collapse-white-space": "^1.0.2",
-                "is-alphabetical": "^1.0.0",
-                "is-decimal": "^1.0.0",
-                "is-whitespace-character": "^1.0.0",
-                "is-word-character": "^1.0.0",
-                "markdown-escapes": "^1.0.0",
-                "parse-entities": "^1.1.0",
-                "repeat-string": "^1.5.4",
-                "state-toggle": "^1.0.0",
-                "trim": "0.0.1",
-                "trim-trailing-lines": "^1.0.0",
-                "unherit": "^1.0.4",
-                "unist-util-remove-position": "^1.0.0",
-                "vfile-location": "^2.0.0",
-                "xtend": "^4.0.1"
-            }
-        },
-        "remark-stringify": {
-            "version": "6.0.4",
-            "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz",
-            "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==",
-            "dev": true,
-            "requires": {
-                "ccount": "^1.0.0",
-                "is-alphanumeric": "^1.0.0",
-                "is-decimal": "^1.0.0",
-                "is-whitespace-character": "^1.0.0",
-                "longest-streak": "^2.0.1",
-                "markdown-escapes": "^1.0.0",
-                "markdown-table": "^1.1.0",
-                "mdast-util-compact": "^1.0.0",
-                "parse-entities": "^1.0.2",
-                "repeat-string": "^1.5.4",
-                "state-toggle": "^1.0.0",
-                "stringify-entities": "^1.0.1",
-                "unherit": "^1.0.4",
-                "xtend": "^4.0.1"
-            }
-        },
-        "remove-bom-buffer": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
-            "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
+        "node_modules/strip-bom-buf": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz",
+            "integrity": "sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==",
             "dev": true,
-            "requires": {
-                "is-buffer": "^1.1.5",
+            "dependencies": {
                 "is-utf8": "^0.2.1"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "remove-bom-stream": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
-            "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
+        "node_modules/strip-bom-stream": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz",
+            "integrity": "sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==",
             "dev": true,
-            "requires": {
-                "remove-bom-buffer": "^3.0.0",
-                "safe-buffer": "^5.1.0",
-                "through2": "^2.0.3"
+            "dependencies": {
+                "first-chunk-stream": "^2.0.0",
+                "strip-bom": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "remove-trailing-separator": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-            "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
-        },
-        "repeat-element": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
-            "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
-        },
-        "repeat-string": {
-            "version": "1.6.1",
-            "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-            "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
-        },
-        "repeating": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
-            "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+        "node_modules/strip-bom-string": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+            "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
             "dev": true,
-            "requires": {
-                "is-finite": "^1.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "replace-ext": {
+        "node_modules/strip-eof": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
-            "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
-            "dev": true
-        },
-        "replace-homedir": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
-            "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=",
+            "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+            "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
             "dev": true,
-            "requires": {
-                "homedir-polyfill": "^1.0.1",
-                "is-absolute": "^1.0.0",
-                "remove-trailing-separator": "^1.1.0"
-            }
-        },
-        "request": {
-            "version": "2.88.0",
-            "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
-            "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
-            "dev": true,
-            "requires": {
-                "aws-sign2": "~0.7.0",
-                "aws4": "^1.8.0",
-                "caseless": "~0.12.0",
-                "combined-stream": "~1.0.6",
-                "extend": "~3.0.2",
-                "forever-agent": "~0.6.1",
-                "form-data": "~2.3.2",
-                "har-validator": "~5.1.0",
-                "http-signature": "~1.2.0",
-                "is-typedarray": "~1.0.0",
-                "isstream": "~0.1.2",
-                "json-stringify-safe": "~5.0.1",
-                "mime-types": "~2.1.19",
-                "oauth-sign": "~0.9.0",
-                "performance-now": "^2.1.0",
-                "qs": "~6.5.2",
-                "safe-buffer": "^5.1.2",
-                "tough-cookie": "~2.4.3",
-                "tunnel-agent": "^0.6.0",
-                "uuid": "^3.3.2"
-            },
-            "dependencies": {
-                "qs": {
-                    "version": "6.5.2",
-                    "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-                    "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
-                    "dev": true
-                }
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "request-promise-core": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
-            "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
+        "node_modules/strip-final-newline": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+            "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
             "dev": true,
-            "requires": {
-                "lodash": "^4.17.11"
+            "engines": {
+                "node": ">=6"
             }
         },
-        "request-promise-native": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
-            "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
+        "node_modules/strip-indent": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+            "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
             "dev": true,
-            "requires": {
-                "request-promise-core": "1.1.2",
-                "stealthy-require": "^1.1.1",
-                "tough-cookie": "^2.3.3"
+            "dependencies": {
+                "min-indent": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "require-directory": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-            "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-            "dev": true
-        },
-        "require-main-filename": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-            "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-            "dev": true
-        },
-        "requires-port": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-            "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+        "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": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "reselect": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz",
-            "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=",
+        "node_modules/style-search": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
+            "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
             "dev": true
         },
-        "resolve": {
-            "version": "1.12.0",
-            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
-            "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
-            "requires": {
-                "path-parse": "^1.0.6"
-            }
-        },
-        "resolve-cwd": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
-            "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+        "node_modules/stylelint": {
+            "version": "13.13.1",
+            "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz",
+            "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==",
             "dev": true,
-            "requires": {
-                "resolve-from": "^3.0.0"
-            },
             "dependencies": {
-                "resolve-from": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
-                    "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-                    "dev": true
-                }
+                "@stylelint/postcss-css-in-js": "^0.37.2",
+                "@stylelint/postcss-markdown": "^0.36.2",
+                "autoprefixer": "^9.8.6",
+                "balanced-match": "^2.0.0",
+                "chalk": "^4.1.1",
+                "cosmiconfig": "^7.0.0",
+                "debug": "^4.3.1",
+                "execall": "^2.0.0",
+                "fast-glob": "^3.2.5",
+                "fastest-levenshtein": "^1.0.12",
+                "file-entry-cache": "^6.0.1",
+                "get-stdin": "^8.0.0",
+                "global-modules": "^2.0.0",
+                "globby": "^11.0.3",
+                "globjoin": "^0.1.4",
+                "html-tags": "^3.1.0",
+                "ignore": "^5.1.8",
+                "import-lazy": "^4.0.0",
+                "imurmurhash": "^0.1.4",
+                "known-css-properties": "^0.21.0",
+                "lodash": "^4.17.21",
+                "log-symbols": "^4.1.0",
+                "mathml-tag-names": "^2.1.3",
+                "meow": "^9.0.0",
+                "micromatch": "^4.0.4",
+                "normalize-selector": "^0.2.0",
+                "postcss": "^7.0.35",
+                "postcss-html": "^0.36.0",
+                "postcss-less": "^3.1.4",
+                "postcss-media-query-parser": "^0.2.3",
+                "postcss-resolve-nested-selector": "^0.1.1",
+                "postcss-safe-parser": "^4.0.2",
+                "postcss-sass": "^0.4.4",
+                "postcss-scss": "^2.1.1",
+                "postcss-selector-parser": "^6.0.5",
+                "postcss-syntax": "^0.36.2",
+                "postcss-value-parser": "^4.1.0",
+                "resolve-from": "^5.0.0",
+                "slash": "^3.0.0",
+                "specificity": "^0.4.1",
+                "string-width": "^4.2.2",
+                "strip-ansi": "^6.0.0",
+                "style-search": "^0.1.0",
+                "sugarss": "^2.0.0",
+                "svg-tags": "^1.0.0",
+                "table": "^6.6.0",
+                "v8-compile-cache": "^2.3.0",
+                "write-file-atomic": "^3.0.3"
+            },
+            "bin": {
+                "stylelint": "bin/stylelint.js"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/stylelint"
             }
         },
-        "resolve-dir": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
-            "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+        "node_modules/stylelint/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,
-            "requires": {
-                "expand-tilde": "^2.0.0",
-                "global-modules": "^1.0.0"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "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
-        },
-        "resolve-options": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
-            "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
+        "node_modules/stylelint/node_modules/autoprefixer": {
+            "version": "9.8.8",
+            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
+            "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
             "dev": true,
-            "requires": {
-                "value-or-function": "^3.0.0"
+            "dependencies": {
+                "browserslist": "^4.12.0",
+                "caniuse-lite": "^1.0.30001109",
+                "normalize-range": "^0.1.2",
+                "num2fraction": "^1.2.2",
+                "picocolors": "^0.2.1",
+                "postcss": "^7.0.32",
+                "postcss-value-parser": "^4.1.0"
+            },
+            "bin": {
+                "autoprefixer": "bin/autoprefixer"
+            },
+            "funding": {
+                "type": "tidelift",
+                "url": "https://tidelift.com/funding/github/npm/autoprefixer"
             }
         },
-        "resolve-pathname": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
-            "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
-        },
-        "resolve-url": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-            "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+        "node_modules/stylelint/node_modules/balanced-match": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+            "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+            "dev": true
         },
-        "resp-modifier": {
-            "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
-            "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=",
+        "node_modules/stylelint/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,
-            "requires": {
-                "debug": "^2.2.0",
-                "minimatch": "^3.0.2"
+            "dependencies": {
+                "flat-cache": "^3.0.4"
+            },
+            "engines": {
+                "node": "^10.12.0 || >=12.0.0"
             }
         },
-        "restore-cursor": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
-            "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+        "node_modules/stylelint/node_modules/flat-cache": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+            "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
             "dev": true,
-            "requires": {
-                "onetime": "^2.0.0",
-                "signal-exit": "^3.0.2"
+            "dependencies": {
+                "flatted": "^3.2.9",
+                "keyv": "^4.5.3",
+                "rimraf": "^3.0.2"
+            },
+            "engines": {
+                "node": "^10.12.0 || >=12.0.0"
             }
         },
-        "ret": {
-            "version": "0.1.15",
-            "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
-            "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
-        },
-        "reusify": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-            "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
-        },
-        "revalidator": {
-            "version": "0.1.8",
-            "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz",
-            "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=",
-            "dev": true
-        },
-        "rgb-hex": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-2.1.0.tgz",
-            "integrity": "sha1-x3PF/iJoolV42SU5qCp6XOU77aY=",
+        "node_modules/stylelint/node_modules/flatted": {
+            "version": "3.3.1",
+            "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+            "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
             "dev": true
         },
-        "right-align": {
-            "version": "0.1.3",
-            "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
-            "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+        "node_modules/stylelint/node_modules/get-stdin": {
+            "version": "8.0.0",
+            "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
+            "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
             "dev": true,
-            "requires": {
-                "align-text": "^0.1.1"
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "rimraf": {
-            "version": "2.7.1",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-            "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+        "node_modules/stylelint/node_modules/global-modules": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+            "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
             "dev": true,
-            "requires": {
-                "glob": "^7.1.3"
+            "dependencies": {
+                "global-prefix": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
             }
         },
-        "ripemd160": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
-            "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+        "node_modules/stylelint/node_modules/global-prefix": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+            "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
             "dev": true,
-            "requires": {
-                "hash-base": "^3.0.0",
-                "inherits": "^2.0.1"
+            "dependencies": {
+                "ini": "^1.3.5",
+                "kind-of": "^6.0.2",
+                "which": "^1.3.1"
+            },
+            "engines": {
+                "node": ">=6"
             }
         },
-        "rst-selector-parser": {
-            "version": "2.2.3",
-            "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
-            "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=",
+        "node_modules/stylelint/node_modules/ignore": {
+            "version": "5.3.1",
+            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+            "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
             "dev": true,
-            "requires": {
-                "lodash.flattendeep": "^4.4.0",
-                "nearley": "^2.7.10"
+            "engines": {
+                "node": ">= 4"
             }
         },
-        "rsvp": {
-            "version": "4.8.5",
-            "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
-            "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
-            "dev": true
-        },
-        "run-async": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
-            "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+        "node_modules/stylelint/node_modules/is-fullwidth-code-point": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+            "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
             "dev": true,
-            "requires": {
-                "is-promise": "^2.1.0"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "run-node": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz",
-            "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==",
-            "dev": true
-        },
-        "run-parallel": {
-            "version": "1.1.9",
-            "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
-            "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q=="
-        },
-        "run-queue": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
-            "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+        "node_modules/stylelint/node_modules/log-symbols": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+            "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
             "dev": true,
-            "requires": {
-                "aproba": "^1.1.1"
+            "dependencies": {
+                "chalk": "^4.1.0",
+                "is-unicode-supported": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "run-script-os": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/run-script-os/-/run-script-os-1.0.7.tgz",
-            "integrity": "sha512-H4NAhP9PiseQQm3Vpen7CHksfKGqC4dmwoVu/9th97r3XyBrMtkg4jIUiy/8dgzuI9MGwmK/7vf13Wncx+Y4bw=="
-        },
-        "rx": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
-            "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
+        "node_modules/stylelint/node_modules/picocolors": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+            "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
             "dev": true
         },
-        "rxjs": {
-            "version": "5.5.12",
-            "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
-            "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
+        "node_modules/stylelint/node_modules/postcss": {
+            "version": "7.0.39",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+            "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
             "dev": true,
-            "requires": {
-                "symbol-observable": "1.0.1"
-            },
             "dependencies": {
-                "symbol-observable": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
-                    "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
-                    "dev": true
-                }
-            }
-        },
-        "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=="
-        },
-        "safe-regex": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-            "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
-            "requires": {
-                "ret": "~0.1.10"
+                "picocolors": "^0.2.1",
+                "source-map": "^0.6.1"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/postcss/"
             }
         },
-        "safer-buffer": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-            "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
-        },
-        "sane": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
-            "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
+        "node_modules/stylelint/node_modules/slash": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
             "dev": true,
-            "requires": {
-                "@cnakazawa/watch": "^1.0.3",
-                "anymatch": "^2.0.0",
-                "capture-exit": "^2.0.0",
-                "exec-sh": "^0.3.2",
-                "execa": "^1.0.0",
-                "fb-watchman": "^2.0.0",
-                "micromatch": "^3.1.4",
-                "minimist": "^1.1.1",
-                "walker": "~1.0.5"
-            },
-            "dependencies": {
-                "minimist": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-                    "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-                    "dev": true
-                }
+            "engines": {
+                "node": ">=8"
             }
         },
-        "sass-graph": {
-            "version": "2.2.4",
-            "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
-            "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+        "node_modules/stylelint/node_modules/slice-ansi": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+            "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
             "dev": true,
-            "requires": {
-                "glob": "^7.0.0",
-                "lodash": "^4.0.0",
-                "scss-tokenizer": "^0.2.3",
-                "yargs": "^7.0.0"
-            },
             "dependencies": {
-                "camelcase": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-                    "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-                    "dev": true
-                },
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                },
-                "find-up": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-                    "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-                    "dev": true,
-                    "requires": {
-                        "path-exists": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "load-json-file": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-                    "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "parse-json": "^2.2.0",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0",
-                        "strip-bom": "^2.0.0"
-                    }
-                },
-                "parse-json": {
-                    "version": "2.2.0",
-                    "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-                    "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-                    "dev": true,
-                    "requires": {
-                        "error-ex": "^1.2.0"
-                    }
-                },
-                "path-exists": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-                    "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-                    "dev": true,
-                    "requires": {
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "path-type": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-                    "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "pify": "^2.0.0",
-                        "pinkie-promise": "^2.0.0"
-                    }
-                },
-                "pify": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                    "dev": true
-                },
-                "read-pkg": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-                    "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-                    "dev": true,
-                    "requires": {
-                        "load-json-file": "^1.0.0",
-                        "normalize-package-data": "^2.3.2",
-                        "path-type": "^1.0.0"
-                    }
-                },
-                "read-pkg-up": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-                    "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-                    "dev": true,
-                    "requires": {
-                        "find-up": "^1.0.0",
-                        "read-pkg": "^1.0.0"
-                    }
-                },
-                "require-main-filename": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-                    "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
-                    "dev": true
-                },
-                "strip-bom": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-                    "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-                    "dev": true,
-                    "requires": {
-                        "is-utf8": "^0.2.0"
-                    }
-                },
-                "yargs": {
-                    "version": "7.1.0",
-                    "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
-                    "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^3.0.0",
-                        "cliui": "^3.2.0",
-                        "decamelize": "^1.1.1",
-                        "get-caller-file": "^1.0.1",
-                        "os-locale": "^1.4.0",
-                        "read-pkg-up": "^1.0.1",
-                        "require-directory": "^2.1.1",
-                        "require-main-filename": "^1.0.1",
-                        "set-blocking": "^2.0.0",
-                        "string-width": "^1.0.2",
-                        "which-module": "^1.0.0",
-                        "y18n": "^3.2.1",
-                        "yargs-parser": "^5.0.0"
-                    }
-                },
-                "yargs-parser": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
-                    "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "sax": {
-            "version": "1.2.4",
-            "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-            "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
-            "dev": true
-        },
-        "scheduler": {
-            "version": "0.15.0",
-            "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",
-            "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==",
-            "requires": {
-                "loose-envify": "^1.1.0",
-                "object-assign": "^4.1.1"
+                "ansi-styles": "^4.0.0",
+                "astral-regex": "^2.0.0",
+                "is-fullwidth-code-point": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/slice-ansi?sponsor=1"
             }
         },
-        "schema-utils": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-            "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+        "node_modules/stylelint/node_modules/string-width": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
             "dev": true,
-            "requires": {
-                "ajv": "^6.1.0",
-                "ajv-errors": "^1.0.0",
-                "ajv-keywords": "^3.1.0"
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "scss-tokenizer": {
-            "version": "0.2.3",
-            "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
-            "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
-            "dev": true,
-            "requires": {
-                "js-base64": "^2.1.8",
-                "source-map": "^0.4.2"
-            },
-            "dependencies": {
-                "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": ">=0.0.4"
-                    }
-                }
+        "node_modules/stylelint/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"
             }
         },
-        "seek-bzip": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
-            "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
+        "node_modules/stylelint/node_modules/table": {
+            "version": "6.8.2",
+            "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
+            "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
             "dev": true,
-            "requires": {
-                "commander": "~2.8.1"
-            },
             "dependencies": {
-                "commander": {
-                    "version": "2.8.1",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
-                    "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
-                    "dev": true,
-                    "requires": {
-                        "graceful-readlink": ">= 1.0.0"
-                    }
-                }
+                "ajv": "^8.0.1",
+                "lodash.truncate": "^4.4.2",
+                "slice-ansi": "^4.0.0",
+                "string-width": "^4.2.3",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=10.0.0"
             }
         },
-        "select": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
-            "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
-            "optional": true
+        "node_modules/stylelint/node_modules/which": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+            "dev": true,
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "which": "bin/which"
+            }
         },
-        "semver": {
-            "version": "6.3.0",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-            "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+        "node_modules/sugarss": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz",
+            "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==",
+            "dev": true,
+            "dependencies": {
+                "postcss": "^7.0.2"
+            }
         },
-        "semver-compare": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
-            "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+        "node_modules/sugarss/node_modules/picocolors": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+            "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
             "dev": true
         },
-        "semver-diff": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
-            "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+        "node_modules/sugarss/node_modules/postcss": {
+            "version": "7.0.39",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+            "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
             "dev": true,
-            "requires": {
-                "semver": "^5.0.3"
-            },
             "dependencies": {
-                "semver": {
-                    "version": "5.7.1",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-                    "dev": true
-                }
+                "picocolors": "^0.2.1",
+                "source-map": "^0.6.1"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/postcss/"
             }
         },
-        "semver-greatest-satisfied-range": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
-            "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=",
-            "dev": true,
-            "requires": {
-                "sver-compat": "^1.5.0"
+        "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==",
+            "dependencies": {
+                "has-flag": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "send": {
-            "version": "0.17.1",
-            "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
-            "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
-            "requires": {
-                "debug": "2.6.9",
-                "depd": "~1.1.2",
-                "destroy": "~1.0.4",
-                "encodeurl": "~1.0.2",
-                "escape-html": "~1.0.3",
-                "etag": "~1.8.1",
-                "fresh": "0.5.2",
-                "http-errors": "~1.7.2",
-                "mime": "1.6.0",
-                "ms": "2.1.1",
-                "on-finished": "~2.3.0",
-                "range-parser": "~1.2.1",
-                "statuses": "~1.5.0"
+        "node_modules/supports-preserve-symlinks-flag": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+            "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+            "engines": {
+                "node": ">= 0.4"
             },
-            "dependencies": {
-                "ms": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-                    "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
-                }
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "serialize-javascript": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.0.tgz",
-            "integrity": "sha512-a/mxFfU00QT88umAJQsNWOnUKckhNCqOl028N48e7wFmo2/EHpTo9Wso+iJJCMrQnmFvcjto5RJdAHEvVhcyUQ=="
-        },
-        "serve-index": {
-            "version": "1.9.1",
-            "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-            "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+        "node_modules/sver": {
+            "version": "1.8.4",
+            "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz",
+            "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==",
             "dev": true,
-            "requires": {
-                "accepts": "~1.3.4",
-                "batch": "0.6.1",
-                "debug": "2.6.9",
-                "escape-html": "~1.0.3",
-                "http-errors": "~1.6.2",
-                "mime-types": "~2.1.17",
-                "parseurl": "~1.3.2"
-            },
-            "dependencies": {
-                "http-errors": {
-                    "version": "1.6.3",
-                    "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-                    "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
-                    "dev": true,
-                    "requires": {
-                        "depd": "~1.1.2",
-                        "inherits": "2.0.3",
-                        "setprototypeof": "1.1.0",
-                        "statuses": ">= 1.4.0 < 2"
-                    }
-                },
-                "inherits": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-                    "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-                    "dev": true
-                },
-                "setprototypeof": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-                    "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-                    "dev": true
-                }
+            "optionalDependencies": {
+                "semver": "^6.3.0"
             }
         },
-        "serve-static": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
-            "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
-            "requires": {
-                "encodeurl": "~1.0.2",
-                "escape-html": "~1.0.3",
-                "parseurl": "~1.3.3",
-                "send": "0.17.1"
+        "node_modules/sver/node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "dev": true,
+            "optional": true,
+            "bin": {
+                "semver": "bin/semver.js"
             }
         },
-        "server-destroy": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
-            "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
-            "dev": true
+        "node_modules/svg-parser": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+            "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
         },
-        "set-blocking": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-            "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+        "node_modules/svg-tags": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+            "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
             "dev": true
         },
-        "set-value": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
-            "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
-            "requires": {
-                "extend-shallow": "^2.0.1",
-                "is-extendable": "^0.1.1",
-                "is-plain-object": "^2.0.3",
-                "split-string": "^3.0.1"
-            },
+        "node_modules/svgo": {
+            "version": "2.8.0",
+            "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
+            "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
             "dependencies": {
-                "extend-shallow": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-                    "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-                    "requires": {
-                        "is-extendable": "^0.1.0"
-                    }
-                }
+                "@trysound/sax": "0.2.0",
+                "commander": "^7.2.0",
+                "css-select": "^4.1.3",
+                "css-tree": "^1.1.3",
+                "csso": "^4.2.0",
+                "picocolors": "^1.0.0",
+                "stable": "^0.1.8"
+            },
+            "bin": {
+                "svgo": "bin/svgo"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "setimmediate": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-            "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
-            "dev": true
+        "node_modules/svgo/node_modules/commander": {
+            "version": "7.2.0",
+            "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+            "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+            "engines": {
+                "node": ">= 10"
+            }
         },
-        "setprototypeof": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-            "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+        "node_modules/symbol-observable": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+            "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "sha.js": {
-            "version": "2.4.11",
-            "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
-            "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+        "node_modules/table": {
+            "version": "5.4.6",
+            "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+            "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.0.1"
+            "dependencies": {
+                "ajv": "^6.10.2",
+                "lodash": "^4.17.14",
+                "slice-ansi": "^2.1.0",
+                "string-width": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
-        "shallow-equals": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/shallow-equals/-/shallow-equals-1.0.0.tgz",
-            "integrity": "sha1-JLdL8cY0wR7Uxxgqbfb7MA3OQ5A="
+        "node_modules/table/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"
+            }
         },
-        "shallowequal": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
-            "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+        "node_modules/table/node_modules/ansi-regex": {
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+            "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
+            }
         },
-        "shebang-command": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-            "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-            "requires": {
-                "shebang-regex": "^1.0.0"
+        "node_modules/table/node_modules/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,
+            "dependencies": {
+                "color-convert": "^1.9.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "shebang-regex": {
+        "node_modules/table/node_modules/astral-regex": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-            "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
-        },
-        "shell-quote": {
-            "version": "1.7.2",
-            "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
-            "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
-        },
-        "shellwords": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
-            "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+            "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "shorten-css-hex": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/shorten-css-hex/-/shorten-css-hex-1.1.0.tgz",
-            "integrity": "sha1-PHrYvxahEVcLiXlGbwVfYCoyzy4=",
+        "node_modules/table/node_modules/color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
             "dev": true,
-            "requires": {
-                "is-css-color-hex": "^0.2.0"
+            "dependencies": {
+                "color-name": "1.1.3"
             }
         },
-        "signal-exit": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-            "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+        "node_modules/table/node_modules/color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
             "dev": true
         },
-        "sisteransi": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz",
-            "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==",
+        "node_modules/table/node_modules/emoji-regex": {
+            "version": "7.0.3",
+            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+            "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
             "dev": true
         },
-        "slash": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
-            "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="
+        "node_modules/table/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
         },
-        "slice-ansi": {
+        "node_modules/table/node_modules/slice-ansi": {
             "version": "2.1.0",
             "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
             "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
             "dev": true,
-            "requires": {
+            "dependencies": {
                 "ansi-styles": "^3.2.0",
                 "astral-regex": "^1.0.0",
                 "is-fullwidth-code-point": "^2.0.0"
             },
-            "dependencies": {
-                "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=",
-                    "dev": true
-                }
+            "engines": {
+                "node": ">=6"
             }
         },
-        "slugify": {
-            "version": "1.3.5",
-            "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.5.tgz",
-            "integrity": "sha512-5VCnH7aS13b0UqWOs7Ef3E5rkhFe8Od+cp7wybFv5mv/sYSRkucZlJX0bamAJky7b2TTtGvrJBWVdpdEicsSrA==",
-            "dev": true
-        },
-        "snapdragon": {
-            "version": "0.8.2",
-            "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
-            "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
-            "requires": {
-                "base": "^0.11.1",
-                "debug": "^2.2.0",
-                "define-property": "^0.2.5",
-                "extend-shallow": "^2.0.1",
-                "map-cache": "^0.2.2",
-                "source-map": "^0.5.6",
-                "source-map-resolve": "^0.5.0",
-                "use": "^3.1.0"
-            },
+        "node_modules/table/node_modules/string-width": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+            "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+            "dev": true,
             "dependencies": {
-                "define-property": {
-                    "version": "0.2.5",
-                    "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-                    "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-                    "requires": {
-                        "is-descriptor": "^0.1.0"
-                    }
-                },
-                "extend-shallow": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-                    "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-                    "requires": {
-                        "is-extendable": "^0.1.0"
-                    }
-                }
+                "emoji-regex": "^7.0.1",
+                "is-fullwidth-code-point": "^2.0.0",
+                "strip-ansi": "^5.1.0"
+            },
+            "engines": {
+                "node": ">=6"
             }
         },
-        "snapdragon-node": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-            "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
-            "requires": {
-                "define-property": "^1.0.0",
-                "isobject": "^3.0.0",
-                "snapdragon-util": "^3.0.1"
-            },
+        "node_modules/table/node_modules/strip-ansi": {
+            "version": "5.2.0",
+            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+            "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+            "dev": true,
             "dependencies": {
-                "define-property": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-                    "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-                    "requires": {
-                        "is-descriptor": "^1.0.0"
-                    }
-                },
-                "is-accessor-descriptor": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-                    "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-                    "requires": {
-                        "kind-of": "^6.0.0"
-                    }
-                },
-                "is-data-descriptor": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-                    "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-                    "requires": {
-                        "kind-of": "^6.0.0"
-                    }
-                },
-                "is-descriptor": {
-                    "version": "1.0.2",
-                    "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-                    "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-                    "requires": {
-                        "is-accessor-descriptor": "^1.0.0",
-                        "is-data-descriptor": "^1.0.0",
-                        "kind-of": "^6.0.2"
-                    }
-                }
+                "ansi-regex": "^4.1.0"
+            },
+            "engines": {
+                "node": ">=6"
             }
         },
-        "snapdragon-util": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-            "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
-            "requires": {
-                "kind-of": "^3.2.0"
-            },
+        "node_modules/tapable": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+            "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/teex": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+            "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+            "dev": true,
             "dependencies": {
-                "kind-of": {
-                    "version": "3.2.2",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-                    "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-                    "requires": {
-                        "is-buffer": "^1.1.5"
-                    }
-                }
+                "streamx": "^2.12.5"
             }
         },
-        "socket.io": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
-            "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
-            "dev": true,
-            "requires": {
-                "debug": "~3.1.0",
-                "engine.io": "~3.2.0",
-                "has-binary2": "~1.0.2",
-                "socket.io-adapter": "~1.1.0",
-                "socket.io-client": "2.1.1",
-                "socket.io-parser": "~3.2.0"
-            },
-            "dependencies": {
-                "component-emitter": {
-                    "version": "1.2.1",
-                    "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-                    "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
-                    "dev": true
-                },
-                "debug": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-                    "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "engine.io-client": {
-                    "version": "3.2.1",
-                    "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
-                    "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
-                    "dev": true,
-                    "requires": {
-                        "component-emitter": "1.2.1",
-                        "component-inherit": "0.0.3",
-                        "debug": "~3.1.0",
-                        "engine.io-parser": "~2.1.1",
-                        "has-cors": "1.1.0",
-                        "indexof": "0.0.1",
-                        "parseqs": "0.0.5",
-                        "parseuri": "0.0.5",
-                        "ws": "~3.3.1",
-                        "xmlhttprequest-ssl": "~1.5.4",
-                        "yeast": "0.1.2"
-                    }
-                },
-                "engine.io-parser": {
-                    "version": "2.1.3",
-                    "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
-                    "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
-                    "dev": true,
-                    "requires": {
-                        "after": "0.8.2",
-                        "arraybuffer.slice": "~0.0.7",
-                        "base64-arraybuffer": "0.1.5",
-                        "blob": "0.0.5",
-                        "has-binary2": "~1.0.2"
-                    }
-                },
-                "isarray": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
-                    "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
-                    "dev": true
-                },
-                "socket.io-client": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
-                    "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
-                    "dev": true,
-                    "requires": {
-                        "backo2": "1.0.2",
-                        "base64-arraybuffer": "0.1.5",
-                        "component-bind": "1.0.0",
-                        "component-emitter": "1.2.1",
-                        "debug": "~3.1.0",
-                        "engine.io-client": "~3.2.0",
-                        "has-binary2": "~1.0.2",
-                        "has-cors": "1.1.0",
-                        "indexof": "0.0.1",
-                        "object-component": "0.0.3",
-                        "parseqs": "0.0.5",
-                        "parseuri": "0.0.5",
-                        "socket.io-parser": "~3.2.0",
-                        "to-array": "0.1.4"
-                    }
-                },
-                "socket.io-parser": {
-                    "version": "3.2.0",
-                    "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
-                    "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
-                    "dev": true,
-                    "requires": {
-                        "component-emitter": "1.2.1",
-                        "debug": "~3.1.0",
-                        "isarray": "2.0.1"
-                    }
-                },
-                "ws": {
-                    "version": "3.3.3",
-                    "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
-                    "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
-                    "dev": true,
-                    "requires": {
-                        "async-limiter": "~1.0.0",
-                        "safe-buffer": "~5.1.0",
-                        "ultron": "~1.1.0"
-                    }
-                }
+        "node_modules/ternary-stream": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-3.0.0.tgz",
+            "integrity": "sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==",
+            "dev": true,
+            "dependencies": {
+                "duplexify": "^4.1.1",
+                "fork-stream": "^0.0.4",
+                "merge-stream": "^2.0.0",
+                "through2": "^3.0.1"
             }
         },
-        "socket.io-adapter": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
-            "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
-            "dev": true
+        "node_modules/ternary-stream/node_modules/through2": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
+            "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
+            "dev": true,
+            "dependencies": {
+                "inherits": "^2.0.4",
+                "readable-stream": "2 || 3"
+            }
         },
-        "socket.io-client": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz",
-            "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==",
-            "dev": true,
-            "requires": {
-                "backo2": "1.0.2",
-                "base64-arraybuffer": "0.1.5",
-                "component-bind": "1.0.0",
-                "component-emitter": "1.2.1",
-                "debug": "~4.1.0",
-                "engine.io-client": "~3.4.0",
-                "has-binary2": "~1.0.2",
-                "has-cors": "1.1.0",
-                "indexof": "0.0.1",
-                "object-component": "0.0.3",
-                "parseqs": "0.0.5",
-                "parseuri": "0.0.5",
-                "socket.io-parser": "~3.3.0",
-                "to-array": "0.1.4"
-            },
-            "dependencies": {
-                "component-emitter": {
-                    "version": "1.2.1",
-                    "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-                    "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
-                    "dev": true
-                },
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "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/terser": {
+            "version": "5.31.0",
+            "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz",
+            "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==",
+            "dev": true,
+            "dependencies": {
+                "@jridgewell/source-map": "^0.3.3",
+                "acorn": "^8.8.2",
+                "commander": "^2.20.0",
+                "source-map-support": "~0.5.20"
+            },
+            "bin": {
+                "terser": "bin/terser"
+            },
+            "engines": {
+                "node": ">=10"
             }
         },
-        "socket.io-parser": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz",
-            "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==",
+        "node_modules/terser-webpack-plugin": {
+            "version": "5.3.10",
+            "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
+            "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
             "dev": true,
-            "requires": {
-                "component-emitter": "1.2.1",
-                "debug": "~3.1.0",
-                "isarray": "2.0.1"
-            },
             "dependencies": {
-                "component-emitter": {
-                    "version": "1.2.1",
-                    "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-                    "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
-                    "dev": true
+                "@jridgewell/trace-mapping": "^0.3.20",
+                "jest-worker": "^27.4.5",
+                "schema-utils": "^3.1.1",
+                "serialize-javascript": "^6.0.1",
+                "terser": "^5.26.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/webpack"
+            },
+            "peerDependencies": {
+                "webpack": "^5.1.0"
+            },
+            "peerDependenciesMeta": {
+                "@swc/core": {
+                    "optional": true
                 },
-                "debug": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-                    "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
+                "esbuild": {
+                    "optional": true
                 },
-                "isarray": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
-                    "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
-                    "dev": true
+                "uglify-js": {
+                    "optional": true
                 }
             }
         },
-        "source-list-map": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
-            "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
-            "dev": true
-        },
-        "source-map": {
-            "version": "0.5.7",
-            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-            "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-        },
-        "source-map-resolve": {
-            "version": "0.5.2",
-            "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
-            "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
-            "requires": {
-                "atob": "^2.1.1",
-                "decode-uri-component": "^0.2.0",
-                "resolve-url": "^0.2.1",
-                "source-map-url": "^0.4.0",
-                "urix": "^0.1.0"
-            }
-        },
-        "source-map-support": {
-            "version": "0.5.13",
-            "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
-            "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
-            "requires": {
-                "buffer-from": "^1.0.0",
-                "source-map": "^0.6.0"
-            },
+        "node_modules/terser-webpack-plugin/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": {
-                "source-map": {
-                    "version": "0.6.1",
-                    "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-                    "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-                }
-            }
-        },
-        "source-map-url": {
-            "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
-            "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
-        },
-        "sourcemapped-stacktrace": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.11.tgz",
-            "integrity": "sha512-O0pcWjJqzQFVsisPlPXuNawJHHg9N9UgpJ/aDmvi9+vnS3x1C0NhwkVFzzZ1VN0Xo+bekyweoqYvBw5ZBKiNnQ==",
-            "requires": {
-                "source-map": "0.5.6"
+                "fast-deep-equal": "^3.1.1",
+                "fast-json-stable-stringify": "^2.0.0",
+                "json-schema-traverse": "^0.4.1",
+                "uri-js": "^4.2.2"
             },
-            "dependencies": {
-                "source-map": {
-                    "version": "0.5.6",
-                    "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
-                    "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI="
-                }
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/epoberezkin"
             }
         },
-        "space-separated-tokens": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz",
-            "integrity": "sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA=="
-        },
-        "sparkles": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
-            "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
-            "dev": true
-        },
-        "spdx-correct": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
-            "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
-            "requires": {
-                "spdx-expression-parse": "^3.0.0",
-                "spdx-license-ids": "^3.0.0"
+        "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
+            "version": "3.5.2",
+            "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+            "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+            "dev": true,
+            "peerDependencies": {
+                "ajv": "^6.9.1"
             }
         },
-        "spdx-exceptions": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
-            "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
-        },
-        "spdx-expression-parse": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
-            "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
-            "requires": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
+        "node_modules/terser-webpack-plugin/node_modules/jest-worker": {
+            "version": "27.5.1",
+            "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+            "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+            "dev": true,
+            "dependencies": {
+                "@types/node": "*",
+                "merge-stream": "^2.0.0",
+                "supports-color": "^8.0.0"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "spdx-license-ids": {
-            "version": "3.0.5",
-            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
-            "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
-        },
-        "specificity": {
+        "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
             "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
-            "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
+            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+            "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
             "dev": true
         },
-        "split-string": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-            "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
-            "requires": {
-                "extend-shallow": "^3.0.0"
+        "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+            "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+            "dev": true,
+            "dependencies": {
+                "@types/json-schema": "^7.0.8",
+                "ajv": "^6.12.5",
+                "ajv-keywords": "^3.5.2"
+            },
+            "engines": {
+                "node": ">= 10.13.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/webpack"
             }
         },
-        "sprintf-js": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-            "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
-            "dev": true
-        },
-        "sshpk": {
-            "version": "1.16.1",
-            "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
-            "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+        "node_modules/terser-webpack-plugin/node_modules/supports-color": {
+            "version": "8.1.1",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+            "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
             "dev": true,
-            "requires": {
-                "asn1": "~0.2.3",
-                "assert-plus": "^1.0.0",
-                "bcrypt-pbkdf": "^1.0.0",
-                "dashdash": "^1.12.0",
-                "ecc-jsbn": "~0.1.1",
-                "getpass": "^0.1.1",
-                "jsbn": "~0.1.0",
-                "safer-buffer": "^2.0.2",
-                "tweetnacl": "~0.14.0"
+            "dependencies": {
+                "has-flag": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/supports-color?sponsor=1"
             }
         },
-        "ssri": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
-            "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+        "node_modules/terser/node_modules/acorn": {
+            "version": "8.11.3",
+            "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+            "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
             "dev": true,
-            "requires": {
-                "figgy-pudding": "^3.5.1"
+            "bin": {
+                "acorn": "bin/acorn"
+            },
+            "engines": {
+                "node": ">=0.4.0"
             }
         },
-        "stack-trace": {
-            "version": "0.0.10",
-            "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
-            "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+        "node_modules/terser/node_modules/commander": {
+            "version": "2.20.3",
+            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
             "dev": true
         },
-        "stack-utils": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
-            "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
+        "node_modules/text-decoder": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz",
+            "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==",
+            "dev": true,
+            "dependencies": {
+                "b4a": "^1.6.4"
+            }
+        },
+        "node_modules/text-hex": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
+            "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==",
             "dev": true
         },
-        "stackframe": {
-            "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz",
-            "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ="
+        "node_modules/text-table": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+            "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+            "dev": true
         },
-        "state-toggle": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz",
-            "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==",
+        "node_modules/through": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+            "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
             "dev": true
         },
-        "static-extend": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-            "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
-            "requires": {
-                "define-property": "^0.2.5",
-                "object-copy": "^0.1.0"
-            },
+        "node_modules/through2": {
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+            "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+            "dev": true,
             "dependencies": {
-                "define-property": {
-                    "version": "0.2.5",
-                    "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-                    "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-                    "requires": {
-                        "is-descriptor": "^0.1.0"
-                    }
-                }
+                "readable-stream": "3"
             }
         },
-        "statuses": {
-            "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-            "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-        },
-        "stdout-stream": {
-            "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
-            "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+        "node_modules/time-stamp": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+            "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==",
             "dev": true,
-            "requires": {
-                "readable-stream": "^2.0.1"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "stealthy-require": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
-            "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
-            "dev": true
-        },
-        "stream-browserify": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
-            "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+        "node_modules/timers-browserify": {
+            "version": "2.0.12",
+            "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+            "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
             "dev": true,
-            "requires": {
-                "inherits": "~2.0.1",
-                "readable-stream": "^2.0.2"
+            "dependencies": {
+                "setimmediate": "^1.0.4"
+            },
+            "engines": {
+                "node": ">=0.6.0"
             }
         },
-        "stream-each": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
-            "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+        "node_modules/timers-ext": {
+            "version": "0.1.7",
+            "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
+            "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
             "dev": true,
-            "requires": {
-                "end-of-stream": "^1.1.0",
-                "stream-shift": "^1.0.0"
+            "dependencies": {
+                "es5-ext": "~0.10.46",
+                "next-tick": "1"
             }
         },
-        "stream-exhaust": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
-            "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
-            "dev": true
+        "node_modules/tiny-invariant": {
+            "version": "1.3.3",
+            "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+            "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
+        },
+        "node_modules/tiny-warning": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+            "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
         },
-        "stream-http": {
-            "version": "2.8.3",
-            "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
-            "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+        "node_modules/tmp": {
+            "version": "0.0.33",
+            "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+            "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
             "dev": true,
-            "requires": {
-                "builtin-status-codes": "^3.0.0",
-                "inherits": "^2.0.1",
-                "readable-stream": "^2.3.6",
-                "to-arraybuffer": "^1.0.0",
-                "xtend": "^4.0.0"
+            "dependencies": {
+                "os-tmpdir": "~1.0.2"
+            },
+            "engines": {
+                "node": ">=0.6.0"
             }
         },
-        "stream-shift": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
-            "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
-            "dev": true
-        },
-        "stream-throttle": {
-            "version": "0.1.3",
-            "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
-            "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=",
-            "dev": true,
-            "requires": {
-                "commander": "^2.2.0",
-                "limiter": "^1.0.5"
+        "node_modules/to-fast-properties": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+            "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+            "engines": {
+                "node": ">=4"
             }
         },
-        "stream-to-array": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
-            "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=",
+        "node_modules/to-object-path": {
+            "version": "0.3.0",
+            "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+            "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
             "dev": true,
-            "requires": {
-                "any-promise": "^1.1.0"
+            "dependencies": {
+                "kind-of": "^3.0.2"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "string-argv": {
-            "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
-            "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
+        "node_modules/to-object-path/node_modules/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
         },
-        "string-length": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
-            "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
+        "node_modules/to-object-path/node_modules/kind-of": {
+            "version": "3.2.2",
+            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+            "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
             "dev": true,
-            "requires": {
-                "astral-regex": "^1.0.0",
-                "strip-ansi": "^4.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
-                },
-                "strip-ansi": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-                    "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^3.0.0"
-                    }
-                }
+                "is-buffer": "^1.1.5"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "string-width": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-            "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+        "node_modules/to-regex": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+            "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
             "dev": true,
-            "requires": {
-                "code-point-at": "^1.0.0",
-                "is-fullwidth-code-point": "^1.0.0",
-                "strip-ansi": "^3.0.0"
+            "dependencies": {
+                "define-property": "^2.0.2",
+                "extend-shallow": "^3.0.2",
+                "regex-not": "^1.0.2",
+                "safe-regex": "^1.1.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "string.prototype.padend": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
-            "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
-            "requires": {
-                "define-properties": "^1.1.2",
-                "es-abstract": "^1.4.3",
-                "function-bind": "^1.0.2"
+        "node_modules/to-regex-range": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+            "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
+            "dev": true,
+            "dependencies": {
+                "is-number": "^3.0.0",
+                "repeat-string": "^1.6.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "string.prototype.trim": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz",
-            "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==",
+        "node_modules/to-regex/node_modules/define-property": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+            "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
             "dev": true,
-            "requires": {
-                "define-properties": "^1.1.3",
-                "es-abstract": "^1.13.0",
-                "function-bind": "^1.1.1"
+            "dependencies": {
+                "is-descriptor": "^1.0.2",
+                "isobject": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "string.prototype.trimleft": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
-            "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
-            "requires": {
-                "define-properties": "^1.1.3",
-                "function-bind": "^1.1.1"
+        "node_modules/to-regex/node_modules/extend-shallow": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+            "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+            "dev": true,
+            "dependencies": {
+                "assign-symbols": "^1.0.0",
+                "is-extendable": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "string.prototype.trimright": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
-            "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
-            "requires": {
-                "define-properties": "^1.1.3",
-                "function-bind": "^1.1.1"
+        "node_modules/to-regex/node_modules/is-descriptor": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+            "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+            "dev": true,
+            "dependencies": {
+                "is-accessor-descriptor": "^1.0.1",
+                "is-data-descriptor": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "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==",
-            "requires": {
-                "safe-buffer": "~5.1.0"
+        "node_modules/to-regex/node_modules/is-extendable": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+            "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+            "dev": true,
+            "dependencies": {
+                "is-plain-object": "^2.0.4"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "stringify-entities": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz",
-            "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==",
+        "node_modules/to-through": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz",
+            "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==",
             "dev": true,
-            "requires": {
-                "character-entities-html4": "^1.0.0",
-                "character-entities-legacy": "^1.0.0",
-                "is-alphanumerical": "^1.0.0",
-                "is-hexadecimal": "^1.0.0"
+            "dependencies": {
+                "streamx": "^2.12.5"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "stringify-object": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
-            "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
-            "dev": true,
-            "requires": {
-                "get-own-enumerable-property-symbols": "^3.0.0",
-                "is-obj": "^1.0.1",
-                "is-regexp": "^1.0.0"
+        "node_modules/toggle-selection": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
+            "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ=="
+        },
+        "node_modules/toidentifier": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+            "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+            "engines": {
+                "node": ">=0.6"
             }
         },
-        "strip-ansi": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-            "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+        "node_modules/touch": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+            "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
             "dev": true,
-            "requires": {
-                "ansi-regex": "^2.0.0"
+            "dependencies": {
+                "nopt": "~1.0.10"
+            },
+            "bin": {
+                "nodetouch": "bin/nodetouch.js"
             }
         },
-        "strip-bom": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-            "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
-        },
-        "strip-bom-buf": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz",
-            "integrity": "sha1-HLRar1dTD0yvhsf3UXnSyaUd1XI=",
+        "node_modules/trim-newlines": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+            "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
             "dev": true,
-            "requires": {
-                "is-utf8": "^0.2.1"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "strip-bom-stream": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz",
-            "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=",
+        "node_modules/triple-beam": {
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz",
+            "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==",
             "dev": true,
-            "requires": {
-                "first-chunk-stream": "^2.0.0",
-                "strip-bom": "^2.0.0"
-            },
-            "dependencies": {
-                "strip-bom": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-                    "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-                    "dev": true,
-                    "requires": {
-                        "is-utf8": "^0.2.0"
-                    }
-                }
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "strip-bom-string": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
-            "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
-            "dev": true
-        },
-        "strip-comments": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz",
-            "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==",
+        "node_modules/trough": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
+            "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
             "dev": true,
-            "requires": {
-                "babel-extract-comments": "^1.0.0",
-                "babel-plugin-transform-object-rest-spread": "^6.26.0"
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
             }
         },
-        "strip-dirs": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
-            "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+        "node_modules/ts-loader": {
+            "version": "9.5.1",
+            "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz",
+            "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==",
             "dev": true,
-            "requires": {
-                "is-natural-number": "^4.0.1"
+            "dependencies": {
+                "chalk": "^4.1.0",
+                "enhanced-resolve": "^5.0.0",
+                "micromatch": "^4.0.0",
+                "semver": "^7.3.4",
+                "source-map": "^0.7.4"
+            },
+            "engines": {
+                "node": ">=12.0.0"
+            },
+            "peerDependencies": {
+                "typescript": "*",
+                "webpack": "^5.0.0"
             }
         },
-        "strip-eof": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-            "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
-            "dev": true
+        "node_modules/ts-loader/node_modules/source-map": {
+            "version": "0.7.4",
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+            "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+            "dev": true,
+            "engines": {
+                "node": ">= 8"
+            }
         },
-        "strip-final-newline": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-            "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+        "node_modules/tslib": {
+            "version": "1.14.1",
+            "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+            "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
             "dev": true
         },
-        "strip-indent": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
-            "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
-            "dev": true,
-            "requires": {
-                "get-stdin": "^4.0.1"
+        "node_modules/tsscmp": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
+            "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
+            "engines": {
+                "node": ">=0.6.x"
             }
         },
-        "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=",
+        "node_modules/tty-browserify": {
+            "version": "0.0.1",
+            "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+            "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
             "dev": true
         },
-        "style-search": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
-            "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
+        "node_modules/type": {
+            "version": "2.7.2",
+            "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+            "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
             "dev": true
         },
-        "stylelint": {
-            "version": "11.0.0",
-            "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-11.0.0.tgz",
-            "integrity": "sha512-esKkG7CUXI5yr4jgCNuwjiiV6NJ4BpodB0e47oFvUBaHgpiXXHRPOajpb0IXL7Ucpk+X3dcrlPxVHpmJ5XUDwg==",
+        "node_modules/type-check": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+            "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
             "dev": true,
-            "requires": {
-                "autoprefixer": "^9.5.1",
-                "balanced-match": "^1.0.0",
-                "chalk": "^2.4.2",
-                "cosmiconfig": "^5.2.0",
-                "debug": "^4.1.1",
-                "execall": "^2.0.0",
-                "file-entry-cache": "^5.0.1",
-                "get-stdin": "^7.0.0",
-                "global-modules": "^2.0.0",
-                "globby": "^9.2.0",
-                "globjoin": "^0.1.4",
-                "html-tags": "^3.0.0",
-                "ignore": "^5.0.6",
-                "import-lazy": "^4.0.0",
-                "imurmurhash": "^0.1.4",
-                "known-css-properties": "^0.15.0",
-                "leven": "^3.1.0",
-                "lodash": "^4.17.14",
-                "log-symbols": "^3.0.0",
-                "mathml-tag-names": "^2.1.0",
-                "meow": "^5.0.0",
-                "micromatch": "^4.0.0",
-                "normalize-selector": "^0.2.0",
-                "postcss": "^7.0.14",
-                "postcss-html": "^0.36.0",
-                "postcss-jsx": "^0.36.3",
-                "postcss-less": "^3.1.4",
-                "postcss-markdown": "^0.36.0",
-                "postcss-media-query-parser": "^0.2.3",
-                "postcss-reporter": "^6.0.1",
-                "postcss-resolve-nested-selector": "^0.1.1",
-                "postcss-safe-parser": "^4.0.1",
-                "postcss-sass": "^0.4.1",
-                "postcss-scss": "^2.0.0",
-                "postcss-selector-parser": "^3.1.0",
-                "postcss-syntax": "^0.36.2",
-                "postcss-value-parser": "^4.0.2",
-                "resolve-from": "^5.0.0",
-                "signal-exit": "^3.0.2",
-                "slash": "^3.0.0",
-                "specificity": "^0.4.1",
-                "string-width": "^4.1.0",
-                "strip-ansi": "^5.2.0",
-                "style-search": "^0.1.0",
-                "sugarss": "^2.0.0",
-                "svg-tags": "^1.0.0",
-                "table": "^5.2.3",
-                "v8-compile-cache": "^2.1.0"
-            },
             "dependencies": {
-                "@nodelib/fs.stat": {
-                    "version": "1.1.3",
-                    "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
-                    "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
-                    "dev": true
-                },
-                "ansi-regex": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-                    "dev": true
-                },
-                "array-union": {
-                    "version": "1.0.2",
-                    "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
-                    "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
-                    "dev": true,
-                    "requires": {
-                        "array-uniq": "^1.0.1"
-                    }
-                },
-                "camelcase": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
-                    "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
-                    "dev": true
-                },
-                "camelcase-keys": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
-                    "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^4.1.0",
-                        "map-obj": "^2.0.0",
-                        "quick-lru": "^1.0.0"
-                    }
-                },
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "dir-glob": {
-                    "version": "2.2.2",
-                    "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
-                    "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
-                    "dev": true,
-                    "requires": {
-                        "path-type": "^3.0.0"
-                    }
-                },
-                "emoji-regex": {
-                    "version": "8.0.0",
-                    "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-                    "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-                    "dev": true
-                },
-                "fast-glob": {
-                    "version": "2.2.7",
-                    "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
-                    "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
-                    "dev": true,
-                    "requires": {
-                        "@mrmlnc/readdir-enhanced": "^2.2.1",
-                        "@nodelib/fs.stat": "^1.1.2",
-                        "glob-parent": "^3.1.0",
-                        "is-glob": "^4.0.0",
-                        "merge2": "^1.2.3",
-                        "micromatch": "^3.1.10"
-                    },
-                    "dependencies": {
-                        "micromatch": {
-                            "version": "3.1.10",
-                            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-                            "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-                            "dev": true,
-                            "requires": {
-                                "arr-diff": "^4.0.0",
-                                "array-unique": "^0.3.2",
-                                "braces": "^2.3.1",
-                                "define-property": "^2.0.2",
-                                "extend-shallow": "^3.0.2",
-                                "extglob": "^2.0.4",
-                                "fragment-cache": "^0.2.1",
-                                "kind-of": "^6.0.2",
-                                "nanomatch": "^1.2.9",
-                                "object.pick": "^1.3.0",
-                                "regex-not": "^1.0.0",
-                                "snapdragon": "^0.8.1",
-                                "to-regex": "^3.0.2"
-                            }
-                        }
-                    }
-                },
-                "fill-range": {
-                    "version": "7.0.1",
-                    "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-                    "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-                    "dev": true,
-                    "requires": {
-                        "to-regex-range": "^5.0.1"
-                    }
-                },
-                "find-up": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-                    "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-                    "dev": true,
-                    "requires": {
-                        "locate-path": "^2.0.0"
-                    }
-                },
-                "get-stdin": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
-                    "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
-                    "dev": true
-                },
-                "global-modules": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
-                    "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
-                    "dev": true,
-                    "requires": {
-                        "global-prefix": "^3.0.0"
-                    }
-                },
-                "global-prefix": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
-                    "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
-                    "dev": true,
-                    "requires": {
-                        "ini": "^1.3.5",
-                        "kind-of": "^6.0.2",
-                        "which": "^1.3.1"
-                    }
-                },
-                "globby": {
-                    "version": "9.2.0",
-                    "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
-                    "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
-                    "dev": true,
-                    "requires": {
-                        "@types/glob": "^7.1.1",
-                        "array-union": "^1.0.2",
-                        "dir-glob": "^2.2.2",
-                        "fast-glob": "^2.2.6",
-                        "glob": "^7.1.3",
-                        "ignore": "^4.0.3",
-                        "pify": "^4.0.1",
-                        "slash": "^2.0.0"
-                    },
-                    "dependencies": {
-                        "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
-                        },
-                        "slash": {
-                            "version": "2.0.0",
-                            "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
-                            "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
-                            "dev": true
-                        }
-                    }
-                },
-                "import-lazy": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
-                    "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
-                    "dev": true
-                },
-                "is-fullwidth-code-point": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-                    "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-                    "dev": true
-                },
-                "is-number": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-                    "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-                    "dev": true
-                },
-                "locate-path": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-                    "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
-                    "dev": true,
-                    "requires": {
-                        "p-locate": "^2.0.0",
-                        "path-exists": "^3.0.0"
-                    }
-                },
-                "log-symbols": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
-                    "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2"
-                    }
-                },
-                "map-obj": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
-                    "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
-                    "dev": true
-                },
-                "meow": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
-                    "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
-                    "dev": true,
-                    "requires": {
-                        "camelcase-keys": "^4.0.0",
-                        "decamelize-keys": "^1.0.0",
-                        "loud-rejection": "^1.0.0",
-                        "minimist-options": "^3.0.1",
-                        "normalize-package-data": "^2.3.4",
-                        "read-pkg-up": "^3.0.0",
-                        "redent": "^2.0.0",
-                        "trim-newlines": "^2.0.0",
-                        "yargs-parser": "^10.0.0"
-                    }
-                },
-                "micromatch": {
-                    "version": "4.0.2",
-                    "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-                    "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-                    "dev": true,
-                    "requires": {
-                        "braces": "^3.0.1",
-                        "picomatch": "^2.0.5"
-                    },
-                    "dependencies": {
-                        "braces": {
-                            "version": "3.0.2",
-                            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-                            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-                            "dev": true,
-                            "requires": {
-                                "fill-range": "^7.0.1"
-                            }
-                        }
-                    }
-                },
-                "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
-                },
-                "p-limit": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-                    "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-                    "dev": true,
-                    "requires": {
-                        "p-try": "^1.0.0"
-                    }
-                },
-                "p-locate": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-                    "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-                    "dev": true,
-                    "requires": {
-                        "p-limit": "^1.1.0"
-                    }
-                },
-                "p-try": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-                    "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-                    "dev": true
-                },
-                "path-type": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-                    "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
-                    "dev": true,
-                    "requires": {
-                        "pify": "^3.0.0"
-                    },
-                    "dependencies": {
-                        "pify": {
-                            "version": "3.0.0",
-                            "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-                            "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-                            "dev": true
-                        }
-                    }
-                },
-                "read-pkg-up": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
-                    "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
-                    "dev": true,
-                    "requires": {
-                        "find-up": "^2.0.0",
-                        "read-pkg": "^3.0.0"
-                    }
-                },
-                "redent": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
-                    "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
-                    "dev": true,
-                    "requires": {
-                        "indent-string": "^3.0.0",
-                        "strip-indent": "^2.0.0"
-                    }
-                },
-                "resolve-from": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-                    "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-                    "dev": true
-                },
-                "slash": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-                    "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-                    "dev": true
-                },
-                "string-width": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz",
-                    "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==",
-                    "dev": true,
-                    "requires": {
-                        "emoji-regex": "^8.0.0",
-                        "is-fullwidth-code-point": "^3.0.0",
-                        "strip-ansi": "^5.2.0"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-                    "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^4.1.0"
-                    }
-                },
-                "strip-indent": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
-                    "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
-                    "dev": true
-                },
-                "to-regex-range": {
-                    "version": "5.0.1",
-                    "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-                    "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-                    "dev": true,
-                    "requires": {
-                        "is-number": "^7.0.0"
-                    }
-                },
-                "trim-newlines": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
-                    "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
-                    "dev": true
-                },
-                "yargs-parser": {
-                    "version": "10.1.0",
-                    "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
-                    "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^4.1.0"
-                    }
-                }
+                "prelude-ls": "~1.1.2"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
             }
         },
-        "sugarss": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz",
-            "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==",
+        "node_modules/type-fest": {
+            "version": "2.19.0",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+            "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
             "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
+            "engines": {
+                "node": ">=12.20"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "supports-color": {
-            "version": "5.5.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-            "requires": {
-                "has-flag": "^3.0.0"
+        "node_modules/type-is": {
+            "version": "1.6.18",
+            "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+            "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+            "dependencies": {
+                "media-typer": "0.3.0",
+                "mime-types": "~2.1.24"
+            },
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "sver-compat": {
-            "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
-            "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=",
-            "dev": true,
-            "requires": {
-                "es6-iterator": "^2.0.1",
-                "es6-symbol": "^3.1.1"
+        "node_modules/typed-array-buffer": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+            "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "es-errors": "^1.3.0",
+                "is-typed-array": "^1.1.13"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "svg-tags": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
-            "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
-            "dev": true
-        },
-        "symbol-observable": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
-            "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
-        },
-        "symbol-tree": {
-            "version": "3.2.4",
-            "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
-            "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
-            "dev": true
-        },
-        "table": {
-            "version": "5.4.6",
-            "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
-            "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
-            "dev": true,
-            "requires": {
-                "ajv": "^6.10.2",
-                "lodash": "^4.17.14",
-                "slice-ansi": "^2.1.0",
-                "string-width": "^3.0.0"
-            },
+        "node_modules/typed-array-byte-length": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+            "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
             "dependencies": {
-                "ansi-regex": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-                    "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=",
-                    "dev": true
-                },
-                "string-width": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-                    "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-                    "dev": true,
-                    "requires": {
-                        "emoji-regex": "^7.0.1",
-                        "is-fullwidth-code-point": "^2.0.0",
-                        "strip-ansi": "^5.1.0"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-                    "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^4.1.0"
-                    }
-                }
+                "call-bind": "^1.0.7",
+                "for-each": "^0.3.3",
+                "gopd": "^1.0.1",
+                "has-proto": "^1.0.3",
+                "is-typed-array": "^1.1.13"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "tapable": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
-            "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
-            "dev": true
+        "node_modules/typed-array-byte-offset": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+            "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
+            "dependencies": {
+                "available-typed-arrays": "^1.0.7",
+                "call-bind": "^1.0.7",
+                "for-each": "^0.3.3",
+                "gopd": "^1.0.1",
+                "has-proto": "^1.0.3",
+                "is-typed-array": "^1.1.13"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
-        "tar": {
-            "version": "2.2.2",
-            "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
-            "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
-            "dev": true,
-            "requires": {
-                "block-stream": "*",
-                "fstream": "^1.0.12",
-                "inherits": "2"
+        "node_modules/typed-array-length": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+            "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "for-each": "^0.3.3",
+                "gopd": "^1.0.1",
+                "has-proto": "^1.0.3",
+                "is-typed-array": "^1.1.13",
+                "possible-typed-array-names": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "tar-stream": {
-            "version": "1.6.2",
-            "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
-            "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+        "node_modules/typedarray-to-buffer": {
+            "version": "3.1.5",
+            "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+            "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
             "dev": true,
-            "requires": {
-                "bl": "^1.0.0",
-                "buffer-alloc": "^1.2.0",
-                "end-of-stream": "^1.0.0",
-                "fs-constants": "^1.0.0",
-                "readable-stream": "^2.3.0",
-                "to-buffer": "^1.1.1",
-                "xtend": "^4.0.0"
+            "dependencies": {
+                "is-typedarray": "^1.0.0"
             }
         },
-        "term-size": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
-            "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
-            "dev": true,
-            "requires": {
-                "execa": "^0.7.0"
-            },
-            "dependencies": {
-                "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=",
-                    "dev": true,
-                    "requires": {
-                        "lru-cache": "^4.0.1",
-                        "shebang-command": "^1.2.0",
-                        "which": "^1.2.9"
-                    }
-                },
-                "execa": {
-                    "version": "0.7.0",
-                    "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
-                    "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
-                    "dev": true,
-                    "requires": {
-                        "cross-spawn": "^5.0.1",
-                        "get-stream": "^3.0.0",
-                        "is-stream": "^1.1.0",
-                        "npm-run-path": "^2.0.0",
-                        "p-finally": "^1.0.0",
-                        "signal-exit": "^3.0.0",
-                        "strip-eof": "^1.0.0"
-                    }
-                },
-                "get-stream": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-                    "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
-                    "dev": true
-                },
-                "lru-cache": {
-                    "version": "4.1.5",
-                    "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-                    "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-                    "dev": true,
-                    "requires": {
-                        "pseudomap": "^1.0.2",
-                        "yallist": "^2.1.2"
-                    }
-                },
-                "yallist": {
-                    "version": "2.1.2",
-                    "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-                    "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
-                    "dev": true
-                }
+        "node_modules/typescript": {
+            "version": "5.4.5",
+            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+            "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+            "dev": true,
+            "bin": {
+                "tsc": "bin/tsc",
+                "tsserver": "bin/tsserver"
+            },
+            "engines": {
+                "node": ">=14.17"
             }
         },
-        "ternary-stream": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-3.0.0.tgz",
-            "integrity": "sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==",
+        "node_modules/ua-parser-js": {
+            "version": "1.0.37",
+            "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz",
+            "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==",
             "dev": true,
-            "requires": {
-                "duplexify": "^4.1.1",
-                "fork-stream": "^0.0.4",
-                "merge-stream": "^2.0.0",
-                "through2": "^3.0.1"
-            },
-            "dependencies": {
-                "duplexify": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz",
-                    "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==",
-                    "dev": true,
-                    "requires": {
-                        "end-of-stream": "^1.4.1",
-                        "inherits": "^2.0.3",
-                        "readable-stream": "^3.1.1",
-                        "stream-shift": "^1.0.0"
-                    }
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/ua-parser-js"
                 },
-                "readable-stream": {
-                    "version": "3.4.0",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
-                    "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "^2.0.3",
-                        "string_decoder": "^1.1.1",
-                        "util-deprecate": "^1.0.1"
-                    }
+                {
+                    "type": "paypal",
+                    "url": "https://paypal.me/faisalman"
                 },
-                "through2": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
-                    "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
-                    "dev": true,
-                    "requires": {
-                        "readable-stream": "2 || 3"
-                    }
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/faisalman"
                 }
+            ],
+            "engines": {
+                "node": "*"
             }
         },
-        "terser": {
-            "version": "4.3.3",
-            "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.3.tgz",
-            "integrity": "sha512-Nzr7dpRjSzMEUS+z2UYQBtzE0LDm5k0Yy8RgLRPy85QUo1TjU5lIOBwzS5/FVAMaVyHZ3WTTU2BuQcMn8KXnNQ==",
+        "node_modules/uc.micro": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
+            "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+            "dev": true
+        },
+        "node_modules/uglify-js": {
+            "version": "3.17.4",
+            "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+            "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
             "dev": true,
-            "requires": {
-                "commander": "^2.20.0",
-                "source-map": "~0.6.1",
-                "source-map-support": "~0.5.12"
+            "optional": true,
+            "bin": {
+                "uglifyjs": "bin/uglifyjs"
             },
-            "dependencies": {
-                "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.8.0"
             }
         },
-        "terser-webpack-plugin": {
-            "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
-            "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
-            "dev": true,
-            "requires": {
-                "cacache": "^12.0.2",
-                "find-cache-dir": "^2.1.0",
-                "is-wsl": "^1.1.0",
-                "schema-utils": "^1.0.0",
-                "serialize-javascript": "^1.7.0",
-                "source-map": "^0.6.1",
-                "terser": "^4.1.2",
-                "webpack-sources": "^1.4.0",
-                "worker-farm": "^1.7.0"
-            },
-            "dependencies": {
-                "cacache": {
-                    "version": "12.0.3",
-                    "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
-                    "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
-                    "dev": true,
-                    "requires": {
-                        "bluebird": "^3.5.5",
-                        "chownr": "^1.1.1",
-                        "figgy-pudding": "^3.5.1",
-                        "glob": "^7.1.4",
-                        "graceful-fs": "^4.1.15",
-                        "infer-owner": "^1.0.3",
-                        "lru-cache": "^5.1.1",
-                        "mississippi": "^3.0.0",
-                        "mkdirp": "^0.5.1",
-                        "move-concurrently": "^1.0.1",
-                        "promise-inflight": "^1.0.1",
-                        "rimraf": "^2.6.3",
-                        "ssri": "^6.0.1",
-                        "unique-filename": "^1.1.1",
-                        "y18n": "^4.0.0"
-                    }
-                },
-                "serialize-javascript": {
-                    "version": "1.9.1",
-                    "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
-                    "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
-                    "dev": true
-                },
-                "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
-                },
-                "y18n": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-                    "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-                    "dev": true
-                }
+        "node_modules/unbox-primitive": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+            "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+            "dependencies": {
+                "call-bind": "^1.0.2",
+                "has-bigints": "^1.0.2",
+                "has-symbols": "^1.0.3",
+                "which-boxed-primitive": "^1.0.2"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "test-exclude": {
-            "version": "5.2.3",
-            "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
-            "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
+        "node_modules/unc-path-regex": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+            "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
             "dev": true,
-            "requires": {
-                "glob": "^7.1.3",
-                "minimatch": "^3.0.4",
-                "read-pkg-up": "^4.0.0",
-                "require-main-filename": "^2.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "text-table": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-            "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+        "node_modules/undefsafe": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+            "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
             "dev": true
         },
-        "tfunk": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz",
-            "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=",
+        "node_modules/underscore": {
+            "version": "1.13.6",
+            "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+            "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+        },
+        "node_modules/undertaker": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz",
+            "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==",
             "dev": true,
-            "requires": {
-                "chalk": "^1.1.1",
-                "object-path": "^0.9.0"
-            },
             "dependencies": {
-                "ansi-styles": {
-                    "version": "2.2.1",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-                    "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-                    "dev": true
-                },
-                "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.2",
-                        "has-ansi": "^2.0.0",
-                        "strip-ansi": "^3.0.0",
-                        "supports-color": "^2.0.0"
-                    }
-                },
-                "object-path": {
-                    "version": "0.9.2",
-                    "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz",
-                    "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=",
-                    "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
-                }
+                "bach": "^2.0.1",
+                "fast-levenshtein": "^3.0.0",
+                "last-run": "^2.0.0",
+                "undertaker-registry": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "throat": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
-            "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
-            "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
-        },
-        "through2": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-            "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+        "node_modules/undertaker-registry": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz",
+            "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==",
             "dev": true,
-            "requires": {
-                "readable-stream": "~2.3.6",
-                "xtend": "~4.0.1"
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "through2-filter": {
+        "node_modules/undertaker/node_modules/fast-levenshtein": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
-            "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
+            "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz",
+            "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==",
             "dev": true,
-            "requires": {
-                "through2": "~2.0.0",
-                "xtend": "~4.0.0"
+            "dependencies": {
+                "fastest-levenshtein": "^1.0.7"
             }
         },
-        "time-stamp": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
-            "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
-            "dev": true
-        },
-        "timed-out": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
-            "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+        "node_modules/undici-types": {
+            "version": "5.26.5",
+            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+            "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
             "dev": true
         },
-        "timers-browserify": {
-            "version": "2.0.11",
-            "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
-            "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
-            "dev": true,
-            "requires": {
-                "setimmediate": "^1.0.4"
+        "node_modules/unicode-canonical-property-names-ecmascript": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+            "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+            "engines": {
+                "node": ">=4"
             }
         },
-        "timers-ext": {
-            "version": "0.1.7",
-            "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
-            "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
-            "dev": true,
-            "requires": {
-                "es5-ext": "~0.10.46",
-                "next-tick": "1"
+        "node_modules/unicode-match-property-ecmascript": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+            "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+            "dependencies": {
+                "unicode-canonical-property-names-ecmascript": "^2.0.0",
+                "unicode-property-aliases-ecmascript": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "tiny-emitter": {
+        "node_modules/unicode-match-property-value-ecmascript": {
             "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
-            "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
-            "optional": true
-        },
-        "tiny-invariant": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz",
-            "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA=="
+            "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+            "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "tiny-warning": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
-            "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+        "node_modules/unicode-property-aliases-ecmascript": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+            "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "tmp": {
-            "version": "0.0.33",
-            "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-            "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+        "node_modules/unified": {
+            "version": "9.2.2",
+            "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
+            "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
             "dev": true,
-            "requires": {
-                "os-tmpdir": "~1.0.2"
+            "dependencies": {
+                "bail": "^1.0.0",
+                "extend": "^3.0.0",
+                "is-buffer": "^2.0.0",
+                "is-plain-obj": "^2.0.0",
+                "trough": "^1.0.0",
+                "vfile": "^4.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
             }
         },
-        "tmpl": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
-            "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
-            "dev": true
-        },
-        "to-absolute-glob": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
-            "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
+        "node_modules/unified/node_modules/is-plain-obj": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+            "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
             "dev": true,
-            "requires": {
-                "is-absolute": "^1.0.0",
-                "is-negated-glob": "^1.0.0"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "to-array": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
-            "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
-            "dev": true
-        },
-        "to-arraybuffer": {
+        "node_modules/union-value": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
-            "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
-            "dev": true
-        },
-        "to-buffer": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
-            "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
-            "dev": true
-        },
-        "to-fast-properties": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-            "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
-            "dev": true
-        },
-        "to-object-path": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-            "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
-            "requires": {
-                "kind-of": "^3.0.2"
-            },
+            "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+            "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+            "dev": true,
             "dependencies": {
-                "kind-of": {
-                    "version": "3.2.2",
-                    "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-                    "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-                    "requires": {
-                        "is-buffer": "^1.1.5"
-                    }
-                }
+                "arr-union": "^3.1.0",
+                "get-value": "^2.0.6",
+                "is-extendable": "^0.1.1",
+                "set-value": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "to-regex": {
+        "node_modules/unist-util-find-all-after": {
             "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
-            "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
-            "requires": {
-                "define-property": "^2.0.2",
-                "extend-shallow": "^3.0.2",
-                "regex-not": "^1.0.2",
-                "safe-regex": "^1.1.0"
+            "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz",
+            "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==",
+            "dev": true,
+            "dependencies": {
+                "unist-util-is": "^4.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
             }
         },
-        "to-regex-range": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-            "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-            "requires": {
-                "is-number": "^3.0.0",
-                "repeat-string": "^1.6.1"
+        "node_modules/unist-util-is": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
+            "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
+            "dev": true,
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
             }
         },
-        "to-through": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
-            "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=",
+        "node_modules/unist-util-stringify-position": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
+            "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
             "dev": true,
-            "requires": {
-                "through2": "^2.0.3"
+            "dependencies": {
+                "@types/unist": "^2.0.2"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
             }
         },
-        "toggle-selection": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
-            "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
+        "node_modules/universalify": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+            "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+            "engines": {
+                "node": ">= 10.0.0"
+            }
+        },
+        "node_modules/unix-crypt-td-js": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz",
+            "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw=="
         },
-        "toidentifier": {
+        "node_modules/unpipe": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
-            "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+            "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+            "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+            "engines": {
+                "node": ">= 0.8"
+            }
         },
-        "touch": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
-            "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
+        "node_modules/unset-value": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+            "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
             "dev": true,
-            "requires": {
-                "nopt": "~1.0.10"
-            },
             "dependencies": {
-                "nopt": {
-                    "version": "1.0.10",
-                    "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
-                    "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
-                    "dev": true,
-                    "requires": {
-                        "abbrev": "1"
-                    }
-                }
+                "has-value": "^0.3.1",
+                "isobject": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "tough-cookie": {
-            "version": "2.4.3",
-            "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
-            "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+        "node_modules/unset-value/node_modules/has-value": {
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+            "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
             "dev": true,
-            "requires": {
-                "psl": "^1.1.24",
-                "punycode": "^1.4.1"
-            },
             "dependencies": {
-                "punycode": {
-                    "version": "1.4.1",
-                    "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-                    "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-                    "dev": true
-                }
+                "get-value": "^2.0.3",
+                "has-values": "^0.1.4",
+                "isobject": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "tr46": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
-            "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+        "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+            "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
             "dev": true,
-            "requires": {
-                "punycode": "^2.1.0"
+            "dependencies": {
+                "isarray": "1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "trim": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
-            "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
-            "dev": true
+        "node_modules/unset-value/node_modules/has-values": {
+            "version": "0.1.4",
+            "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+            "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "trim-newlines": {
+        "node_modules/unset-value/node_modules/isarray": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
-            "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
-            "dev": true
-        },
-        "trim-trailing-lines": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz",
-            "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==",
-            "dev": true
-        },
-        "trough": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz",
-            "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
             "dev": true
         },
-        "true-case-path": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
-            "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
+        "node_modules/upath": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+            "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
             "dev": true,
-            "requires": {
-                "glob": "^7.1.2"
+            "engines": {
+                "node": ">=4",
+                "yarn": "*"
             }
         },
-        "tslib": {
-            "version": "1.10.0",
-            "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
-            "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
-            "dev": true
-        },
-        "tty-browserify": {
-            "version": "0.0.0",
-            "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
-            "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
-            "dev": true
+        "node_modules/update-browserslist-db": {
+            "version": "1.0.14",
+            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.14.tgz",
+            "integrity": "sha512-JixKH8GR2pWYshIPUg/NujK3JO7JiqEEUiNArE86NQyrgUuZeTlZQN3xuS/yiV5Kb48ev9K6RqNkaJjXsdg7Jw==",
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/browserslist"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/browserslist"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "dependencies": {
+                "escalade": "^3.1.2",
+                "picocolors": "^1.0.0"
+            },
+            "bin": {
+                "update-browserslist-db": "cli.js"
+            },
+            "peerDependencies": {
+                "browserslist": ">= 4.21.0"
+            }
         },
-        "tunnel-agent": {
-            "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-            "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+        "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": {
-                "safe-buffer": "^5.0.1"
+            "dependencies": {
+                "punycode": "^2.1.0"
             }
         },
-        "tweetnacl": {
-            "version": "0.14.5",
-            "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-            "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-            "dev": true
-        },
-        "type": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
-            "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
+        "node_modules/urix": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+            "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
+            "deprecated": "Please see https://github.com/lydell/urix#deprecated",
             "dev": true
         },
-        "type-check": {
-            "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-            "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+        "node_modules/url": {
+            "version": "0.11.3",
+            "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz",
+            "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==",
             "dev": true,
-            "requires": {
-                "prelude-ls": "~1.1.2"
+            "dependencies": {
+                "punycode": "^1.4.1",
+                "qs": "^6.11.2"
             }
         },
-        "type-fest": {
-            "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
-            "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+        "node_modules/url/node_modules/punycode": {
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+            "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
             "dev": true
         },
-        "type-is": {
-            "version": "1.6.18",
-            "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
-            "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
-            "requires": {
-                "media-typer": "0.3.0",
-                "mime-types": "~2.1.24"
+        "node_modules/url/node_modules/qs": {
+            "version": "6.12.1",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz",
+            "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==",
+            "dev": true,
+            "dependencies": {
+                "side-channel": "^1.0.6"
+            },
+            "engines": {
+                "node": ">=0.6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "typedarray": {
-            "version": "0.0.6",
-            "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-            "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
-            "dev": true
-        },
-        "ua-parser-js": {
-            "version": "0.7.17",
-            "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
-            "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
-            "dev": true
+        "node_modules/use": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+            "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
-        "uglify-js": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
-            "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
+        "node_modules/util": {
+            "version": "0.12.5",
+            "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+            "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
             "dev": true,
-            "optional": true,
-            "requires": {
-                "commander": "~2.20.0",
-                "source-map": "~0.6.1"
-            },
             "dependencies": {
-                "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,
-                    "optional": true
-                }
+                "inherits": "^2.0.3",
+                "is-arguments": "^1.0.4",
+                "is-generator-function": "^1.0.7",
+                "is-typed-array": "^1.1.3",
+                "which-typed-array": "^1.1.2"
             }
         },
-        "uglify-to-browserify": {
+        "node_modules/util-deprecate": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
-            "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+            "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+        },
+        "node_modules/util-ex": {
+            "version": "0.3.18",
+            "resolved": "https://registry.npmjs.org/util-ex/-/util-ex-0.3.18.tgz",
+            "integrity": "sha512-GPVjD257DtgCDMHYqbdWvZ+RY3HaXZ7Dps/44de5WscOjFNL2Qr+6dTIKGlyfA4A5BXyeFKWy8mb19OATWhh8Q==",
             "dev": true,
-            "optional": true
+            "dependencies": {
+                "inherits-ex": "^1.5.2",
+                "xtend": "^4.0.2"
+            }
         },
-        "ultron": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
-            "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
-            "dev": true
+        "node_modules/utils-merge": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+            "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+            "engines": {
+                "node": ">= 0.4.0"
+            }
         },
-        "unbzip2-stream": {
-            "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz",
-            "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==",
-            "dev": true,
-            "requires": {
-                "buffer": "^5.2.1",
-                "through": "^2.3.8"
+        "node_modules/uuid": {
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+            "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+            "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
+            "bin": {
+                "uuid": "bin/uuid"
             }
         },
-        "unc-path-regex": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
-            "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+        "node_modules/v8-compile-cache": {
+            "version": "2.4.0",
+            "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
+            "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
             "dev": true
         },
-        "undefsafe": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz",
-            "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=",
-            "dev": true,
-            "requires": {
-                "debug": "^2.2.0"
+        "node_modules/v8flags": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+            "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+            "dependencies": {
+                "homedir-polyfill": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "underscore": {
-            "version": "1.9.1",
-            "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
-            "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
+        "node_modules/validate-npm-package-license": {
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+            "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+            "dependencies": {
+                "spdx-correct": "^3.0.0",
+                "spdx-expression-parse": "^3.0.0"
+            }
         },
-        "undertaker": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz",
-            "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==",
-            "dev": true,
-            "requires": {
-                "arr-flatten": "^1.0.1",
-                "arr-map": "^2.0.0",
-                "bach": "^1.0.0",
-                "collection-map": "^1.0.0",
-                "es6-weak-map": "^2.0.1",
-                "last-run": "^1.1.0",
-                "object.defaults": "^1.0.0",
-                "object.reduce": "^1.0.0",
-                "undertaker-registry": "^1.0.0"
-            }
-        },
-        "undertaker-registry": {
+        "node_modules/value-equal": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
-            "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
+            "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
         },
-        "unherit": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz",
-            "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==",
+        "node_modules/value-or-function": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz",
+            "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==",
             "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "xtend": "^4.0.1"
+            "engines": {
+                "node": ">= 10.13.0"
             }
         },
-        "unicode-canonical-property-names-ecmascript": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
-            "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+        "node_modules/varint": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
+            "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
             "dev": true
         },
-        "unicode-match-property-ecmascript": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
-            "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+        "node_modules/vary": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+            "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+            "engines": {
+                "node": ">= 0.8"
+            }
+        },
+        "node_modules/vfile": {
+            "version": "4.2.1",
+            "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
+            "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
             "dev": true,
-            "requires": {
-                "unicode-canonical-property-names-ecmascript": "^1.0.4",
-                "unicode-property-aliases-ecmascript": "^1.0.4"
+            "dependencies": {
+                "@types/unist": "^2.0.0",
+                "is-buffer": "^2.0.0",
+                "unist-util-stringify-position": "^2.0.0",
+                "vfile-message": "^2.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
             }
         },
-        "unicode-match-property-value-ecmascript": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
-            "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
-            "dev": true
+        "node_modules/vfile-message": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
+            "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
+            "dev": true,
+            "dependencies": {
+                "@types/unist": "^2.0.0",
+                "unist-util-stringify-position": "^2.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/unified"
+            }
         },
-        "unicode-property-aliases-ecmascript": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
-            "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
-            "dev": true
+        "node_modules/vinyl": {
+            "version": "0.4.6",
+            "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+            "integrity": "sha512-pmza4M5VA15HOImIQYWhoXGlGNafCm0QK5BpBUXkzzEwrRxKqBsbAhTfkT2zMcJhUX1G1Gkid0xaV8WjOl7DsA==",
+            "dev": true,
+            "dependencies": {
+                "clone": "^0.2.0",
+                "clone-stats": "^0.0.1"
+            },
+            "engines": {
+                "node": ">= 0.9"
+            }
         },
-        "unified": {
-            "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz",
-            "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==",
+        "node_modules/vinyl-contents": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz",
+            "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==",
             "dev": true,
-            "requires": {
-                "@types/unist": "^2.0.0",
-                "@types/vfile": "^3.0.0",
-                "bail": "^1.0.0",
-                "extend": "^3.0.0",
-                "is-plain-obj": "^1.1.0",
-                "trough": "^1.0.0",
-                "vfile": "^3.0.0",
-                "x-is-string": "^0.1.0"
+            "dependencies": {
+                "bl": "^5.0.0",
+                "vinyl": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "union-value": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
-            "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
-            "requires": {
-                "arr-union": "^3.1.0",
-                "get-value": "^2.0.6",
-                "is-extendable": "^0.1.1",
-                "set-value": "^2.0.1"
+        "node_modules/vinyl-contents/node_modules/bl": {
+            "version": "5.1.0",
+            "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
+            "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
+            "dev": true,
+            "dependencies": {
+                "buffer": "^6.0.3",
+                "inherits": "^2.0.4",
+                "readable-stream": "^3.4.0"
             }
         },
-        "uniq": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
-            "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+        "node_modules/vinyl-contents/node_modules/clone": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+            "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.8"
+            }
+        },
+        "node_modules/vinyl-contents/node_modules/clone-stats": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+            "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
             "dev": true
         },
-        "unique-filename": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
-            "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+        "node_modules/vinyl-contents/node_modules/vinyl": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz",
+            "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==",
             "dev": true,
-            "requires": {
-                "unique-slug": "^2.0.0"
+            "dependencies": {
+                "clone": "^2.1.2",
+                "clone-stats": "^1.0.0",
+                "remove-trailing-separator": "^1.1.0",
+                "replace-ext": "^2.0.0",
+                "teex": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "unique-slug": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
-            "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+        "node_modules/vinyl-file": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-3.0.0.tgz",
+            "integrity": "sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg==",
             "dev": true,
-            "requires": {
-                "imurmurhash": "^0.1.4"
+            "dependencies": {
+                "graceful-fs": "^4.1.2",
+                "pify": "^2.3.0",
+                "strip-bom-buf": "^1.0.0",
+                "strip-bom-stream": "^2.0.0",
+                "vinyl": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "unique-stream": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
-            "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
+        "node_modules/vinyl-file/node_modules/clone": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+            "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
             "dev": true,
-            "requires": {
-                "json-stable-stringify-without-jsonify": "^1.0.1",
-                "through2-filter": "^3.0.0"
+            "engines": {
+                "node": ">=0.8"
             }
         },
-        "unique-string": {
+        "node_modules/vinyl-file/node_modules/clone-stats": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
-            "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+            "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+            "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
+            "dev": true
+        },
+        "node_modules/vinyl-file/node_modules/pify": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+            "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
             "dev": true,
-            "requires": {
-                "crypto-random-string": "^1.0.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "unist-util-find-all-after": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.4.tgz",
-            "integrity": "sha512-CaxvMjTd+yF93BKLJvZnEfqdM7fgEACsIpQqz8vIj9CJnUb9VpyymFS3tg6TCtgrF7vfCJBF5jbT2Ox9CBRYRQ==",
+        "node_modules/vinyl-file/node_modules/replace-ext": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+            "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
             "dev": true,
-            "requires": {
-                "unist-util-is": "^3.0.0"
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "unist-util-is": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
-            "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
-            "dev": true
-        },
-        "unist-util-remove-position": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz",
-            "integrity": "sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==",
+        "node_modules/vinyl-file/node_modules/vinyl": {
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+            "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
             "dev": true,
-            "requires": {
-                "unist-util-visit": "^1.1.0"
+            "dependencies": {
+                "clone": "^2.1.1",
+                "clone-buffer": "^1.0.0",
+                "clone-stats": "^1.0.0",
+                "cloneable-readable": "^1.0.0",
+                "remove-trailing-separator": "^1.0.1",
+                "replace-ext": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.10"
             }
         },
-        "unist-util-stringify-position": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
-            "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
-            "dev": true
-        },
-        "unist-util-visit": {
-            "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
-            "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
+        "node_modules/vinyl-fs": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz",
+            "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==",
             "dev": true,
-            "requires": {
-                "unist-util-visit-parents": "^2.0.0"
+            "dependencies": {
+                "fs-mkdirp-stream": "^2.0.1",
+                "glob-stream": "^8.0.0",
+                "graceful-fs": "^4.2.11",
+                "iconv-lite": "^0.6.3",
+                "is-valid-glob": "^1.0.0",
+                "lead": "^4.0.0",
+                "normalize-path": "3.0.0",
+                "resolve-options": "^2.0.0",
+                "stream-composer": "^1.0.2",
+                "streamx": "^2.14.0",
+                "to-through": "^3.0.0",
+                "value-or-function": "^4.0.0",
+                "vinyl": "^3.0.0",
+                "vinyl-sourcemap": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "unist-util-visit-parents": {
+        "node_modules/vinyl-fs/node_modules/clone": {
             "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
-            "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
+            "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+            "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
             "dev": true,
-            "requires": {
-                "unist-util-is": "^3.0.0"
+            "engines": {
+                "node": ">=0.8"
             }
         },
-        "universalify": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
-            "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
-            "dev": true
-        },
-        "unix-crypt-td-js": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.0.0.tgz",
-            "integrity": "sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs="
-        },
-        "unpipe": {
+        "node_modules/vinyl-fs/node_modules/clone-stats": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-            "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
-        },
-        "unset-value": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-            "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
-            "requires": {
-                "has-value": "^0.3.1",
-                "isobject": "^3.0.0"
-            },
-            "dependencies": {
-                "has-value": {
-                    "version": "0.3.1",
-                    "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-                    "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
-                    "requires": {
-                        "get-value": "^2.0.3",
-                        "has-values": "^0.1.4",
-                        "isobject": "^2.0.0"
-                    },
-                    "dependencies": {
-                        "isobject": {
-                            "version": "2.1.0",
-                            "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-                            "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-                            "requires": {
-                                "isarray": "1.0.0"
-                            }
-                        }
-                    }
-                },
-                "has-values": {
-                    "version": "0.1.4",
-                    "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-                    "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
-                }
-            }
-        },
-        "unzip-response": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
-            "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+            "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+            "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
             "dev": true
         },
-        "upath": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
-            "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
-        },
-        "update-notifier": {
-            "version": "2.5.0",
-            "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
-            "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
-            "dev": true,
-            "requires": {
-                "boxen": "^1.2.1",
-                "chalk": "^2.0.1",
-                "configstore": "^3.0.0",
-                "import-lazy": "^2.1.0",
-                "is-ci": "^1.0.10",
-                "is-installed-globally": "^0.1.0",
-                "is-npm": "^1.0.0",
-                "latest-version": "^3.0.0",
-                "semver-diff": "^2.0.0",
-                "xdg-basedir": "^3.0.0"
-            },
-            "dependencies": {
-                "ci-info": {
-                    "version": "1.6.0",
-                    "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
-                    "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
-                    "dev": true
-                },
-                "is-ci": {
-                    "version": "1.2.1",
-                    "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
-                    "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
-                    "dev": true,
-                    "requires": {
-                        "ci-info": "^1.5.0"
-                    }
-                }
-            }
-        },
-        "uri-js": {
-            "version": "4.2.2",
-            "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
-            "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+        "node_modules/vinyl-fs/node_modules/vinyl": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz",
+            "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==",
             "dev": true,
-            "requires": {
-                "punycode": "^2.1.0"
+            "dependencies": {
+                "clone": "^2.1.2",
+                "clone-stats": "^1.0.0",
+                "remove-trailing-separator": "^1.1.0",
+                "replace-ext": "^2.0.0",
+                "teex": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "urix": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-            "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
-        },
-        "url": {
-            "version": "0.11.0",
-            "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-            "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+        "node_modules/vinyl-sourcemap": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz",
+            "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==",
             "dev": true,
-            "requires": {
-                "punycode": "1.3.2",
-                "querystring": "0.2.0"
-            },
             "dependencies": {
-                "punycode": {
-                    "version": "1.3.2",
-                    "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-                    "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
-                    "dev": true
-                }
+                "convert-source-map": "^2.0.0",
+                "graceful-fs": "^4.2.10",
+                "now-and-later": "^3.0.0",
+                "streamx": "^2.12.5",
+                "vinyl": "^3.0.0",
+                "vinyl-contents": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "url-parse-lax": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
-            "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+        "node_modules/vinyl-sourcemap/node_modules/clone": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+            "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
             "dev": true,
-            "requires": {
-                "prepend-http": "^1.0.1"
+            "engines": {
+                "node": ">=0.8"
             }
         },
-        "use": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
-            "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+        "node_modules/vinyl-sourcemap/node_modules/clone-stats": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+            "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
+            "dev": true
         },
-        "util": {
-            "version": "0.11.1",
-            "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
-            "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+        "node_modules/vinyl-sourcemap/node_modules/vinyl": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz",
+            "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==",
             "dev": true,
-            "requires": {
-                "inherits": "2.0.3"
-            },
             "dependencies": {
-                "inherits": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-                    "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-                    "dev": true
-                }
+                "clone": "^2.1.2",
+                "clone-stats": "^1.0.0",
+                "remove-trailing-separator": "^1.1.0",
+                "replace-ext": "^2.0.0",
+                "teex": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "util-deprecate": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-            "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
-        },
-        "util.promisify": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
-            "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+        "node_modules/vinyl-sourcemaps-apply": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+            "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==",
             "dev": true,
-            "requires": {
-                "define-properties": "^1.1.2",
-                "object.getownpropertydescriptors": "^2.0.3"
+            "dependencies": {
+                "source-map": "^0.5.1"
             }
         },
-        "utile": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz",
-            "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=",
-            "dev": true,
-            "requires": {
-                "async": "~0.9.0",
-                "deep-equal": "~0.2.1",
-                "i": "0.3.x",
-                "mkdirp": "0.x.x",
-                "ncp": "1.0.x",
-                "rimraf": "2.x.x"
-            },
-            "dependencies": {
-                "async": {
-                    "version": "0.9.2",
-                    "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
-                    "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
-                    "dev": true
-                }
+        "node_modules/vinyl-sourcemaps-apply/node_modules/source-map": {
+            "version": "0.5.7",
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+            "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "utils-merge": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-            "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
-        },
-        "uuid": {
-            "version": "3.3.3",
-            "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
-            "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
-        },
-        "v8-compile-cache": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
-            "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
+        "node_modules/vm-browserify": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+            "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
             "dev": true
         },
-        "v8flags": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz",
-            "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==",
-            "requires": {
-                "homedir-polyfill": "^1.0.1"
+        "node_modules/watchpack": {
+            "version": "2.4.1",
+            "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
+            "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
+            "dev": true,
+            "dependencies": {
+                "glob-to-regexp": "^0.4.1",
+                "graceful-fs": "^4.1.2"
+            },
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "validate-npm-package-license": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-            "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-            "requires": {
-                "spdx-correct": "^3.0.0",
-                "spdx-expression-parse": "^3.0.0"
+        "node_modules/wbuf": {
+            "version": "1.7.3",
+            "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+            "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+            "dependencies": {
+                "minimalistic-assert": "^1.0.0"
             }
         },
-        "value-equal": {
+        "node_modules/wcwidth": {
             "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
-            "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
-        },
-        "value-or-function": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
-            "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=",
-            "dev": true
-        },
-        "vary": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-            "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
-        },
-        "verror": {
-            "version": "1.10.0",
-            "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-            "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+            "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+            "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
             "dev": true,
-            "requires": {
-                "assert-plus": "^1.0.0",
-                "core-util-is": "1.0.2",
-                "extsprintf": "^1.2.0"
+            "dependencies": {
+                "defaults": "^1.0.3"
             }
         },
-        "vfile": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz",
-            "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==",
+        "node_modules/webpack": {
+            "version": "5.91.0",
+            "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
+            "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==",
             "dev": true,
-            "requires": {
-                "is-buffer": "^2.0.0",
-                "replace-ext": "1.0.0",
-                "unist-util-stringify-position": "^1.0.0",
-                "vfile-message": "^1.0.0"
-            },
             "dependencies": {
-                "is-buffer": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
-                    "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
-                    "dev": true
+                "@types/eslint-scope": "^3.7.3",
+                "@types/estree": "^1.0.5",
+                "@webassemblyjs/ast": "^1.12.1",
+                "@webassemblyjs/wasm-edit": "^1.12.1",
+                "@webassemblyjs/wasm-parser": "^1.12.1",
+                "acorn": "^8.7.1",
+                "acorn-import-assertions": "^1.9.0",
+                "browserslist": "^4.21.10",
+                "chrome-trace-event": "^1.0.2",
+                "enhanced-resolve": "^5.16.0",
+                "es-module-lexer": "^1.2.1",
+                "eslint-scope": "5.1.1",
+                "events": "^3.2.0",
+                "glob-to-regexp": "^0.4.1",
+                "graceful-fs": "^4.2.11",
+                "json-parse-even-better-errors": "^2.3.1",
+                "loader-runner": "^4.2.0",
+                "mime-types": "^2.1.27",
+                "neo-async": "^2.6.2",
+                "schema-utils": "^3.2.0",
+                "tapable": "^2.1.1",
+                "terser-webpack-plugin": "^5.3.10",
+                "watchpack": "^2.4.1",
+                "webpack-sources": "^3.2.3"
+            },
+            "bin": {
+                "webpack": "bin/webpack.js"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/webpack"
+            },
+            "peerDependenciesMeta": {
+                "webpack-cli": {
+                    "optional": true
                 }
             }
         },
-        "vfile-location": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.5.tgz",
-            "integrity": "sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ==",
-            "dev": true
+        "node_modules/webpack-dev-middleware": {
+            "version": "7.2.1",
+            "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz",
+            "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==",
+            "dev": true,
+            "dependencies": {
+                "colorette": "^2.0.10",
+                "memfs": "^4.6.0",
+                "mime-types": "^2.1.31",
+                "on-finished": "^2.4.1",
+                "range-parser": "^1.2.1",
+                "schema-utils": "^4.0.0"
+            },
+            "engines": {
+                "node": ">= 18.12.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/webpack"
+            },
+            "peerDependencies": {
+                "webpack": "^5.0.0"
+            },
+            "peerDependenciesMeta": {
+                "webpack": {
+                    "optional": true
+                }
+            }
         },
-        "vfile-message": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz",
-            "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==",
+        "node_modules/webpack-hot-middleware": {
+            "version": "2.26.1",
+            "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz",
+            "integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==",
             "dev": true,
-            "requires": {
-                "unist-util-stringify-position": "^1.1.1"
+            "dependencies": {
+                "ansi-html-community": "0.0.8",
+                "html-entities": "^2.1.0",
+                "strip-ansi": "^6.0.0"
             }
         },
-        "vinyl": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
-            "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
+        "node_modules/webpack-hot-middleware/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,
-            "requires": {
-                "clone": "^2.1.1",
-                "clone-buffer": "^1.0.0",
-                "clone-stats": "^1.0.0",
-                "cloneable-readable": "^1.0.0",
-                "remove-trailing-separator": "^1.0.1",
-                "replace-ext": "^1.0.0"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "vinyl-file": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-3.0.0.tgz",
-            "integrity": "sha1-sQTZ5ECf+jJfqt1SBkLQo7SIs2U=",
+        "node_modules/webpack-hot-middleware/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,
-            "requires": {
-                "graceful-fs": "^4.1.2",
-                "pify": "^2.3.0",
-                "strip-bom-buf": "^1.0.0",
-                "strip-bom-stream": "^2.0.0",
-                "vinyl": "^2.0.1"
-            },
             "dependencies": {
-                "pify": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                    "dev": true
-                }
+                "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "vinyl-fs": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
-            "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
+        "node_modules/webpack-sources": {
+            "version": "3.2.3",
+            "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+            "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
             "dev": true,
-            "requires": {
-                "fs-mkdirp-stream": "^1.0.0",
-                "glob-stream": "^6.1.0",
-                "graceful-fs": "^4.0.0",
-                "is-valid-glob": "^1.0.0",
-                "lazystream": "^1.0.0",
-                "lead": "^1.0.0",
-                "object.assign": "^4.0.4",
-                "pumpify": "^1.3.5",
-                "readable-stream": "^2.3.3",
-                "remove-bom-buffer": "^3.0.0",
-                "remove-bom-stream": "^1.2.0",
-                "resolve-options": "^1.1.0",
-                "through2": "^2.0.0",
-                "to-through": "^2.0.0",
-                "value-or-function": "^3.0.0",
-                "vinyl": "^2.0.0",
-                "vinyl-sourcemap": "^1.1.0"
+            "engines": {
+                "node": ">=10.13.0"
             }
         },
-        "vinyl-sourcemap": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
-            "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=",
-            "dev": true,
-            "requires": {
-                "append-buffer": "^1.0.2",
-                "convert-source-map": "^1.5.0",
-                "graceful-fs": "^4.1.6",
-                "normalize-path": "^2.1.1",
-                "now-and-later": "^2.0.0",
-                "remove-bom-buffer": "^3.0.0",
-                "vinyl": "^2.0.0"
+        "node_modules/webpack/node_modules/acorn": {
+            "version": "8.11.3",
+            "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+            "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+            "dev": true,
+            "bin": {
+                "acorn": "bin/acorn"
             },
-            "dependencies": {
-                "normalize-path": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-                    "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-                    "dev": true,
-                    "requires": {
-                        "remove-trailing-separator": "^1.0.1"
-                    }
-                }
+            "engines": {
+                "node": ">=0.4.0"
             }
         },
-        "vinyl-sourcemaps-apply": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
-            "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+        "node_modules/webpack/node_modules/acorn-import-assertions": {
+            "version": "1.9.0",
+            "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+            "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
             "dev": true,
-            "requires": {
-                "source-map": "^0.5.1"
+            "peerDependencies": {
+                "acorn": "^8"
             }
         },
-        "vm-browserify": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
-            "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
-            "dev": true
-        },
-        "w3c-hr-time": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
-            "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
+        "node_modules/webpack/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,
-            "requires": {
-                "browser-process-hrtime": "^0.1.2"
+            "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"
             }
         },
-        "walker": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
-            "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+        "node_modules/webpack/node_modules/ajv-keywords": {
+            "version": "3.5.2",
+            "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+            "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
             "dev": true,
-            "requires": {
-                "makeerror": "1.0.x"
+            "peerDependencies": {
+                "ajv": "^6.9.1"
             }
         },
-        "watchpack": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
-            "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+        "node_modules/webpack/node_modules/eslint-scope": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+            "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
             "dev": true,
-            "requires": {
-                "chokidar": "^2.0.2",
-                "graceful-fs": "^4.1.2",
-                "neo-async": "^2.5.0"
+            "dependencies": {
+                "esrecurse": "^4.3.0",
+                "estraverse": "^4.1.1"
+            },
+            "engines": {
+                "node": ">=8.0.0"
             }
         },
-        "wcwidth": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
-            "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+        "node_modules/webpack/node_modules/estraverse": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
             "dev": true,
-            "requires": {
-                "defaults": "^1.0.3"
+            "engines": {
+                "node": ">=4.0"
             }
         },
-        "webidl-conversions": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-            "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+        "node_modules/webpack/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
         },
-        "webpack": {
-            "version": "4.41.0",
-            "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.0.tgz",
-            "integrity": "sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.8.5",
-                "@webassemblyjs/helper-module-context": "1.8.5",
-                "@webassemblyjs/wasm-edit": "1.8.5",
-                "@webassemblyjs/wasm-parser": "1.8.5",
-                "acorn": "^6.2.1",
-                "ajv": "^6.10.2",
-                "ajv-keywords": "^3.4.1",
-                "chrome-trace-event": "^1.0.2",
-                "enhanced-resolve": "^4.1.0",
-                "eslint-scope": "^4.0.3",
-                "json-parse-better-errors": "^1.0.2",
-                "loader-runner": "^2.4.0",
-                "loader-utils": "^1.2.3",
-                "memory-fs": "^0.4.1",
-                "micromatch": "^3.1.10",
-                "mkdirp": "^0.5.1",
-                "neo-async": "^2.6.1",
-                "node-libs-browser": "^2.2.1",
-                "schema-utils": "^1.0.0",
-                "tapable": "^1.1.3",
-                "terser-webpack-plugin": "^1.4.1",
-                "watchpack": "^1.6.0",
-                "webpack-sources": "^1.4.1"
-            }
-        },
-        "webpack-dev-middleware": {
-            "version": "3.7.1",
-            "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.1.tgz",
-            "integrity": "sha512-5MWu9SH1z3hY7oHOV6Kbkz5x7hXbxK56mGHNqHTe6d+ewxOwKUxoUJBs7QIaJb33lPjl9bJZ3X0vCoooUzC36A==",
-            "dev": true,
-            "requires": {
-                "memory-fs": "^0.4.1",
-                "mime": "^2.4.4",
-                "mkdirp": "^0.5.1",
-                "range-parser": "^1.2.1",
-                "webpack-log": "^2.0.0"
+        "node_modules/webpack/node_modules/schema-utils": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+            "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+            "dev": true,
+            "dependencies": {
+                "@types/json-schema": "^7.0.8",
+                "ajv": "^6.12.5",
+                "ajv-keywords": "^3.5.2"
             },
+            "engines": {
+                "node": ">= 10.13.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/webpack"
+            }
+        },
+        "node_modules/which": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+            "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
             "dependencies": {
-                "mime": {
-                    "version": "2.4.4",
-                    "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
-                    "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
-                    "dev": true
-                }
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "node-which": "bin/node-which"
+            },
+            "engines": {
+                "node": ">= 8"
             }
         },
-        "webpack-filter-warnings-plugin": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz",
-            "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==",
-            "dev": true
+        "node_modules/which-boxed-primitive": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+            "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+            "dependencies": {
+                "is-bigint": "^1.0.1",
+                "is-boolean-object": "^1.1.0",
+                "is-number-object": "^1.0.4",
+                "is-string": "^1.0.5",
+                "is-symbol": "^1.0.3"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
-        "webpack-hot-middleware": {
-            "version": "2.25.0",
-            "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz",
-            "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==",
+        "node_modules/which-builtin-type": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz",
+            "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==",
             "dev": true,
-            "requires": {
-                "ansi-html": "0.0.7",
-                "html-entities": "^1.2.0",
-                "querystring": "^0.2.0",
-                "strip-ansi": "^3.0.0"
+            "dependencies": {
+                "function.prototype.name": "^1.1.5",
+                "has-tostringtag": "^1.0.0",
+                "is-async-function": "^2.0.0",
+                "is-date-object": "^1.0.5",
+                "is-finalizationregistry": "^1.0.2",
+                "is-generator-function": "^1.0.10",
+                "is-regex": "^1.1.4",
+                "is-weakref": "^1.0.2",
+                "isarray": "^2.0.5",
+                "which-boxed-primitive": "^1.0.2",
+                "which-collection": "^1.0.1",
+                "which-typed-array": "^1.1.9"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "webpack-log": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
-            "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+        "node_modules/which-collection": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+            "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
             "dev": true,
-            "requires": {
-                "ansi-colors": "^3.0.0",
-                "uuid": "^3.3.2"
+            "dependencies": {
+                "is-map": "^2.0.3",
+                "is-set": "^2.0.3",
+                "is-weakmap": "^2.0.2",
+                "is-weakset": "^2.0.3"
             },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/which-typed-array": {
+            "version": "1.1.15",
+            "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+            "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
             "dependencies": {
-                "ansi-colors": {
-                    "version": "3.2.4",
-                    "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
-                    "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
-                    "dev": true
-                }
+                "available-typed-arrays": "^1.0.7",
+                "call-bind": "^1.0.7",
+                "for-each": "^0.3.3",
+                "gopd": "^1.0.1",
+                "has-tostringtag": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "webpack-sources": {
-            "version": "1.4.3",
-            "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
-            "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+        "node_modules/winston": {
+            "version": "3.13.0",
+            "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz",
+            "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==",
             "dev": true,
-            "requires": {
-                "source-list-map": "^2.0.0",
-                "source-map": "~0.6.1"
-            },
             "dependencies": {
-                "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
-                }
+                "@colors/colors": "^1.6.0",
+                "@dabh/diagnostics": "^2.0.2",
+                "async": "^3.2.3",
+                "is-stream": "^2.0.0",
+                "logform": "^2.4.0",
+                "one-time": "^1.0.0",
+                "readable-stream": "^3.4.0",
+                "safe-stable-stringify": "^2.3.1",
+                "stack-trace": "0.0.x",
+                "triple-beam": "^1.3.0",
+                "winston-transport": "^4.7.0"
+            },
+            "engines": {
+                "node": ">= 12.0.0"
             }
         },
-        "whatwg-encoding": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
-            "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+        "node_modules/winston-transport": {
+            "version": "4.7.0",
+            "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz",
+            "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==",
             "dev": true,
-            "requires": {
-                "iconv-lite": "0.4.24"
+            "dependencies": {
+                "logform": "^2.3.2",
+                "readable-stream": "^3.6.0",
+                "triple-beam": "^1.3.0"
+            },
+            "engines": {
+                "node": ">= 12.0.0"
             }
         },
-        "whatwg-mimetype": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
-            "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
+        "node_modules/winston/node_modules/async": {
+            "version": "3.2.5",
+            "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+            "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
             "dev": true
         },
-        "whatwg-url": {
-            "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
-            "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+        "node_modules/winston/node_modules/is-stream": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+            "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
             "dev": true,
-            "requires": {
-                "lodash.sortby": "^4.7.0",
-                "tr46": "^1.0.1",
-                "webidl-conversions": "^4.0.2"
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "when": {
-            "version": "3.7.8",
-            "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz",
-            "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=",
-            "dev": true
-        },
-        "which": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-            "requires": {
-                "isexe": "^2.0.0"
+        "node_modules/word-wrap": {
+            "version": "1.2.5",
+            "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+            "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "which-module": {
+        "node_modules/wordwrap": {
             "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
-            "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+            "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+            "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
             "dev": true
         },
-        "wide-align": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
-            "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+        "node_modules/wrap-ansi": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
+            "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==",
             "dev": true,
-            "requires": {
-                "string-width": "^1.0.2 || 2"
+            "dependencies": {
+                "string-width": "^2.1.1",
+                "strip-ansi": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "widest-line": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
-            "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
+        "node_modules/wrappy": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+            "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+        },
+        "node_modules/write": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+            "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
             "dev": true,
-            "requires": {
-                "string-width": "^2.1.1"
+            "dependencies": {
+                "mkdirp": "^0.5.1"
             },
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/write-file-atomic": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+            "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+            "dev": true,
             "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
-                },
-                "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=",
-                    "dev": true
-                },
-                "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=",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^3.0.0"
-                    }
-                }
+                "imurmurhash": "^0.1.4",
+                "is-typedarray": "^1.0.0",
+                "signal-exit": "^3.0.2",
+                "typedarray-to-buffer": "^3.1.5"
             }
         },
-        "window-size": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
-            "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
-            "dev": true
+        "node_modules/xmlhttprequest": {
+            "version": "1.8.0",
+            "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+            "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==",
+            "engines": {
+                "node": ">=0.4.0"
+            }
         },
-        "winston": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz",
-            "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=",
-            "dev": true,
-            "requires": {
-                "async": "~1.0.0",
-                "colors": "1.0.x",
-                "cycle": "1.0.x",
-                "eyes": "0.1.x",
-                "isstream": "0.1.x",
-                "pkginfo": "0.3.x",
-                "stack-trace": "0.0.x"
-            },
-            "dependencies": {
-                "async": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
-                    "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
-                    "dev": true
-                },
-                "colors": {
-                    "version": "1.0.3",
-                    "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
-                    "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
-                    "dev": true
-                },
-                "pkginfo": {
-                    "version": "0.3.1",
-                    "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
-                    "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=",
-                    "dev": true
-                }
+        "node_modules/xmlhttprequest-ssl": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
+            "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
+            "engines": {
+                "node": ">=0.4.0"
             }
         },
-        "wordwrap": {
-            "version": "0.0.3",
-            "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
-            "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
-            "dev": true
+        "node_modules/xregexp": {
+            "version": "4.4.1",
+            "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.4.1.tgz",
+            "integrity": "sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==",
+            "dev": true,
+            "dependencies": {
+                "@babel/runtime-corejs3": "^7.12.1"
+            }
         },
-        "workbox-background-sync": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz",
-            "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==",
+        "node_modules/xss": {
+            "version": "1.0.15",
+            "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz",
+            "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==",
+            "dependencies": {
+                "commander": "^2.20.3",
+                "cssfilter": "0.0.10"
+            },
+            "bin": {
+                "xss": "bin/xss"
+            },
+            "engines": {
+                "node": ">= 0.10.0"
+            }
+        },
+        "node_modules/xss/node_modules/commander": {
+            "version": "2.20.3",
+            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+        },
+        "node_modules/xtend": {
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+            "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "engines": {
+                "node": ">=0.4"
             }
         },
-        "workbox-broadcast-update": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz",
-            "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==",
+        "node_modules/y18n": {
+            "version": "5.0.8",
+            "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+            "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "engines": {
+                "node": ">=10"
             }
         },
-        "workbox-build": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz",
-            "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.3.4",
-                "@hapi/joi": "^15.0.0",
-                "common-tags": "^1.8.0",
-                "fs-extra": "^4.0.2",
-                "glob": "^7.1.3",
-                "lodash.template": "^4.4.0",
-                "pretty-bytes": "^5.1.0",
-                "stringify-object": "^3.3.0",
-                "strip-comments": "^1.0.2",
-                "workbox-background-sync": "^4.3.1",
-                "workbox-broadcast-update": "^4.3.1",
-                "workbox-cacheable-response": "^4.3.1",
-                "workbox-core": "^4.3.1",
-                "workbox-expiration": "^4.3.1",
-                "workbox-google-analytics": "^4.3.1",
-                "workbox-navigation-preload": "^4.3.1",
-                "workbox-precaching": "^4.3.1",
-                "workbox-range-requests": "^4.3.1",
-                "workbox-routing": "^4.3.1",
-                "workbox-strategies": "^4.3.1",
-                "workbox-streams": "^4.3.1",
-                "workbox-sw": "^4.3.1",
-                "workbox-window": "^4.3.1"
-            },
-            "dependencies": {
-                "fs-extra": {
-                    "version": "4.0.3",
-                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
-                    "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "jsonfile": "^4.0.0",
-                        "universalify": "^0.1.0"
-                    }
-                }
+        "node_modules/yallist": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+            "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+        },
+        "node_modules/yaml": {
+            "version": "1.10.2",
+            "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+            "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+            "engines": {
+                "node": ">= 6"
             }
         },
-        "workbox-cacheable-response": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz",
-            "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==",
+        "node_modules/yargs": {
+            "version": "17.7.2",
+            "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+            "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "dependencies": {
+                "cliui": "^8.0.1",
+                "escalade": "^3.1.1",
+                "get-caller-file": "^2.0.5",
+                "require-directory": "^2.1.1",
+                "string-width": "^4.2.3",
+                "y18n": "^5.0.5",
+                "yargs-parser": "^21.1.1"
+            },
+            "engines": {
+                "node": ">=12"
             }
         },
-        "workbox-core": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
-            "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==",
-            "dev": true
-        },
-        "workbox-expiration": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz",
-            "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==",
+        "node_modules/yargs-parser": {
+            "version": "20.2.9",
+            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+            "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "engines": {
+                "node": ">=10"
             }
         },
-        "workbox-google-analytics": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz",
-            "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==",
+        "node_modules/yargs/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,
-            "requires": {
-                "workbox-background-sync": "^4.3.1",
-                "workbox-core": "^4.3.1",
-                "workbox-routing": "^4.3.1",
-                "workbox-strategies": "^4.3.1"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "workbox-navigation-preload": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz",
-            "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==",
+        "node_modules/yargs/node_modules/is-fullwidth-code-point": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+            "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "engines": {
+                "node": ">=8"
             }
         },
-        "workbox-precaching": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz",
-            "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==",
+        "node_modules/yargs/node_modules/string-width": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "workbox-range-requests": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz",
-            "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==",
+        "node_modules/yargs/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,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "dependencies": {
+                "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "workbox-routing": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz",
-            "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==",
+        "node_modules/yargs/node_modules/yargs-parser": {
+            "version": "21.1.1",
+            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+            "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "engines": {
+                "node": ">=12"
             }
         },
-        "workbox-strategies": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz",
-            "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==",
+        "node_modules/yocto-queue": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+            "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "engines": {
+                "node": ">=12.20"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "workbox-streams": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz",
-            "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==",
+        "node_modules/zwitch": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
+            "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
             }
         },
-        "workbox-sw": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz",
-            "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==",
-            "dev": true
+        "reactium_modules/@atomic-reactor/reactium-api": {
+            "version": "6.1.0",
+            "license": "MIT",
+            "dependencies": {
+                "http-proxy-middleware": "^0.20.0",
+                "parse": "^5.1.0",
+                "socket.io-client": "^4.6.1"
+            }
         },
-        "workbox-window": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz",
-            "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==",
+        "reactium_modules/@atomic-reactor/reactium-capability": {
+            "version": "6.0.0",
+            "license": "MIT"
+        },
+        "reactium_modules/@atomic-reactor/reactium-core": {
+            "version": "6.2.1",
+            "license": "MIT",
+            "dependencies": {
+                "@atomic-reactor/dirname": "^1.0.7",
+                "@atomic-reactor/reactium-sdk-core": "^2.2.0",
+                "@babel/cli": "^7.24.6",
+                "@babel/node": "^7.24.6",
+                "action-sequence": "^1.1.2",
+                "axios": "^1.7.2",
+                "axios-retry": "^4.3.0",
+                "camelcase": "^7.0.1",
+                "chalk": "^4.1.2",
+                "classnames": "^2.5.1",
+                "cookie-parser": "^1.4.6",
+                "cookie-session": "^2.1.0",
+                "copy-to-clipboard": "^3.3.3",
+                "core-js": "^3.37.1",
+                "cors": "^2.8.5",
+                "cross-env": "^7.0.3",
+                "dayjs": "^1.11.11",
+                "directory-tree": "^2.2.7",
+                "express": "^4.19.2",
+                "express-static-gzip": "^2.1.7",
+                "fs-extra": "^10.0.0",
+                "globby": "11.0.3",
+                "http-auth": "^3.2.4",
+                "http-proxy-middleware": "^0.20.0",
+                "jed": "^1.1.1",
+                "morgan": "^1.10.0",
+                "npm-run-all": "^4.1.5",
+                "object-path": "^0.11.8",
+                "prettier": "^1.19.1",
+                "prop-types": "^15.8.1",
+                "querystring-browser": "^1.0.4",
+                "react": "^18.3.1",
+                "react-dom": "^18.3.1",
+                "react-helmet": "^6.1.0",
+                "react-router-dom": "^5.3.4",
+                "regenerator-runtime": "^0.14.1",
+                "run-script-os": "^1.1.6",
+                "semver": "^7.6.2",
+                "serialize-javascript": "^6.0.2",
+                "shallow-equals": "^1.0.0",
+                "spdy": "^4.0.2",
+                "underscore": "^1.13.6",
+                "uuid": "^9.0.1",
+                "xss": "^1.0.15"
+            },
+            "devDependencies": {
+                "@atomic-reactor/gulp-run": "^1.8.0",
+                "@atomic-reactor/gulp-watch": "^5.0.2",
+                "@atomic-reactor/node-sass-reactium-importer": "^1.0.0",
+                "@atomic-reactor/webpack-po-loader": "^5.0.2",
+                "@babel/core": "^7.24.6",
+                "@babel/plugin-proposal-class-properties": "^7.18.6",
+                "@babel/plugin-proposal-export-default-from": "^7.24.6",
+                "@babel/plugin-proposal-private-methods": "^7.18.6",
+                "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+                "@babel/preset-env": "^7.24.6",
+                "@babel/preset-react": "^7.24.6",
+                "@types/react": "^18.3.3",
+                "ajv": "^8.14.0",
+                "apidoc": "^0.25.0",
+                "babel-core": "^7.0.0-bridge.0",
+                "babel-eslint": "^10.1.0",
+                "babel-loader": "^9.1.3",
+                "babel-plugin-module-resolver": "^5.0.2",
+                "browser-sync": "^3.0.2",
+                "cli-spinners": "^2.7.0",
+                "compression-webpack-plugin": "^10.0.0",
+                "decamelize": "^3.2.0",
+                "del": "^5.1.0",
+                "eslint": "^5.16.0",
+                "eslint-plugin-react": "^7.28.0",
+                "eslint-plugin-react-hooks": "^2.5.0",
+                "fast-diff": "^1.3.0",
+                "file-api": "^0.10.4",
+                "fs-readdir-recursive": "^1.1.0",
+                "gettext-extract": "^2.0.1",
+                "gulp": "^5.0.0",
+                "gulp-autoprefixer": "^8.0.0",
+                "gulp-clean-css": "^4.3.0",
+                "gulp-concat": "^2.6.1",
+                "gulp-gzip": "^1.4.2",
+                "gulp-if": "^3.0.0",
+                "gulp-rename": "^2.0.0",
+                "gulp-sass": "^5.1.0",
+                "gulp-sourcemaps": "^3.0.0",
+                "gulp4-run-sequence": "^1.0.2",
+                "handlebars": "^4.7.8",
+                "husky": "^3.1.0",
+                "lint-staged": "^9.4.3",
+                "mime": "^1.6.0",
+                "mime-db": "^1.52.0",
+                "mime-type": "^4.0.0",
+                "module-alias": "^2.2.3",
+                "node-polyfill-webpack-plugin": "^2.0.1",
+                "nodemon": "^3.1.2",
+                "open": "^8.4.2",
+                "ora": "^5.4.1",
+                "readdir-recursive": "0.0.4",
+                "sass": "^1.77.4",
+                "sass-embedded": "^1.77.2",
+                "slugify": "^1.6.6",
+                "stylelint": "^13.12.0",
+                "ts-loader": "^9.5.1",
+                "typescript": "^5.4.5",
+                "webpack": "^5.91.0",
+                "webpack-dev-middleware": "^7.2.1",
+                "webpack-hot-middleware": "^2.26.1"
+            }
+        },
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/binary-extensions": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
             "dev": true,
-            "requires": {
-                "workbox-core": "^4.3.1"
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "worker-farm": {
-            "version": "1.7.0",
-            "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
-            "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/braces": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+            "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
             "dev": true,
-            "requires": {
-                "errno": "~0.1.7"
+            "dependencies": {
+                "fill-range": "^7.1.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "wrap-ansi": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-            "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/chokidar": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
             "dev": true,
-            "requires": {
-                "string-width": "^1.0.1",
-                "strip-ansi": "^3.0.1"
+            "dependencies": {
+                "anymatch": "~3.1.2",
+                "braces": "~3.0.2",
+                "glob-parent": "~5.1.2",
+                "is-binary-path": "~2.1.0",
+                "is-glob": "~4.0.1",
+                "normalize-path": "~3.0.0",
+                "readdirp": "~3.6.0"
+            },
+            "engines": {
+                "node": ">= 8.10.0"
+            },
+            "funding": {
+                "url": "https://paulmillr.com/funding/"
+            },
+            "optionalDependencies": {
+                "fsevents": "~2.3.2"
             }
         },
-        "wrappy": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-            "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-        },
-        "write": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
-            "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/fill-range": {
+            "version": "7.1.1",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+            "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
             "dev": true,
-            "requires": {
-                "mkdirp": "^0.5.1"
+            "dependencies": {
+                "to-regex-range": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
             }
         },
-        "write-file-atomic": {
-            "version": "2.4.1",
-            "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
-            "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
             "dev": true,
-            "requires": {
-                "graceful-fs": "^4.1.11",
-                "imurmurhash": "^0.1.4",
-                "signal-exit": "^3.0.2"
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
             }
         },
-        "ws": {
-            "version": "7.1.2",
-            "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.2.tgz",
-            "integrity": "sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg==",
-            "requires": {
-                "async-limiter": "^1.0.0"
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/globby": {
+            "version": "11.0.3",
+            "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz",
+            "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==",
+            "dependencies": {
+                "array-union": "^2.1.0",
+                "dir-glob": "^3.0.1",
+                "fast-glob": "^3.1.1",
+                "ignore": "^5.1.4",
+                "merge2": "^1.3.0",
+                "slash": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "x-is-string": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
-            "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
-            "dev": true
-        },
-        "xdg-basedir": {
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/has-flag": {
             "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
-            "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
-            "dev": true
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+            "dev": true,
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "xml-name-validator": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-            "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
-            "dev": true
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/ignore": {
+            "version": "5.3.1",
+            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+            "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+            "engines": {
+                "node": ">= 4"
+            }
         },
-        "xmlhttprequest": {
-            "version": "1.8.0",
-            "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
-            "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/is-binary-path": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+            "dev": true,
+            "dependencies": {
+                "binary-extensions": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "xmlhttprequest-ssl": {
-            "version": "1.5.5",
-            "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
-            "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
-            "dev": true
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.12.0"
+            }
         },
-        "xregexp": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
-            "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==",
-            "dev": true
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/mime": {
+            "version": "1.6.0",
+            "dev": true,
+            "license": "MIT",
+            "bin": {
+                "mime": "cli.js"
+            },
+            "engines": {
+                "node": ">=4"
+            }
         },
-        "xss": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.6.tgz",
-            "integrity": "sha512-6Q9TPBeNyoTRxgZFk5Ggaepk/4vUOYdOsIUYvLehcsIZTFjaavbVnsuAkLA5lIFuug5hw8zxcB9tm01gsjph2A==",
-            "requires": {
-                "commander": "^2.9.0",
-                "cssfilter": "0.0.10"
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/nodemon": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.2.tgz",
+            "integrity": "sha512-/Ib/kloefDy+N0iRTxIUzyGcdW9lzlnca2Jsa5w73bs3npXjg+WInmiX6VY13mIb6SykkthYX/U5t0ukryGqBw==",
+            "dev": true,
+            "dependencies": {
+                "chokidar": "^3.5.2",
+                "debug": "^4",
+                "ignore-by-default": "^1.0.1",
+                "minimatch": "^3.1.2",
+                "pstree.remy": "^1.1.8",
+                "semver": "^7.5.3",
+                "simple-update-notifier": "^2.0.0",
+                "supports-color": "^5.5.0",
+                "touch": "^3.1.0",
+                "undefsafe": "^2.0.5"
+            },
+            "bin": {
+                "nodemon": "bin/nodemon.js"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/nodemon"
             }
         },
-        "xtend": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-            "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/readdirp": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "dev": true,
+            "dependencies": {
+                "picomatch": "^2.2.1"
+            },
+            "engines": {
+                "node": ">=8.10.0"
+            }
         },
-        "y18n": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
-            "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
-            "dev": true
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/simple-update-notifier": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+            "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
+            "dev": true,
+            "dependencies": {
+                "semver": "^7.5.3"
+            },
+            "engines": {
+                "node": ">=10"
+            }
         },
-        "yallist": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.0.tgz",
-            "integrity": "sha512-6gpP93MR+VOOehKbCPchro3wFZNSNmek8A2kbkOAZLIZAYx1KP/zAqwO0sOHi3xJEb+UBz8NaYt/17UNit1Q9w==",
-            "dev": true
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/slash": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+            "engines": {
+                "node": ">=8"
+            }
         },
-        "yargs": {
-            "version": "14.0.0",
-            "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.0.0.tgz",
-            "integrity": "sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow==",
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
             "dev": true,
-            "requires": {
-                "cliui": "^5.0.0",
-                "decamelize": "^1.2.0",
-                "find-up": "^3.0.0",
-                "get-caller-file": "^2.0.1",
-                "require-directory": "^2.1.1",
-                "require-main-filename": "^2.0.0",
-                "set-blocking": "^2.0.0",
-                "string-width": "^3.0.0",
-                "which-module": "^2.0.0",
-                "y18n": "^4.0.0",
-                "yargs-parser": "^13.1.1"
-            },
-            "dependencies": {
-                "ansi-regex": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-                    "dev": true
-                },
-                "cliui": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-                    "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
-                    "dev": true,
-                    "requires": {
-                        "string-width": "^3.1.0",
-                        "strip-ansi": "^5.2.0",
-                        "wrap-ansi": "^5.1.0"
-                    }
-                },
-                "decamelize": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-                    "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-                    "dev": true
-                },
-                "get-caller-file": {
-                    "version": "2.0.5",
-                    "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-                    "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-                    "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=",
-                    "dev": true
-                },
-                "string-width": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-                    "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-                    "dev": true,
-                    "requires": {
-                        "emoji-regex": "^7.0.1",
-                        "is-fullwidth-code-point": "^2.0.0",
-                        "strip-ansi": "^5.1.0"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-                    "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^4.1.0"
-                    }
-                },
-                "which-module": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-                    "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-                    "dev": true
-                },
-                "wrap-ansi": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
-                    "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^3.2.0",
-                        "string-width": "^3.0.0",
-                        "strip-ansi": "^5.0.0"
-                    }
-                },
-                "y18n": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-                    "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-                    "dev": true
-                },
-                "yargs-parser": {
-                    "version": "13.1.1",
-                    "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
-                    "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
-                    "dev": true,
-                    "requires": {
-                        "camelcase": "^5.0.0",
-                        "decamelize": "^1.2.0"
-                    }
-                }
+            "dependencies": {
+                "has-flag": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "yargs-parser": {
-            "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
-            "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
             "dev": true,
-            "requires": {
-                "camelcase": "^3.0.0"
-            },
             "dependencies": {
-                "camelcase": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-                    "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-                    "dev": true
-                }
+                "is-number": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=8.0"
             }
         },
-        "yauzl": {
-            "version": "2.10.0",
-            "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-            "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
-            "dev": true,
-            "requires": {
-                "buffer-crc32": "~0.2.3",
-                "fd-slicer": "~1.1.0"
+        "reactium_modules/@atomic-reactor/reactium-core/node_modules/uuid": {
+            "version": "9.0.1",
+            "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+            "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+            "funding": [
+                "https://github.com/sponsors/broofa",
+                "https://github.com/sponsors/ctavan"
+            ],
+            "bin": {
+                "uuid": "dist/bin/uuid"
             }
         },
-        "yeast": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
-            "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
-            "dev": true
+        "reactium_modules/@atomic-reactor/reactium-role": {
+            "version": "5.0.1",
+            "license": "MIT"
         },
-        "zip-stream": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.2.tgz",
-            "integrity": "sha512-ykebHGa2+uzth/R4HZLkZh3XFJzivhVsjJt8bN3GvBzLaqqrUdRacu+c4QtnUgjkkQfsOuNE1JgLKMCPNmkKgg==",
-            "dev": true,
-            "requires": {
-                "archiver-utils": "^2.1.0",
-                "compress-commons": "^2.1.1",
-                "readable-stream": "^3.4.0"
-            },
+        "reactium_modules/@atomic-reactor/reactium-setting": {
+            "version": "5.0.1",
+            "license": "MIT"
+        },
+        "reactium_modules/@atomic-reactor/reactium-svg": {
+            "version": "0.0.3",
+            "license": "MIT",
             "dependencies": {
-                "readable-stream": {
-                    "version": "3.4.0",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
-                    "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "^2.0.3",
-                        "string_decoder": "^1.1.1",
-                        "util-deprecate": "^1.0.1"
-                    }
-                }
+                "@svgr/webpack": "6.3.1"
             }
+        },
+        "reactium_modules/@atomic-reactor/reactium-user": {
+            "version": "6.1.0",
+            "license": "MIT"
         }
     }
 }
diff --git a/package.json b/package.json
index 9dee9a97..2b9e42b8 100644
--- a/package.json
+++ b/package.json
@@ -1,23 +1,15 @@
 {
-  "name": "reactium",
-  "version": "3.0.20",
+  "name": "reactium-core-project",
+  "version": "6.1.5",
   "description": "A framework for creating React + Redux apps using the domain driven design (DDD) paradigm.",
   "main": "index.js",
   "scripts": {
-    "start": "node build/.core/index.js",
-    "test": "jest",
-    "build": "npm-run-all build:*",
-    "build:gulp": "cross-env NODE_ENV=production gulp",
-    "build:babel-core": "cross-env NODE_ENV=production babel .core --out-dir build/.core",
-    "build:babel-src": "cross-env NODE_ENV=production babel src --out-dir build/src",
+    "start": "node src/index.mjs",
+    "build": "cross-env NODE_ENV=production gulp",
+    "heroku-prebuild": "npx reactium install",
     "static": "npm-run-all build:* && gulp static",
     "local": "gulp local",
-    "local:ssr": "gulp local:ssr",
-    "clean": "gulp clean",
-    "docker": "npm-run-all -s clean docker:*",
-    "docker:build": "cross-env docker image build -t $npm_package_name:$npm_package_version -t $npm_package_name:latest .",
-    "docker:push": "cross-env docker push $npm_package_name:$npm_package_version && cross-env docker push $npm_package_name:$npm_package_version:latest",
-    "precommit": "lint-staged"
+    "clean": "gulp clean"
   },
   "keywords": [
     "react",
@@ -29,8 +21,8 @@
   "author": "Cam Tullos <cam@tullos.ninja> (http://cam.tullos.ninja) and John Dillick <john@dillick.us>",
   "license": "MIT",
   "engines": {
-    "node": "10.16.0",
-    "npm": ">=6.9.0"
+    "node": "18.x",
+    "npm": "9.x"
   },
   "repository": {
     "type": "git",
@@ -40,120 +32,7 @@
     "parse/node": false
   },
   "dependencies": {
-    "@babel/cli": "^7.6.2",
-    "@babel/node": "^7.6.2",
-    "@loadable/component": "^5.10.3",
-    "action-sequence": "^1.0.6",
-    "axios": "^0.19.0",
-    "body-parser": "^1.19.0",
-    "classnames": "^2.2.6",
-    "cookie-parser": "^1.4.4",
-    "cookie-session": "^2.0.0-beta.3",
-    "copy-to-clipboard": "^3.2.0",
-    "core-js": "^3.2.1",
-    "cors": "^2.8.5",
-    "cross-env": "^6.0.0",
-    "directory-tree": "^2.2.4",
-    "express": "^4.17.1",
-    "express-static-gzip": "^2.0.5",
-    "globby": "^10.0.1",
-    "gsap": "^2.1.3",
-    "http-auth": "^3.2.3",
-    "http-proxy-middleware": "^0.20.0",
-    "marked": "^0.7.0",
-    "moment": "^2.24.0",
-    "morgan": "^1.9.1",
-    "npm-run-all": "^4.1.5",
-    "object-path": "^0.11.4",
-    "parse": "^2.7.1",
-    "prettier": "^1.18.2",
-    "prop-types": "^15.7.2",
-    "querystring-browser": "^1.0.4",
-    "react": "^16.9.0",
-    "react-dom": "^16.9.0",
-    "react-frame-component": "^4.1.1",
-    "react-helmet": "^5.2.1",
-    "react-redux": "^7.1.1",
-    "react-router-config": "^5.1.0",
-    "react-router-dom": "^5.1.0",
-    "react-syntax-highlighter": "^11.0.2",
-    "redbox-react": "^1.6.0",
-    "redux": "^4.0.4",
-    "redux-devtools": "^3.5.0",
-    "redux-devtools-dock-monitor": "^1.1.3",
-    "redux-devtools-log-monitor": "^1.4.0",
-    "redux-local-persist": "0.1.0",
-    "redux-super-thunk": "0.0.8",
-    "regenerator-runtime": "^0.13.3",
-    "run-script-os": "^1.0.7",
-    "semver": "^6.3.0",
-    "serialize-javascript": "^2.1.0",
-    "shallow-equals": "^1.0.0",
-    "underscore": "*",
-    "uuid": "^3.3.3",
-    "xss": "^1.0.6"
-  },
-  "devDependencies": {
-    "@atomic-reactor/gulp-watch": "^5.0.1-patched",
-    "@babel/core": "^7.6.2",
-    "@babel/plugin-proposal-class-properties": "^7.5.5",
-    "@babel/plugin-proposal-export-default-from": "^7.5.2",
-    "@babel/plugin-syntax-dynamic-import": "^7.2.0",
-    "@babel/preset-env": "^7.6.2",
-    "@babel/preset-react": "^7.0.0",
-    "atomic-reactor-cli": "^2.1.12",
-    "babel-core": "^7.0.0-bridge.0",
-    "babel-eslint": "^10.0.3",
-    "babel-jest": "^24.9.0",
-    "babel-loader": "^8.0.6",
-    "babel-plugin-module-resolver": "^3.2.0",
-    "browser-sync": "^2.26.7",
-    "camelcase": "^5.3.1",
-    "chalk": "^2.4.2",
-    "cli-spinners": "^2.2.0",
-    "compression-webpack-plugin": "^3.0.0",
-    "decamelize": "^3.2.0",
-    "del": "^5.1.0",
-    "enzyme": "^3.10.0",
-    "enzyme-adapter-react-16": "^1.14.0",
-    "eslint": "^5.16.0",
-    "eslint-plugin-react": "^7.14.3",
-    "eslint-plugin-react-hooks": "^2.0.1",
-    "fast-diff": "^1.2.0",
-    "fs-extra": "^8.1.0",
-    "fs-readdir-recursive": "^1.1.0",
-    "gulp": "^4.0.2",
-    "gulp-autoprefixer": "^7.0.0",
-    "gulp-clean-css": "^4.2.0",
-    "gulp-concat": "^2.6.1",
-    "gulp-gzip": "^1.4.2",
-    "gulp-if": "^3.0.0",
-    "gulp-less": "^4.0.1",
-    "gulp-rename": "^1.4.0",
-    "gulp-run": "^1.7.1",
-    "gulp-sass": "^4.0.2",
-    "gulp-sourcemaps": "^2.6.5",
-    "gulp4-run-sequence": "^1.0.0",
-    "handlebars": "^4.3.0",
-    "husky": "^3.0.5",
-    "ignore-loader": "^0.1.2",
-    "jest": "^24.9.0",
-    "lint-staged": "^9.3.0",
-    "module-alias": "^2.2.1",
-    "node-sass": "^4.12.0",
-    "node-sass-functions-json": "^1.0.0",
-    "node-sass-tilde-importer": "^1.0.2",
-    "nodemon": "^1.19.2",
-    "ora": "^4.0.1",
-    "readdir-recursive": "0.0.4",
-    "slugify": "^1.3.5",
-    "stylelint": "^11.0.0",
-    "webpack": "^4.41.0",
-    "webpack-dev-middleware": "^3.7.1",
-    "webpack-filter-warnings-plugin": "^1.2.1",
-    "webpack-hot-middleware": "^2.25.0",
-    "workbox-build": "^4.3.1",
-    "yargs": "^14.0.0"
+    "react": "^18.2.0"
   },
   "nodemonConfig": {
     "quite": true,
@@ -161,18 +40,32 @@
       "src/manifest.js"
     ],
     "ignore": [
-      "src/app/*"
+      "src/app/*",
+      ".tmp/"
     ]
   },
-  "husky": {
-    "hooks": {
-      "pre-commit": "lint-staged"
-    }
-  },
   "lint-staged": {
-    "*.{js,json,css,md}": [
+    "*.{js,jsx,json,css,scss,md}": [
       "prettier --write",
       "git add"
     ]
+  },
+  "reactiumDependencies": {
+    "@atomic-reactor/reactium-api": "6.1.0",
+    "@atomic-reactor/reactium-capability": "6.0.0",
+    "@atomic-reactor/reactium-role": "5.0.1",
+    "@atomic-reactor/reactium-user": "6.1.0",
+    "@atomic-reactor/reactium-setting": "5.0.1",
+    "@atomic-reactor/reactium-svg": "0.0.3",
+    "@atomic-reactor/reactium-core": "6.2.6"
+  },
+  "workspaces": [
+    "reactium_modules/*",
+    "reactium_modules/@*/*"
+  ],
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
   }
 }
diff --git a/readme.md b/readme.md
index 3b826cd3..f3fae190 100644
--- a/readme.md
+++ b/readme.md
@@ -4,24 +4,17 @@
 
 An opinionated framework for creating React + Redux apps.
 
-[Reactium documentation](https://reactium.io/get-started)
+[Reactium documentation](https://docs.reactium.io/)
 
 ## Quick Start
 
-To run in **front-end only** (no server side rendering) development mode from your project directory for local development:
+To run in development mode from your project directory for local development:
 
 ```
-$ npm install
+$ npx reactium init
 $ npm run local
 ```
 
-To run in **server side rendering** development mode from your project directory for local development:
-
-```
-$ npm install
-$ npm run local:ssr
-```
-
 ## The Approach
 
 Reactium follows Domain Drive Design (DDD) and aims to ease the creation of complex applications by connecting the related pieces of the software into an ever-evolving model.
@@ -53,12 +46,9 @@ There are a many reasons why, but the most important ones to us are:
 ## Reactium Features
 
 -   **Fast Local Development Workflow:** Javascript tooling is hard, laborious, and annoying. We've spent a lot of time working through dozens of _"what if..."_ scenarios to deliver a minimal pain dev workflow!
--   **Built-in Design System:** No need to have a separate design system like Pattern Lab or Storybook. [Learn more](https://github.com/Atomic-Reactor/Reactium/blob/master/docs/design-system.md).
--   **Robust Command Line Interface:** Reactium heavily relies on boiler-plated code to normalize and ease the dev workflow. Creating a component or a design system element can be done with the stroke of a few keys. No need to memorize all the commands either, you can use `--flags` or follow prompts. You can even customize the CLI by replacing or creating your own commands. [Learn more](https://www.npmjs.com/package/atomic-reactor-cli).
+-   **Built-in Design System:** No need to have a separate design system like Pattern Lab or Storybook. [Learn more](https://github.com/Atomic-Reactor/Reactium/blob/master/markdown/design-system.md).
+-   **Robust Command Line Interface:** Reactium heavily relies on boiler-plated code to normalize and ease the dev workflow. Creating a component or a design system element can be done with the stroke of a few keys. No need to memorize all the commands either, you can use `--flags` or follow prompts. You can even customize the CLI by replacing or creating your own commands. [Learn more](https://www.npmjs.com/package/@atomic-reactor/cli).
 -   **Easy Deployment:** Reactium creates a Node server for both front-end and server side rendering making it easy to deploy to the host of your choice. We even have a docker setup included for you dev-opers.
 -   **Single Page App or Isolated Component Development:** Build anything from a full website to a single component and package for distribution.
--   **Built-in Redux Support:** Learning Redux can be hard. Sure you might have the basics down but building an application with it can quickly escalate to frustration and nightmares. Our simple Redux pattern makes it super easy to build stateful applications. Learn more about [Redux](https://redux.js.org/).
 -   **Built-in React Router Support**: Build routed websites in a single application with no additional setup. Learn more about [React Router](https://reacttraining.com/react-router/web/guides/quick-start)
--   **Plugin Architecture**: Dynamic composition where there's no need to hard code `import` statements through out your codebase. Simply identify "zones" where components can be injected. [Learn more](https://github.com/Atomic-Reactor/Reactium/blob/master/docs/plugins.md).
-
-[More documentation](https://github.com/Atomic-Reactor/Reactium/tree/master/docs).
+-   **Plugin Architecture**: Registered components, rendering Zone components, and run-time extensibility!
diff --git a/src/app/api/config.js b/src/app/api/config.js
deleted file mode 100644
index 4c62b711..00000000
--- a/src/app/api/config.js
+++ /dev/null
@@ -1,30 +0,0 @@
-let apiConfig = {};
-
-/**
- * Isomorphic block of api configuration.
- *
- * @see https://reactium.io/docs/guide/using-apis
- * @see ./index.js for Parse SDK setup
- */
-if (typeof window !== 'undefined') {
-    // the api configuration from the browser's perspective
-    apiConfig = {
-        // [browser]: parse app id provided by window
-        parseAppId: window.parseAppId || 'Actinium',
-
-        // [browser]: REST API base url provided by window
-        // if /api default, proxies to REST_API_URL
-        restAPI: window.restAPI || '/api',
-    };
-} else {
-    // the api from the server's perspective
-    apiConfig = {
-        // [server]: default app id for local dev with Actinium
-        parseAppId: process.env.PARSE_APP_ID || 'Actinium',
-
-        // [server]: default api url for local dev with Actinium
-        restAPI: process.env.REST_API_URL || 'http://localhost:9000/api',
-    };
-}
-
-export default apiConfig;
diff --git a/src/app/api/index.js b/src/app/api/index.js
deleted file mode 100644
index d3e2f2e6..00000000
--- a/src/app/api/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import apiConfig from './config';
-
-let Parse = null;
-
-/**
- * Isomorphic Parse SDK
- *
- * @see https://reactium.io/docs/guide/using-apis
- */
-if (typeof window !== 'undefined') {
-    // [browser]: client side version of parse
-    Parse = require('parse');
-} else {
-    // [server]: node SDK for parse
-    Parse = require('parse/node');
-}
-
-if (Parse) {
-    Parse.initialize(apiConfig.parseAppId);
-    Parse.serverURL = apiConfig.restAPI;
-}
-
-export default Parse;
diff --git a/src/app/components/Demo/Site/Button/index.js b/src/app/components/Demo/Site/Button/index.js
deleted file mode 100644
index 9d04d414..00000000
--- a/src/app/components/Demo/Site/Button/index.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component } from 'react';
-import { Link, NavLink } from 'react-router-dom';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Button
- * -----------------------------------------------------------------------------
- */
-
-export default class Button extends Component {
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    render() {
-        let { type = 'button' } = this.state;
-
-        switch (type) {
-            case 'link':
-                return <Link {...this.state} />;
-
-            case 'nav':
-                return <NavLink {...this.state} />;
-
-            case 'label':
-                return <label {...this.state} />;
-
-            default:
-                return <button {...this.state} />;
-        }
-    }
-}
-
-class PrimaryButton extends Button {
-    constructor(props) {
-        super(props);
-    }
-}
-
-PrimaryButton.defaultProps = {
-    className: 'btn btn-primary',
-    type: 'button',
-};
-
-export { PrimaryButton };
diff --git a/src/app/components/Demo/Site/Button/plugin.js b/src/app/components/Demo/Site/Button/plugin.js
deleted file mode 100644
index 9c76b4a7..00000000
--- a/src/app/components/Demo/Site/Button/plugin.js
+++ /dev/null
@@ -1,6 +0,0 @@
-export default {
-    id: 'BUTTON-PLUGIN',
-    component: 'Button',
-    order: 1000,
-    zone: ['demo-test', 'demo-test-nested-example'],
-};
diff --git a/src/app/components/Demo/Site/Features/index.js b/src/app/components/Demo/Site/Features/index.js
deleted file mode 100644
index e498706b..00000000
--- a/src/app/components/Demo/Site/Features/index.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Features
- * -----------------------------------------------------------------------------
- */
-
-export default class Features extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    render() {
-        let count = 0;
-        let { items = [], layout = [] } = this.state;
-
-        return items.length < 1 ? null : (
-            <section className={'feature'}>
-                {items.map((item, i) => {
-                    let { title, caption, backgroundImage } = item;
-
-                    count += 2;
-
-                    let orderLeft = count % 4 === 0 ? count : count - 1;
-                    let orderRight = count % 4 === 0 ? count - 1 : count;
-
-                    return (
-                        <Fragment key={`feature-${i}`}>
-                            <div
-                                className={`feature-block ${
-                                    layout[0]
-                                } order-${orderLeft}`}>
-                                <div className={`feature-caption`}>
-                                    <h2>{title}</h2>
-                                    <p>{caption}</p>
-                                </div>
-                            </div>
-                            <div
-                                className={`feature-block ${
-                                    layout[1]
-                                } order-${orderRight}`}
-                                style={{ backgroundImage }}
-                            />
-                        </Fragment>
-                    );
-                })}
-            </section>
-        );
-    }
-}
-
-Features.defaultProps = {
-    layout: [],
-    items: [],
-};
diff --git a/src/app/components/Demo/Site/Footer/index.js b/src/app/components/Demo/Site/Footer/index.js
deleted file mode 100644
index 97fb80a1..00000000
--- a/src/app/components/Demo/Site/Footer/index.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component } from 'react';
-import { Link } from 'react-router-dom';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Footer
- * -----------------------------------------------------------------------------
- */
-
-export default class Footer extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    render() {
-        let { year, nav = [] } = this.state;
-
-        return (
-            <footer>
-                <div className={'row'}>
-                    <div className={'col-xs-12 col-md-5'}>
-                        <ul>
-                            <li>
-                                <span>
-                                    &reg; {year} Dirty Dogs all rights reserved
-                                </span>
-                            </li>
-                        </ul>
-                    </div>
-                    <div className={'col-xs-12 col-md-7 row end-md'}>
-                        {nav.length < 1 ? null : (
-                            <ul className={'mt-xs-5 mt-sm-5 mt-md-0'}>
-                                {nav.map((item, i) => {
-                                    let { label, url } = item;
-
-                                    return url ? (
-                                        <li key={`footer-nav-${i}`}>
-                                            <Link to={url}>{label}</Link>
-                                        </li>
-                                    ) : (
-                                        <li key={`footer-nav-${i}`}>
-                                            <span>{label}</span>
-                                        </li>
-                                    );
-                                })}
-                            </ul>
-                        )}
-                    </div>
-                </div>
-            </footer>
-        );
-    }
-}
-
-Footer.defaultProps = {
-    year: new Date().getFullYear(),
-    nav: [
-        { label: '123 Sesame Str. Columbus, Ohio 43215' },
-        { label: '614.555.0422' },
-        { label: 'Contact Us', url: '/demo/site/contact' },
-    ],
-};
diff --git a/src/app/components/Demo/Site/Header/HeaderNav.js b/src/app/components/Demo/Site/Header/HeaderNav.js
deleted file mode 100644
index c278e67b..00000000
--- a/src/app/components/Demo/Site/Header/HeaderNav.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React from "react";
-import { Link } from "react-router-dom";
-
-/**
- * -----------------------------------------------------------------------------
- * Functional Component: HeaderNav
- * -----------------------------------------------------------------------------
- */
-const HeaderNav = props => {
-    let { links = [] } = props;
-    return links.length < 1 ? null : (
-        <div className={`header-nav`}>
-            {links.map((item, i) => {
-                let { icon, label = "", to = "/", target = null } = item;
-                return target !== null ? (
-                    <a href={to} target={target} key={`link-${i}`}>
-                        {!icon ? null : <img src={icon} />}
-                        {label}
-                    </a>
-                ) : (
-                    <Link to={to} key={`link-${i}`}>
-                        {!icon ? null : <img src={icon} />}
-                        {label}
-                    </Link>
-                );
-            })}
-        </div>
-    );
-};
-
-export default HeaderNav;
diff --git a/src/app/components/Demo/Site/Header/index.js b/src/app/components/Demo/Site/Header/index.js
deleted file mode 100644
index a8a9daa1..00000000
--- a/src/app/components/Demo/Site/Header/index.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component } from 'react';
-import HeaderNav from './HeaderNav';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Header
- * -----------------------------------------------------------------------------
- */
-
-export default class Header extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-
-        this.container = null;
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    render() {
-        let { backgroundImage, children, style = {}, nav } = this.state;
-
-        if (backgroundImage) {
-            style['backgroundImage'] = backgroundImage;
-        }
-
-        return (
-            <header
-                style={style}
-                ref={elm => {
-                    this.container = elm;
-                }}>
-                <div className={`shadow`} />
-                <HeaderNav links={nav} />
-                {children}
-            </header>
-        );
-    }
-}
-
-Header.defaultProps = {
-    style: { marginBottom: 0 },
-    backgroundImage: 'url(/assets/images/demo-site/header.png)',
-    nav: [
-        {
-            to: '/demo/site',
-            label: 'Home',
-        },
-        {
-            to: 'https://www.instagram.com/explore/tags/hotdogs',
-            icon: '/assets/images/demo-site/icon-instagram.png',
-            label: '#hotdogs',
-            target: '_blank',
-        },
-    ],
-};
diff --git a/src/app/components/Demo/Site/Hero/index.js b/src/app/components/Demo/Site/Hero/index.js
deleted file mode 100644
index fe1a93f1..00000000
--- a/src/app/components/Demo/Site/Hero/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React from "react";
-import { PrimaryButton } from "../Button";
-
-/**
- * -----------------------------------------------------------------------------
- * Functional Component: Hero
- * -----------------------------------------------------------------------------
- */
-const Hero = props => {
-    let { content, cta, icon } = props;
-
-    return (
-        <section className={"hero"}>
-            {!icon ? null : <img src={icon} className={"icon"} />}
-
-            {!content ? null : (
-                <h1>
-                    {content.map((item, i) => {
-                        return (
-                            <div
-                                className={"text-xs-center"}
-                                key={`hero-content-${i}`}
-                            >
-                                {item}
-                            </div>
-                        );
-                    })}
-                </h1>
-            )}
-
-            {!cta ? null : <PrimaryButton {...cta} />}
-        </section>
-    );
-};
-
-export default Hero;
diff --git a/src/app/components/Demo/Site/Nav/index.js b/src/app/components/Demo/Site/Nav/index.js
deleted file mode 100644
index 7535fb48..00000000
--- a/src/app/components/Demo/Site/Nav/index.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component } from 'react';
-import { NavLink } from 'react-router-dom';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Nav
- * -----------------------------------------------------------------------------
- */
-
-class Nav extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-
-        this.container = null;
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return {
-                ...prevState,
-                ...nextProps,
-            };
-        });
-    }
-
-    render() {
-        let { buttons, fixed } = this.state;
-
-        return (
-            <nav
-                className={fixed === true ? 'main fixed' : 'main'}
-                ref={elm => {
-                    this.container = elm;
-                }}>
-                <div>
-                    <ul>
-                        {buttons.map((item, i) => {
-                            return (
-                                <li key={`nav-${i}`}>
-                                    <NavLink {...item}>{item.label}</NavLink>
-                                </li>
-                            );
-                        })}
-                    </ul>
-                </div>
-            </nav>
-        );
-    }
-}
-
-Nav.defaultProps = {
-    fixed: false,
-    buttons: [
-        { type: 'nav', exact: true, to: '/demo/site/menu', label: 'Menu' },
-        {
-            type: 'nav',
-            exact: true,
-            to: '/demo/site/catering',
-            label: 'Catering',
-        },
-        { type: 'nav', exact: true, to: '/demo/site/about', label: 'About Us' },
-        {
-            type: 'nav',
-            exact: true,
-            to: '/demo/site/contact',
-            label: 'Contact',
-        },
-    ],
-};
-
-export default Nav;
diff --git a/src/app/components/Demo/Site/Pages/About/index.js b/src/app/components/Demo/Site/Pages/About/index.js
deleted file mode 100644
index d742a561..00000000
--- a/src/app/components/Demo/Site/Pages/About/index.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Template from 'components/Demo/Site/Template';
-import Features from 'components/Demo/Site/Features';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: About
- * -----------------------------------------------------------------------------
- */
-
-export default class About extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    render() {
-        let { features = {}, title } = this.state;
-
-        return (
-            <Template title={title}>
-                <main role='main'>
-                    <Features {...features} />
-                </main>
-            </Template>
-        );
-    }
-}
-
-About.defaultProps = {
-    title: 'About | Reactium',
-    features: {
-        layout: ['col-xs-12 col-md-6 col-lg-5', 'col-xs-12 col-md-6 col-lg-7'],
-        items: [
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-03.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'About Us',
-            },
-        ],
-    },
-};
diff --git a/src/app/components/Demo/Site/Pages/About/route.js b/src/app/components/Demo/Site/Pages/About/route.js
deleted file mode 100644
index 26d1bd28..00000000
--- a/src/app/components/Demo/Site/Pages/About/route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import About from "./index";
-
-export default {
-    path: "/demo/site/about",
-    exact: true,
-    component: About
-};
diff --git a/src/app/components/Demo/Site/Pages/Catering/index.js b/src/app/components/Demo/Site/Pages/Catering/index.js
deleted file mode 100644
index b6b3871b..00000000
--- a/src/app/components/Demo/Site/Pages/Catering/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Template from 'components/Demo/Site/Template';
-import Hero from 'components/Demo/Site/Hero';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Catering
- * -----------------------------------------------------------------------------
- */
-
-export default class Catering extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    render() {
-        let { hero, title } = this.state;
-
-        return (
-            <Template title={title}>
-                <main role='main'>
-                    <Hero {...hero} />
-                </main>
-            </Template>
-        );
-    }
-}
-
-Catering.defaultProps = {
-    title: 'Catering | Reactium',
-    hero: {
-        icon: '/assets/images/demo-site/icon-hotdog.png',
-        cta: {
-            to: '/demo/site',
-            type: 'link',
-            children: ['Learn More'],
-        },
-        content: ['Catering?', 'Yeah, we do that!'],
-    },
-};
diff --git a/src/app/components/Demo/Site/Pages/Catering/route.js b/src/app/components/Demo/Site/Pages/Catering/route.js
deleted file mode 100644
index d5fd823f..00000000
--- a/src/app/components/Demo/Site/Pages/Catering/route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Catering from "./index";
-
-export default {
-    path: "/demo/site/catering",
-    exact: true,
-    component: Catering
-};
diff --git a/src/app/components/Demo/Site/Pages/Contact/index.js b/src/app/components/Demo/Site/Pages/Contact/index.js
deleted file mode 100644
index 553d9046..00000000
--- a/src/app/components/Demo/Site/Pages/Contact/index.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Template from 'components/Demo/Site/Template';
-import Features from 'components/Demo/Site/Features';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Contact
- * -----------------------------------------------------------------------------
- */
-
-const ContactInfo = () => {
-    return (
-        <Fragment>
-            123 Sesame Str.
-            <br />
-            Columbus, Ohio 43215
-            <br />
-            614.555.0422
-        </Fragment>
-    );
-};
-
-export default class Contact extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    render() {
-        let { features = {}, title } = this.state;
-
-        return (
-            <Template title={title}>
-                <main role='main'>
-                    <Features {...features} />
-                </main>
-            </Template>
-        );
-    }
-}
-
-Contact.defaultProps = {
-    title: 'Contact | Reactium',
-    features: {
-        layout: ['col-xs-12 col-md-6 col-lg-5', 'col-xs-12 col-md-6 col-lg-7'],
-        items: [
-            {
-                title: 'Contact Us',
-                backgroundImage: 'url(/assets/images/demo-site/feature-02.png)',
-                caption: <ContactInfo />,
-            },
-        ],
-    },
-};
diff --git a/src/app/components/Demo/Site/Pages/Contact/route.js b/src/app/components/Demo/Site/Pages/Contact/route.js
deleted file mode 100644
index 643947cb..00000000
--- a/src/app/components/Demo/Site/Pages/Contact/route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Contact from "./index";
-
-export default {
-    path: "/demo/site/contact",
-    exact: true,
-    component: Contact
-};
diff --git a/src/app/components/Demo/Site/Pages/Home/index.js b/src/app/components/Demo/Site/Pages/Home/index.js
deleted file mode 100644
index ff299cd1..00000000
--- a/src/app/components/Demo/Site/Pages/Home/index.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Template from 'components/Demo/Site/Template';
-import Hero from 'components/Demo/Site/Hero';
-import Features from 'components/Demo/Site/Features';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Home
- * -----------------------------------------------------------------------------
- */
-
-export default class Home extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    render() {
-        let { hero, features = {} } = this.state;
-
-        return (
-            <Template>
-                <main role='main'>
-                    <Hero {...hero} />
-                    <Features {...features} />
-                </main>
-            </Template>
-        );
-    }
-}
-
-Home.defaultProps = {
-    hero: {
-        icon: '/assets/images/demo-site/icon-hotdog.png',
-        cta: {
-            to: '/demo/site/catering',
-            type: 'link',
-            children: ['More Dogs ‘n Make Em Hot'],
-        },
-        content: [
-            'Dirty Dogs serves all-beef, vegan and',
-            'vegetarian hot dogs.',
-        ],
-    },
-    features: {
-        layout: ['col-xs-12 col-md-6', 'col-xs-12 col-md-6'],
-        items: [
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-01.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Gourmet All Beef Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-02.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Vegan Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-03.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Vegetarian Hotdogs',
-            },
-        ],
-    },
-};
diff --git a/src/app/components/Demo/Site/Pages/Home/route.js b/src/app/components/Demo/Site/Pages/Home/route.js
deleted file mode 100644
index f00e57ae..00000000
--- a/src/app/components/Demo/Site/Pages/Home/route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Home from "./index";
-
-export default {
-    path: ["/", "/demo/site"],
-    exact: true,
-    component: Home
-};
diff --git a/src/app/components/Demo/Site/Pages/Menu/index.js b/src/app/components/Demo/Site/Pages/Menu/index.js
deleted file mode 100644
index eddd59c3..00000000
--- a/src/app/components/Demo/Site/Pages/Menu/index.js
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Template from 'components/Demo/Site/Template';
-import Features from 'components/Demo/Site/Features';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Menu
- * -----------------------------------------------------------------------------
- */
-
-export default class Menu extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    render() {
-        let { features = {}, title } = this.state;
-
-        return (
-            <Template title={title}>
-                <main role='main'>
-                    <Features {...features} />
-                </main>
-            </Template>
-        );
-    }
-}
-
-Menu.defaultProps = {
-    title: 'Menu | Reactium',
-    features: {
-        layout: ['col-xs-12 col-md-6', 'col-xs-12 col-md-6'],
-        items: [
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-01.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Gourmet All Beef Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-02.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Vegan Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-03.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Vegetarian Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-01.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Gourmet All Beef Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-02.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Vegan Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-03.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Vegetarian Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-01.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Gourmet All Beef Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-02.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Vegan Hotdogs',
-            },
-            {
-                backgroundImage: 'url(/assets/images/demo-site/feature-03.png)',
-                caption:
-                    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.',
-                title: 'Vegetarian Hotdogs',
-            },
-        ],
-    },
-};
diff --git a/src/app/components/Demo/Site/Pages/Menu/route.js b/src/app/components/Demo/Site/Pages/Menu/route.js
deleted file mode 100644
index cc997283..00000000
--- a/src/app/components/Demo/Site/Pages/Menu/route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Menu from "./index";
-
-export default {
-    path: "/demo/site/menu",
-    exact: true,
-    component: Menu
-};
diff --git a/src/app/components/Demo/Site/Template.js b/src/app/components/Demo/Site/Template.js
deleted file mode 100644
index ea363e08..00000000
--- a/src/app/components/Demo/Site/Template.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import { Helmet } from 'react-helmet';
-import Header from './Header';
-import Nav from './Nav';
-import Footer from './Footer';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Template
- * -----------------------------------------------------------------------------
- */
-
-export default class Template extends Component {
-    constructor(props) {
-        super(props);
-
-        this.mb = null;
-        this.navbar = null;
-        this.header = null;
-        this.ival = null;
-        this.onScroll = this.onScroll.bind(this);
-    }
-
-    componentDidMount() {
-        window.addEventListener('scroll', this.onScroll);
-        this.ival = setInterval(() => {
-            this.setState({ mounted: window.templateMounted });
-        });
-    }
-
-    componentWillUnmount() {
-        clearInterval(this.ival);
-        this.ival = null;
-        window.removeEventListener('scroll', this.onScroll);
-    }
-
-    onScroll(e) {
-        if (!this.navbar || !this.header) {
-            return;
-        }
-
-        let {
-            height: headerHeight,
-        } = this.header.container.getBoundingClientRect();
-        let { top, height } = this.navbar.container.getBoundingClientRect();
-        let y = scrollY - headerHeight;
-
-        if (this.mb !== y) {
-            let fixed = y >= 0;
-            this.mb = y >= 0 ? height : 0;
-            this.setState({ navbarFixed: fixed, headerMarginBottom: this.mb });
-        }
-    }
-
-    render() {
-        let {
-            title,
-            bodyClass,
-            navbarFixed,
-            headerMarginBottom,
-            children,
-            style,
-            description,
-            header = {},
-        } = this.props;
-
-        let headerStyle = { marginBottom: headerMarginBottom };
-        return (
-            <Fragment>
-                <Helmet>
-                    <link rel='stylesheet' href={style} />
-                    <title>{title}</title>
-                    <meta name='description' content={description} />
-                    <html lang='en' />
-                    <body className={bodyClass} />
-                </Helmet>
-
-                <Header
-                    style={headerStyle}
-                    {...header}
-                    ref={elm => {
-                        this.header = elm;
-                    }}
-                />
-
-                <Nav
-                    fixed={navbarFixed}
-                    ref={elm => {
-                        this.navbar = elm;
-                    }}
-                />
-
-                {children}
-
-                <Footer />
-            </Fragment>
-        );
-    }
-}
-
-Template.defaultProps = {
-    header: {},
-    navbarFixed: false,
-    headerMarginBottom: 0,
-    bodyClass: 'demo-site',
-    title: 'Reactium',
-    description: 'This is an example Reactium Site',
-    style: '/assets/style/demo-site.css',
-};
diff --git a/src/app/components/Demo/Site/assets/images/demo-site/feature-01.png b/src/app/components/Demo/Site/assets/images/demo-site/feature-01.png
deleted file mode 100755
index a704fddc..00000000
Binary files a/src/app/components/Demo/Site/assets/images/demo-site/feature-01.png and /dev/null differ
diff --git a/src/app/components/Demo/Site/assets/images/demo-site/feature-02.png b/src/app/components/Demo/Site/assets/images/demo-site/feature-02.png
deleted file mode 100755
index 65fee79d..00000000
Binary files a/src/app/components/Demo/Site/assets/images/demo-site/feature-02.png and /dev/null differ
diff --git a/src/app/components/Demo/Site/assets/images/demo-site/feature-03.png b/src/app/components/Demo/Site/assets/images/demo-site/feature-03.png
deleted file mode 100755
index 7bbb5a18..00000000
Binary files a/src/app/components/Demo/Site/assets/images/demo-site/feature-03.png and /dev/null differ
diff --git a/src/app/components/Demo/Site/assets/images/demo-site/header.png b/src/app/components/Demo/Site/assets/images/demo-site/header.png
deleted file mode 100755
index 79014f72..00000000
Binary files a/src/app/components/Demo/Site/assets/images/demo-site/header.png and /dev/null differ
diff --git a/src/app/components/Demo/Site/assets/images/demo-site/icon-hotdog.png b/src/app/components/Demo/Site/assets/images/demo-site/icon-hotdog.png
deleted file mode 100755
index c7a75d10..00000000
Binary files a/src/app/components/Demo/Site/assets/images/demo-site/icon-hotdog.png and /dev/null differ
diff --git a/src/app/components/Demo/Site/assets/images/demo-site/icon-instagram.png b/src/app/components/Demo/Site/assets/images/demo-site/icon-instagram.png
deleted file mode 100755
index 225714d6..00000000
Binary files a/src/app/components/Demo/Site/assets/images/demo-site/icon-instagram.png and /dev/null differ
diff --git a/src/app/components/Demo/Site/assets/style/demo-site.scss b/src/app/components/Demo/Site/assets/style/demo-site.scss
deleted file mode 100644
index 0c0e0b8e..00000000
--- a/src/app/components/Demo/Site/assets/style/demo-site.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-@import 'scss/variables';
-@import 'scss/mixins/color';
-@import 'scss/mixins/px2rem';
-@import 'scss/grid/variables/main.scss';
-@import 'scss/grid/mixins/main.scss';
-@import 'scss/grid/grid';
-@import 'scss/grid/visibility';
-@import 'scss/mixins/spacing';
-@import 'scss/layout';
-@import 'scss/typography';
-@import 'scss/button';
-@import 'scss/header';
-@import 'scss/footer';
-@import 'scss/hero';
-@import 'scss/nav';
-@import 'scss/feature';
diff --git a/src/app/components/Demo/Site/assets/style/scss/_button.scss b/src/app/components/Demo/Site/assets/style/scss/_button.scss
deleted file mode 100755
index 5ab860fc..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/_button.scss
+++ /dev/null
@@ -1,100 +0,0 @@
-$button-text: (
-    primary: color(white),
-    secondary: color(white),
-    tertiary: color(dark-grey),
-    white: color(grey),
-    grey: color(dark-grey),
-    dark-grey: color(white),
-    light-grey: color(dark-grey)
-);
-
-.btn {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    font-weight: 600;
-    font-family: 'Open Sans', sans-serif;
-    font-size: px2rem(16);
-    padding: px2rem(24) px2rem(32);
-    text-decoration: none;
-    border-radius: px2rem(8);
-    border: 1px solid transparent;
-    transition: all .125s ease-in-out;
-    outline: none;
-    cursor: pointer;
-
-    @media #{$breakpoint-sm-up} {
-        padding: px2rem(24) px2rem(48);
-        font-size: px2rem(20);
-    }
-
-    &[disabled] {
-        opacity: 0.5;
-        cursor: not-allowed;
-        pointer-events: none;
-        user-select: none;
-    }
-
-    &:hover {
-        text-decoration: none;
-    }
-
-    @for $i from 1 through length($button-sizes) {
-        $size: nth($button-sizes, $i);
-        $font: px2rem(nth($button-font, $i));
-        $padH: px2rem(nth($button-padH, $i));
-        $padV: px2rem(nth($button-padV, $i));
-
-        &.btn-#{$size} {
-            font-size: #{$font};
-            padding: #{$padV} #{$padH};
-        }
-    }
-
-    @each $name, $color in $colors {
-
-        &.btn-#{$name} {
-            background-color: #{$color};
-            color: map-get($button-text, $name);
-
-            &:hover {
-                opacity: .9;
-            }
-
-            &:focus {
-                box-shadow: 0 0 px2rem(10) 1px #{$color};
-            }
-        }
-
-        &.btn-outline-#{$name} {
-            background-color: transparent;
-            color: #{$color};
-            border: 2px solid #{$color};
-
-            &:hover {
-                color: map-get($button-text, $name);
-                border: 2px solid darken($color, 5%);
-                background-color: #{$color};
-            }
-
-            &:focus {
-                box-shadow: inset 0 0 0 1px #{$color};
-            }
-        }
-    }
-
-    &.btn-clear {
-        background-color: transparent;
-    }
-
-    &.btn-link {
-        color: inherit;
-        padding: 0;
-        background-color: transparent;
-    }
-
-    &.btn-block {
-        display: block;
-        width: 100%;
-    }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/_feature.scss b/src/app/components/Demo/Site/assets/style/scss/_feature.scss
deleted file mode 100644
index f2612462..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/_feature.scss
+++ /dev/null
@@ -1,72 +0,0 @@
-
-section.feature {
-    @extend .row;
-    position: relative;
-
-    .feature-block {
-
-        display: flex;
-        flex-direction: column;
-        align-items: flex-start;
-        justify-content: center;
-        color: color(dark-grey);
-        background-color: color(white);
-        background-position: center;
-        background-size: cover;
-
-        min-height: 100vw;
-
-        @media #{$breakpoint-sm-up} {
-            min-height: 50vw;
-        }
-
-        @media #{$breakpoint-md-up} {
-            min-height: 33vw;
-        }
-
-        @for $order from 1 through 100 {
-            @media #{$breakpoint-md-up} {
-                &.order-#{$order} { order: #{$order}; }
-            }
-        }
-    }
-
-    .feature-caption {
-        padding: 10vw;
-
-        @media #{$breakpoint-md-up} {
-            padding: 7vw;
-        }
-
-        h2 {
-            font-weight: bold;
-            font-size: px2rem(18);
-            margin-bottom: px2rem(40);
-            position: relative;
-
-            @media #{$breakpoint-lg-up} {
-                font-size: px2rem(24);
-            }
-
-            @media #{$breakpoint-xl-up} {
-                font-size: px2vw(24);
-            }
-
-            &:before {
-                content: " ";
-                position: absolute;
-                left: px2vw(-40);
-                top: 50%;
-                width: px2vw(40);
-                height: 2px;
-                transform: translate(px2vw(-20), -50%);
-                border-bottom: 2px solid color(primary);
-            }
-        }
-
-        p {
-            line-height: px2rem(24);
-            font-weight: 300;
-        }
-    }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/_footer.scss b/src/app/components/Demo/Site/assets/style/scss/_footer.scss
deleted file mode 100644
index efc07ff4..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/_footer.scss
+++ /dev/null
@@ -1,45 +0,0 @@
-footer:first-of-type {
-    background-color: color(grey);
-    padding: px2rem(30.5);
-    font-size: px2rem(14);
-
-
-    ul {
-        li {
-            font-weight: 600;
-        }
-    }
-
-    @media #{$breakpoint-md-down} {
-        ul li {
-            &:not(:first-child) {
-                margin-top: px2rem(8);
-            }
-        }
-    }
-
-    @media #{$breakpoint-lg-up} {
-        ul {
-            display: flex;
-            align-items: stretch;
-
-            li {
-                list-style: none;
-                display: flex;
-                align-items: stretch;
-
-                &:not(:first-child) {
-                    margin-left: px2rem(16);
-                    padding-left: px2rem(16);
-                    border-left: 1px solid color(dark-grey);
-
-                    * {
-                        display: flex;
-                        align-items: center;
-                        padding: 0 2px;
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/_header.scss b/src/app/components/Demo/Site/assets/style/scss/_header.scss
deleted file mode 100644
index 9b48eae5..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/_header.scss
+++ /dev/null
@@ -1,62 +0,0 @@
-header:first-of-type {
-    position: relative;
-    background-position: center;
-    background-size: cover;
-    background-repeat: no-repeat;
-    min-height: 80vw;
-    transition: min-height .25s ease-in-out;
-
-    @media #{$breakpoint-sm-up} {
-        min-height: 66vw;
-    }
-
-    @media #{$breakpoint-md-up} {
-        background-position: center;
-        background-size: auto;
-        background-repeat: repeat;
-        min-height: 50vw;
-    }
-
-    @media #{$breakpoint-lg-up} {
-        height: 33vw;
-        min-height: 0;
-        max-height: px2rem(480);
-    }
-
-    .header-nav {
-        position: absolute;
-        top: 0;
-        right: 0;
-        padding: px2rem(20);
-
-        a {
-            display: flex;
-            align-items: center;
-            justify-content: flex-start;
-            color: color(white);
-            font-size: px2rem(16);
-            font-weight: 700;
-            line-height: px2rem(20);
-            text-shadow: 0 1px 1px #000000;
-            min-height: 20;
-            padding: px2rem(8) px2rem(14);
-            transition: all .25s ease-in-out;
-
-            &:hover,
-            &:focus {
-                text-decoration: none;
-                border-radius: 4px;
-                background-color: color(primary);
-                box-shadow: 0 0 5px 2px rgba(255,255,255,.125);
-                text-shadow: none;
-                opacity: 1;
-            }
-
-            img {
-                width: auto;
-                height: px2rem(20);
-                padding-right: px2rem(5);
-            }
-        }
-    }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/_hero.scss b/src/app/components/Demo/Site/assets/style/scss/_hero.scss
deleted file mode 100644
index d1ad51ab..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/_hero.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-section.hero {
-    @extend .bg-tertiary;
-
-    padding: px2vw(350) px2vw(48);
-
-    transition: all .25s ease-in-out;
-    text-align: center;
-
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    overflow: hidden;
-
-    @media #{$breakpoint-md-up} {
-        padding: px2vw(128) px2vw(48);
-    }
-
-    .btn {
-        @extend .mt-xs-6;
-    }
-
-    h1 {
-        color: color(dark-grey);
-        font-weight: 300;
-        font-size: px2rem(18);
-        line-height: 1.5;
-
-        @media #{$breakpoint-md-up} {
-            font-size: 2.9vw;
-        }
-    }
-
-    img.icon {
-        @extend .mb-xs-4;
-        @extend .mb-md-5;
-
-        width: px2vw(300);
-        height: auto;
-
-        @media #{$breakpoint-sm-up} {
-            width: px2vw(100);
-            height: auto;
-
-            min-width: px2rem(100);
-        }
-    }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/_layout.scss b/src/app/components/Demo/Site/assets/style/scss/_layout.scss
deleted file mode 100755
index a88dffeb..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/_layout.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-body {
-    overflow-x: hidden;
-    background-color: color(light-grey);
-}
-
-
-.shadow {
-    background: linear-gradient(to bottom, rgba(0,0,0,0.75) 0%,rgba(0,0,0,0) 100%);
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 33%;
-
-}
-
-.demo-site {
-    min-width: 320px;
-    overflow-x: hidden;
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/_nav.scss b/src/app/components/Demo/Site/assets/style/scss/_nav.scss
deleted file mode 100644
index 037825e7..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/_nav.scss
+++ /dev/null
@@ -1,83 +0,0 @@
-
-nav.main {
-    position: relative;
-    width: 100%;
-    height: px2rem(100);
-    background-color: color(white);
-
-    &.fixed {
-        top: 0;
-        left: 0;
-        position: fixed;
-        z-index: 500000;
-        background-color: rgba(255, 255, 255, 0.95);
-    }
-
-    @media #{$breakpoint-sm-down} {
-        height: px2rem(72);
-    }
-
-    > div {
-        width: 100%;
-        height: 100%;
-        display: flex;
-        align-items: stretch;
-        justify-content: center;
-        position: absolute;
-        z-index: 9000;
-        box-shadow: 0 2px 8px 4px rgba(0,0,0,0.11);
-
-        transition: all .25s ease-in-out;
-
-        > ul {
-            width: 100%;
-            max-width: px2rem(768);
-            display: flex;
-            align-items: stretch;
-            justify-content: center;
-            margin: 0;
-            padding: 0;
-
-            li {
-
-                display: flex;
-                align-items: stretch;
-                justify-content: center;
-
-                a, button, label {
-                    display: flex;
-                    align-items: center;
-                    justify-content: center;
-                    padding: px2rem(20) px2rem(40);
-                    text-transform: uppercase;
-                    font-weight: 600;
-                    color: color(dark-grey);
-                    font-size: px2rem(20);
-                    transition: all .25s ease-in-out;
-                    border-bottom: 3px solid transparent;
-                    outline: none;
-                    cursor: pointer;
-
-                    @media #{$breakpoint-sm-down} {
-                        padding: px2rem(20) px2rem(16);
-                        font-size: px2rem(14);
-                    }
-
-                    &.active,
-                    &:hover,
-                    &:focus {
-                        color: color(primary);
-                        text-decoration: none;
-                        border-bottom: 3px solid color(primary);
-                    }
-
-                    &.active {
-                        color: color(grey);
-                        border-bottom: 3px solid color(grey);
-                    }
-                }
-            }
-        }
-    }
-
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/_typography.scss b/src/app/components/Demo/Site/assets/style/scss/_typography.scss
deleted file mode 100755
index c35e69fa..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/_typography.scss
+++ /dev/null
@@ -1,111 +0,0 @@
-@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700');
-
-
-:root {
-    font-family: 'Open Sans', sans-serif;
-    font-size: $root-font;
-    font-weight: normal;
-    color: color(dark-grey);
-    line-height: 1;
-
-    @media (min-width: 1921px) {
-        font-size: 1.1vw;
-    }
-}
-
-* {
-    -webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
-}
-
-html, body {
-    padding: 0;
-    margin: 0;
-}
-
-ul {
-
-    &, li {
-        list-style: none;
-        padding: 0;
-        margin: 0;
-    }
-}
-
-a {
-    color: inherit;
-    text-decoration: none;
-
-    &:hover {
-        text-decoration: underline;
-        opacity: 0.8;
-    }
-}
-
-
-h1, h2, h3, h4, h5, h6 {
-    font-weight: normal;
-    margin: 0;
-    padding: 0;
-}
-
-h2 {
-    font-weight: bold;
-}
-
-.heading {
-    font-weight: 300;
-    font-size: px2rem(18);
-    line-height: 1.5;
-
-    @media #{$breakpoint-md-up} {
-        font-size: 2.9vw;
-    }
-}
-
-.sub-heading {
-    font-size: px2rem(24);
-}
-
-.caption {
-    font-size: px2rem(18);
-}
-
-
-@mixin align-factory($prefix) {
-    @each $align in (left, right, center) {
-        @if $prefix == 'xs' {
-            .text-#{$align} {
-                text-align: #{$align};
-            }
-        }
-
-        .text-#{$prefix}-#{$align} {
-            text-align: #{$align};
-        }
-    }
-}
-
-/* text align */
-@for $i from 1 through length($breakpoint-up-prefixes) {
-  $thisPrefix: nth($breakpoint-up-prefixes, $i);
-  @if $thisPrefix == "xs" {
-    @include align-factory($thisPrefix);
-  } @else if $thisPrefix == "sm" {
-    @media #{$breakpoint-sm-up} {
-      @include align-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "md" {
-    @media #{$breakpoint-md-up} {
-      @include align-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "lg" {
-    @media #{$breakpoint-lg-up} {
-      @include align-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "xl" {
-    @media #{$breakpoint-xl-up} {
-      @include align-factory($thisPrefix);
-    }
-  }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/_variables.scss b/src/app/components/Demo/Site/assets/style/scss/_variables.scss
deleted file mode 100755
index 2e9e3034..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/_variables.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-// Root font-size:
-$root-font: 16px;
-
-// Colors
-$colors: (
-    primary: #286782,
-    secondary: #709AAC,
-    tertiary: #FBFAFA,
-    white: #FFFFFF,
-    grey: #969696,
-    dark-grey: #555559,
-    light-grey: #EFEFEF
-);
-
-
-// Sizes
-$sizes: (2, 4, 8, 16, 32, 64, 80, 128, 160, 256);
-
-// Buttons
-$button-sizes: (xs, sm, md, lg, xl);
-$button-font: (12, 14, 20, 24, 32);
-$button-padV: (8, 16, 24, 32, 64);
-$button-padH: (16, 32, 48, 64, 128);
diff --git a/src/app/components/Demo/Site/assets/style/scss/grid/_grid.scss b/src/app/components/Demo/Site/assets/style/scss/grid/_grid.scss
deleted file mode 100755
index 1017ac75..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/grid/_grid.scss
+++ /dev/null
@@ -1,140 +0,0 @@
-// Creds to https://github.com/kristoferjoseph/flexboxgrid
-// No gutters
-// No text alignment with justified container classes (center-xs, for example)
-
-.row {
-  @include row();
-}
-
-.row.reverse {
-  @include row-reverse();
-}
-
-.row.eq-height {
-  @include row-eq-height();
-}
-
-.row.auto-height {
-  @include row-auto-height();
-}
-
-.row.flex-column {
-  flex-direction: column;
-}
-
-.col {
-  @include col();
-}
-
-.col.reverse {
-  @include col-reverse();
-}
-
-.first {
-  order: -1;
-}
-
-.last {
-  order: 1;
-}
-
-.align-start {
-  align-self: flex-start;
-}
-
-.align-end {
-  align-self: flex-end;
-}
-
-.align-center {
-  align-self: center;
-}
-
-.align-baseline {
-  align-self: baseline;
-}
-
-.align-stretch {
-    align-self: stretch;
-}
-
-// Mixin to run inside of for loop - creates col/breakpoint classes * Not for developer use *
-@mixin col-factory($thisPrefix) {
-  .col-#{$thisPrefix} {
-    flex-grow: 1;
-    flex-basis: 0;
-    max-width: 100%;
-    padding: $gutter;
-  }
-  @for $i from 1 through $grid-columns {
-    .col-#{$thisPrefix}-#{$i} {
-      flex-basis: 100% / $grid-columns * $i;
-      max-width: 100% / $grid-columns * $i;
-      padding: $gutter;
-    }
-    .col-#{$thisPrefix}-offset-#{$i} {
-      margin-left: 100% / $grid-columns * $i;
-    }
-  }
-  .start-#{$thisPrefix} {
-    justify-content: flex-start;
-  }
-  .center-#{$thisPrefix} {
-    justify-content: center;
-  }
-  .end-#{$thisPrefix} {
-    justify-content: flex-end;
-  }
-  .top-#{$thisPrefix} {
-    align-items: flex-start;
-  }
-  .middle-#{$thisPrefix} {
-    align-items: center;
-  }
-  .bottom-#{$thisPrefix} {
-    align-items: flex-end;
-  }
-  .around-#{$thisPrefix} {
-    justify-content: space-around;
-  }
-  .between-#{$thisPrefix} {
-    justify-content: space-between;
-  }
-  .first-#{$thisPrefix} {
-    order: -1;
-  }
-  .last-#{$thisPrefix} {
-    order: 1;
-  }
-} // Mixin to run inside of for loop - creates col/breakpoint classes
-
-@for $i from 1 through length($breakpoint-up-prefixes) {
-  $thisPrefix: nth($breakpoint-up-prefixes, $i);
-  @if $thisPrefix == "xs" {
-    @include col-factory($thisPrefix);
-  } @else if $thisPrefix == "sm" {
-    @media #{$breakpoint-sm-up} {
-      @include col-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "md" {
-    @media #{$breakpoint-md-up} {
-      @include col-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "lg" {
-    @media #{$breakpoint-lg-up} {
-      @include col-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "xl" {
-    @media #{$breakpoint-xl-up} {
-      @include col-factory($thisPrefix);
-    }
-  }
-}
-
-.col-gutter-lr {
-    padding: 0 $gutter;
-}
-
-.col-no-gutter {
-    padding: 0;
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/grid/_visibility.scss b/src/app/components/Demo/Site/assets/style/scss/grid/_visibility.scss
deleted file mode 100755
index 9d46ba8b..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/grid/_visibility.scss
+++ /dev/null
@@ -1,57 +0,0 @@
-
-.show {
-  display: block !important;
-}
-
-.hide {
-  display: none !important;
-}
-
-// Mixin to run inside of for loop - creates visibility classes * Not for developer use *
-@mixin vis-factory($thisPrefix) {
-  .show-#{$thisPrefix} {
-    display: block !important;
-  }
-  .hide-#{$thisPrefix} {
-    display: none !important;
-  }
-} // Mixin to run inside of for loop - creates visibility classes * Not for developer use *
-
-@for $i from 1 through length($breakpoint-all-prefixes) {
-  $thisPrefix: nth($breakpoint-all-prefixes, $i);
-  @if $thisPrefix == "xs" {
-    @include vis-factory($thisPrefix);
-  } @else if $thisPrefix == "xs-only" {
-    @media #{$breakpoint-xs-only} {
-      @include vis-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "sm" {
-    @media #{$breakpoint-sm-up} {
-      @include vis-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "sm-only" {
-    @media #{$breakpoint-sm-only} {
-      @include vis-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "md" {
-    @media #{$breakpoint-md-up} {
-      @include vis-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "md-only" {
-    @media #{$breakpoint-md-only} {
-      @include vis-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "lg" {
-    @media #{$breakpoint-lg-up} {
-      @include vis-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "lg-only" {
-    @media #{$breakpoint-lg-only} {
-      @include vis-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "xl" {
-    @media #{$breakpoint-xl-up} {
-      @include vis-factory($thisPrefix);
-    }
-  }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/grid/main.scss b/src/app/components/Demo/Site/assets/style/scss/grid/main.scss
deleted file mode 100755
index bae40e3f..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/grid/main.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-@import "variables/main.scss";
-@import "mixins/main.scss";
-@import "grid";
-@import "visibility"; // Visibility last for precedence
diff --git a/src/app/components/Demo/Site/assets/style/scss/grid/mixins/_grid-mixins.scss b/src/app/components/Demo/Site/assets/style/scss/grid/mixins/_grid-mixins.scss
deleted file mode 100755
index b92e481d..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/grid/mixins/_grid-mixins.scss
+++ /dev/null
@@ -1,365 +0,0 @@
-@import "../variables/main.scss";
-
-@mixin row($full-width: "false") {
-  margin: 0 auto;
-  width: 100%;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  flex: 0 1 auto;
-  flex-direction: row;
-  flex-wrap: wrap;
-  // // Overrides flexbox's default behavior of making all children equal height
-  // align-items: flex-start; // If this was not in place it would require two classes to make a row full of unequal height columns aligned top, middle, bottom
-  @if type-of($content-well-max-width) == number and $content-well-max-width != 0 and $full-width == "false"{
-    max-width: $content-well-max-width;
-  }
-}
-
-@mixin row-reverse() {
-  flex-direction: row-reverse;
-}
-
-@mixin row-eq-height() {
-  align-items: stretch;
-}
-
-// For use when row align-item flex-start has been overridden
-@mixin row-auto-height() {
-  align-items: flex-start;
-}
-
-@mixin col-reverse() {
-  flex-direction: column-reverse;
-}
-
-// Condition to run inside of the col mixin * not for developer use *
-@mixin col-condition($col-number) {
-  @if type-of($col-number) == number {
-    @if $col-number > $grid-columns or $col-number == 0 {
-      @warn "Column number must be greater than 0 and less than or equal to total number of columns in the grid (#{$grid-columns})";
-    } @else {
-      flex-basis: 100% / $grid-columns * $col-number;
-      max-width: 100% / $grid-columns * $col-number;
-      padding: $gutter;
-    }
-  // If no col number is passed then arg is set to "auto" by default
-  // "auto" mode fills the horizontal space with evenly sized containers
-  } @else if $col-number == "auto" {
-    flex-grow: 1;
-    flex-basis: 0;
-    max-width: 100%;
-    padding: $gutter;
-  } @else {
-    @warn "Column number argument must either be the string 'auto' or a number greater than 0 and less than or equal to total number of columns in the grid (#{$grid-columns})";
-  }
-} // Condition to run inside of the col mixin * not for developer use *
-
-@mixin col($breakpoint: "xs", $col-number: "auto") {
-  // If no breakpoint is passed and a col number is just use the first arg as the col number and act like xs
-  @if type-of($breakpoint) == number {
-    $col-number: $breakpoint;
-    @include col-condition($col-number);
-  } @else if $breakpoint == "xs" {
-    @include col-condition($col-number);
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      @include col-condition($col-number);
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      @include col-condition($col-number);
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      @include col-condition($col-number);
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      @include col-condition($col-number);
-    }
-  } @else {
-    @warn "col mixin requires one of the existing breakpoint prefixes (#{$breakpoint-up-prefixes})";
-  }
-}
-
-// Condition to run inside of the col-offset mixin * not for developer use *
-@mixin col-offset-condition($offset-number) {
-  @if type-of($offset-number) != number {
-    @warn "Column offset number must be a number (only arg or second arg in the col mixin)";
-  } @else if $offset-number == 0 {
-    @warn "Column offset number must be greater than 0 and less than or equal to total number of columns in the grid (#{$grid-columns})";
-  } @else if $offset-number > $grid-columns {
-    @warn "Column offset number must be greater than 0 and less than or equal to total number of columns in the grid (#{$grid-columns})";
-  } @else {
-    margin-left: 100% / $grid-columns * $offset-number;
-  }
-} // Condition to run inside of the col-offset mixin * not for developer use *
-
-@mixin col-offset($breakpoint: "xs", $offset-number: 0) {
-  // If no breakpoint is passed and a col number is just use the first arg as the col number and act like xs
-  @if type-of($breakpoint) == number {
-    $offset-number: $breakpoint;
-    @include col-offset-condition($offset-number);
-  } @else if $breakpoint == "xs" {
-    @include col-offset-condition($offset-number);
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      @include col-offset-condition($offset-number);
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      @include col-offset-condition($offset-number);
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      @include col-offset-condition($offset-number);
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      @include col-offset-condition($offset-number);
-    }
-  } @else {
-    @warn "col mixin requires one of the existing breakpoint prefixes (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin start($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: flex-start;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: flex-start;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: flex-start;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: flex-start;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: flex-start;
-    }
-  } @else {
-    @warn "start mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin center($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: center;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: center;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: center;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: center;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: center;
-    }
-  } @else {
-    @warn "center mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin end($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: flex-end;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: flex-end;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: flex-end;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: flex-end;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: flex-end;
-    }
-  } @else {
-    @warn "end mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin top($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    align-items: flex-start;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      align-items: flex-start;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      align-items: flex-start;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      align-items: flex-start;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      align-items: flex-start;
-    }
-  } @else {
-    @warn "top mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin middle($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    align-items: center;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      align-items: center;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      align-items: center;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      align-items: center;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      align-items: center;
-    }
-  } @else {
-    @warn "middle mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin bottom($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    align-items: flex-end;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      align-items: flex-end;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      align-items: flex-end;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      align-items: flex-end;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      align-items: flex-end;
-    }
-  } @else {
-    @warn "bottom mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin around($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: space-around;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: space-around;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: space-around;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: space-around;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: space-around;
-    }
-  } @else {
-    @warn "around mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin between($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: space-between;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: space-between;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: space-between;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: space-between;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: space-between;
-    }
-  } @else {
-    @warn "between mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin first($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    order: -1;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      order: -1;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      order: -1;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      order: -1;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      order: -1;
-    }
-  } @else {
-    @warn "first mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin last($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    order: 1;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      order: 1;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      order: 1;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      order: 1;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      order: 1;
-    }
-  } @else {
-    @warn "last mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/grid/mixins/_visibility-mixins.scss b/src/app/components/Demo/Site/assets/style/scss/grid/mixins/_visibility-mixins.scss
deleted file mode 100755
index 94e03a5f..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/grid/mixins/_visibility-mixins.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-@mixin show($breakpoint) {
-  @if $breakpoint == "xs" {
-    display: block;
-  } @else if $breakpoint == "xs-only" {
-    @media #{$breakpoint-xs-only} {
-      display: block;
-    }
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      display: block;
-    }
-  } @else if $breakpoint == "sm-only" {
-    @media #{$breakpoint-sm-only} {
-      display: block;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      display: block;
-    }
-  } @else if $breakpoint == "md-only" {
-    @media #{$breakpoint-md-only} {
-      display: block;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      display: block;
-    }
-  } @else if $breakpoint == "lg-only" {
-    @media #{$breakpoint-lg-only} {
-      display: block;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      display: block;
-    }
-  } @else {
-    @warn "show mixin arg must be one of the existing breakpoints or ranges (#{$breakpoint-all-prefixes})";
-  }
-}
-
-@mixin hide($breakpoint) {
-  @if $breakpoint == "xs" {
-    display: none;
-  } @else if $breakpoint == "xs-only" {
-    @media #{$breakpoint-xs-only} {
-      display: none;
-    }
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      display: none;
-    }
-  } @else if $breakpoint == "sm-only" {
-    @media #{$breakpoint-sm-only} {
-      display: none;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      display: none;
-    }
-  } @else if $breakpoint == "md-only" {
-    @media #{$breakpoint-md-only} {
-      display: none;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      display: none;
-    }
-  } @else if $breakpoint == "lg-only" {
-    @media #{$breakpoint-lg-only} {
-      display: none;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      display: none;
-    }
-  } @else {
-    @warn "hide mixin arg must be one of the existing breakpoints or ranges (#{$breakpoint-all-prefixes})";
-  }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/grid/mixins/main.scss b/src/app/components/Demo/Site/assets/style/scss/grid/mixins/main.scss
deleted file mode 100755
index 96a1728a..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/grid/mixins/main.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-// mixins/main.scss
-
-@import "visibility-mixins";
-@import "grid-mixins";
diff --git a/src/app/components/Demo/Site/assets/style/scss/grid/variables/_grid-variables.scss b/src/app/components/Demo/Site/assets/style/scss/grid/variables/_grid-variables.scss
deleted file mode 100755
index 01a35f5f..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/grid/variables/_grid-variables.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-// Grid
-$grid-columns: 12; // Set number of columns in the grid
-
-$xs-max: 480px; // Set xs breakpoint's max width
-$sm-max: 768px; // Set sm breakpoint's max width
-$md-max: 1024px; // Set md breakpoint's max width
-$lg-max: 1440px; // Set lg breakpoint's max width
-
-$gutter: 0;
-
-$sm-start: ($xs-max + 1); // Set sm breakpoint's min width
-$md-start: ($sm-max + 1); // Set md breakpoint's min width
-$lg-start: ($md-max + 1); // Set lg breakpoint's min width
-$xl-start: ($lg-max + 1); // Set xl breakpoint's min width
-
-$content-well-max-width: "none"; // Set the max-width of the content well
-
-// Breakpoints
-// Create breakpoint range statements to be used in media queries
-$breakpoint-xs-only: "only screen and (max-width: #{$xs-max})"; // 0 -> xs-max range
-$breakpoint-sm-up: "only screen and (min-width: #{$sm-start})"; // sm-start -> up range
-$breakpoint-sm-only: "only screen and (min-width: #{$sm-start}) and (max-width: #{$sm-max})"; // sm-start -> sm-max range
-$breakpoint-md-up: "only screen and (min-width: #{$md-start})"; // md-start -> up range
-$breakpoint-md-only: "only screen and (min-width: #{$md-start}) and (max-width: #{$md-max})"; // md-start -> md-max range
-$breakpoint-lg-up: "only screen and (min-width: #{$lg-start})"; // lg-start -> up range
-$breakpoint-lg-only: "only screen and (min-width: #{$lg-start}) and (max-width: #{$lg-max})"; // lg-start -> lg-max range
-$breakpoint-xl-up: "only screen and (min-width: #{$xl-start})"; // xl-start -> up range
-
-$breakpoint-sm-down: "only screen and (max-width: #{$sm-max})"; // sm -> down
-$breakpoint-md-down: "only screen and (max-width: #{$md-max})"; // md -> down
-$breakpoint-lg-down: "only screen and (max-width: #{$lg-max})"; // lg -> down
-
-$breakpoints-all: ($breakpoint-xs-only, $breakpoint-sm-up, $breakpoint-sm-only, $breakpoint-md-up, $breakpoint-md-only, $breakpoint-lg-up, $breakpoint-lg-only, $breakpoint-xl-up);
-$breakpoint-ups: ($breakpoint-sm-up, $breakpoint-md-up, $breakpoint-lg-up, $breakpoint-xl-up);
-$breakpoint-all-prefixes: ("xs", "xs-only", "sm", "sm-only", "md", "md-only", "lg", "lg-only", "xl");
-$breakpoint-up-prefixes: ("xs", "sm", "md", "lg", "xl");
diff --git a/src/app/components/Demo/Site/assets/style/scss/grid/variables/main.scss b/src/app/components/Demo/Site/assets/style/scss/grid/variables/main.scss
deleted file mode 100755
index d605d26a..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/grid/variables/main.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-// variables/main.scss
-
-@import "grid-variables";
diff --git a/src/app/components/Demo/Site/assets/style/scss/mixins/_button.scss b/src/app/components/Demo/Site/assets/style/scss/mixins/_button.scss
deleted file mode 100755
index 46077466..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/mixins/_button.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-@mixin button-factory() {
-
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/mixins/_color.scss b/src/app/components/Demo/Site/assets/style/scss/mixins/_color.scss
deleted file mode 100755
index df424312..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/mixins/_color.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-@function color($name) {
-
-    @if map-has-key($colors, $name) {
-        @return map-get($colors, $name);
-    }
-
-    @warn "#{$name} is not in the $color map";
-    @return map-get($colors, dark-grey);
-}
-
-
-/* colors */
-@each $name, $color in $colors {
-    .color-#{$name} {
-        color: #{$color};
-    }
-}
-
-@each $name, $color in $colors {
-    .bg-#{$name} {
-        background-color: #{$color};
-    }
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/mixins/_px2rem.scss b/src/app/components/Demo/Site/assets/style/scss/mixins/_px2rem.scss
deleted file mode 100755
index ca14c290..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/mixins/_px2rem.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-
-@function strip-units($number) {
-    @return $number / ($number * 0 + 1);
- }
-
-@function px2rem($px) {
-    $rnum: strip-units($root-font);
-    $fnum: strip-units($px);
-    $rem: $fnum / $rnum;
-    @return #{$rem}rem;
-}
-
-@function px2vw($px) {
-    $rnum: 1920;
-    $fnum: strip-units($px);
-    $vw: ($fnum / $rnum) * 100;
-    @return #{$vw}vw;
-}
diff --git a/src/app/components/Demo/Site/assets/style/scss/mixins/_spacing.scss b/src/app/components/Demo/Site/assets/style/scss/mixins/_spacing.scss
deleted file mode 100755
index e5076957..00000000
--- a/src/app/components/Demo/Site/assets/style/scss/mixins/_spacing.scss
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-@mixin size-factory($prefix) {
-
-    $sides: (top, left, bottom, right);
-    $letters: (t, l, b, r);
-
-    @for $i from 1 through length($sizes) {
-        $sz: px2rem(nth($sizes, $i));
-
-        @if $prefix == xs {
-            @if $i == 1 {
-                .p-0 { padding: 0; }
-            }
-
-            .p-#{$i} { padding: #{$sz}; }
-        }
-
-        @if $i == 1 {
-            .p-#{$prefix}-0 { padding: 0; }
-        }
-
-        .p-#{$prefix}-#{$i} { padding: #{$sz}; }
-
-        @for $s from 1 through length($sides) {
-            $side: nth($sides, $s);
-            $letter: nth($letters, $s);
-
-            @if $prefix == xs {
-                @if $i == 1 {
-                    .p#{$letter}-0 { padding-#{$side}: 0; }
-                }
-
-                .p#{$letter}-#{$i} {
-                    padding-#{$side}: #{$sz};
-                }
-            }
-
-            @if $i == 1 {
-                .p#{$letter}-#{$prefix}-0 { padding-#{$side}: 0; }
-            }
-
-            .p#{$letter}-#{$prefix}-#{$i} {
-                padding-#{$side}: #{$sz};
-            }
-        }
-
-
-
-
-        @if $prefix == xs {
-            @if $i == 1 {
-                .m-0 { margin: 0; }
-            }
-
-            .m-#{$i} { margin: #{$sz}; }
-        }
-
-        @if $i == 1 {
-            .m-#{$prefix}-0 { margin: 0; }
-        }
-
-        .m-#{$prefix}-#{$i} { margin: #{$sz}; }
-
-        @for $s from 1 through length($sides) {
-            $side: nth($sides, $s);
-            $letter: nth($letters, $s);
-
-            @if $prefix == xs {
-                @if $i == 1 {
-                    .m#{$letter}-0 { margin-#{$side}: 0; }
-                }
-
-                .m#{$letter}-#{$i} {
-                    margin-#{$side}: #{$sz};
-                }
-            }
-
-            @if $i == 1 {
-                .m#{$letter}-#{$prefix}-0 { margin-#{$side}: 0; }
-            }
-
-            .m#{$letter}-#{$prefix}-#{$i} {
-                margin-#{$side}: #{$sz};
-            }
-        }
-    }
-}
-
-/* spacing */
-@for $i from 1 through length($breakpoint-up-prefixes) {
-  $thisPrefix: nth($breakpoint-up-prefixes, $i);
-  @if $thisPrefix == "xs" {
-    @include size-factory($thisPrefix);
-  } @else if $thisPrefix == "sm" {
-    @media #{$breakpoint-sm-up} {
-      @include size-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "md" {
-    @media #{$breakpoint-md-up} {
-      @include size-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "lg" {
-    @media #{$breakpoint-lg-up} {
-      @include size-factory($thisPrefix);
-    }
-  } @else if $thisPrefix == "xl" {
-    @media #{$breakpoint-xl-up} {
-      @include size-factory($thisPrefix);
-    }
-  }
-}
diff --git a/src/app/components/SDK/Login/index.js b/src/app/components/SDK/Login/index.js
deleted file mode 100644
index e7411584..00000000
--- a/src/app/components/SDK/Login/index.js
+++ /dev/null
@@ -1,203 +0,0 @@
-import _ from 'underscore';
-import cn from 'classnames';
-import op from 'object-path';
-import PropTypes from 'prop-types';
-import Reactium from 'reactium-core/sdk';
-
-import React, {
-    forwardRef,
-    useEffect,
-    useImperativeHandle,
-    useRef,
-    useState,
-} from 'react';
-
-const noop = () => {};
-
-const ENUMS = {
-    DEBUG: true,
-    EVENT: {
-        CHANGE: 'change',
-        INIT: 'init',
-    },
-};
-
-/**
- * -----------------------------------------------------------------------------
- * Hook Component: Login
- * -----------------------------------------------------------------------------
- */
-let Login = (props, ref) => {
-    const now = Date.now();
-
-    // Refs
-    const containerRef = useRef();
-    const stateRef = useRef({
-        ...props,
-        form: {},
-    });
-
-    // State
-    const [state, setNewState] = useState(stateRef.current);
-
-    // Internal Interface
-    const setState = (newState, caller) => {
-        // Update the stateRef
-        stateRef.current = {
-            ...stateRef.current,
-            ...newState,
-        };
-
-        if (ENUMS.DEBUG && caller) {
-            console.log('setState()', caller, {
-                state: stateRef.current,
-            });
-        }
-
-        // Trigger useEffect()
-        setNewState(stateRef.current);
-    };
-
-    // External Interface
-    useImperativeHandle(ref, () => ({
-        ref,
-        setState,
-        state,
-    }));
-
-    // Side Effects
-    useEffect(
-        () => setState(props, 'User -> useEffect()'),
-        Object.values(props),
-    );
-
-    useEffect(() => {
-        console.log(Reactium.User.current());
-    });
-
-    const submit = async e => {
-        e.preventDefault();
-
-        const { form } = stateRef.current;
-        const { username, password } = form;
-        const u = await Reactium.User.auth(username, password);
-    };
-
-    const onChange = e => {
-        const elm = op.get(e, 'target');
-        const { form } = stateRef.current;
-        const { name, value } = elm;
-
-        form[name] = value;
-
-        setState({ form });
-    };
-
-    const find = e => {
-        const dataSet = e.target.dataset;
-        const { username } = dataSet;
-        Reactium.User.find({ username }).then(console.log);
-    };
-
-    const isRole = async e => {
-        const dataSet = e.target.dataset;
-        const { role, user } = dataSet;
-        const valid = await Reactium.User.isRole(role, user);
-        console.log(valid);
-    };
-
-    const can = async e => {
-        const dataSet = e.target.dataset;
-        const { caps, user } = dataSet;
-        const valid = await Reactium.User.can(caps, user);
-        console.log(valid);
-    };
-
-    const addRole = async e => {
-        const dataSet = e.target.dataset;
-        const { role, user } = dataSet;
-
-        Reactium.User.Role.add(role, user).then(console.log);
-    };
-
-    const removeRole = async e => {
-        const dataSet = e.target.dataset;
-        const { role, user } = dataSet;
-
-        Reactium.User.Role.remove(role, user).then(console.log);
-    };
-
-    // Renderers
-    const render = () => {
-        const { form } = stateRef.current;
-
-        return !Reactium.User.current() ? (
-            <form onSubmit={submit}>
-                <input
-                    type='text'
-                    name='username'
-                    onChange={onChange}
-                    placeholder='Username'
-                    value={op.get(form, 'username', '')}
-                />
-                <input
-                    type='password'
-                    name='password'
-                    onChange={onChange}
-                    placeholder='Password'
-                    value={op.get(form, 'password', '')}
-                />
-                <button type='submit'>Sign In</button>
-            </form>
-        ) : (
-            <>
-                <h1>Hello {Reactium.User.current().username}</h1>
-                <button type='button' onClick={find} data-username='cam'>
-                    Find Cam
-                </button>
-                <button
-                    type='button'
-                    onClick={isRole}
-                    data-role='banned'
-                    data-user='IFpJunhE0I'>
-                    Is Allie Banned?
-                </button>
-                <button
-                    type='button'
-                    onClick={can}
-                    data-caps='Blueprint.creates'
-                    data-user='HrIE319DdZ'>
-                    Can Cam Make Blueprints?
-                </button>
-                <button
-                    type='button'
-                    onClick={addRole}
-                    data-role='moderator'
-                    data-user='zI3KfBsmXF'>
-                    Add Lisa to Moderators
-                </button>
-                <button
-                    type='button'
-                    onClick={removeRole}
-                    data-role='moderator'
-                    data-user='zI3KfBsmXF'>
-                    Remove Lisa from Moderators
-                </button>
-            </>
-        );
-    };
-
-    return render();
-};
-
-Login = forwardRef(Login);
-
-Login.propTypes = {
-    namespace: PropTypes.string,
-};
-
-Login.defaultProps = {
-    namespace: 'Login',
-};
-
-export { Login as default };
diff --git a/src/app/components/SDK/Login/route.js b/src/app/components/SDK/Login/route.js
deleted file mode 100644
index e76d4c57..00000000
--- a/src/app/components/SDK/Login/route.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Login from './index';
-
-export default {
-    path: ['/sdk/user'],
-    exact: true,
-    component: Login,
-};
diff --git a/src/app/components/Welcome/_reactium-style-organisms.scss b/src/app/components/Welcome/_reactium-style-organisms.scss
new file mode 100644
index 00000000..e823d880
--- /dev/null
+++ b/src/app/components/Welcome/_reactium-style-organisms.scss
@@ -0,0 +1,10 @@
+body {
+    padding: 0;
+    margin: 0;
+    overflow: hidden;
+
+    iframe {
+        outline: none;
+        border: none;
+    }
+}
diff --git a/src/app/components/Fallback/index.js b/src/app/components/Welcome/domain.js
similarity index 52%
rename from src/app/components/Fallback/index.js
rename to src/app/components/Welcome/domain.js
index 17f9368b..2adec153 100644
--- a/src/app/components/Fallback/index.js
+++ b/src/app/components/Welcome/domain.js
@@ -1,12 +1,9 @@
-import React from 'react';
-
 /**
  * -----------------------------------------------------------------------------
- * Functional Component: Fallback
+ * DDD Domain Welcome - Change name to place domain artifacts in this directory
+ * in a different domain.
  * -----------------------------------------------------------------------------
  */
-const Fallback = props => {
-    return <div className='fallback' />;
+module.exports = {
+    name: 'Welcome',
 };
-
-export default Fallback;
diff --git a/src/app/components/Welcome/index.js b/src/app/components/Welcome/index.js
new file mode 100644
index 00000000..455319be
--- /dev/null
+++ b/src/app/components/Welcome/index.js
@@ -0,0 +1,16 @@
+import React from 'react';
+
+/**
+ * -----------------------------------------------------------------------------
+ * Functional Component: Welcome
+ * -----------------------------------------------------------------------------
+ */
+const Welcome = () => {
+    return (
+        <div style={{ width: '100vw', height: '100vh' }}>
+            <iframe width='100%' height='100%' src='https://www.reactium.io/' />
+        </div>
+    );
+};
+
+export { Welcome };
diff --git a/src/app/components/Welcome/reactium-hooks.js b/src/app/components/Welcome/reactium-hooks.js
new file mode 100644
index 00000000..64967517
--- /dev/null
+++ b/src/app/components/Welcome/reactium-hooks.js
@@ -0,0 +1,12 @@
+/**
+ * -----------------------------------------------------------------------------
+ * Reactium Plugin Welcome
+ * -----------------------------------------------------------------------------
+ */
+
+import { Welcome } from './index';
+import Reactium from 'reactium-core/sdk';
+
+(async () => {
+    Reactium.Component.register('Welcome', Welcome);
+})();
diff --git a/src/app/components/Welcome/route.js b/src/app/components/Welcome/route.js
new file mode 100644
index 00000000..7b743a7c
--- /dev/null
+++ b/src/app/components/Welcome/route.js
@@ -0,0 +1,7 @@
+import { Welcome } from './index';
+
+export default {
+    exact: true,
+    component: Welcome,
+    path: ['/'],
+};
diff --git a/src/app/components/common-ui/Icon/Feather/index.js b/src/app/components/common-ui/Icon/Feather/index.js
deleted file mode 100644
index 8298bf7f..00000000
--- a/src/app/components/common-ui/Icon/Feather/index.js
+++ /dev/null
@@ -1,808 +0,0 @@
-// THIS FILE IS GENERATED BY THE `$ arcli icons` command
-// DO NOT DIRECTLY EDIT !!!!!!!!!!!!!!!!
-
-import Activity from './svgs/Activity';
-import Airplay from './svgs/Airplay';
-import AlertCircle from './svgs/AlertCircle';
-import AlertOctagon from './svgs/AlertOctagon';
-import AlertTriangle from './svgs/AlertTriangle';
-import AlignCenter from './svgs/AlignCenter';
-import AlignJustify from './svgs/AlignJustify';
-import AlignLeft from './svgs/AlignLeft';
-import AlignRight from './svgs/AlignRight';
-import Anchor from './svgs/Anchor';
-import Aperture from './svgs/Aperture';
-import Archive from './svgs/Archive';
-import ArrowDown from './svgs/ArrowDown';
-import ArrowDownCircle from './svgs/ArrowDownCircle';
-import ArrowDownLeft from './svgs/ArrowDownLeft';
-import ArrowDownRight from './svgs/ArrowDownRight';
-import ArrowLeft from './svgs/ArrowLeft';
-import ArrowLeftCircle from './svgs/ArrowLeftCircle';
-import ArrowRight from './svgs/ArrowRight';
-import ArrowRightCircle from './svgs/ArrowRightCircle';
-import ArrowUp from './svgs/ArrowUp';
-import ArrowUpCircle from './svgs/ArrowUpCircle';
-import ArrowUpLeft from './svgs/ArrowUpLeft';
-import ArrowUpRight from './svgs/ArrowUpRight';
-import AtSign from './svgs/AtSign';
-import Award from './svgs/Award';
-import BarChart from './svgs/BarChart';
-import BarChart2 from './svgs/BarChart2';
-import Battery from './svgs/Battery';
-import BatteryCharging from './svgs/BatteryCharging';
-import Bell from './svgs/Bell';
-import BellOff from './svgs/BellOff';
-import Bluetooth from './svgs/Bluetooth';
-import Bold from './svgs/Bold';
-import Book from './svgs/Book';
-import BookOpen from './svgs/BookOpen';
-import Bookmark from './svgs/Bookmark';
-import Box from './svgs/Box';
-import Briefcase from './svgs/Briefcase';
-import Calendar from './svgs/Calendar';
-import Camera from './svgs/Camera';
-import CameraOff from './svgs/CameraOff';
-import Cast from './svgs/Cast';
-import Check from './svgs/Check';
-import CheckCircle from './svgs/CheckCircle';
-import CheckSquare from './svgs/CheckSquare';
-import ChevronDown from './svgs/ChevronDown';
-import ChevronLeft from './svgs/ChevronLeft';
-import ChevronRight from './svgs/ChevronRight';
-import ChevronUp from './svgs/ChevronUp';
-import ChevronsDown from './svgs/ChevronsDown';
-import ChevronsLeft from './svgs/ChevronsLeft';
-import ChevronsRight from './svgs/ChevronsRight';
-import ChevronsUp from './svgs/ChevronsUp';
-import Chrome from './svgs/Chrome';
-import Circle from './svgs/Circle';
-import Clipboard from './svgs/Clipboard';
-import Clock from './svgs/Clock';
-import Cloud from './svgs/Cloud';
-import CloudDrizzle from './svgs/CloudDrizzle';
-import CloudLightning from './svgs/CloudLightning';
-import CloudOff from './svgs/CloudOff';
-import CloudRain from './svgs/CloudRain';
-import CloudSnow from './svgs/CloudSnow';
-import Code from './svgs/Code';
-import Codepen from './svgs/Codepen';
-import Command from './svgs/Command';
-import Compass from './svgs/Compass';
-import Copy from './svgs/Copy';
-import CornerDownLeft from './svgs/CornerDownLeft';
-import CornerDownRight from './svgs/CornerDownRight';
-import CornerLeftDown from './svgs/CornerLeftDown';
-import CornerLeftUp from './svgs/CornerLeftUp';
-import CornerRightDown from './svgs/CornerRightDown';
-import CornerRightUp from './svgs/CornerRightUp';
-import CornerUpLeft from './svgs/CornerUpLeft';
-import CornerUpRight from './svgs/CornerUpRight';
-import Cpu from './svgs/Cpu';
-import CreditCard from './svgs/CreditCard';
-import Crop from './svgs/Crop';
-import Crosshair from './svgs/Crosshair';
-import Database from './svgs/Database';
-import Delete from './svgs/Delete';
-import Disc from './svgs/Disc';
-import DollarSign from './svgs/DollarSign';
-import Download from './svgs/Download';
-import DownloadCloud from './svgs/DownloadCloud';
-import Droplet from './svgs/Droplet';
-import Edit from './svgs/Edit';
-import Edit2 from './svgs/Edit2';
-import Edit3 from './svgs/Edit3';
-import ExternalLink from './svgs/ExternalLink';
-import Eye from './svgs/Eye';
-import EyeOff from './svgs/EyeOff';
-import Facebook from './svgs/Facebook';
-import FastForward from './svgs/FastForward';
-import Feather from './svgs/Feather';
-import File from './svgs/File';
-import FileMinus from './svgs/FileMinus';
-import FilePlus from './svgs/FilePlus';
-import FileText from './svgs/FileText';
-import Film from './svgs/Film';
-import Filter from './svgs/Filter';
-import Flag from './svgs/Flag';
-import Folder from './svgs/Folder';
-import FolderMinus from './svgs/FolderMinus';
-import FolderPlus from './svgs/FolderPlus';
-import Gift from './svgs/Gift';
-import GitBranch from './svgs/GitBranch';
-import GitCommit from './svgs/GitCommit';
-import GitMerge from './svgs/GitMerge';
-import GitPullRequest from './svgs/GitPullRequest';
-import Github from './svgs/Github';
-import Gitlab from './svgs/Gitlab';
-import Globe from './svgs/Globe';
-import Grid from './svgs/Grid';
-import HardDrive from './svgs/HardDrive';
-import Hash from './svgs/Hash';
-import Headphones from './svgs/Headphones';
-import Heart from './svgs/Heart';
-import HelpCircle from './svgs/HelpCircle';
-import Home from './svgs/Home';
-import Image from './svgs/Image';
-import Inbox from './svgs/Inbox';
-import Info from './svgs/Info';
-import Instagram from './svgs/Instagram';
-import Italic from './svgs/Italic';
-import Layers from './svgs/Layers';
-import Layout from './svgs/Layout';
-import LifeBuoy from './svgs/LifeBuoy';
-import Link from './svgs/Link';
-import Link2 from './svgs/Link2';
-import Linkedin from './svgs/Linkedin';
-import List from './svgs/List';
-import Loader from './svgs/Loader';
-import Lock from './svgs/Lock';
-import LogIn from './svgs/LogIn';
-import LogOut from './svgs/LogOut';
-import Mail from './svgs/Mail';
-import Map from './svgs/Map';
-import MapPin from './svgs/MapPin';
-import Maximize from './svgs/Maximize';
-import Maximize2 from './svgs/Maximize2';
-import Menu from './svgs/Menu';
-import MessageCircle from './svgs/MessageCircle';
-import MessageSquare from './svgs/MessageSquare';
-import Mic from './svgs/Mic';
-import MicOff from './svgs/MicOff';
-import Minimize from './svgs/Minimize';
-import Minimize2 from './svgs/Minimize2';
-import Minus from './svgs/Minus';
-import MinusCircle from './svgs/MinusCircle';
-import MinusSquare from './svgs/MinusSquare';
-import Monitor from './svgs/Monitor';
-import Moon from './svgs/Moon';
-import MoreHorizontal from './svgs/MoreHorizontal';
-import MoreVertical from './svgs/MoreVertical';
-import Move from './svgs/Move';
-import Music from './svgs/Music';
-import Navigation from './svgs/Navigation';
-import Navigation2 from './svgs/Navigation2';
-import Octagon from './svgs/Octagon';
-import Package from './svgs/Package';
-import Paperclip from './svgs/Paperclip';
-import Pause from './svgs/Pause';
-import PauseCircle from './svgs/PauseCircle';
-import Percent from './svgs/Percent';
-import Phone from './svgs/Phone';
-import PhoneCall from './svgs/PhoneCall';
-import PhoneForwarded from './svgs/PhoneForwarded';
-import PhoneIncoming from './svgs/PhoneIncoming';
-import PhoneMissed from './svgs/PhoneMissed';
-import PhoneOff from './svgs/PhoneOff';
-import PhoneOutgoing from './svgs/PhoneOutgoing';
-import PieChart from './svgs/PieChart';
-import Play from './svgs/Play';
-import PlayCircle from './svgs/PlayCircle';
-import Plus from './svgs/Plus';
-import PlusCircle from './svgs/PlusCircle';
-import PlusSquare from './svgs/PlusSquare';
-import Pocket from './svgs/Pocket';
-import Power from './svgs/Power';
-import Printer from './svgs/Printer';
-import Radio from './svgs/Radio';
-import RefreshCcw from './svgs/RefreshCcw';
-import RefreshCw from './svgs/RefreshCw';
-import Repeat from './svgs/Repeat';
-import Rewind from './svgs/Rewind';
-import RotateCcw from './svgs/RotateCcw';
-import RotateCw from './svgs/RotateCw';
-import Rss from './svgs/Rss';
-import Save from './svgs/Save';
-import Scissors from './svgs/Scissors';
-import Search from './svgs/Search';
-import Send from './svgs/Send';
-import Server from './svgs/Server';
-import Settings from './svgs/Settings';
-import Share from './svgs/Share';
-import Share2 from './svgs/Share2';
-import Shield from './svgs/Shield';
-import ShieldOff from './svgs/ShieldOff';
-import ShoppingBag from './svgs/ShoppingBag';
-import ShoppingCart from './svgs/ShoppingCart';
-import Shuffle from './svgs/Shuffle';
-import Sidebar from './svgs/Sidebar';
-import SkipBack from './svgs/SkipBack';
-import SkipForward from './svgs/SkipForward';
-import Slack from './svgs/Slack';
-import Slash from './svgs/Slash';
-import Sliders from './svgs/Sliders';
-import Smartphone from './svgs/Smartphone';
-import Speaker from './svgs/Speaker';
-import Square from './svgs/Square';
-import Star from './svgs/Star';
-import StopCircle from './svgs/StopCircle';
-import Sun from './svgs/Sun';
-import Sunrise from './svgs/Sunrise';
-import Sunset from './svgs/Sunset';
-import Tablet from './svgs/Tablet';
-import Tag from './svgs/Tag';
-import Target from './svgs/Target';
-import Terminal from './svgs/Terminal';
-import Thermometer from './svgs/Thermometer';
-import ThumbsDown from './svgs/ThumbsDown';
-import ThumbsUp from './svgs/ThumbsUp';
-import ToggleLeft from './svgs/ToggleLeft';
-import ToggleRight from './svgs/ToggleRight';
-import Trash from './svgs/Trash';
-import Trash2 from './svgs/Trash2';
-import TrendingDown from './svgs/TrendingDown';
-import TrendingUp from './svgs/TrendingUp';
-import Triangle from './svgs/Triangle';
-import Truck from './svgs/Truck';
-import Tv from './svgs/Tv';
-import Twitter from './svgs/Twitter';
-import Type from './svgs/Type';
-import Umbrella from './svgs/Umbrella';
-import Underline from './svgs/Underline';
-import Unlock from './svgs/Unlock';
-import Upload from './svgs/Upload';
-import UploadCloud from './svgs/UploadCloud';
-import User from './svgs/User';
-import UserCheck from './svgs/UserCheck';
-import UserMinus from './svgs/UserMinus';
-import UserPlus from './svgs/UserPlus';
-import UserX from './svgs/UserX';
-import Users from './svgs/Users';
-import Video from './svgs/Video';
-import VideoOff from './svgs/VideoOff';
-import Voicemail from './svgs/Voicemail';
-import Volume from './svgs/Volume';
-import Volume1 from './svgs/Volume1';
-import Volume2 from './svgs/Volume2';
-import VolumeX from './svgs/VolumeX';
-import Watch from './svgs/Watch';
-import Wifi from './svgs/Wifi';
-import WifiOff from './svgs/WifiOff';
-import Wind from './svgs/Wind';
-import X from './svgs/X';
-import XCircle from './svgs/XCircle';
-import XSquare from './svgs/XSquare';
-import Youtube from './svgs/Youtube';
-import Zap from './svgs/Zap';
-import ZapOff from './svgs/ZapOff';
-import ZoomIn from './svgs/ZoomIn';
-import ZoomOut from './svgs/ZoomOut';
-
-const icons = {
-    Activity,
-    Airplay,
-    AlertCircle,
-    AlertOctagon,
-    AlertTriangle,
-    AlignCenter,
-    AlignJustify,
-    AlignLeft,
-    AlignRight,
-    Anchor,
-    Aperture,
-    Archive,
-    ArrowDown,
-    ArrowDownCircle,
-    ArrowDownLeft,
-    ArrowDownRight,
-    ArrowLeft,
-    ArrowLeftCircle,
-    ArrowRight,
-    ArrowRightCircle,
-    ArrowUp,
-    ArrowUpCircle,
-    ArrowUpLeft,
-    ArrowUpRight,
-    AtSign,
-    Award,
-    BarChart,
-    BarChart2,
-    Battery,
-    BatteryCharging,
-    Bell,
-    BellOff,
-    Bluetooth,
-    Bold,
-    Book,
-    BookOpen,
-    Bookmark,
-    Box,
-    Briefcase,
-    Calendar,
-    Camera,
-    CameraOff,
-    Cast,
-    Check,
-    CheckCircle,
-    CheckSquare,
-    ChevronDown,
-    ChevronLeft,
-    ChevronRight,
-    ChevronUp,
-    ChevronsDown,
-    ChevronsLeft,
-    ChevronsRight,
-    ChevronsUp,
-    Chrome,
-    Circle,
-    Clipboard,
-    Clock,
-    Cloud,
-    CloudDrizzle,
-    CloudLightning,
-    CloudOff,
-    CloudRain,
-    CloudSnow,
-    Code,
-    Codepen,
-    Command,
-    Compass,
-    Copy,
-    CornerDownLeft,
-    CornerDownRight,
-    CornerLeftDown,
-    CornerLeftUp,
-    CornerRightDown,
-    CornerRightUp,
-    CornerUpLeft,
-    CornerUpRight,
-    Cpu,
-    CreditCard,
-    Crop,
-    Crosshair,
-    Database,
-    Delete,
-    Disc,
-    DollarSign,
-    Download,
-    DownloadCloud,
-    Droplet,
-    Edit,
-    Edit2,
-    Edit3,
-    ExternalLink,
-    Eye,
-    EyeOff,
-    Facebook,
-    FastForward,
-    Feather,
-    File,
-    FileMinus,
-    FilePlus,
-    FileText,
-    Film,
-    Filter,
-    Flag,
-    Folder,
-    FolderMinus,
-    FolderPlus,
-    Gift,
-    GitBranch,
-    GitCommit,
-    GitMerge,
-    GitPullRequest,
-    Github,
-    Gitlab,
-    Globe,
-    Grid,
-    HardDrive,
-    Hash,
-    Headphones,
-    Heart,
-    HelpCircle,
-    Home,
-    Image,
-    Inbox,
-    Info,
-    Instagram,
-    Italic,
-    Layers,
-    Layout,
-    LifeBuoy,
-    Link,
-    Link2,
-    Linkedin,
-    List,
-    Loader,
-    Lock,
-    LogIn,
-    LogOut,
-    Mail,
-    Map,
-    MapPin,
-    Maximize,
-    Maximize2,
-    Menu,
-    MessageCircle,
-    MessageSquare,
-    Mic,
-    MicOff,
-    Minimize,
-    Minimize2,
-    Minus,
-    MinusCircle,
-    MinusSquare,
-    Monitor,
-    Moon,
-    MoreHorizontal,
-    MoreVertical,
-    Move,
-    Music,
-    Navigation,
-    Navigation2,
-    Octagon,
-    Package,
-    Paperclip,
-    Pause,
-    PauseCircle,
-    Percent,
-    Phone,
-    PhoneCall,
-    PhoneForwarded,
-    PhoneIncoming,
-    PhoneMissed,
-    PhoneOff,
-    PhoneOutgoing,
-    PieChart,
-    Play,
-    PlayCircle,
-    Plus,
-    PlusCircle,
-    PlusSquare,
-    Pocket,
-    Power,
-    Printer,
-    Radio,
-    RefreshCcw,
-    RefreshCw,
-    Repeat,
-    Rewind,
-    RotateCcw,
-    RotateCw,
-    Rss,
-    Save,
-    Scissors,
-    Search,
-    Send,
-    Server,
-    Settings,
-    Share,
-    Share2,
-    Shield,
-    ShieldOff,
-    ShoppingBag,
-    ShoppingCart,
-    Shuffle,
-    Sidebar,
-    SkipBack,
-    SkipForward,
-    Slack,
-    Slash,
-    Sliders,
-    Smartphone,
-    Speaker,
-    Square,
-    Star,
-    StopCircle,
-    Sun,
-    Sunrise,
-    Sunset,
-    Tablet,
-    Tag,
-    Target,
-    Terminal,
-    Thermometer,
-    ThumbsDown,
-    ThumbsUp,
-    ToggleLeft,
-    ToggleRight,
-    Trash,
-    Trash2,
-    TrendingDown,
-    TrendingUp,
-    Triangle,
-    Truck,
-    Tv,
-    Twitter,
-    Type,
-    Umbrella,
-    Underline,
-    Unlock,
-    Upload,
-    UploadCloud,
-    User,
-    UserCheck,
-    UserMinus,
-    UserPlus,
-    UserX,
-    Users,
-    Video,
-    VideoOff,
-    Voicemail,
-    Volume,
-    Volume1,
-    Volume2,
-    VolumeX,
-    Watch,
-    Wifi,
-    WifiOff,
-    Wind,
-    X,
-    XCircle,
-    XSquare,
-    Youtube,
-    Zap,
-    ZapOff,
-    ZoomIn,
-    ZoomOut,
-};
-
-export {
-    icons as default,
-    Activity,
-    Airplay,
-    AlertCircle,
-    AlertOctagon,
-    AlertTriangle,
-    AlignCenter,
-    AlignJustify,
-    AlignLeft,
-    AlignRight,
-    Anchor,
-    Aperture,
-    Archive,
-    ArrowDown,
-    ArrowDownCircle,
-    ArrowDownLeft,
-    ArrowDownRight,
-    ArrowLeft,
-    ArrowLeftCircle,
-    ArrowRight,
-    ArrowRightCircle,
-    ArrowUp,
-    ArrowUpCircle,
-    ArrowUpLeft,
-    ArrowUpRight,
-    AtSign,
-    Award,
-    BarChart,
-    BarChart2,
-    Battery,
-    BatteryCharging,
-    Bell,
-    BellOff,
-    Bluetooth,
-    Bold,
-    Book,
-    BookOpen,
-    Bookmark,
-    Box,
-    Briefcase,
-    Calendar,
-    Camera,
-    CameraOff,
-    Cast,
-    Check,
-    CheckCircle,
-    CheckSquare,
-    ChevronDown,
-    ChevronLeft,
-    ChevronRight,
-    ChevronUp,
-    ChevronsDown,
-    ChevronsLeft,
-    ChevronsRight,
-    ChevronsUp,
-    Chrome,
-    Circle,
-    Clipboard,
-    Clock,
-    Cloud,
-    CloudDrizzle,
-    CloudLightning,
-    CloudOff,
-    CloudRain,
-    CloudSnow,
-    Code,
-    Codepen,
-    Command,
-    Compass,
-    Copy,
-    CornerDownLeft,
-    CornerDownRight,
-    CornerLeftDown,
-    CornerLeftUp,
-    CornerRightDown,
-    CornerRightUp,
-    CornerUpLeft,
-    CornerUpRight,
-    Cpu,
-    CreditCard,
-    Crop,
-    Crosshair,
-    Database,
-    Delete,
-    Disc,
-    DollarSign,
-    Download,
-    DownloadCloud,
-    Droplet,
-    Edit,
-    Edit2,
-    Edit3,
-    ExternalLink,
-    Eye,
-    EyeOff,
-    Facebook,
-    FastForward,
-    Feather,
-    File,
-    FileMinus,
-    FilePlus,
-    FileText,
-    Film,
-    Filter,
-    Flag,
-    Folder,
-    FolderMinus,
-    FolderPlus,
-    Gift,
-    GitBranch,
-    GitCommit,
-    GitMerge,
-    GitPullRequest,
-    Github,
-    Gitlab,
-    Globe,
-    Grid,
-    HardDrive,
-    Hash,
-    Headphones,
-    Heart,
-    HelpCircle,
-    Home,
-    Image,
-    Inbox,
-    Info,
-    Instagram,
-    Italic,
-    Layers,
-    Layout,
-    LifeBuoy,
-    Link,
-    Link2,
-    Linkedin,
-    List,
-    Loader,
-    Lock,
-    LogIn,
-    LogOut,
-    Mail,
-    Map,
-    MapPin,
-    Maximize,
-    Maximize2,
-    Menu,
-    MessageCircle,
-    MessageSquare,
-    Mic,
-    MicOff,
-    Minimize,
-    Minimize2,
-    Minus,
-    MinusCircle,
-    MinusSquare,
-    Monitor,
-    Moon,
-    MoreHorizontal,
-    MoreVertical,
-    Move,
-    Music,
-    Navigation,
-    Navigation2,
-    Octagon,
-    Package,
-    Paperclip,
-    Pause,
-    PauseCircle,
-    Percent,
-    Phone,
-    PhoneCall,
-    PhoneForwarded,
-    PhoneIncoming,
-    PhoneMissed,
-    PhoneOff,
-    PhoneOutgoing,
-    PieChart,
-    Play,
-    PlayCircle,
-    Plus,
-    PlusCircle,
-    PlusSquare,
-    Pocket,
-    Power,
-    Printer,
-    Radio,
-    RefreshCcw,
-    RefreshCw,
-    Repeat,
-    Rewind,
-    RotateCcw,
-    RotateCw,
-    Rss,
-    Save,
-    Scissors,
-    Search,
-    Send,
-    Server,
-    Settings,
-    Share,
-    Share2,
-    Shield,
-    ShieldOff,
-    ShoppingBag,
-    ShoppingCart,
-    Shuffle,
-    Sidebar,
-    SkipBack,
-    SkipForward,
-    Slack,
-    Slash,
-    Sliders,
-    Smartphone,
-    Speaker,
-    Square,
-    Star,
-    StopCircle,
-    Sun,
-    Sunrise,
-    Sunset,
-    Tablet,
-    Tag,
-    Target,
-    Terminal,
-    Thermometer,
-    ThumbsDown,
-    ThumbsUp,
-    ToggleLeft,
-    ToggleRight,
-    Trash,
-    Trash2,
-    TrendingDown,
-    TrendingUp,
-    Triangle,
-    Truck,
-    Tv,
-    Twitter,
-    Type,
-    Umbrella,
-    Underline,
-    Unlock,
-    Upload,
-    UploadCloud,
-    User,
-    UserCheck,
-    UserMinus,
-    UserPlus,
-    UserX,
-    Users,
-    Video,
-    VideoOff,
-    Voicemail,
-    Volume,
-    Volume1,
-    Volume2,
-    VolumeX,
-    Watch,
-    Wifi,
-    WifiOff,
-    Wind,
-    X,
-    XCircle,
-    XSquare,
-    Youtube,
-    Zap,
-    ZapOff,
-    ZoomIn,
-    ZoomOut,
-};
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Activity.js b/src/app/components/common-ui/Icon/Feather/svgs/Activity.js
deleted file mode 100644
index e230ca80..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Activity.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Activity
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M938.667 469.333h-170.667c-17.067 0-34.133 12.8-38.4 29.867l-89.6 260.267-217.6-644.267c-4.267-17.067-21.333-29.867-38.4-29.867s-34.133 12.8-38.4 29.867l-119.467 354.133h-140.8c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h170.667c17.067 0 34.133-12.8 38.4-29.867l89.6-260.267 217.6 648.533c4.267 17.067 21.333 29.867 38.4 29.867s34.133-12.8 38.4-29.867l119.467-354.133h140.8c25.6 0 42.667-17.067 42.667-42.667s-17.067-46.933-42.667-46.933z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Airplay.js b/src/app/components/common-ui/Icon/Feather/svgs/Airplay.js
deleted file mode 100644
index 2cddf1ee..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Airplay.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Airplay
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 85.333h-682.667c-72.533 0-128 55.467-128 128v426.667c0 72.533 55.467 128 128 128h42.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-42.667c-25.6 0-42.667-17.067-42.667-42.667v-426.667c0-25.6 17.067-42.667 42.667-42.667h682.667c25.6 0 42.667 17.067 42.667 42.667v426.667c0 25.6-17.067 42.667-42.667 42.667h-42.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h42.667c72.533 0 128-55.467 128-128v-426.667c0-72.533-55.467-128-128-128z' />
-            <path d='M546.133 614.4c-17.067-21.333-51.2-21.333-64 0l-213.333 256c-8.533 12.8-12.8 29.867-4.267 46.933 4.267 12.8 17.067 21.333 34.133 21.333h426.667c17.067 0 29.867-8.533 38.4-25.6s4.267-34.133-4.267-46.933l-213.333-251.733zM388.267 853.333l123.733-145.067 123.733 145.067h-247.467z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/AlertCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/AlertCircle.js
deleted file mode 100644
index c8a9eff1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/AlertCircle.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.AlertCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M512 298.667c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M482.133 652.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/AlertOctagon.js b/src/app/components/common-ui/Icon/Feather/svgs/AlertOctagon.js
deleted file mode 100644
index ed61ca67..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/AlertOctagon.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.AlertOctagon
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M968.533 307.2l-251.733-251.733c-4.267-8.533-17.067-12.8-29.867-12.8h-349.867c-12.8 0-25.6 4.267-29.867 12.8l-251.733 251.733c-8.533 4.267-12.8 17.067-12.8 29.867v354.133c0 12.8 4.267 21.333 12.8 29.867l251.733 251.733c4.267 4.267 17.067 8.533 29.867 8.533h354.133c12.8 0 21.333-4.267 29.867-12.8l251.733-251.733c8.533-8.533 12.8-17.067 12.8-29.867v-349.867c-4.267-12.8-8.533-25.6-17.067-29.867zM896 669.867l-226.133 226.133h-315.733l-226.133-226.133v-315.733l226.133-226.133h320l221.867 226.133v315.733z' />
-            <path d='M512 298.667c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M482.133 652.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/AlertTriangle.js b/src/app/components/common-ui/Icon/Feather/svgs/AlertTriangle.js
deleted file mode 100644
index 493d85c6..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/AlertTriangle.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.AlertTriangle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 746.667l-358.4-605.867c-17.067-29.867-46.933-51.2-81.067-59.733s-68.267-4.267-98.133 12.8c-17.067 8.533-34.133 25.6-42.667 42.667 0 0 0 0 0 0l-358.4 610.133c-34.133 59.733-12.8 140.8 46.933 174.933 17.067 12.8 38.4 17.067 59.733 17.067h725.333c34.133 0 68.267-12.8 89.6-38.4 25.6-25.6 38.4-55.467 38.4-89.6-4.267-21.333-8.533-46.933-21.333-64zM904.533 840.533c-8.533 8.533-21.333 12.8-29.867 12.8h-725.333c-8.533 0-12.8 0-21.333-4.267-21.333-12.8-25.6-38.4-17.067-59.733l362.667-601.6c4.267-4.267 8.533-12.8 12.8-12.8 21.333-12.8 46.933-4.267 59.733 12.8l362.667 601.6c4.267 4.267 4.267 12.8 4.267 21.333 4.267 12.8-4.267 21.333-8.533 29.867z' />
-            <path d='M512 341.333c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M482.133 695.467c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/AlignCenter.js b/src/app/components/common-ui/Icon/Feather/svgs/AlignCenter.js
deleted file mode 100644
index e9513769..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/AlignCenter.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.AlignCenter
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M256 384c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h512c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-512z' />
-            <path d='M128 298.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M896 554.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M768 725.333h-512c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h512c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/AlignJustify.js b/src/app/components/common-ui/Icon/Feather/svgs/AlignJustify.js
deleted file mode 100644
index 8a9dc822..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/AlignJustify.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.AlignJustify
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 384h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M128 298.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M896 554.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M896 725.333h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/AlignLeft.js b/src/app/components/common-ui/Icon/Feather/svgs/AlignLeft.js
deleted file mode 100644
index f960e9d1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/AlignLeft.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.AlignLeft
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M128 469.333h597.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M128 298.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M896 554.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M725.333 725.333h-597.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/AlignRight.js b/src/app/components/common-ui/Icon/Feather/svgs/AlignRight.js
deleted file mode 100644
index 0d1014ed..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/AlignRight.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.AlignRight
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 384h-597.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M128 298.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M896 554.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M896 725.333h-597.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Anchor.js b/src/app/components/common-ui/Icon/Feather/svgs/Anchor.js
deleted file mode 100644
index 04217c2a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Anchor.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Anchor
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M938.667 469.333h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h81.067c-21.333 179.2-162.133 320-337.067 337.067v-512c72.533-17.067 128-85.333 128-166.4 0-93.867-76.8-170.667-170.667-170.667s-170.667 76.8-170.667 170.667c0 81.067 55.467 145.067 128 166.4v516.267c-179.2-21.333-320-162.133-337.067-337.067h81.067c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-128c-25.6 0-42.667 17.067-42.667 42.667 0 260.267 209.067 469.333 469.333 469.333s469.333-209.067 469.333-469.333c0-29.867-17.067-46.933-42.667-46.933zM426.667 213.333c0-46.933 38.4-85.333 85.333-85.333s85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333c-46.933 0-85.333-38.4-85.333-85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Aperture.js b/src/app/components/common-ui/Icon/Feather/svgs/Aperture.js
deleted file mode 100644
index fcf71daf..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Aperture.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Aperture
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M891.733 785.067c55.467-76.8 89.6-170.667 89.6-273.067 0-64-12.8-128-38.4-183.467 0 0 0-4.267 0-4.267-64-149.333-204.8-256-375.467-277.333 0 0-4.267 0-4.267 0-17.067-4.267-34.133-4.267-51.2-4.267-153.6 0-290.133 72.533-375.467 187.733 0 4.267-4.267 4.267-4.267 8.533-55.467 76.8-89.6 170.667-89.6 273.067 0 64 12.8 128 38.4 187.733 0 0 0 4.267 0 4.267 64 145.067 204.8 256 371.2 277.333 0 0 4.267 0 4.267 0 17.067 0 34.133 4.267 51.2 4.267 153.6 0 290.133-72.533 375.467-187.733 4.267-4.267 8.533-8.533 8.533-12.8zM584.533 640h-149.333l-72.533-128 72.533-128h149.333l72.533 128-72.533 128zM128 512c0-59.733 12.8-119.467 38.4-170.667l170.667 298.667h-187.733c-12.8-38.4-21.333-81.067-21.333-128zM682.667 384h187.733c12.8 38.4 21.333 81.067 21.333 128 0 59.733-12.8 119.467-38.4 170.667l-170.667-298.667zM832 298.667h-345.6l93.867-162.133c106.667 17.067 196.267 76.8 251.733 162.133zM486.4 128l-170.667 298.667-93.867-162.133c64-76.8 157.867-128 264.533-136.533zM192 725.333h345.6l-93.867 162.133c-106.667-17.067-196.267-76.8-251.733-162.133zM537.6 896l170.667-298.667 93.867 162.133c-64 76.8-157.867 128-264.533 136.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Archive.js b/src/app/components/common-ui/Icon/Feather/svgs/Archive.js
deleted file mode 100644
index c457f906..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Archive.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Archive
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 85.333h-938.667c-25.6 0-42.667 17.067-42.667 42.667v213.333c0 25.6 17.067 42.667 42.667 42.667h42.667v512c0 25.6 17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667v-512h42.667c25.6 0 42.667-17.067 42.667-42.667v-213.333c0-25.6-17.067-42.667-42.667-42.667zM853.333 853.333h-682.667v-469.333h682.667v469.333zM938.667 298.667h-853.333v-128h853.333v128z' />
-            <path d='M426.667 554.667h170.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-170.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowDown.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowDown.js
deleted file mode 100644
index e7d358a4..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowDown.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ArrowDown
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M840.533 482.133c-17.067-17.067-42.667-17.067-59.733 0l-226.133 226.133v-494.933c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v494.933l-226.133-226.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l298.667 298.667c4.267 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.8 4.267 17.067 4.267s12.8 0 17.067-4.267c4.267-4.267 8.533-4.267 12.8-8.533l298.667-298.667c17.067-17.067 17.067-42.667-0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowDownCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowDownCircle.js
deleted file mode 100644
index 1024c04c..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowDownCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ArrowDownCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M652.8 482.133l-98.133 98.133v-238.933c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v238.933l-98.133-98.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l170.667 170.667c4.267 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.8 4.267 17.067 4.267s12.8 0 17.067-4.267c4.267-4.267 8.533-4.267 12.8-8.533l170.667-170.667c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowDownLeft.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowDownLeft.js
deleted file mode 100644
index 31c8f00a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowDownLeft.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ArrowDownLeft
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M725.333 682.667h-324.267l354.133-354.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-354.133 354.133v-324.267c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v426.667c0 4.267 0 12.8 4.267 17.067 4.267 8.533 12.8 17.067 21.333 21.333 4.267 4.267 12.8 4.267 17.067 4.267h426.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowDownRight.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowDownRight.js
deleted file mode 100644
index 06b54a4f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowDownRight.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ArrowDownRight
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 298.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v324.267l-354.133-354.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l354.133 354.133h-324.267c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h426.667c4.267 0 12.8 0 17.067-4.267 8.533-4.267 17.067-12.8 21.333-21.333 4.267-4.267 4.267-12.8 4.267-17.067v-426.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowLeft.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowLeft.js
deleted file mode 100644
index f400016f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowLeft.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ArrowLeft
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 469.333h-494.933l226.133-226.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-298.667 298.667c-4.267 4.267-8.533 8.533-8.533 12.8-4.267 8.533-4.267 21.333 0 34.133 4.267 4.267 4.267 8.533 8.533 12.8l298.667 298.667c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-226.133-226.133h494.933c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowLeftCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowLeftCircle.js
deleted file mode 100644
index ba54bf97..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowLeftCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ArrowLeftCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M682.667 469.333h-238.933l98.133-98.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-170.667 170.667c-4.267 4.267-8.533 8.533-8.533 12.8-4.267 8.533-4.267 21.333 0 34.133 4.267 4.267 4.267 8.533 8.533 12.8l170.667 170.667c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-98.133-98.133h238.933c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowRight.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowRight.js
deleted file mode 100644
index 81f60d37..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowRight.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ArrowRight
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M849.067 529.067c4.267-8.533 4.267-21.333 0-34.133-4.267-4.267-4.267-8.533-8.533-12.8l-298.667-298.667c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l226.133 226.133h-494.933c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h494.933l-226.133 226.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l298.667-298.667c4.267-4.267 8.533-8.533 8.533-12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowRightCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowRightCircle.js
deleted file mode 100644
index fdcf9940..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowRightCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ArrowRightCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M721.067 494.933c-4.267-4.267-4.267-8.533-8.533-12.8l-170.667-170.667c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l98.133 98.133h-238.933c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h238.933l-98.133 98.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l170.667-170.667c4.267-4.267 8.533-8.533 8.533-12.8 4.267-12.8 4.267-21.333 0-34.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowUp.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowUp.js
deleted file mode 100644
index efd1435a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowUp.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ArrowUp
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M840.533 482.133l-298.667-298.667c-4.267-4.267-8.533-8.533-12.8-8.533-8.533-4.267-21.333-4.267-34.133 0-4.267 4.267-8.533 4.267-12.8 8.533l-298.667 298.667c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l226.133-226.133v494.933c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-494.933l226.133 226.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowUpCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowUpCircle.js
deleted file mode 100644
index b352c433..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowUpCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ArrowUpCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M541.867 311.467c-4.267-4.267-8.533-8.533-12.8-8.533-8.533-4.267-21.333-4.267-34.133 0-4.267 4.267-8.533 4.267-12.8 8.533l-170.667 170.667c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l98.133-98.133v238.933c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-238.933l98.133 98.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-170.667-170.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowUpLeft.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowUpLeft.js
deleted file mode 100644
index f6bf2db1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowUpLeft.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ArrowUpLeft
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M401.067 341.333h324.267c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-426.667c-4.267 0-12.8 0-17.067 4.267-8.533 4.267-17.067 12.8-21.333 21.333-4.267 4.267-4.267 12.8-4.267 17.067v426.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-324.267l354.133 354.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-354.133-354.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ArrowUpRight.js b/src/app/components/common-ui/Icon/Feather/svgs/ArrowUpRight.js
deleted file mode 100644
index 683734d2..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ArrowUpRight.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ArrowUpRight
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M763.733 281.6c-4.267-8.533-12.8-17.067-21.333-21.333-4.267-4.267-12.8-4.267-17.067-4.267h-426.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h324.267l-354.133 354.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l354.133-354.133v324.267c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-426.667c0-4.267 0-12.8-4.267-17.067z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/AtSign.js b/src/app/components/common-ui/Icon/Feather/svgs/AtSign.js
deleted file mode 100644
index 3692f957..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/AtSign.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.AtSign
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-123.733 0-243.2 46.933-332.8 136.533s-136.533 209.067-136.533 332.8c0 260.267 209.067 469.333 469.333 469.333 102.4 0 204.8-34.133 285.867-98.133 17.067-12.8 21.333-42.667 8.533-59.733s-42.667-21.333-59.733-8.533c-68.267 51.2-149.333 81.067-234.667 81.067-213.333 0-384-170.667-384-384 0-102.4 38.4-200.533 110.933-273.067s170.667-110.933 273.067-110.933c213.333 0 384 170.667 384 384v42.667c0 46.933-38.4 85.333-85.333 85.333s-85.333-38.4-85.333-85.333v-213.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v0c-34.133-25.6-81.067-42.667-128-42.667-119.467 0-213.333 93.867-213.333 213.333s93.867 213.333 213.333 213.333c64 0 119.467-29.867 157.867-72.533 29.867 42.667 81.067 72.533 140.8 72.533 93.867 0 170.667-76.8 170.667-170.667v-42.667c0-260.267-209.067-469.333-469.333-469.333zM512 640c-72.533 0-128-55.467-128-128s55.467-128 128-128 128 55.467 128 128-55.467 128-128 128z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Award.js b/src/app/components/common-ui/Icon/Feather/svgs/Award.js
deleted file mode 100644
index 721b8e04..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Award.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Award
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 341.333c0-187.733-153.6-341.333-341.333-341.333s-341.333 153.6-341.333 341.333c0 110.933 51.2 209.067 132.267 268.8l-46.933 366.933c-4.267 17.067 4.267 34.133 17.067 42.667s29.867 8.533 46.933 0l192-115.2 192 115.2c4.267 4.267 12.8 4.267 21.333 4.267s17.067-4.267 21.333-8.533 21.333-25.6 17.067-42.667l-46.933-362.667c85.333-59.733 136.533-157.867 136.533-268.8zM256 341.333c0-140.8 115.2-256 256-256s256 115.2 256 256-115.2 256-256 256-256-115.2-256-256zM669.867 900.267l-136.533-81.067c-12.8-8.533-29.867-8.533-42.667 0l-136.533 81.067 29.867-243.2c38.4 17.067 81.067 25.6 128 25.6s89.6-8.533 128-25.6l29.867 243.2z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/BarChart.js b/src/app/components/common-ui/Icon/Feather/svgs/BarChart.js
deleted file mode 100644
index dcb9e64d..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/BarChart.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.BarChart
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 384c-25.6 0-42.667 17.067-42.667 42.667v426.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-426.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M768 128c-25.6 0-42.667 17.067-42.667 42.667v682.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-682.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M256 640c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/BarChart2.js b/src/app/components/common-ui/Icon/Feather/svgs/BarChart2.js
deleted file mode 100644
index 6ce3ef59..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/BarChart2.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.BarChart2
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 384c-25.6 0-42.667 17.067-42.667 42.667v426.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-426.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M512 128c-25.6 0-42.667 17.067-42.667 42.667v682.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-682.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M256 554.667c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Battery.js b/src/app/components/common-ui/Icon/Feather/svgs/Battery.js
deleted file mode 100644
index 79ba5bae..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Battery.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Battery
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M725.333 213.333h-597.333c-72.533 0-128 55.467-128 128v341.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-341.333c0-72.533-55.467-128-128-128zM768 682.667c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-341.333c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v341.333z' />
-            <path d='M981.333 426.667c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/BatteryCharging.js b/src/app/components/common-ui/Icon/Feather/svgs/BatteryCharging.js
deleted file mode 100644
index e81fb7c2..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/BatteryCharging.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.BatteryCharging
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M213.333 725.333h-85.333c-25.6 0-42.667-17.067-42.667-42.667v-341.333c0-25.6 17.067-42.667 42.667-42.667h136.533c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-136.533c-72.533 0-128 55.467-128 128v341.333c0 72.533 55.467 128 128 128h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M725.333 213.333h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333c25.6 0 42.667 17.067 42.667 42.667v341.333c0 25.6-17.067 42.667-42.667 42.667h-136.533c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h136.533c72.533 0 128-55.467 128-128v-341.333c0-72.533-55.467-128-128-128z' />
-            <path d='M981.333 426.667c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M593.067 490.667c-8.533-12.8-21.333-21.333-38.4-21.333h-174.933l128-187.733c12.8-21.333 8.533-46.933-12.8-59.733s-46.933-8.533-59.733 12.8l-170.667 256c-8.533 12.8-8.533 29.867 0 42.667 4.267 12.8 17.067 21.333 34.133 21.333h174.933l-128 187.733c-12.8 21.333-8.533 46.933 12.8 59.733 8.533 4.267 17.067 8.533 25.6 8.533 12.8 0 25.6-8.533 34.133-17.067l170.667-256c8.533-17.067 12.8-29.867 4.267-46.933z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Bell.js b/src/app/components/common-ui/Icon/Feather/svgs/Bell.js
deleted file mode 100644
index 9e68ae8a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Bell.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Bell
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M605.867 857.6c-21.333-12.8-46.933-4.267-59.733 17.067s-38.4 25.6-59.733 17.067c-8.533-4.267-12.8-8.533-17.067-17.067-12.8-21.333-38.4-25.6-59.733-17.067-21.333 12.8-25.6 38.4-17.067 59.733 12.8 21.333 25.6 34.133 46.933 46.933s42.667 17.067 64 17.067c42.667 0 85.333-21.333 110.933-64 21.333-21.333 12.8-46.933-8.533-59.733z' />
-            <path d='M938.667 682.667c-46.933 0-85.333-38.4-85.333-85.333v-213.333c0-187.733-153.6-341.333-341.333-341.333s-341.333 153.6-341.333 341.333v213.333c0 46.933-38.4 85.333-85.333 85.333-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h853.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667zM234.667 682.667c12.8-25.6 21.333-55.467 21.333-85.333v-213.333c0-140.8 115.2-256 256-256s256 115.2 256 256v213.333c0 29.867 8.533 59.733 21.333 85.333h-554.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/BellOff.js b/src/app/components/common-ui/Icon/Feather/svgs/BellOff.js
deleted file mode 100644
index b41b54a9..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/BellOff.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.BellOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M605.867 857.6c-21.333-12.8-46.933-4.267-59.733 17.067s-38.4 25.6-59.733 17.067c-8.533-4.267-12.8-8.533-17.067-17.067-12.8-21.333-38.4-25.6-59.733-17.067-21.333 12.8-25.6 38.4-17.067 59.733 12.8 21.333 25.6 34.133 46.933 46.933s42.667 17.067 64 17.067c42.667 0 85.333-21.333 110.933-64 21.333-21.333 12.8-46.933-8.533-59.733z' />
-            <path d='M388.267 162.133c123.733-68.267 277.333-25.6 349.867 98.133 17.067 34.133 29.867 81.067 29.867 123.733v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667c0-59.733-17.067-115.2-42.667-166.4-93.867-162.133-302.933-221.867-465.067-128-21.333 8.533-29.867 34.133-17.067 55.467s38.4 25.6 59.733 17.067z' />
-            <path d='M1011.2 951.467l-256-256c0 0 0 0 0 0l-682.667-682.667c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l183.467 183.467c-17.067 42.667-25.6 85.333-25.6 128v213.333c0 46.933-38.4 85.333-85.333 85.333-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h622.933l243.2 243.2c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733zM234.667 682.667c12.8-25.6 21.333-55.467 21.333-85.333v-213.333c0-21.333 4.267-42.667 8.533-59.733l358.4 358.4h-388.267z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Bluetooth.js b/src/app/components/common-ui/Icon/Feather/svgs/Bluetooth.js
deleted file mode 100644
index ff0ee10e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Bluetooth.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Bluetooth
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M571.733 512l204.8-204.8c17.067-17.067 17.067-42.667 0-59.733l-234.667-234.667c-12.8-12.8-29.867-17.067-46.933-8.533-17.067 4.267-25.6 21.333-25.6 38.4v366.933l-162.133-162.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l204.8 204.8-204.8 204.8c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l162.133-162.133v366.933c0 17.067 8.533 34.133 25.6 38.4 4.267 4.267 12.8 4.267 17.067 4.267 12.8 0 21.333-4.267 29.867-12.8l234.667-234.667c17.067-17.067 17.067-42.667 0-59.733l-204.8-204.8zM554.667 145.067l132.267 132.267-132.267 132.267v-264.533zM554.667 878.933v-264.533l132.267 132.267-132.267 132.267z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Bold.js b/src/app/components/common-ui/Icon/Feather/svgs/Bold.js
deleted file mode 100644
index 8de3cb72..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Bold.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Bold
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M742.4 494.933c42.667-38.4 68.267-93.867 68.267-153.6 0-119.467-93.867-213.333-213.333-213.333h-341.333c-25.6 0-42.667 17.067-42.667 42.667v682.667c0 25.6 17.067 42.667 42.667 42.667h384c119.467 0 213.333-93.867 213.333-213.333 0-81.067-46.933-149.333-110.933-187.733zM298.667 213.333h298.667c72.533 0 128 55.467 128 128s-55.467 128-128 128h-298.667v-256zM640 810.667h-341.333v-256h341.333c72.533 0 128 55.467 128 128s-55.467 128-128 128z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Book.js b/src/app/components/common-ui/Icon/Feather/svgs/Book.js
deleted file mode 100644
index ac666c80..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Book.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Book
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 42.667h-576c-81.067 0-149.333 68.267-149.333 149.333v640c0 81.067 68.267 149.333 149.333 149.333h576c25.6 0 42.667-17.067 42.667-42.667v-853.333c0-25.6-17.067-42.667-42.667-42.667zM277.333 128h533.333v554.667h-533.333c-21.333 0-42.667 4.267-64 17.067v-507.733c0-34.133 29.867-64 64-64zM277.333 896c-34.133 0-64-29.867-64-64s29.867-64 64-64h533.333v128h-533.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/BookOpen.js b/src/app/components/common-ui/Icon/Feather/svgs/BookOpen.js
deleted file mode 100644
index c648f409..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/BookOpen.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.BookOpen
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M938.667 85.333h-256c-68.267 0-132.267 34.133-170.667 85.333-38.4-51.2-102.4-85.333-170.667-85.333h-256c-25.6 0-42.667 17.067-42.667 42.667v640c0 25.6 17.067 42.667 42.667 42.667h298.667c46.933 0 85.333 38.4 85.333 85.333 0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667c0-46.933 38.4-85.333 85.333-85.333h298.667c25.6 0 42.667-17.067 42.667-42.667v-640c0-25.6-17.067-42.667-42.667-42.667zM469.333 746.667c-25.6-12.8-55.467-21.333-85.333-21.333h-256v-554.667h213.333c72.533 0 128 55.467 128 128v448zM896 725.333h-256c-29.867 0-59.733 8.533-85.333 21.333v-448c0-72.533 55.467-128 128-128h213.333v554.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Bookmark.js b/src/app/components/common-ui/Icon/Feather/svgs/Bookmark.js
deleted file mode 100644
index 5ec24f75..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Bookmark.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Bookmark
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M725.333 85.333h-426.667c-72.533 0-128 55.467-128 128v682.667c0 17.067 8.533 29.867 21.333 38.4s29.867 4.267 42.667-4.267l273.067-196.267 273.067 196.267c8.533 4.267 17.067 8.533 25.6 8.533s12.8 0 21.333-4.267c12.8-8.533 21.333-21.333 21.333-38.4v-682.667c4.267-72.533-51.2-128-123.733-128zM768 814.933l-230.4-166.4c-8.533-4.267-17.067-8.533-25.6-8.533s-17.067 4.267-25.6 8.533l-230.4 166.4v-601.6c0-25.6 17.067-42.667 42.667-42.667h426.667c25.6 0 42.667 17.067 42.667 42.667v601.6z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Box.js b/src/app/components/common-ui/Icon/Feather/svgs/Box.js
deleted file mode 100644
index 46ab86fc..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Box.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Box
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M908.8 196.267l-341.333-170.667c0 0 0 0 0 0-34.133-17.067-76.8-17.067-115.2 0l-341.333 170.667c-42.667 21.333-68.267 64-68.267 110.933v405.333c0 46.933 25.6 93.867 72.533 115.2l341.333 170.667c17.067 8.533 38.4 12.8 55.467 12.8 21.333 0 38.4-4.267 55.467-12.8l341.333-170.667c42.667-21.333 72.533-64 72.533-115.2v-405.333c0-46.933-25.6-89.6-72.533-110.933zM494.933 98.133c4.267-4.267 12.8-4.267 17.067-4.267 8.533 0 12.8 0 17.067 4.267l315.733 157.867-332.8 166.4-332.8-166.4 315.733-157.867zM149.333 755.2c-12.8-8.533-21.333-25.6-21.333-38.4v-392.533l341.333 170.667v418.133l-320-157.867zM870.4 755.2l-315.733 157.867v-418.133l341.333-170.667v392.533c0 17.067-8.533 29.867-25.6 38.4z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Briefcase.js b/src/app/components/common-ui/Icon/Feather/svgs/Briefcase.js
deleted file mode 100644
index 7d77d878..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Briefcase.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Briefcase
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 256h-128v-42.667c0-72.533-55.467-128-128-128h-170.667c-72.533 0-128 55.467-128 128v42.667h-128c-72.533 0-128 55.467-128 128v426.667c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-426.667c0-72.533-55.467-128-128-128zM384 213.333c0-25.6 17.067-42.667 42.667-42.667h170.667c25.6 0 42.667 17.067 42.667 42.667v42.667h-256v-42.667zM640 341.333v512h-256v-512h256zM128 810.667v-426.667c0-25.6 17.067-42.667 42.667-42.667h128v512h-128c-25.6 0-42.667-17.067-42.667-42.667zM896 810.667c0 25.6-17.067 42.667-42.667 42.667h-128v-512h128c25.6 0 42.667 17.067 42.667 42.667v426.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Calendar.js b/src/app/components/common-ui/Icon/Feather/svgs/Calendar.js
deleted file mode 100644
index cab025ac..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Calendar.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Calendar
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 128h-85.333v-42.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v42.667h-256v-42.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v42.667h-85.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128zM213.333 213.333h85.333v42.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-42.667h256v42.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-42.667h85.333c25.6 0 42.667 17.067 42.667 42.667v128h-682.667v-128c0-25.6 17.067-42.667 42.667-42.667zM810.667 896h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-384h682.667v384c0 25.6-17.067 42.667-42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Camera.js b/src/app/components/common-ui/Icon/Feather/svgs/Camera.js
deleted file mode 100644
index 07b97553..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Camera.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Camera
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 213.333h-149.333l-72.533-110.933c-8.533-8.533-21.333-17.067-34.133-17.067h-256c-12.8 0-25.6 8.533-34.133 17.067l-72.533 110.933h-149.333c-72.533 0-128 55.467-128 128v469.333c0 72.533 55.467 128 128 128h768c72.533 0 128-55.467 128-128v-469.333c0-72.533-55.467-128-128-128zM938.667 810.667c0 25.6-17.067 42.667-42.667 42.667h-768c-25.6 0-42.667-17.067-42.667-42.667v-469.333c0-25.6 17.067-42.667 42.667-42.667h170.667c12.8 0 25.6-8.533 34.133-17.067l72.533-110.933h209.067l72.533 110.933c12.8 8.533 25.6 17.067 38.4 17.067h170.667c25.6 0 42.667 17.067 42.667 42.667v469.333z' />
-            <path d='M512 341.333c-119.467 0-213.333 93.867-213.333 213.333s93.867 213.333 213.333 213.333 213.333-93.867 213.333-213.333-93.867-213.333-213.333-213.333zM512 682.667c-72.533 0-128-55.467-128-128s55.467-128 128-128 128 55.467 128 128-55.467 128-128 128z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CameraOff.js b/src/app/components/common-ui/Icon/Feather/svgs/CameraOff.js
deleted file mode 100644
index d46c86bf..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CameraOff.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.CameraOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M925.867 866.133c0 0 0 0 0 0l-640-640c0 0 0 0 0 0l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l140.8 140.8h-25.6c-72.533 0-128 55.467-128 128v469.333c0 72.533 55.467 128 128 128h750.933l72.533 72.533c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-85.333-85.333zM405.333 482.133c4.267-4.267 4.267-4.267 8.533-8.533l179.2 179.2c-17.067 12.8-38.4 25.6-59.733 29.867-34.133 4.267-68.267 0-93.867-21.333-29.867-21.333-46.933-46.933-55.467-81.067-4.267-34.133 4.267-68.267 21.333-98.133zM128 853.333c-25.6 0-42.667-17.067-42.667-42.667v-469.333c0-25.6 17.067-42.667 42.667-42.667h110.933l115.2 115.2c-8.533 8.533-12.8 12.8-17.067 21.333-34.133 46.933-42.667 102.4-34.133 157.867s42.667 106.667 89.6 136.533c34.133 25.6 76.8 38.4 119.467 38.4 12.8 0 25.6 0 38.4-4.267 38.4-8.533 72.533-25.6 102.4-51.2l140.8 140.8h-665.6z' />
-            <path d='M896 213.333h-149.333l-72.533-110.933c-8.533-8.533-21.333-17.067-34.133-17.067h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h234.667l72.533 110.933c8.533 8.533 21.333 17.067 34.133 17.067h170.667c25.6 0 42.667 17.067 42.667 42.667v396.8c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-396.8c0-72.533-55.467-128-128-128z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Cast.js b/src/app/components/common-ui/Icon/Feather/svgs/Cast.js
deleted file mode 100644
index 8c9229de..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Cast.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.Cast
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M93.867 644.267c-21.333-4.267-46.933 12.8-51.2 34.133s8.533 46.933 34.133 51.2c68.267 12.8 119.467 64 132.267 132.267 4.267 21.333 21.333 34.133 42.667 34.133 4.267 0 4.267 0 8.533 0 21.333-4.267 38.4-25.6 34.133-51.2-21.333-102.4-98.133-179.2-200.533-200.533z' />
-            <path d='M853.333 128h-682.667c-72.533 0-128 55.467-128 128v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6 17.067-42.667 42.667-42.667h682.667c25.6 0 42.667 17.067 42.667 42.667v512c0 25.6-17.067 42.667-42.667 42.667h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c72.533 0 128-55.467 128-128v-512c0-72.533-55.467-128-128-128z' />
-            <path d='M89.6 473.6c-21.333-4.267-42.667 12.8-46.933 38.4-4.267 21.333 12.8 42.667 38.4 46.933 157.867 17.067 281.6 140.8 302.933 302.933 0 17.067 17.067 34.133 38.4 34.133 0 0 4.267 0 4.267 0 21.333-4.267 38.4-25.6 38.4-46.933-21.333-200.533-174.933-354.133-375.467-375.467z' />
-            <path d='M55.467 823.467c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Check.js b/src/app/components/common-ui/Icon/Feather/svgs/Check.js
deleted file mode 100644
index 7a2c706a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Check.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Check
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M883.2 226.133c-17.067-17.067-42.667-17.067-59.733 0l-439.467 439.467-183.467-183.467c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l213.333 213.333c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l469.333-469.333c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CheckCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/CheckCircle.js
deleted file mode 100644
index 70b25de0..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CheckCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.CheckCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M938.667 430.933c-25.6 0-42.667 17.067-42.667 42.667v38.4c0 213.333-170.667 384-384 384 0 0 0 0 0 0-213.333 0-384-170.667-384-384s170.667-384 384-384c0 0 0 0 0 0 55.467 0 106.667 12.8 157.867 34.133 21.333 8.533 46.933 0 55.467-21.333s0-46.933-21.333-55.467c-59.733-25.6-123.733-42.667-192-42.667 0 0 0 0 0 0-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333c0 0 0 0 0 0 260.267 0 469.333-209.067 469.333-469.333v-38.4c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M413.867 439.467c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l128 128c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l426.667-426.667c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-396.8 396.8-98.133-98.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CheckSquare.js b/src/app/components/common-ui/Icon/Feather/svgs/CheckSquare.js
deleted file mode 100644
index 349e2d95..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CheckSquare.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.CheckSquare
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M968.533 140.8c-17.067-17.067-42.667-17.067-59.733 0l-396.8 396.8-98.133-98.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l128 128c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l426.667-426.667c17.067-17.067 17.067-42.667 0-59.733z' />
-            <path d='M896 469.333c-25.6 0-42.667 17.067-42.667 42.667v298.667c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h469.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-469.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-298.667c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ChevronDown.js b/src/app/components/common-ui/Icon/Feather/svgs/ChevronDown.js
deleted file mode 100644
index c573d874..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ChevronDown.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ChevronDown
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M797.867 354.133c-17.067-17.067-42.667-17.067-59.733 0l-226.133 226.133-226.133-226.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l256 256c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l256-256c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ChevronLeft.js b/src/app/components/common-ui/Icon/Feather/svgs/ChevronLeft.js
deleted file mode 100644
index 99a1f8dd..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ChevronLeft.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ChevronLeft
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M443.733 512l226.133-226.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-256 256c-17.067 17.067-17.067 42.667 0 59.733l256 256c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-226.133-226.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ChevronRight.js b/src/app/components/common-ui/Icon/Feather/svgs/ChevronRight.js
deleted file mode 100644
index 38f0463b..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ChevronRight.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ChevronRight
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M669.867 482.133l-256-256c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l226.133 226.133-226.133 226.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l256-256c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ChevronUp.js b/src/app/components/common-ui/Icon/Feather/svgs/ChevronUp.js
deleted file mode 100644
index e4975625..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ChevronUp.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ChevronUp
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M797.867 610.133l-256-256c-17.067-17.067-42.667-17.067-59.733 0l-256 256c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l226.133-226.133 226.133 226.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ChevronsDown.js b/src/app/components/common-ui/Icon/Feather/svgs/ChevronsDown.js
deleted file mode 100644
index 672681d4..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ChevronsDown.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ChevronsDown
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M695.467 524.8l-183.467 183.467-183.467-183.467c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l213.333 213.333c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l213.333-213.333c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733-0z' />
-            <path d='M482.133 499.2c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l213.333-213.333c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-183.467 183.467-183.467-183.467c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l213.333 213.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ChevronsLeft.js b/src/app/components/common-ui/Icon/Feather/svgs/ChevronsLeft.js
deleted file mode 100644
index ded8028e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ChevronsLeft.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ChevronsLeft
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M315.733 512l183.467-183.467c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-213.333 213.333c-17.067 17.067-17.067 42.667 0 59.733l213.333 213.333c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-183.467-183.467z' />
-            <path d='M614.4 512l183.467-183.467c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-213.333 213.333c-17.067 17.067-17.067 42.667 0 59.733l213.333 213.333c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-183.467-183.467z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ChevronsRight.js b/src/app/components/common-ui/Icon/Feather/svgs/ChevronsRight.js
deleted file mode 100644
index 1b3b1abb..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ChevronsRight.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ChevronsRight
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M797.867 482.133l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l183.467 183.467-183.467 183.467c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l213.333-213.333c17.067-17.067 17.067-42.667 0-59.733z' />
-            <path d='M499.2 482.133l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l183.467 183.467-183.467 183.467c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l213.333-213.333c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ChevronsUp.js b/src/app/components/common-ui/Icon/Feather/svgs/ChevronsUp.js
deleted file mode 100644
index d289f6c0..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ChevronsUp.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ChevronsUp
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M328.533 499.2l183.467-183.467 183.467 183.467c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0l-213.333 213.333c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0z' />
-            <path d='M541.867 524.8c-17.067-17.067-42.667-17.067-59.733 0l-213.333 213.333c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l183.467-183.467 183.467 183.467c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-213.333-213.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Chrome.js b/src/app/components/common-ui/Icon/Feather/svgs/Chrome.js
deleted file mode 100644
index 4f305a96..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Chrome.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Chrome
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M942.933 328.533c0-4.267 0-4.267 0 0-76.8-170.667-238.933-285.867-430.933-285.867-153.6 0-290.133 72.533-375.467 187.733 0 4.267-4.267 4.267-4.267 8.533-55.467 76.8-89.6 170.667-89.6 273.067 0 238.933 179.2 435.2 409.6 465.067 0 0 4.267 0 4.267 0 17.067 0 34.133 4.267 51.2 4.267 260.267 0 469.333-209.067 469.333-469.333 4.267-64-8.533-128-34.133-183.467zM512 128c132.267 0 251.733 68.267 320 170.667h-320c-89.6 0-162.133 55.467-196.267 128l-93.867-162.133c68.267-85.333 174.933-136.533 290.133-136.533zM640 512c0 72.533-55.467 128-128 128s-128-55.467-128-128 55.467-128 128-128 128 55.467 128 128zM128 512c0-59.733 12.8-119.467 38.4-170.667l157.867 277.333c0 0 0 4.267 4.267 4.267 38.4 59.733 106.667 102.4 183.467 102.4 8.533 0 17.067 0 25.6-4.267l-98.133 166.4c-174.933-29.867-311.467-187.733-311.467-375.467zM537.6 896l157.867-277.333c0 0 0-4.267 0-4.267 17.067-29.867 25.6-64 25.6-102.4 0-46.933-17.067-93.867-42.667-128h192c12.8 38.4 21.333 81.067 21.333 128 4.267 204.8-153.6 371.2-354.133 384z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Circle.js b/src/app/components/common-ui/Icon/Feather/svgs/Circle.js
deleted file mode 100644
index 2e412a04..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Circle.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Circle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Clipboard.js b/src/app/components/common-ui/Icon/Feather/svgs/Clipboard.js
deleted file mode 100644
index c18c55cc..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Clipboard.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Clipboard
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 128h-42.667c0-46.933-38.4-85.333-85.333-85.333h-256c-46.933 0-85.333 38.4-85.333 85.333h-42.667c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h512c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128zM384 128h256v85.333h-256v-42.667c0 0 0 0 0 0s0 0 0 0v-42.667zM810.667 853.333c0 25.6-17.067 42.667-42.667 42.667h-512c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h42.667c0 46.933 38.4 85.333 85.333 85.333h256c46.933 0 85.333-38.4 85.333-85.333h42.667c25.6 0 42.667 17.067 42.667 42.667v597.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Clock.js b/src/app/components/common-ui/Icon/Feather/svgs/Clock.js
deleted file mode 100644
index 80761575..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Clock.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Clock
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M699.733 558.933l-145.067-72.533v-230.4c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v256c0 17.067 8.533 29.867 25.6 38.4l170.667 85.333c4.267 4.267 8.533 4.267 17.067 4.267 17.067 0 29.867-8.533 38.4-25.6s0-42.667-21.333-55.467z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Cloud.js b/src/app/components/common-ui/Icon/Feather/svgs/Cloud.js
deleted file mode 100644
index eee453e7..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Cloud.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Cloud
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 384h-21.333c-29.867-85.333-89.6-157.867-166.4-204.8-89.6-51.2-192-68.267-290.133-42.667-102.4 29.867-183.467 93.867-238.933 179.2-51.2 89.6-68.267 192-42.667 290.133 42.667 170.667 196.267 290.133 371.2 290.133 0 0 0 0 0 0h384c140.8 0 256-115.2 256-256s-110.933-256-251.733-256zM768 810.667h-384c0 0 0 0 0 0-136.533 0-256-93.867-290.133-221.867-21.333-81.067-8.533-157.867 34.133-230.4s106.667-119.467 183.467-136.533c21.333-4.267 46.933-8.533 72.533-8.533 132.267 0 256 89.6 290.133 226.133 4.267 17.067 21.333 34.133 42.667 34.133h51.2c93.867 0 170.667 76.8 170.667 170.667 0 89.6-76.8 166.4-170.667 166.4z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CloudDrizzle.js b/src/app/components/common-ui/Icon/Feather/svgs/CloudDrizzle.js
deleted file mode 100644
index 7c0c766e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CloudDrizzle.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Icon: Feather.CloudDrizzle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M341.333 768c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M341.333 512c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M682.667 768c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M682.667 512c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M512 853.333c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M512 597.333c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M1002.667 409.6c-42.667-93.867-132.267-153.6-234.667-153.6h-21.333c-64-187.733-264.533-294.4-456.533-243.2-209.067 51.2-332.8 260.267-277.333 469.333 21.333 81.067 68.267 153.6 132.267 204.8 17.067 12.8 46.933 12.8 59.733-8.533 12.8-17.067 12.8-46.933-8.533-59.733-51.2-38.4-85.333-98.133-102.4-157.867-42.667-157.867 55.467-324.267 213.333-362.667 157.867-42.667 324.267 55.467 362.667 213.333 4.267 17.067 21.333 34.133 42.667 34.133h55.467c68.267 0 128 38.4 157.867 102.4 17.067 42.667 21.333 89.6 4.267 132.267s-46.933 76.8-89.6 93.867c-21.333 8.533-29.867 34.133-21.333 55.467 8.533 17.067 21.333 25.6 38.4 25.6 4.267 0 12.8 0 17.067-4.267 64-25.6 110.933-76.8 136.533-140.8 21.333-68.267 17.067-136.533-8.533-200.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CloudLightning.js b/src/app/components/common-ui/Icon/Feather/svgs/CloudLightning.js
deleted file mode 100644
index b679ab0b..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CloudLightning.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.CloudLightning
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1019.733 460.8c-25.6-119.467-132.267-204.8-251.733-204.8 0 0 0 0 0 0h-21.333c-64-187.733-264.533-294.4-456.533-243.2-102.4 25.6-183.467 89.6-238.933 174.933-51.2 89.6-68.267 192-42.667 290.133 25.6 102.4 93.867 187.733 187.733 238.933 21.333 12.8 46.933 8.533 59.733-12.8s4.267-46.933-17.067-59.733c-72.533-38.4-123.733-106.667-145.067-187.733-21.333-76.8-8.533-153.6 34.133-226.133 38.4-68.267 106.667-119.467 183.467-136.533 157.867-42.667 324.267 55.467 362.667 213.333 4.267 17.067 21.333 34.133 42.667 34.133h51.2c0 0 0 0 0 0 81.067 0 149.333 55.467 166.4 136.533 17.067 93.867-42.667 183.467-132.267 200.533-21.333 4.267-38.4 25.6-34.133 51.2 4.267 21.333 21.333 34.133 42.667 34.133 4.267 0 4.267 0 8.533 0 136.533-29.867 226.133-166.4 200.533-302.933z' />
-            <path d='M640 682.667h-174.933l128-187.733c12.8-21.333 8.533-46.933-12.8-59.733s-46.933-8.533-59.733 12.8l-170.667 256c-8.533 12.8-8.533 29.867 0 42.667 4.267 12.8 17.067 21.333 34.133 21.333h174.933l-128 187.733c-12.8 21.333-8.533 46.933 12.8 59.733 8.533 4.267 17.067 8.533 25.6 8.533 12.8 0 25.6-8.533 34.133-17.067l170.667-256c8.533-12.8 8.533-29.867 0-42.667s-17.067-25.6-34.133-25.6z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CloudOff.js b/src/app/components/common-ui/Icon/Feather/svgs/CloudOff.js
deleted file mode 100644
index 7ba4f376..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CloudOff.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.CloudOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M409.6 213.333c128 12.8 230.4 102.4 264.533 221.867 4.267 17.067 21.333 34.133 42.667 34.133h51.2c0 0 0 0 0 0 21.333 0 46.933 4.267 68.267 12.8 85.333 38.4 128 136.533 89.6 221.867-8.533 21.333 0 46.933 21.333 55.467 4.267 4.267 12.8 4.267 17.067 4.267 17.067 0 34.133-8.533 38.4-25.6 55.467-128-4.267-281.6-136.533-337.067-29.867-8.533-64-17.067-98.133-17.067h-21.333c-51.2-140.8-179.2-243.2-328.533-256-25.6 0-42.667 17.067-46.933 38.4-4.267 25.6 17.067 42.667 38.4 46.933z' />
-            <path d='M72.533 12.8c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l132.267 132.267c-64 51.2-110.933 119.467-136.533 200.533-29.867 98.133-17.067 200.533 34.133 290.133 68.267 123.733 196.267 200.533 337.067 200.533 0 0 4.267 0 4.267 0h384c21.333 0 38.4-4.267 59.733-8.533l123.733 123.733c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-938.667-938.667zM384 810.667c-110.933 4.267-213.333-55.467-264.533-153.6-38.4-68.267-46.933-149.333-25.6-226.133 17.067-68.267 59.733-123.733 115.2-162.133l541.867 541.867h-366.933z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CloudRain.js b/src/app/components/common-ui/Icon/Feather/svgs/CloudRain.js
deleted file mode 100644
index 32b1c180..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CloudRain.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.CloudRain
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M682.667 512c-25.6 0-42.667 17.067-42.667 42.667v341.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-341.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M341.333 512c-25.6 0-42.667 17.067-42.667 42.667v341.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-341.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M512 597.333c-25.6 0-42.667 17.067-42.667 42.667v341.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-341.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M1002.667 409.6c-42.667-93.867-132.267-153.6-234.667-153.6h-21.333c-64-187.733-264.533-294.4-456.533-243.2-209.067 51.2-332.8 260.267-277.333 469.333 21.333 81.067 68.267 153.6 132.267 204.8 17.067 12.8 46.933 12.8 59.733-8.533 12.8-17.067 12.8-46.933-8.533-59.733-51.2-38.4-85.333-98.133-102.4-157.867-42.667-157.867 55.467-324.267 213.333-362.667 157.867-42.667 324.267 55.467 362.667 213.333 4.267 17.067 21.333 34.133 42.667 34.133h55.467c68.267 0 128 38.4 157.867 102.4 17.067 42.667 21.333 89.6 4.267 132.267s-46.933 76.8-89.6 93.867c-21.333 8.533-29.867 34.133-21.333 55.467 8.533 17.067 21.333 25.6 38.4 25.6 4.267 0 12.8 0 17.067-4.267 64-25.6 110.933-76.8 136.533-140.8 21.333-68.267 17.067-136.533-8.533-200.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CloudSnow.js b/src/app/components/common-ui/Icon/Feather/svgs/CloudSnow.js
deleted file mode 100644
index 00dd1a50..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CloudSnow.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Icon: Feather.CloudSnow
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1002.667 452.267c-42.667-93.867-132.267-153.6-234.667-153.6h-21.333c-64-187.733-264.533-294.4-456.533-243.2-209.067 51.2-332.8 260.267-277.333 469.333 21.333 81.067 68.267 153.6 132.267 204.8 17.067 12.8 46.933 12.8 59.733-8.533 12.8-17.067 12.8-46.933-8.533-59.733-51.2-38.4-85.333-98.133-102.4-157.867-42.667-157.867 55.467-324.267 213.333-362.667 157.867-42.667 324.267 55.467 362.667 213.333 4.267 17.067 21.333 34.133 42.667 34.133h55.467c68.267 0 128 38.4 157.867 102.4 17.067 42.667 21.333 89.6 4.267 132.267s-46.933 76.8-89.6 93.867c-21.333 8.533-29.867 34.133-21.333 55.467 8.533 17.067 21.333 25.6 38.4 25.6 4.267 0 12.8 0 17.067-4.267 64-25.6 110.933-76.8 136.533-140.8 21.333-68.267 17.067-136.533-8.533-200.533z' />
-            <path d='M311.467 652.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-            <path d='M311.467 823.467c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-            <path d='M482.133 738.133c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-            <path d='M482.133 908.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-            <path d='M652.8 652.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-            <path d='M652.8 823.467c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Code.js b/src/app/components/common-ui/Icon/Feather/svgs/Code.js
deleted file mode 100644
index eacaaaa9..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Code.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Code
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M968.533 482.133l-256-256c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l226.133 226.133-226.133 226.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l256-256c17.067-17.067 17.067-42.667 0-59.733z' />
-            <path d='M371.2 226.133c-17.067-17.067-42.667-17.067-59.733 0l-256 256c-17.067 17.067-17.067 42.667 0 59.733l256 256c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-226.133-226.133 226.133-226.133c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Codepen.js b/src/app/components/common-ui/Icon/Feather/svgs/Codepen.js
deleted file mode 100644
index 42b59d11..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Codepen.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Codepen
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 669.867c0-4.267 0-4.267 0-8.533v-298.667c0-4.267 0-4.267 0-8.533 0 0 0 0 0-4.267s-4.267-8.533-4.267-12.8c0 0 0 0 0 0s0 0 0 0c-4.267-4.267-4.267-8.533-8.533-8.533v0c0 0 0 0 0 0l-426.667-277.333c0 0-4.267 0-4.267 0s-4.267 0-4.267 0c-8.533-4.267-21.333-4.267-29.867 0 0 0-4.267 0-4.267 0s-4.267 0-4.267 0l-426.667 277.333c-8.533-0-12.8 4.267-17.067 8.533 0 0 0 0 0 0s0 0 0 0c-4.267 8.533-4.267 12.8-8.533 17.067 0 0 0 0 0 4.267s0 4.267 0 8.533v298.667c0 4.267 0 4.267 0 8.533 0 0 0 0 0 4.267s4.267 8.533 4.267 12.8c0 0 0 0 0 0s0 0 0 0c4.267 4.267 4.267 8.533 8.533 8.533l426.667 277.333c0 0 4.267 0 4.267 0s4.267 0 4.267 0 8.533 4.267 12.8 4.267 8.533 0 12.8-4.267c0 0 4.267 0 4.267 0s4.267 0 4.267 0l426.667-277.333c4.267-4.267 8.533-8.533 12.8-8.533 0 0 0 0 0 0s0 0 0 0c12.8-12.8 12.8-17.067 17.067-21.333 0 0 0 0 0 0zM128 443.733l98.133 68.267-98.133 68.267v-136.533zM512 610.133l-140.8-98.133 140.8-98.133 140.8 98.133-140.8 98.133zM554.667 341.333v-179.2l307.2 200.533-136.533 98.133-170.667-119.467zM469.333 341.333l-170.667 119.467-136.533-98.133 307.2-200.533v179.2zM298.667 563.2l170.667 119.467v174.933l-307.2-200.533 136.533-93.867zM554.667 682.667l170.667-119.467 136.533 93.867-307.2 204.8v-179.2zM797.867 512l98.133-68.267v136.533l-98.133-68.267z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Command.js b/src/app/components/common-ui/Icon/Feather/svgs/Command.js
deleted file mode 100644
index 7878bced..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Command.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Command
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 597.333h-85.333v-170.667h85.333c93.867 0 170.667-76.8 170.667-170.667s-76.8-170.667-170.667-170.667-170.667 76.8-170.667 170.667v85.333h-170.667v-85.333c0-93.867-76.8-170.667-170.667-170.667s-170.667 76.8-170.667 170.667 76.8 170.667 170.667 170.667h85.333v170.667h-85.333c-93.867 0-170.667 76.8-170.667 170.667s76.8 170.667 170.667 170.667 170.667-76.8 170.667-170.667v-85.333h170.667v85.333c0 93.867 76.8 170.667 170.667 170.667s170.667-76.8 170.667-170.667-76.8-170.667-170.667-170.667zM682.667 256c0-46.933 38.4-85.333 85.333-85.333s85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333h-85.333v-85.333zM341.333 768c0 46.933-38.4 85.333-85.333 85.333s-85.333-38.4-85.333-85.333 38.4-85.333 85.333-85.333h85.333v85.333zM341.333 341.333h-85.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333v85.333zM597.333 597.333h-170.667v-170.667h170.667v170.667zM768 853.333c-46.933 0-85.333-38.4-85.333-85.333v-85.333h85.333c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Compass.js b/src/app/components/common-ui/Icon/Feather/svgs/Compass.js
deleted file mode 100644
index dc05fff1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Compass.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Compass
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M678.4 290.133l-268.8 89.6c-12.8 4.267-25.6 17.067-29.867 29.867l-89.6 273.067c-4.267 17.067 0 34.133 8.533 42.667s17.067 12.8 29.867 12.8c4.267 0 8.533 0 12.8-4.267l273.067-89.6c12.8-4.267 21.333-12.8 25.6-25.6l89.6-273.067c4.267-17.067 0-34.133-8.533-42.667-8.533-12.8-25.6-17.067-42.667-12.8zM567.467 567.467l-170.667 55.467 55.467-170.667 170.667-55.467-55.467 170.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Copy.js b/src/app/components/common-ui/Icon/Feather/svgs/Copy.js
deleted file mode 100644
index 7d7df86b..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Copy.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Copy
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 341.333h-384c-72.533 0-128 55.467-128 128v384c0 72.533 55.467 128 128 128h384c72.533 0 128-55.467 128-128v-384c0-72.533-55.467-128-128-128zM896 853.333c0 25.6-17.067 42.667-42.667 42.667h-384c-25.6 0-42.667-17.067-42.667-42.667v-384c0-25.6 17.067-42.667 42.667-42.667h384c25.6 0 42.667 17.067 42.667 42.667v384z' />
-            <path d='M213.333 597.333h-42.667c-25.6 0-42.667-17.067-42.667-42.667v-384c0-25.6 17.067-42.667 42.667-42.667h384c25.6 0 42.667 17.067 42.667 42.667v42.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-42.667c0-72.533-55.467-128-128-128h-384c-72.533 0-128 55.467-128 128v384c0 72.533 55.467 128 128 128h42.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CornerDownLeft.js b/src/app/components/common-ui/Icon/Feather/svgs/CornerDownLeft.js
deleted file mode 100644
index 5d84155d..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CornerDownLeft.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.CornerDownLeft
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 128c-25.6 0-42.667 17.067-42.667 42.667v298.667c0 72.533-55.467 128-128 128h-409.6l140.8-140.8c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-213.333 213.333c-4.267 4.267-8.533 8.533-8.533 12.8-4.267 8.533-4.267 21.333 0 34.133 4.267 4.267 4.267 8.533 8.533 12.8l213.333 213.333c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-140.8-140.8h409.6c119.467 0 213.333-93.867 213.333-213.333v-298.667c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CornerDownRight.js b/src/app/components/common-ui/Icon/Feather/svgs/CornerDownRight.js
deleted file mode 100644
index 57b00c50..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CornerDownRight.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.CornerDownRight
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M891.733 657.067c4.267-8.533 4.267-21.333 0-34.133-4.267-4.267-4.267-8.533-8.533-12.8l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l140.8 140.8h-409.6c-72.533 0-128-55.467-128-128v-298.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v298.667c0 119.467 93.867 213.333 213.333 213.333h409.6l-140.8 140.8c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l213.333-213.333c4.267-4.267 8.533-8.533 8.533-12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CornerLeftDown.js b/src/app/components/common-ui/Icon/Feather/svgs/CornerLeftDown.js
deleted file mode 100644
index 3bb2b6d8..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CornerLeftDown.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.CornerLeftDown
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 128h-298.667c-119.467 0-213.333 93.867-213.333 213.333v409.6l-140.8-140.8c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l213.333 213.333c4.267 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.8 4.267 17.067 4.267s12.8 0 17.067-4.267c4.267-4.267 8.533-4.267 12.8-8.533l213.333-213.333c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-140.8 140.8v-409.6c0-72.533 55.467-128 128-128h298.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CornerLeftUp.js b/src/app/components/common-ui/Icon/Feather/svgs/CornerLeftUp.js
deleted file mode 100644
index 0d6c73bb..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CornerLeftUp.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.CornerLeftUp
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 810.667h-298.667c-72.533 0-128-55.467-128-128v-409.6l140.8 140.8c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-213.333-213.333c-4.267-4.267-8.533-8.533-12.8-8.533-12.8-4.267-21.333-4.267-34.133 0-4.267 0-8.533 4.267-12.8 8.533l-213.333 213.333c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l140.8-140.8v409.6c0 119.467 93.867 213.333 213.333 213.333h298.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CornerRightDown.js b/src/app/components/common-ui/Icon/Feather/svgs/CornerRightDown.js
deleted file mode 100644
index 10c42712..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CornerRightDown.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.CornerRightDown
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M883.2 610.133c-17.067-17.067-42.667-17.067-59.733 0l-140.8 140.8v-409.6c0-119.467-93.867-213.333-213.333-213.333h-298.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h298.667c72.533 0 128 55.467 128 128v409.6l-140.8-140.8c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l213.333 213.333c4.267 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.8 4.267 17.067 4.267s12.8 0 17.067-4.267c4.267-4.267 8.533-4.267 12.8-8.533l213.333-213.333c17.067-17.067 17.067-42.667-0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CornerRightUp.js b/src/app/components/common-ui/Icon/Feather/svgs/CornerRightUp.js
deleted file mode 100644
index 917aea35..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CornerRightUp.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.CornerRightUp
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M883.2 354.133l-213.333-213.333c-4.267-4.267-8.533-8.533-12.8-8.533-8.533-4.267-21.333-4.267-34.133 0-4.267 4.267-8.533 4.267-12.8 8.533l-213.333 213.333c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l140.8-140.8v409.6c0 72.533-55.467 128-128 128h-298.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h298.667c119.467 0 213.333-93.867 213.333-213.333v-409.6l140.8 140.8c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CornerUpLeft.js b/src/app/components/common-ui/Icon/Feather/svgs/CornerUpLeft.js
deleted file mode 100644
index cf3af7c6..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CornerUpLeft.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.CornerUpLeft
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M682.667 341.333h-409.6l140.8-140.8c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-213.333 213.333c-4.267 4.267-8.533 8.533-8.533 12.8-4.267 12.8-4.267 21.333 0 34.133 4.267 4.267 4.267 8.533 8.533 12.8l213.333 213.333c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-140.8-140.8h409.6c72.533 0 128 55.467 128 128v298.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-298.667c0-119.467-93.867-213.333-213.333-213.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CornerUpRight.js b/src/app/components/common-ui/Icon/Feather/svgs/CornerUpRight.js
deleted file mode 100644
index 0f0b0813..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CornerUpRight.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.CornerUpRight
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M891.733 401.067c4.267-8.533 4.267-21.333 0-34.133-4.267-4.267-4.267-8.533-8.533-12.8l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l140.8 140.8h-409.6c-119.467 0-213.333 93.867-213.333 213.333v298.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-298.667c0-72.533 55.467-128 128-128h409.6l-140.8 140.8c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l213.333-213.333c4.267-4.267 8.533-8.533 8.533-12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Cpu.js b/src/app/components/common-ui/Icon/Feather/svgs/Cpu.js
deleted file mode 100644
index 02d01ad1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Cpu.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Cpu
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M640 341.333h-256c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667h256c25.6 0 42.667-17.067 42.667-42.667v-256c0-25.6-17.067-42.667-42.667-42.667zM597.333 597.333h-170.667v-170.667h170.667v170.667z' />
-            <path d='M981.333 554.667h-85.333v-128h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-85.333v-85.333c0-72.533-55.467-128-128-128h-85.333v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333h-170.667v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333h-85.333c-72.533 0-128 55.467-128 128v85.333h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333v128h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333v128c0 72.533 55.467 128 128 128h85.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333h170.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333h85.333c72.533 0 128-55.467 128-128v-128h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667zM810.667 768c0 25.6-17.067 42.667-42.667 42.667h-512c-25.6 0-42.667-17.067-42.667-42.667v-512c0-25.6 17.067-42.667 42.667-42.667h512c25.6 0 42.667 17.067 42.667 42.667v512z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/CreditCard.js b/src/app/components/common-ui/Icon/Feather/svgs/CreditCard.js
deleted file mode 100644
index 90f9d111..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/CreditCard.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.CreditCard
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 128h-768c-72.533 0-128 55.467-128 128v512c0 72.533 55.467 128 128 128h768c72.533 0 128-55.467 128-128v-512c0-72.533-55.467-128-128-128zM128 213.333h768c25.6 0 42.667 17.067 42.667 42.667v128h-853.333v-128c0-25.6 17.067-42.667 42.667-42.667zM896 810.667h-768c-25.6 0-42.667-17.067-42.667-42.667v-298.667h853.333v298.667c0 25.6-17.067 42.667-42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Crop.js b/src/app/components/common-ui/Icon/Feather/svgs/Crop.js
deleted file mode 100644
index 93ef6797..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Crop.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Crop
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 725.333h-170.667v-384c0-72.533-55.467-128-128-128l-379.733 4.267v-174.933c0-25.6-17.067-42.667-42.667-42.667 0 0 0 0 0 0-21.333 0-42.667 17.067-42.667 42.667v174.933h-174.933c-25.6 0-42.667 21.333-42.667 42.667s21.333 42.667 42.667 42.667c0 0 0 0 0 0h174.933l-4.267 379.733c0 72.533 55.467 128 128 128h384v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667h170.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667zM341.333 725.333c-25.6 0-42.667-17.067-42.667-42.667l4.267-379.733 379.733-4.267c25.6 0 42.667 17.067 42.667 42.667v384h-384z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Crosshair.js b/src/app/components/common-ui/Icon/Feather/svgs/Crosshair.js
deleted file mode 100644
index b5bf1a77..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Crosshair.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Crosshair
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM554.667 891.733v-123.733c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v123.733c-179.2-21.333-320-162.133-337.067-337.067h123.733c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-123.733c17.067-179.2 157.867-320 337.067-337.067v123.733c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-123.733c179.2 21.333 320 162.133 337.067 337.067h-123.733c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h123.733c-17.067 179.2-157.867 320-337.067 337.067z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Database.js b/src/app/components/common-ui/Icon/Feather/svgs/Database.js
deleted file mode 100644
index 54c1cff1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Database.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Database
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-204.8 0-426.667 55.467-426.667 170.667v597.333c0 115.2 221.867 170.667 426.667 170.667s426.667-55.467 426.667-170.667v-597.333c0-115.2-221.867-170.667-426.667-170.667zM853.333 512c0 21.333-106.667 85.333-341.333 85.333s-341.333-64-341.333-85.333v-192c81.067 42.667 213.333 64 341.333 64s260.267-21.333 341.333-64v192zM512 128c221.867 0 341.333 64 341.333 85.333s-119.467 85.333-341.333 85.333c-221.867 0-341.333-64-341.333-85.333s119.467-85.333 341.333-85.333zM512 896c-234.667 0-341.333-64-341.333-85.333v-192c81.067 42.667 213.333 64 341.333 64s260.267-21.333 341.333-64v192c0 21.333-106.667 85.333-341.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Delete.js b/src/app/components/common-ui/Icon/Feather/svgs/Delete.js
deleted file mode 100644
index e10bb6b9..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Delete.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Delete
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 128h-554.667c-12.8 0-25.6 4.267-34.133 12.8l-298.667 341.333c-12.8 17.067-12.8 38.4 0 55.467l298.667 341.333c8.533 12.8 21.333 17.067 34.133 17.067h554.667c72.533 0 128-55.467 128-128v-512c0-72.533-55.467-128-128-128zM938.667 768c0 25.6-17.067 42.667-42.667 42.667h-533.333l-260.267-298.667 260.267-298.667h533.333c25.6 0 42.667 17.067 42.667 42.667v512z' />
-            <path d='M797.867 354.133c-17.067-17.067-42.667-17.067-59.733 0l-98.133 98.133-98.133-98.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l98.133 98.133-98.133 98.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l98.133-98.133 98.133 98.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-98.133-98.133 98.133-98.133c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Disc.js b/src/app/components/common-ui/Icon/Feather/svgs/Disc.js
deleted file mode 100644
index 467d4050..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Disc.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Disc
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M512 341.333c-93.867 0-170.667 76.8-170.667 170.667s76.8 170.667 170.667 170.667c93.867 0 170.667-76.8 170.667-170.667s-76.8-170.667-170.667-170.667zM512 597.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/DollarSign.js b/src/app/components/common-ui/Icon/Feather/svgs/DollarSign.js
deleted file mode 100644
index 55369533..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/DollarSign.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.DollarSign
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M618.667 469.333h-64v-213.333h170.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-170.667v-128c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v128h-64c-106.667 0-192 85.333-192 192s85.333 192 192 192h64v213.333h-213.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h213.333v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128h64c106.667 0 192-85.333 192-192s-85.333-192-192-192zM405.333 469.333c-59.733 0-106.667-46.933-106.667-106.667s46.933-106.667 106.667-106.667h64v213.333h-64zM618.667 768h-64v-213.333h64c59.733 0 106.667 46.933 106.667 106.667s-46.933 106.667-106.667 106.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Download.js b/src/app/components/common-ui/Icon/Feather/svgs/Download.js
deleted file mode 100644
index c6169fa8..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Download.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Download
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 597.333c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v170.667c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-170.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M482.133 669.867c4.267 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.8 4.267 17.067 4.267s12.8 0 17.067-4.267c4.267-4.267 8.533-4.267 12.8-8.533l213.333-213.333c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-140.8 140.8v-409.6c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v409.6l-140.8-140.8c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l213.333 213.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/DownloadCloud.js b/src/app/components/common-ui/Icon/Feather/svgs/DownloadCloud.js
deleted file mode 100644
index 3f52f429..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/DownloadCloud.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.DownloadCloud
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M652.8 695.467l-98.133 98.133v-281.6c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v281.6l-98.133-98.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l170.667 170.667c4.267 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.8 4.267 17.067 4.267s12.8 0 17.067-4.267c4.267-4.267 8.533-4.267 12.8-8.533l170.667-170.667c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0z' />
-            <path d='M977.067 448c-46.933-64-123.733-106.667-209.067-106.667 0 0 0 0 0 0h-21.333c-64-187.733-264.533-294.4-456.533-243.2-102.4 25.6-183.467 85.333-238.933 174.933-51.2 89.6-68.267 192-42.667 290.133 17.067 59.733 42.667 115.2 85.333 157.867 17.067 17.067 42.667 21.333 59.733 4.267s21.333-42.667 4.267-59.733c-29.867-34.133-55.467-76.8-64-123.733-21.333-76.8-8.533-157.867 34.133-226.133s106.667-119.467 183.467-136.533c157.867-42.667 324.267 55.467 362.667 213.333 4.267 17.067 21.333 34.133 42.667 34.133h51.2c0 0 0 0 0 0 55.467 0 106.667 25.6 140.8 72.533 25.6 38.4 38.4 81.067 29.867 128s-34.133 85.333-68.267 110.933c-21.333 12.8-25.6 38.4-8.533 59.733 8.533 12.8 21.333 17.067 34.133 17.067 8.533 0 17.067-4.267 25.6-8.533 55.467-38.4 93.867-98.133 106.667-166.4s-12.8-132.267-51.2-192z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Droplet.js b/src/app/components/common-ui/Icon/Feather/svgs/Droplet.js
deleted file mode 100644
index 26da4322..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Droplet.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Droplet
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M785.067 324.267l-243.2-238.933c-8.533-8.533-17.067-12.8-29.867-12.8v0c-12.8 0-21.333 4.267-29.867 12.8l-238.933 238.933c0 0 0 0 0 0-76.8 72.533-115.2 170.667-115.2 273.067s38.4 200.533 110.933 273.067c72.533 72.533 170.667 110.933 273.067 110.933 0 0 0 0 0 0 102.4 0 200.533-38.4 273.067-110.933 149.333-149.333 149.333-392.533 0-546.133zM725.333 810.667c-59.733 55.467-132.267 85.333-213.333 85.333 0 0 0 0 0 0-81.067 0-153.6-29.867-209.067-85.333-59.733-59.733-89.6-132.267-89.6-213.333s29.867-153.6 85.333-209.067c0 0 0 0 0 0l209.067-213.333 213.333 213.333c119.467 115.2 119.467 302.933 4.267 422.4z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Edit.js b/src/app/components/common-ui/Icon/Feather/svgs/Edit.js
deleted file mode 100644
index 2900260e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Edit.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Edit
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 584.533c-25.6 0-42.667 17.067-42.667 42.667v226.133c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h226.133c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-226.133c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-226.133c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M968.533 226.133l-170.667-170.667c-17.067-17.067-42.667-17.067-59.733 0l-426.667 426.667c-8.533 8.533-12.8 17.067-12.8 29.867v170.667c0 25.6 17.067 42.667 42.667 42.667h170.667c12.8 0 21.333-4.267 29.867-12.8l426.667-426.667c17.067-17.067 17.067-42.667 0-59.733zM494.933 640h-110.933v-110.933l384-384 110.933 110.933-384 384z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Edit2.js b/src/app/components/common-ui/Icon/Feather/svgs/Edit2.js
deleted file mode 100644
index c8e517cd..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Edit2.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Edit2
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M925.867 311.467l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0l-554.667 554.667c-8.533 8.533-12.8 17.067-12.8 29.867v213.333c0 25.6 17.067 42.667 42.667 42.667h213.333c12.8 0 21.333-4.267 29.867-12.8l554.667-554.667c17.067-17.067 17.067-42.667 0-59.733zM324.267 853.333h-153.6v-153.6l512-512 153.6 153.6-512 512z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Edit3.js b/src/app/components/common-ui/Icon/Feather/svgs/Edit3.js
deleted file mode 100644
index 57e25946..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Edit3.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Edit3
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M128 768h170.667c12.8 0 21.333-4.267 29.867-12.8l469.333-469.333c17.067-17.067 17.067-42.667 0-59.733l-170.667-170.667c-17.067-17.067-42.667-17.067-59.733 0l-469.333 469.333c-8.533 8.533-12.8 17.067-12.8 29.867v170.667c0 25.6 17.067 42.667 42.667 42.667zM170.667 571.733l426.667-426.667 110.933 110.933-426.667 426.667h-110.933v-110.933z' />
-            <path d='M896 896h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ExternalLink.js b/src/app/components/common-ui/Icon/Feather/svgs/ExternalLink.js
deleted file mode 100644
index 909190df..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ExternalLink.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ExternalLink
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 512c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6-17.067 42.667-42.667 42.667h-469.333c-25.6 0-42.667-17.067-42.667-42.667v-469.333c0-25.6 17.067-42.667 42.667-42.667h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-256c-72.533 0-128 55.467-128 128v469.333c0 72.533 55.467 128 128 128h469.333c72.533 0 128-55.467 128-128v-256c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M934.4 110.933c-4.267-8.533-12.8-17.067-21.333-21.333-4.267-4.267-12.8-4.267-17.067-4.267h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h153.6l-396.8 396.8c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l396.8-396.8v153.6c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-4.267 0-12.8-4.267-17.067z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Eye.js b/src/app/components/common-ui/Icon/Feather/svgs/Eye.js
deleted file mode 100644
index 79f8dd59..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Eye.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Eye
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1019.733 494.933c-8.533-17.067-187.733-366.933-507.733-366.933s-499.2 349.867-507.733 366.933c-4.267 12.8-4.267 25.6 0 38.4 8.533 12.8 187.733 362.667 507.733 362.667s499.2-349.867 507.733-366.933c4.267-8.533 4.267-25.6 0-34.133zM512 810.667c-230.4 0-379.733-230.4-422.4-298.667 38.4-68.267 192-298.667 422.4-298.667s379.733 230.4 422.4 298.667c-42.667 68.267-192 298.667-422.4 298.667z' />
-            <path d='M512 341.333c-93.867 0-170.667 76.8-170.667 170.667s76.8 170.667 170.667 170.667c93.867 0 170.667-76.8 170.667-170.667s-76.8-170.667-170.667-170.667zM512 597.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/EyeOff.js b/src/app/components/common-ui/Icon/Feather/svgs/EyeOff.js
deleted file mode 100644
index ff0f2d2a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/EyeOff.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.EyeOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M430.933 221.867c25.6-4.267 55.467-8.533 81.067-8.533 230.4 0 379.733 230.4 422.4 298.667-21.333 38.4-46.933 76.8-76.8 106.667-17.067 17.067-12.8 46.933 4.267 59.733 8.533 8.533 17.067 8.533 25.6 8.533 12.8 0 25.6-4.267 34.133-17.067 38.4-42.667 68.267-93.867 98.133-145.067 8.533-12.8 8.533-25.6 0-38.4-8.533-8.533-187.733-358.4-507.733-358.4-34.133 0-68.267 4.267-98.133 12.8-25.6 4.267-38.4 25.6-34.133 51.2 8.533 21.333 29.867 34.133 51.2 29.867z' />
-            <path d='M1011.2 951.467l-938.667-938.667c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l183.467 183.467c-76.8 68.267-140.8 145.067-192 234.667-8.533 12.8-8.533 25.6 0 38.4 8.533 17.067 187.733 366.933 507.733 366.933 89.6 0 174.933-25.6 247.467-76.8l192 192c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733zM426.667 486.4l106.667 106.667c-8.533 4.267-17.067 4.267-25.6 4.267-21.333 0-42.667-8.533-59.733-21.333-17.067-17.067-25.6-38.4-25.6-59.733 0-8.533 4.267-17.067 4.267-29.867zM512 810.667c-230.4 0-379.733-230.4-422.4-298.667 42.667-76.8 98.133-140.8 166.4-196.267l106.667 110.933c-17.067 29.867-25.6 64-25.6 98.133 0 46.933 21.333 89.6 55.467 119.467 29.867 29.867 72.533 46.933 115.2 46.933 0 0 4.267 0 4.267 0 29.867 0 59.733-12.8 85.333-25.6l98.133 98.133c-55.467 29.867-119.467 46.933-183.467 46.933z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Facebook.js b/src/app/components/common-ui/Icon/Feather/svgs/Facebook.js
deleted file mode 100644
index 48d6b2bb..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Facebook.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Facebook
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 298.667c25.6 0 42.667-17.067 42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667h-128c-140.8 0-256 115.2-256 256v85.333h-85.333c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667h85.333v298.667c0 25.6 17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667v-298.667h85.333c21.333 0 38.4-12.8 42.667-34.133l42.667-170.667c4.267-12.8 0-25.6-8.533-38.4s-21.333-12.8-34.133-12.8h-128v-85.333h128zM597.333 469.333h115.2l-21.333 85.333h-93.867c-25.6 0-42.667 17.067-42.667 42.667v298.667h-85.333v-298.667c0-25.6-17.067-42.667-42.667-42.667h-85.333v-85.333h85.333c25.6 0 42.667-17.067 42.667-42.667v-128c0-93.867 76.8-170.667 170.667-170.667h85.333v85.333h-85.333c-46.933 0-85.333 38.4-85.333 85.333v128c0 25.6 17.067 42.667 42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/FastForward.js b/src/app/components/common-ui/Icon/Feather/svgs/FastForward.js
deleted file mode 100644
index b345e0ed..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/FastForward.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.FastForward
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M964.267 477.867l-384-298.667c-12.8-8.533-29.867-12.8-46.933-4.267-12.8 8.533-21.333 21.333-21.333 38.4v597.333c0 17.067 8.533 29.867 25.6 38.4 4.267 4.267 12.8 4.267 17.067 4.267 8.533 0 17.067-4.267 25.6-8.533l384-298.667c8.533-8.533 17.067-21.333 17.067-34.133s-4.267-25.6-17.067-34.133zM597.333 725.333v-426.667l273.067 213.333-273.067 213.333z' />
-            <path d='M110.933 179.2c-12.8-8.533-29.867-12.8-42.667-4.267-17.067 8.533-25.6 21.333-25.6 38.4v597.333c0 17.067 8.533 29.867 25.6 38.4 4.267 4.267 12.8 4.267 17.067 4.267 8.533 0 17.067-4.267 25.6-8.533l384-298.667c8.533-8.533 17.067-21.333 17.067-34.133s-4.267-25.6-17.067-34.133l-384-298.667zM128 725.333v-426.667l273.067 213.333-273.067 213.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Feather.js b/src/app/components/common-ui/Icon/Feather/svgs/Feather.js
deleted file mode 100644
index 8a18f67d..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Feather.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Feather
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M891.733 128c-115.2-115.2-307.2-115.2-422.4 0l-285.867 290.133c-8.533 8.533-12.8 17.067-12.8 29.867v345.6l-115.2 115.2c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l115.2-115.2h345.6c12.8 0 21.333-4.267 29.867-12.8l285.867-290.133c119.467-115.2 119.467-302.933 0-422.4zM558.933 768h-243.2l85.333-85.333h243.2l-85.333 85.333zM832 490.667c0 0 0 0 0 0l-102.4 106.667c0 0 0 0-4.267 0h-238.933l226.133-226.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-298.667 298.667c0 0 0 0 0 0l-98.133 98.133v-243.2l277.333-277.333c85.333-85.333 217.6-85.333 302.933 0 81.067 85.333 81.067 221.867-4.267 302.933z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/File.js b/src/app/components/common-ui/Icon/Feather/svgs/File.js
deleted file mode 100644
index 7d40e09e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/File.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.File
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M891.733 366.933c-4.267-4.267-4.267-8.533-8.533-12.8l-298.667-298.667c-4.267-4.267-8.533-8.533-12.8-8.533-4.267-4.267-12.8-4.267-17.067-4.267h-298.667c-72.533 0-128 55.467-128 128v682.667c0 72.533 55.467 128 128 128h512c72.533 0 128-55.467 128-128v-469.333c0-4.267 0-12.8-4.267-17.067zM597.333 187.733l153.6 153.6h-153.6v-153.6zM768 896h-512c-25.6 0-42.667-17.067-42.667-42.667v-682.667c0-25.6 17.067-42.667 42.667-42.667h256v256c0 25.6 17.067 42.667 42.667 42.667h256v426.667c0 25.6-17.067 42.667-42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/FileMinus.js b/src/app/components/common-ui/Icon/Feather/svgs/FileMinus.js
deleted file mode 100644
index 60fc4ce6..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/FileMinus.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.FileMinus
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M891.733 324.267c-4.267-4.267-4.267-8.533-8.533-12.8l-256-256c-4.267-4.267-8.533-8.533-12.8-8.533-4.267-4.267-12.8-4.267-17.067-4.267h-341.333c-72.533 0-128 55.467-128 128v682.667c0 72.533 55.467 128 128 128h512c72.533 0 128-55.467 128-128v-512c0-4.267 0-12.8-4.267-17.067zM640 187.733l110.933 110.933h-110.933v-110.933zM768 896h-512c-25.6 0-42.667-17.067-42.667-42.667v-682.667c0-25.6 17.067-42.667 42.667-42.667h298.667v213.333c0 25.6 17.067 42.667 42.667 42.667h213.333v469.333c0 25.6-17.067 42.667-42.667 42.667z' />
-            <path d='M640 597.333h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/FilePlus.js b/src/app/components/common-ui/Icon/Feather/svgs/FilePlus.js
deleted file mode 100644
index b2adb8ce..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/FilePlus.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.FilePlus
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M891.733 324.267c-4.267-4.267-4.267-8.533-8.533-12.8l-256-256c-4.267-4.267-8.533-8.533-12.8-8.533-4.267-4.267-12.8-4.267-17.067-4.267h-341.333c-72.533 0-128 55.467-128 128v682.667c0 72.533 55.467 128 128 128h512c72.533 0 128-55.467 128-128v-512c0-4.267 0-12.8-4.267-17.067zM640 187.733l110.933 110.933h-110.933v-110.933zM768 896h-512c-25.6 0-42.667-17.067-42.667-42.667v-682.667c0-25.6 17.067-42.667 42.667-42.667h298.667v213.333c0 25.6 17.067 42.667 42.667 42.667h213.333v469.333c0 25.6-17.067 42.667-42.667 42.667z' />
-            <path d='M640 597.333h-85.333v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/FileText.js b/src/app/components/common-ui/Icon/Feather/svgs/FileText.js
deleted file mode 100644
index 2266cd27..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/FileText.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.FileText
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M891.733 324.267c-4.267-4.267-4.267-8.533-8.533-12.8l-256-256c-4.267-4.267-8.533-8.533-12.8-8.533-4.267-4.267-12.8-4.267-17.067-4.267h-341.333c-72.533 0-128 55.467-128 128v682.667c0 72.533 55.467 128 128 128h512c72.533 0 128-55.467 128-128v-512c0-4.267 0-12.8-4.267-17.067zM640 187.733l110.933 110.933h-110.933v-110.933zM768 896h-512c-25.6 0-42.667-17.067-42.667-42.667v-682.667c0-25.6 17.067-42.667 42.667-42.667h298.667v213.333c0 25.6 17.067 42.667 42.667 42.667h213.333v469.333c0 25.6-17.067 42.667-42.667 42.667z' />
-            <path d='M682.667 512h-341.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M682.667 682.667h-341.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M341.333 426.667h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Film.js b/src/app/components/common-ui/Icon/Feather/svgs/Film.js
deleted file mode 100644
index 7069d4e5..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Film.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Film
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M844.8 42.667h-665.6c-76.8 0-136.533 59.733-136.533 136.533v665.6c0 76.8 59.733 136.533 136.533 136.533h665.6c76.8 0 136.533-59.733 136.533-136.533v-665.6c0-76.8-59.733-136.533-136.533-136.533zM768 341.333h128v128h-128v-128zM682.667 469.333h-341.333v-341.333h341.333v341.333zM256 469.333h-128v-128h128v128zM128 554.667h128v128h-128v-128zM341.333 554.667h341.333v341.333h-341.333v-341.333zM768 554.667h128v128h-128v-128zM896 179.2v76.8h-128v-128h76.8c29.867 0 51.2 21.333 51.2 51.2zM179.2 128h76.8v128h-128v-76.8c0-29.867 21.333-51.2 51.2-51.2zM128 844.8v-76.8h128v128h-76.8c-29.867 0-51.2-21.333-51.2-51.2zM844.8 896h-76.8v-128h128v76.8c0 29.867-21.333 51.2-51.2 51.2z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Filter.js b/src/app/components/common-ui/Icon/Feather/svgs/Filter.js
deleted file mode 100644
index 4c0c0c73..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Filter.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Filter
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M977.067 110.933c-8.533-17.067-21.333-25.6-38.4-25.6h-853.333c-17.067 0-29.867 8.533-38.4 25.6-8.533 12.8-4.267 29.867 4.267 42.667l332.8 392.533v264.533c0 17.067 8.533 29.867 25.6 38.4l170.667 85.333c4.267 4.267 8.533 4.267 17.067 4.267s17.067 0 21.333-4.267c12.8-8.533 21.333-21.333 21.333-38.4v-349.867l332.8-392.533c8.533-12.8 12.8-29.867 4.267-42.667zM563.2 503.467c-4.267 8.533-8.533 17.067-8.533 29.867v294.4l-85.333-42.667v-251.733c0-8.533-4.267-21.333-8.533-25.6l-281.6-337.067h669.867l-285.867 332.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Flag.js b/src/app/components/common-ui/Icon/Feather/svgs/Flag.js
deleted file mode 100644
index 9404502f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Flag.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Flag
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M870.4 89.6c-17.067-8.533-34.133-4.267-46.933 8.533 0 0-38.4 29.867-140.8 29.867-55.467 0-102.4-21.333-153.6-38.4-55.467-25.6-115.2-46.933-187.733-46.933-136.533 0-192 46.933-200.533 55.467s-12.8 17.067-12.8 29.867v810.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-277.333c17.067-8.533 59.733-21.333 128-21.333 55.467 0 102.4 21.333 153.6 38.4 55.467 21.333 115.2 46.933 187.733 46.933 136.533 0 192-46.933 200.533-55.467s12.8-17.067 12.8-29.867v-512c0-17.067-8.533-29.867-25.6-38.4zM810.667 618.667c-17.067 8.533-59.733 21.333-128 21.333-55.467 0-102.4-21.333-153.6-38.4-55.467-25.6-115.2-46.933-187.733-46.933-55.467 0-98.133 8.533-128 17.067v-422.4c17.067-8.533 59.733-21.333 128-21.333 55.467 0 102.4 21.333 153.6 38.4 55.467 25.6 115.2 46.933 187.733 46.933 55.467 0 98.133-8.533 128-17.067v422.4z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Folder.js b/src/app/components/common-ui/Icon/Feather/svgs/Folder.js
deleted file mode 100644
index 52d76e03..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Folder.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Folder
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 213.333h-362.667l-72.533-110.933c-8.533-8.533-21.333-17.067-34.133-17.067h-213.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-469.333c0-72.533-55.467-128-128-128zM896 810.667c0 25.6-17.067 42.667-42.667 42.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h192l72.533 110.933c8.533 8.533 21.333 17.067 34.133 17.067h384c25.6 0 42.667 17.067 42.667 42.667v469.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/FolderMinus.js b/src/app/components/common-ui/Icon/Feather/svgs/FolderMinus.js
deleted file mode 100644
index 2309253b..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/FolderMinus.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.FolderMinus
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 213.333h-362.667l-72.533-110.933c-8.533-8.533-21.333-17.067-34.133-17.067h-213.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-469.333c0-72.533-55.467-128-128-128zM896 810.667c0 25.6-17.067 42.667-42.667 42.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h192l72.533 110.933c8.533 8.533 21.333 17.067 34.133 17.067h384c25.6 0 42.667 17.067 42.667 42.667v469.333z' />
-            <path d='M640 554.667h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/FolderPlus.js b/src/app/components/common-ui/Icon/Feather/svgs/FolderPlus.js
deleted file mode 100644
index eb95f015..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/FolderPlus.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.FolderPlus
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 213.333h-362.667l-72.533-110.933c-8.533-8.533-21.333-17.067-34.133-17.067h-213.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-469.333c0-72.533-55.467-128-128-128zM896 810.667c0 25.6-17.067 42.667-42.667 42.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h192l72.533 110.933c8.533 8.533 21.333 17.067 34.133 17.067h384c25.6 0 42.667 17.067 42.667 42.667v469.333z' />
-            <path d='M640 554.667h-85.333v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Gift.js b/src/app/components/common-ui/Icon/Feather/svgs/Gift.js
deleted file mode 100644
index b663c345..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Gift.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Gift
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M938.667 256h-102.4c12.8-21.333 17.067-42.667 17.067-64 0-81.067-68.267-149.333-149.333-149.333-98.133 0-157.867 68.267-192 132.267-34.133-64-93.867-132.267-192-132.267-81.067 0-149.333 68.267-149.333 149.333 0 21.333 4.267 42.667 17.067 64h-102.4c-25.6 0-42.667 17.067-42.667 42.667v213.333c0 25.6 17.067 42.667 42.667 42.667h42.667v384c0 25.6 17.067 42.667 42.667 42.667h682.667c25.6 0 42.667-17.067 42.667-42.667v-384h42.667c25.6 0 42.667-17.067 42.667-42.667v-213.333c0-25.6-17.067-42.667-42.667-42.667zM704 128c34.133 0 64 29.867 64 64s-29.867 64-64 64h-136.533c21.333-51.2 64-128 136.533-128zM256 192c0-34.133 29.867-64 64-64 72.533 0 115.2 76.8 136.533 128h-136.533c-34.133 0-64-29.867-64-64zM128 341.333h341.333v128h-341.333v-128zM213.333 554.667h256v341.333h-256v-341.333zM810.667 896h-256v-341.333h256v341.333zM896 469.333h-341.333v-128h341.333v128z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/GitBranch.js b/src/app/components/common-ui/Icon/Feather/svgs/GitBranch.js
deleted file mode 100644
index 33f31e9b..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/GitBranch.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.GitBranch
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M938.667 256c0-93.867-76.8-170.667-170.667-170.667s-170.667 76.8-170.667 170.667c0 76.8 55.467 145.067 128 162.133-17.067 157.867-145.067 285.867-302.933 302.933-17.067-59.733-64-106.667-119.467-119.467v-473.6c0-25.6-17.067-42.667-42.667-42.667s-46.933 17.067-46.933 42.667v473.6c-72.533 17.067-128 85.333-128 166.4 0 93.867 76.8 170.667 170.667 170.667 81.067 0 145.067-55.467 166.4-128 204.8-17.067 371.2-183.467 388.267-388.267 72.533-21.333 128-85.333 128-166.4zM256 853.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM768 341.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/GitCommit.js b/src/app/components/common-ui/Icon/Feather/svgs/GitCommit.js
deleted file mode 100644
index 0c18d112..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/GitCommit.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.GitCommit
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 469.333h-256c0 0-4.267 0-4.267 0-21.333-98.133-106.667-170.667-209.067-170.667s-187.733 72.533-209.067 170.667c0 0-4.267 0-4.267 0h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c0 0 4.267 0 4.267 0 21.333 98.133 106.667 170.667 209.067 170.667s187.733-72.533 209.067-170.667c0 0 4.267 0 4.267 0h256c25.6 0 42.667-17.067 42.667-42.667s-21.333-42.667-42.667-42.667zM512 640c-72.533 0-128-55.467-128-128s55.467-128 128-128 128 55.467 128 128-55.467 128-128 128z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/GitMerge.js b/src/app/components/common-ui/Icon/Feather/svgs/GitMerge.js
deleted file mode 100644
index dd9547a6..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/GitMerge.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.GitMerge
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 597.333c-76.8 0-145.067 55.467-162.133 128-157.867-17.067-285.867-145.067-302.933-302.933 72.533-21.333 128-85.333 128-162.133 0-93.867-76.8-170.667-170.667-170.667s-174.933 72.533-174.933 166.4c0 81.067 55.467 145.067 128 166.4v473.6c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c72.533 93.867 179.2 157.867 302.933 170.667 17.067 72.533 85.333 132.267 166.4 132.267 93.867 0 170.667-76.8 170.667-170.667s-76.8-174.933-170.667-174.933zM170.667 256c0-46.933 38.4-85.333 85.333-85.333s85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333-85.333-38.4-85.333-85.333zM768 853.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/GitPullRequest.js b/src/app/components/common-ui/Icon/Feather/svgs/GitPullRequest.js
deleted file mode 100644
index e85e4f01..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/GitPullRequest.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.GitPullRequest
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 601.6v-260.267c0-72.533-55.467-128-128-128h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h128c25.6 0 42.667 17.067 42.667 42.667v260.267c-72.533 17.067-128 85.333-128 166.4 0 93.867 76.8 170.667 170.667 170.667s170.667-76.8 170.667-170.667c0-81.067-55.467-145.067-128-166.4zM768 853.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z' />
-            <path d='M256 85.333c-93.867 0-170.667 76.8-170.667 170.667 0 81.067 55.467 145.067 128 166.4v473.6c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-473.6c72.533-17.067 128-85.333 128-166.4 0-93.867-76.8-170.667-170.667-170.667zM256 341.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Github.js b/src/app/components/common-ui/Icon/Feather/svgs/Github.js
deleted file mode 100644
index 6136d11f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Github.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Github
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M960 362.667c0-64-21.333-119.467-59.733-170.667 12.8-55.467 8.533-115.2-12.8-166.4-4.267-12.8-12.8-21.333-25.6-25.6-17.067-4.267-72.533-12.8-187.733 59.733-93.867-21.333-192-21.333-281.6 0-115.2-72.533-170.667-64-187.733-59.733-12.8 4.267-21.333 12.8-25.6 25.6-25.6 55.467-29.867 110.933-12.8 166.4-38.4 51.2-59.733 110.933-59.733 170.667 0 230.4 128 302.933 247.467 328.533-8.533 29.867-12.8 55.467-12.8 81.067v4.267c-89.6 17.067-119.467-17.067-153.6-64-21.333-29.867-46.933-64-93.867-72.533-21.333-4.267-46.933 8.533-51.2 29.867s8.533 46.933 29.867 51.2c12.8 4.267 29.867 21.333 46.933 42.667 38.4 51.2 93.867 119.467 221.867 102.4v72.533c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-123.733c0 0 0-4.267 0-4.267v-38.4c0-29.867 8.533-55.467 29.867-76.8 12.8-12.8 17.067-29.867 8.533-42.667-4.267-17.067-17.067-25.6-34.133-29.867-123.733-17.067-238.933-55.467-238.933-256 0-51.2 17.067-93.867 51.2-132.267 12.8-12.8 12.8-29.867 8.533-42.667-12.8-38.4-12.8-72.533-4.267-106.667 21.333 4.267 59.733 17.067 110.933 55.467 12.8 8.533 25.6 8.533 38.4 4.267 89.6-25.6 187.733-25.6 277.333 0 12.8 4.267 25.6 0 34.133-4.267 55.467-38.4 93.867-51.2 110.933-55.467 8.533 34.133 8.533 68.267-4.267 102.4-4.267 17.067-4.267 34.133 8.533 42.667 34.133 34.133 51.2 81.067 51.2 132.267 0 200.533-115.2 243.2-238.933 256-17.067 0-29.867 12.8-34.133 29.867s0 34.133 8.533 42.667c21.333 21.333 29.867 51.2 29.867 81.067v166.4c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-162.133c4.267-29.867 0-55.467-12.8-81.067 102.4-21.333 247.467-89.6 247.467-332.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Gitlab.js b/src/app/components/common-ui/Icon/Feather/svgs/Gitlab.js
deleted file mode 100644
index befc52e2..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Gitlab.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Gitlab
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1019.733 558.933l-157.867-477.867c-4.267-8.533-8.533-17.067-17.067-25.6-21.333-21.333-59.733-21.333-81.067 0-8.533 4.267-12.8 12.8-17.067 25.6l-93.867 290.133h-281.6l-93.867-290.133c-4.267-8.533-8.533-17.067-17.067-25.6-21.333-21.333-59.733-21.333-81.067 0-8.533 4.267-12.8 12.8-17.067 25.6l-157.867 477.867c-12.8 34.133 0 68.267 29.867 89.6l452.267 328.533c8.533 4.267 17.067 8.533 25.6 8.533s17.067-4.267 25.6-8.533l452.267-328.533c29.867-17.067 42.667-55.467 29.867-89.6zM512 891.733l-426.667-307.2 132.267-405.333 81.067 247.467c4.267 17.067 21.333 29.867 42.667 29.867h341.333c17.067 0 34.133-12.8 42.667-29.867l81.067-247.467 81.067 247.467 51.2 153.6-426.667 311.467z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Globe.js b/src/app/components/common-ui/Icon/Feather/svgs/Globe.js
deleted file mode 100644
index d7237b46..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Globe.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Globe
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM891.733 469.333h-170.667c-8.533-119.467-46.933-230.4-115.2-328.533 153.6 38.4 268.8 170.667 285.867 328.533zM388.267 554.667h251.733c-12.8 115.2-55.467 226.133-123.733 315.733-76.8-89.6-119.467-200.533-128-315.733zM388.267 469.333c12.8-115.2 55.467-226.133 123.733-315.733 72.533 93.867 115.2 204.8 123.733 315.733h-247.467zM413.867 140.8c-64 98.133-102.4 209.067-110.933 328.533h-170.667c17.067-157.867 132.267-290.133 281.6-328.533zM132.267 554.667h170.667c8.533 119.467 46.933 230.4 115.2 328.533-153.6-38.4-268.8-170.667-285.867-328.533zM610.133 883.2c64-98.133 102.4-209.067 115.2-328.533h170.667c-21.333 157.867-136.533 290.133-285.867 328.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Grid.js b/src/app/components/common-ui/Icon/Feather/svgs/Grid.js
deleted file mode 100644
index 3806e661..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Grid.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.Grid
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M426.667 85.333h-298.667c-25.6 0-42.667 17.067-42.667 42.667v298.667c0 25.6 17.067 42.667 42.667 42.667h298.667c25.6 0 42.667-17.067 42.667-42.667v-298.667c0-25.6-17.067-42.667-42.667-42.667zM384 384h-213.333v-213.333h213.333v213.333z' />
-            <path d='M896 85.333h-298.667c-25.6 0-42.667 17.067-42.667 42.667v298.667c0 25.6 17.067 42.667 42.667 42.667h298.667c25.6 0 42.667-17.067 42.667-42.667v-298.667c0-25.6-17.067-42.667-42.667-42.667zM853.333 384h-213.333v-213.333h213.333v213.333z' />
-            <path d='M896 554.667h-298.667c-25.6 0-42.667 17.067-42.667 42.667v298.667c0 25.6 17.067 42.667 42.667 42.667h298.667c25.6 0 42.667-17.067 42.667-42.667v-298.667c0-25.6-17.067-42.667-42.667-42.667zM853.333 853.333h-213.333v-213.333h213.333v213.333z' />
-            <path d='M426.667 554.667h-298.667c-25.6 0-42.667 17.067-42.667 42.667v298.667c0 25.6 17.067 42.667 42.667 42.667h298.667c25.6 0 42.667-17.067 42.667-42.667v-298.667c0-25.6-17.067-42.667-42.667-42.667zM384 853.333h-213.333v-213.333h213.333v213.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/HardDrive.js b/src/app/components/common-ui/Icon/Feather/svgs/HardDrive.js
deleted file mode 100644
index c1669539..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/HardDrive.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.HardDrive
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M977.067 494.933c0 0 0 0 0 0l-149.333-294.4c-21.333-42.667-64-72.533-115.2-72.533h-405.333c-46.933 0-89.6 25.6-110.933 72.533l-145.067 294.4c0 0 0 0 0 0-8.533 4.267-8.533 8.533-8.533 17.067v256c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-256c0-8.533 0-12.8-4.267-17.067zM268.8 238.933c0 0 0 0 0 0 8.533-17.067 25.6-25.6 38.4-25.6h405.333c17.067 0 29.867 8.533 38.4 25.6l115.2 230.4h-712.533l115.2-230.4zM853.333 810.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-213.333h768v213.333c0 25.6-17.067 42.667-42.667 42.667z' />
-            <path d='M226.133 652.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-            <path d='M396.8 652.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Hash.js b/src/app/components/common-ui/Icon/Feather/svgs/Hash.js
deleted file mode 100644
index e89a35f1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Hash.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Hash
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 597.333h-179.2l17.067-170.667h162.133c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-149.333l21.333-209.067c4.267-21.333-12.8-42.667-38.4-46.933-21.333-4.267-42.667 12.8-46.933 38.4l-25.6 217.6h-170.667l25.6-209.067c4.267-21.333-12.8-42.667-38.4-46.933-21.333-4.267-42.667 12.8-46.933 38.4l-25.6 217.6h-187.733c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h179.2l-17.067 170.667h-162.133c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h149.333l-21.333 209.067c-4.267 21.333 12.8 42.667 38.4 46.933 0 0 4.267 0 4.267 0 21.333 0 38.4-17.067 42.667-38.4l25.6-217.6h170.667l-25.6 209.067c-4.267 21.333 12.8 42.667 38.4 46.933 0 0 4.267 0 4.267 0 21.333 0 38.4-17.067 42.667-38.4l25.6-217.6h187.733c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667zM418.133 597.333l17.067-170.667h170.667l-17.067 170.667h-170.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Headphones.js b/src/app/components/common-ui/Icon/Feather/svgs/Headphones.js
deleted file mode 100644
index f1cf89cf..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Headphones.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Headphones
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 85.333c-234.667 0-426.667 192-426.667 426.667v298.667c0 72.533 55.467 128 128 128h42.667c72.533 0 128-55.467 128-128v-128c0-72.533-55.467-128-128-128h-85.333v-42.667c0-187.733 153.6-341.333 341.333-341.333s341.333 153.6 341.333 341.333v42.667h-85.333c-72.533 0-128 55.467-128 128v128c0 72.533 55.467 128 128 128h42.667c72.533 0 128-55.467 128-128v-298.667c0-234.667-192-426.667-426.667-426.667zM256 640c25.6 0 42.667 17.067 42.667 42.667v128c0 25.6-17.067 42.667-42.667 42.667h-42.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667h85.333zM853.333 810.667c0 25.6-17.067 42.667-42.667 42.667h-42.667c-25.6 0-42.667-17.067-42.667-42.667v-128c0-25.6 17.067-42.667 42.667-42.667h85.333v170.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Heart.js b/src/app/components/common-ui/Icon/Feather/svgs/Heart.js
deleted file mode 100644
index 69409851..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Heart.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Heart
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M917.333 166.4v0c-51.2-51.2-119.467-81.067-192-81.067v0c-72.533 0-145.067 29.867-196.267 81.067 0 0 0 0 0 0l-17.067 17.067-17.067-17.067c-51.2-51.2-119.467-81.067-196.267-81.067-72.533 0-140.8 29.867-192 81.067s-85.333 123.733-85.333 196.267 29.867 145.067 81.067 196.267l375.467 375.467c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l375.467-375.467c115.2-106.667 115.2-285.867 4.267-392.533zM857.6 499.2l-345.6 345.6-345.6-345.6c-76.8-76.8-76.8-196.267 0-273.067 34.133-38.4 85.333-55.467 132.267-55.467 51.2 0 98.133 17.067 136.533 55.467l46.933 46.933c17.067 17.067 42.667 17.067 59.733 0l42.667-46.933c0 0 0 0 0 0 38.4-34.133 85.333-55.467 140.8-55.467 0 0 0 0 0 0 51.2 0 98.133 21.333 136.533 55.467v0c34.133 38.4 55.467 85.333 55.467 136.533s-21.333 98.133-59.733 136.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/HelpCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/HelpCircle.js
deleted file mode 100644
index 988d4f5a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/HelpCircle.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.HelpCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M563.2 264.533c-89.6-29.867-187.733 17.067-217.6 102.4-4.267 25.6 4.267 51.2 29.867 55.467 21.333 8.533 46.933-4.267 55.467-25.6 17.067-42.667 64-68.267 110.933-51.2 34.133 12.8 55.467 42.667 55.467 81.067 0 42.667-72.533 76.8-98.133 89.6-21.333 8.533-34.133 29.867-25.6 55.467 4.267 17.067 21.333 29.867 38.4 29.867 4.267 0 8.533 0 12.8-4.267 17.067-4.267 157.867-55.467 157.867-166.4-4.267-76.8-51.2-140.8-119.467-166.4z' />
-            <path d='M482.133 695.467c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Home.js b/src/app/components/common-ui/Icon/Feather/svgs/Home.js
deleted file mode 100644
index f8bb9531..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Home.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Home
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M921.6 349.867l-384-298.667c-17.067-12.8-38.4-12.8-51.2 0l-384 298.667c-12.8 8.533-17.067 21.333-17.067 34.133v469.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-469.333c0-12.8-4.267-25.6-17.067-34.133zM597.333 896h-170.667v-341.333h170.667v341.333zM853.333 853.333c0 25.6-17.067 42.667-42.667 42.667h-128v-384c0-25.6-17.067-42.667-42.667-42.667h-256c-25.6 0-42.667 17.067-42.667 42.667v384h-128c-25.6 0-42.667-17.067-42.667-42.667v-448l341.333-264.533 341.333 264.533v448z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Image.js b/src/app/components/common-ui/Icon/Feather/svgs/Image.js
deleted file mode 100644
index 2c5fd702..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Image.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Image
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 85.333h-597.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128zM170.667 213.333c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v324.267l-140.8-140.8c-17.067-17.067-42.667-17.067-59.733 0l-452.267 452.267c-17.067-4.267-29.867-21.333-29.867-38.4v-597.333zM810.667 853.333h-494.933l366.933-366.933 170.667 170.667v153.6c0 25.6-17.067 42.667-42.667 42.667z' />
-            <path d='M362.667 469.333c59.733 0 106.667-46.933 106.667-106.667s-46.933-106.667-106.667-106.667-106.667 46.933-106.667 106.667 46.933 106.667 106.667 106.667zM362.667 341.333c12.8 0 21.333 8.533 21.333 21.333s-8.533 21.333-21.333 21.333-21.333-8.533-21.333-21.333 8.533-21.333 21.333-21.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Inbox.js b/src/app/components/common-ui/Icon/Feather/svgs/Inbox.js
deleted file mode 100644
index f279f8e7..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Inbox.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Inbox
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M977.067 494.933c0 0 0 0 0 0l-149.333-294.4c-21.333-42.667-64-72.533-115.2-72.533h-405.333c-46.933 0-89.6 25.6-110.933 72.533l-145.067 294.4c0 0 0 0 0 0-8.533 4.267-8.533 8.533-8.533 17.067v256c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-256c0-8.533 0-12.8-4.267-17.067zM268.8 238.933c0 0 0 0 0 0 8.533-17.067 25.6-25.6 38.4-25.6h405.333c17.067 0 29.867 8.533 38.4 25.6l115.2 230.4h-183.467c-12.8 0-25.6 8.533-34.133 17.067l-72.533 110.933h-123.733l-72.533-110.933c-12.8-8.533-25.6-17.067-38.4-17.067h-187.733l115.2-230.4zM853.333 810.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-213.333h192l72.533 110.933c8.533 8.533 21.333 17.067 34.133 17.067h170.667c12.8 0 25.6-8.533 34.133-17.067l72.533-110.933h192v213.333c0 25.6-17.067 42.667-42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Info.js b/src/app/components/common-ui/Icon/Feather/svgs/Info.js
deleted file mode 100644
index 56ed3b8b..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Info.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Info
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M512 469.333c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M482.133 311.467c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Instagram.js b/src/app/components/common-ui/Icon/Feather/svgs/Instagram.js
deleted file mode 100644
index 8ba11936..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Instagram.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Instagram
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M725.333 42.667h-426.667c-140.8 0-256 115.2-256 256v426.667c0 140.8 115.2 256 256 256h426.667c140.8 0 256-115.2 256-256v-426.667c0-140.8-115.2-256-256-256zM896 725.333c0 93.867-76.8 170.667-170.667 170.667h-426.667c-93.867 0-170.667-76.8-170.667-170.667v-426.667c0-93.867 76.8-170.667 170.667-170.667h426.667c93.867 0 170.667 76.8 170.667 170.667v426.667z' />
-            <path d='M546.133 298.667c-21.333-4.267-42.667-4.267-64 0-115.2 17.067-196.267 128-179.2 243.2 8.533 55.467 38.4 106.667 85.333 140.8 38.4 25.6 81.067 42.667 128 42.667 8.533 0 21.333 0 29.867-4.267 55.467-8.533 106.667-38.4 140.8-85.333s46.933-102.4 38.4-157.867c-12.8-93.867-85.333-166.4-179.2-179.2zM618.667 584.533c-21.333 25.6-51.2 46.933-85.333 51.2-68.267 8.533-136.533-38.4-145.067-106.667-12.8-68.267 38.4-136.533 106.667-145.067 4.267 0 12.8 0 17.067 0s12.8 0 17.067 0c55.467 8.533 98.133 51.2 106.667 106.667 8.533 34.133 0 68.267-17.067 93.867z' />
-            <path d='M716.8 247.467c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 21.333 12.8 29.867 12.8 12.8 0 21.333-4.267 29.867-12.8s12.8-21.333 12.8-29.867c0-12.8-4.267-21.333-12.8-29.867-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Italic.js b/src/app/components/common-ui/Icon/Feather/svgs/Italic.js
deleted file mode 100644
index cca035d6..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Italic.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Italic
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 128h-384c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h153.6l-226.133 597.333h-140.8c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h384c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-153.6l221.867-597.333h145.067c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Layers.js b/src/app/components/common-ui/Icon/Feather/svgs/Layers.js
deleted file mode 100644
index 6ce953c5..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Layers.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Layers
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M68.267 337.067l426.667 213.333c4.267 4.267 8.533 4.267 17.067 4.267s12.8 0 17.067-4.267l426.667-213.333c17.067-8.533 25.6-21.333 25.6-38.4s-8.533-29.867-25.6-38.4l-426.667-213.333c-12.8-4.267-25.6-4.267-38.4 0l-426.667 213.333c-12.8 8.533-21.333 21.333-21.333 38.4s8.533 29.867 25.6 38.4zM512 132.267l332.8 166.4-332.8 166.4-332.8-166.4 332.8-166.4z' />
-            <path d='M921.6 686.933l-409.6 204.8-409.6-204.8c-21.333-8.533-46.933 0-55.467 17.067s0 46.933 17.067 55.467l426.667 213.333c8.533 8.533 12.8 8.533 21.333 8.533s12.8 0 17.067-4.267l426.667-213.333c21.333-8.533 29.867-34.133 17.067-55.467-8.533-21.333-34.133-29.867-51.2-21.333z' />
-            <path d='M921.6 473.6l-409.6 204.8-409.6-204.8c-21.333-8.533-46.933 0-55.467 17.067-8.533 21.333 0 46.933 17.067 55.467l426.667 213.333c8.533 8.533 12.8 8.533 21.333 8.533s12.8 0 17.067-4.267l426.667-213.333c21.333-8.533 29.867-34.133 17.067-55.467-8.533-21.333-34.133-29.867-51.2-21.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Layout.js b/src/app/components/common-ui/Icon/Feather/svgs/Layout.js
deleted file mode 100644
index 9c9e15c8..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Layout.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Layout
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 85.333h-597.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128zM213.333 170.667h597.333c25.6 0 42.667 17.067 42.667 42.667v128h-682.667v-128c0-25.6 17.067-42.667 42.667-42.667zM170.667 810.667v-384h170.667v426.667h-128c-25.6 0-42.667-17.067-42.667-42.667zM810.667 853.333h-384v-426.667h426.667v384c0 25.6-17.067 42.667-42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/LifeBuoy.js b/src/app/components/common-ui/Icon/Feather/svgs/LifeBuoy.js
deleted file mode 100644
index 6773d629..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/LifeBuoy.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.LifeBuoy
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M844.8 844.8c85.333-85.333 136.533-200.533 136.533-332.8 0-128-51.2-247.467-136.533-332.8 0 0 0 0 0 0s0 0 0 0c-85.333-85.333-204.8-136.533-332.8-136.533s-247.467 51.2-332.8 136.533c0 0 0 0 0 0s0 0 0 0c-85.333 85.333-136.533 204.8-136.533 332.8s51.2 247.467 136.533 332.8c0 0 0 0 0 0s0 0 0 0c85.333 85.333 200.533 136.533 332.8 136.533 128 0 247.467-51.2 332.8-136.533 0 0 0 0 0 0s0 0 0 0zM810.667 750.933l-123.733-123.733c25.6-29.867 38.4-72.533 38.4-115.2s-12.8-85.333-34.133-119.467l119.467-119.467c51.2 64 85.333 149.333 85.333 238.933s-29.867 174.933-85.333 238.933zM384 512c0-72.533 55.467-128 128-128s128 55.467 128 128-55.467 128-128 128-128-55.467-128-128zM750.933 213.333l-123.733 123.733c-29.867-25.6-72.533-38.4-115.2-38.4s-85.333 12.8-119.467 34.133l-119.467-119.467c64-55.467 149.333-85.333 238.933-85.333s174.933 29.867 238.933 85.333zM213.333 273.067l123.733 123.733c-25.6 29.867-38.4 72.533-38.4 115.2s12.8 85.333 34.133 119.467l-119.467 119.467c-51.2-64-85.333-149.333-85.333-238.933s29.867-174.933 85.333-238.933zM273.067 810.667l123.733-123.733c29.867 25.6 72.533 38.4 115.2 38.4s85.333-12.8 119.467-34.133l123.733 123.733c-64 51.2-149.333 85.333-238.933 85.333-93.867-4.267-179.2-34.133-243.2-89.6z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Link.js b/src/app/components/common-ui/Icon/Feather/svgs/Link.js
deleted file mode 100644
index f599330f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Link.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Link
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M900.267 119.467c-98.133-98.133-256-98.133-354.133 0l-76.8 72.533c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l72.533-72.533c68.267-64 170.667-64 238.933 0s68.267 174.933 4.267 238.933l-128 128c-4.267 4.267-12.8 12.8-17.067 17.067-76.8 55.467-183.467 42.667-238.933-34.133-12.8-17.067-42.667-21.333-59.733-8.533s-21.333 42.667-8.533 59.733c51.2 68.267 128 102.4 204.8 102.4 51.2 0 106.667-17.067 153.6-51.2 8.533-8.533 17.067-17.067 29.867-25.6l128-128c98.133-98.133 93.867-264.533-8.533-358.4z' />
-            <path d='M490.667 772.267l-72.533 72.533c-68.267 64-170.667 64-238.933 0s-68.267-174.933-4.267-238.933l128-128c4.267-4.267 12.8-12.8 17.067-17.067 38.4-25.6 81.067-38.4 128-34.133 46.933 8.533 85.333 29.867 110.933 68.267 12.8 17.067 42.667 21.333 59.733 8.533s21.333-42.667 8.533-59.733c-42.667-55.467-102.4-89.6-166.4-98.133-64-12.8-132.267 4.267-187.733 46.933-8.533 8.533-17.067 17.067-25.6 25.6l-128 128c-98.133 102.4-93.867 264.533 4.267 362.667 51.2 46.933 115.2 72.533 179.2 72.533s128-25.6 179.2-72.533l72.533-72.533c17.067-17.067 17.067-42.667 0-59.733s-46.933-21.333-64-4.267z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Link2.js b/src/app/components/common-ui/Icon/Feather/svgs/Link2.js
deleted file mode 100644
index 36f2e339..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Link2.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Link2
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M384 682.667h-128c-93.867 0-170.667-76.8-170.667-170.667s76.8-170.667 170.667-170.667h128c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-128c-140.8 0-256 115.2-256 256s115.2 256 256 256h128c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M768 256h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h128c93.867 0 170.667 76.8 170.667 170.667s-76.8 170.667-170.667 170.667h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h128c140.8 0 256-115.2 256-256s-115.2-256-256-256z' />
-            <path d='M298.667 512c0 25.6 17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-341.333c-25.6 0-42.667 17.067-42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Linkedin.js b/src/app/components/common-ui/Icon/Feather/svgs/Linkedin.js
deleted file mode 100644
index 99bbbc4c..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Linkedin.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Linkedin
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M682.667 298.667c-166.4 0-298.667 132.267-298.667 298.667v298.667c0 25.6 17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667v-298.667c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v298.667c0 25.6 17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667v-298.667c0-166.4-132.267-298.667-298.667-298.667zM896 853.333h-85.333v-256c0-72.533-55.467-128-128-128s-128 55.467-128 128v256h-85.333v-256c0-119.467 93.867-213.333 213.333-213.333s213.333 93.867 213.333 213.333v256z' />
-            <path d='M256 341.333h-170.667c-25.6 0-42.667 17.067-42.667 42.667v512c0 25.6 17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667v-512c0-25.6-17.067-42.667-42.667-42.667zM213.333 853.333h-85.333v-426.667h85.333v426.667z' />
-            <path d='M170.667 42.667c-72.533 0-128 55.467-128 128s55.467 128 128 128 128-55.467 128-128-55.467-128-128-128zM170.667 213.333c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667 42.667 17.067 42.667 42.667-17.067 42.667-42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/List.js b/src/app/components/common-ui/Icon/Feather/svgs/List.js
deleted file mode 100644
index 49f3cfc9..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/List.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Icon: Feather.List
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M341.333 298.667h554.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-554.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M896 469.333h-554.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h554.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M896 725.333h-554.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h554.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M98.133 226.133c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-            <path d='M98.133 482.133c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-            <path d='M98.133 738.133c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Loader.js b/src/app/components/common-ui/Icon/Feather/svgs/Loader.js
deleted file mode 100644
index ff497156..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Loader.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// Icon: Feather.Loader
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M512 725.333c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M238.933 179.2c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l119.467 119.467c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-119.467-119.467z' />
-            <path d='M721.067 661.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l119.467 119.467c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-119.467-119.467z' />
-            <path d='M298.667 512c0-25.6-17.067-42.667-42.667-42.667h-170.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667z' />
-            <path d='M938.667 469.333h-170.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M302.933 661.333l-119.467 119.467c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l119.467-119.467c17.067-17.067 17.067-42.667 0-59.733s-46.933-17.067-59.733 0z' />
-            <path d='M691.2 375.467c12.8 0 21.333-4.267 29.867-12.8l119.467-119.467c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-119.467 119.467c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Lock.js b/src/app/components/common-ui/Icon/Feather/svgs/Lock.js
deleted file mode 100644
index ff425826..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Lock.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Lock
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 426.667h-42.667v-128c0-140.8-115.2-256-256-256s-256 115.2-256 256v128h-42.667c-72.533 0-128 55.467-128 128v298.667c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-298.667c0-72.533-55.467-128-128-128zM341.333 298.667c0-93.867 76.8-170.667 170.667-170.667s170.667 76.8 170.667 170.667v128h-341.333v-128zM853.333 853.333c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-298.667c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v298.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/LogIn.js b/src/app/components/common-ui/Icon/Feather/svgs/LogIn.js
deleted file mode 100644
index 60d5b55f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/LogIn.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.LogIn
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 85.333h-170.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h170.667c25.6 0 42.667 17.067 42.667 42.667v597.333c0 25.6-17.067 42.667-42.667 42.667h-170.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h170.667c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128z' />
-            <path d='M678.4 529.067c4.267-8.533 4.267-21.333 0-34.133-4.267-4.267-4.267-8.533-8.533-12.8l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l140.8 140.8h-409.6c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h409.6l-140.8 140.8c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l213.333-213.333c4.267-4.267 8.533-8.533 8.533-12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/LogOut.js b/src/app/components/common-ui/Icon/Feather/svgs/LogOut.js
deleted file mode 100644
index 177c73e1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/LogOut.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.LogOut
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M384 853.333h-170.667c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h170.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-170.667c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h170.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M934.4 529.067c4.267-8.533 4.267-21.333 0-34.133-4.267-4.267-4.267-8.533-8.533-12.8l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l140.8 140.8h-409.6c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h409.6l-140.8 140.8c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l213.333-213.333c4.267-4.267 8.533-8.533 8.533-12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Mail.js b/src/app/components/common-ui/Icon/Feather/svgs/Mail.js
deleted file mode 100644
index e4a54def..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Mail.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Mail
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 128h-682.667c-72.533 0-128 55.467-128 128v512c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-512c0-72.533-55.467-128-128-128zM170.667 213.333h682.667c17.067 0 29.867 8.533 38.4 25.6l-379.733 264.533-379.733-264.533c8.533-17.067 21.333-25.6 38.4-25.6zM853.333 810.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-430.933l358.4 251.733c8.533 4.267 17.067 8.533 25.6 8.533s17.067-4.267 25.6-8.533l358.4-251.733v430.933c0 25.6-17.067 42.667-42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Map.js b/src/app/components/common-ui/Icon/Feather/svgs/Map.js
deleted file mode 100644
index 4b0e44da..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Map.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Map
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1002.667 46.933c-12.8-8.533-29.867-8.533-42.667 0l-277.333 162.133-324.267-162.133c0 0 0 0 0 0s0 0-4.267 0c-4.267-4.267-8.533-4.267-12.8-4.267 0 0 0 0 0 0s0 0 0 0c-4.267 0-8.533 0-17.067 4.267 0 0 0 0-4.267 0 0 0-4.267 0-4.267 0l-298.667 170.667c-8.533 8.533-17.067 21.333-17.067 38.4v682.667c0 17.067 8.533 29.867 21.333 38.4s29.867 8.533 42.667 0l277.333-162.133 320 162.133c0 0 0 0 0 0 8.533 4.267 12.8 4.267 21.333 4.267 4.267 0 8.533 0 12.8-4.267 0 0 4.267 0 4.267 0s0 0 4.267 0l298.667-170.667c12.8-8.533 21.333-21.333 21.333-38.4v-682.667c0-17.067-8.533-29.867-21.333-38.4zM384 153.6l256 128v588.8l-256-128v-588.8zM85.333 281.6l213.333-123.733v584.533l-213.333 123.733v-584.533zM938.667 742.4l-213.333 123.733v-584.533l213.333-123.733v584.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/MapPin.js b/src/app/components/common-ui/Icon/Feather/svgs/MapPin.js
deleted file mode 100644
index 8c9eca26..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/MapPin.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.MapPin
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 0c-234.667 0-426.667 192-426.667 426.667 0 315.733 388.267 580.267 401.067 588.8 8.533 4.267 17.067 8.533 25.6 8.533s17.067-4.267 25.6-8.533c12.8-8.533 401.067-273.067 401.067-588.8 0-234.667-192-426.667-426.667-426.667zM512 930.133c-81.067-59.733-341.333-273.067-341.333-503.467 0-187.733 153.6-341.333 341.333-341.333s341.333 153.6 341.333 341.333c0 230.4-260.267 443.733-341.333 503.467z' />
-            <path d='M512 256c-93.867 0-170.667 76.8-170.667 170.667s76.8 170.667 170.667 170.667c93.867 0 170.667-76.8 170.667-170.667s-76.8-170.667-170.667-170.667zM512 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Maximize.js b/src/app/components/common-ui/Icon/Feather/svgs/Maximize.js
deleted file mode 100644
index 92965f86..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Maximize.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.Maximize
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M341.333 853.333h-128c-25.6 0-42.667-17.067-42.667-42.667v-128c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v128c0 72.533 55.467 128 128 128h128c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M341.333 85.333h-128c-72.533 0-128 55.467-128 128v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128c0-25.6 17.067-42.667 42.667-42.667h128c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M810.667 85.333h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h128c25.6 0 42.667 17.067 42.667 42.667v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128c0-72.533-55.467-128-128-128z' />
-            <path d='M896 640c-25.6 0-42.667 17.067-42.667 42.667v128c0 25.6-17.067 42.667-42.667 42.667h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h128c72.533 0 128-55.467 128-128v-128c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Maximize2.js b/src/app/components/common-ui/Icon/Feather/svgs/Maximize2.js
deleted file mode 100644
index 1a4a53ae..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Maximize2.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Maximize2
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M934.4 110.933c-4.267-8.533-12.8-17.067-21.333-21.333-4.267-4.267-12.8-4.267-17.067-4.267h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h153.6l-226.133 226.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l226.133-226.133v153.6c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-4.267 0-12.8-4.267-17.067z' />
-            <path d='M396.8 567.467l-226.133 226.133v-153.6c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v256c0 4.267 0 12.8 4.267 17.067 4.267 8.533 12.8 17.067 21.333 21.333 4.267 4.267 12.8 4.267 17.067 4.267h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-153.6l226.133-226.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Menu.js b/src/app/components/common-ui/Icon/Feather/svgs/Menu.js
deleted file mode 100644
index f61519ca..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Menu.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Menu
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 469.333h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M128 298.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M896 725.333h-768c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h768c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/MessageCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/MessageCircle.js
deleted file mode 100644
index c4a7ebc5..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/MessageCircle.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.MessageCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M938.667 465.067c-12.8-204.8-174.933-371.2-384-379.733h-21.333c0 0 0 0 0 0-64 0-123.733 12.8-179.2 42.667-140.8 68.267-226.133 209.067-226.133 362.667 0 55.467 12.8 115.2 34.133 166.4l-76.8 226.133c-4.267 17.067 0 34.133 8.533 42.667 12.8 8.533 21.333 12.8 34.133 12.8 4.267 0 8.533 0 12.8-4.267l226.133-76.8c51.2 21.333 106.667 34.133 166.4 34.133 153.6 0 294.4-85.333 362.667-221.867 29.867-55.467 42.667-119.467 42.667-183.467v-21.333zM853.333 490.667c0 0 0 0 0 0 0 51.2-12.8 98.133-34.133 145.067-55.467 110.933-162.133 174.933-285.867 174.933-51.2 0-98.133-12.8-140.8-34.133-8.533-4.267-21.333-4.267-34.133-4.267l-162.133 55.467 55.467-162.133c4.267-12.8 4.267-21.333-4.267-34.133-21.333-42.667-34.133-93.867-34.133-140.8 0-123.733 68.267-230.4 179.2-285.867 42.667-21.333 93.867-34.133 140.8-34.133 0 0 0 0 0 0h17.067c162.133 8.533 290.133 136.533 302.933 298.667v21.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/MessageSquare.js b/src/app/components/common-ui/Icon/Feather/svgs/MessageSquare.js
deleted file mode 100644
index b1f3f0e4..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/MessageSquare.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.MessageSquare
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 85.333h-597.333c-72.533 0-128 55.467-128 128v682.667c0 17.067 8.533 34.133 25.6 38.4 4.267 4.267 12.8 4.267 17.067 4.267 12.8 0 21.333-4.267 29.867-12.8l157.867-157.867h494.933c72.533 0 128-55.467 128-128v-426.667c0-72.533-55.467-128-128-128zM853.333 640c0 25.6-17.067 42.667-42.667 42.667h-512c-12.8 0-21.333 4.267-29.867 12.8l-98.133 98.133v-580.267c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v426.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Mic.js b/src/app/components/common-ui/Icon/Feather/svgs/Mic.js
deleted file mode 100644
index a442a560..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Mic.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Mic
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 682.667c93.867 0 170.667-76.8 170.667-170.667v-341.333c0-93.867-76.8-170.667-170.667-170.667s-170.667 76.8-170.667 170.667v341.333c0 93.867 76.8 170.667 170.667 170.667zM426.667 170.667c0-46.933 38.4-85.333 85.333-85.333s85.333 38.4 85.333 85.333v341.333c0 46.933-38.4 85.333-85.333 85.333s-85.333-38.4-85.333-85.333v-341.333z' />
-            <path d='M810.667 384c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 140.8-115.2 256-256 256s-256-115.2-256-256v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333c0 174.933 132.267 315.733 298.667 337.067v89.6h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-128v-89.6c166.4-21.333 298.667-166.4 298.667-337.067v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/MicOff.js b/src/app/components/common-ui/Icon/Feather/svgs/MicOff.js
deleted file mode 100644
index 6cfa7fcc..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/MicOff.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.MicOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1011.2 951.467l-251.733-251.733c0-4.267-4.267-4.267-4.267-8.533 0 0-4.267-4.267-4.267-4.267l-337.067-332.8c0 0 0 0 0 0l-341.333-341.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l328.533 328.533v110.933c0 46.933 17.067 89.6 51.2 119.467 29.867 34.133 72.533 51.2 119.467 51.2 0 0 0 0 0 0 29.867 0 59.733-8.533 85.333-25.6l64 64c-42.667 29.867-89.6 46.933-140.8 46.933-4.267 0-4.267 0-8.533 0s-4.267 0-8.533 0c-64 0-123.733-25.6-170.667-72.533-51.2-46.933-76.8-115.2-76.8-183.467v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333c0 93.867 38.4 183.467 102.4 247.467 55.467 55.467 123.733 85.333 196.267 93.867v85.333h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-128v-85.333c59.733-8.533 119.467-29.867 166.4-68.267l230.4 230.4c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-21.333 17.067-46.933 0-64zM512 597.333c0 0 0 0 0 0-21.333 0-42.667-8.533-59.733-25.6s-25.6-38.4-25.6-59.733v-25.6l106.667 106.667c-8.533 4.267-12.8 4.267-21.333 4.267z' />
-            <path d='M379.733 187.733c21.333 4.267 42.667-12.8 46.933-34.133 8.533-38.4 42.667-68.267 85.333-68.267 0 0 0 0 0 0 21.333 0 42.667 8.533 59.733 25.6s25.6 38.4 25.6 59.733v226.133c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-226.133c0-46.933-17.067-89.6-51.2-119.467-29.867-34.133-72.533-51.2-119.467-51.2 0 0 0 0 0 0-81.067 0-149.333 55.467-166.4 136.533-4.267 21.333 8.533 46.933 34.133 51.2z' />
-            <path d='M797.867 605.867c4.267 0 4.267 0 8.533 0 21.333 0 38.4-12.8 42.667-34.133s4.267-38.4 4.267-59.733v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333c0 17.067 0 29.867-4.267 46.933-4.267 21.333 12.8 42.667 34.133 46.933z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Minimize.js b/src/app/components/common-ui/Icon/Feather/svgs/Minimize.js
deleted file mode 100644
index 7793fd5c..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Minimize.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.Minimize
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M256 640h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h128c25.6 0 42.667 17.067 42.667 42.667v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128c0-72.533-55.467-128-128-128z' />
-            <path d='M768 384h128c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-128c-25.6 0-42.667-17.067-42.667-42.667v-128c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v128c0 72.533 55.467 128 128 128z' />
-            <path d='M896 640h-128c-72.533 0-128 55.467-128 128v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128c0-25.6 17.067-42.667 42.667-42.667h128c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M341.333 85.333c-25.6 0-42.667 17.067-42.667 42.667v128c0 25.6-17.067 42.667-42.667 42.667h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h128c72.533 0 128-55.467 128-128v-128c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Minimize2.js b/src/app/components/common-ui/Icon/Feather/svgs/Minimize2.js
deleted file mode 100644
index 7a6f51f6..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Minimize2.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Minimize2
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M443.733 558.933c-4.267-4.267-12.8-4.267-17.067-4.267h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h153.6l-226.133 226.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l226.133-226.133v153.6c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-4.267 0-12.8-4.267-17.067-4.267-8.533-12.8-17.067-21.333-21.333z' />
-            <path d='M925.867 98.133c-17.067-17.067-42.667-17.067-59.733 0l-226.133 226.133v-153.6c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v256c0 4.267 0 12.8 4.267 17.067 4.267 8.533 12.8 17.067 21.333 21.333 4.267 4.267 12.8 4.267 17.067 4.267h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-153.6l226.133-226.133c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Minus.js b/src/app/components/common-ui/Icon/Feather/svgs/Minus.js
deleted file mode 100644
index 50bc9d71..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Minus.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Minus
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 469.333h-597.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/MinusCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/MinusCircle.js
deleted file mode 100644
index fab7da46..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/MinusCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.MinusCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M682.667 469.333h-341.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/MinusSquare.js b/src/app/components/common-ui/Icon/Feather/svgs/MinusSquare.js
deleted file mode 100644
index 956d5f42..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/MinusSquare.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.MinusSquare
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 85.333h-597.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128zM853.333 810.667c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v597.333z' />
-            <path d='M682.667 469.333h-341.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Monitor.js b/src/app/components/common-ui/Icon/Feather/svgs/Monitor.js
deleted file mode 100644
index 96a8ae85..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Monitor.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Monitor
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 85.333h-682.667c-72.533 0-128 55.467-128 128v426.667c0 72.533 55.467 128 128 128h298.667v85.333h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-128v-85.333h298.667c72.533 0 128-55.467 128-128v-426.667c0-72.533-55.467-128-128-128zM896 640c0 25.6-17.067 42.667-42.667 42.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-426.667c0-25.6 17.067-42.667 42.667-42.667h682.667c25.6 0 42.667 17.067 42.667 42.667v426.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Moon.js b/src/app/components/common-ui/Icon/Feather/svgs/Moon.js
deleted file mode 100644
index fbc4f7d6..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Moon.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Moon
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M917.333 507.733c-12.8-8.533-34.133-8.533-46.933 4.267-89.6 68.267-213.333 68.267-302.933 0-115.2-85.333-140.8-243.2-55.467-358.4 8.533-12.8 12.8-29.867 4.267-46.933-8.533-12.8-25.6-21.333-42.667-21.333-204.8 17.067-366.933 179.2-384 384-21.333 234.667 149.333 443.733 384 465.067 12.8 0 25.6 0 38.4 0 98.133 0 196.267-34.133 273.067-98.133 89.6-72.533 140.8-174.933 153.6-290.133 0-12.8-8.533-29.867-21.333-38.4zM733.867 772.267c-68.267 59.733-157.867 85.333-247.467 76.8-187.733-17.067-324.267-183.467-307.2-371.2 12.8-132.267 102.4-247.467 221.867-290.133-51.2 136.533-4.267 298.667 119.467 392.533 93.867 68.267 213.333 85.333 320 46.933-25.6 55.467-59.733 106.667-106.667 145.067z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/MoreHorizontal.js b/src/app/components/common-ui/Icon/Feather/svgs/MoreHorizontal.js
deleted file mode 100644
index 1d42b0b5..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/MoreHorizontal.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.MoreHorizontal
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M597.333 512c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z' />
-            <path d='M896 512c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z' />
-            <path d='M298.667 512c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/MoreVertical.js b/src/app/components/common-ui/Icon/Feather/svgs/MoreVertical.js
deleted file mode 100644
index fe28e7c0..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/MoreVertical.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.MoreVertical
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M597.333 512c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z' />
-            <path d='M597.333 213.333c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z' />
-            <path d='M597.333 810.667c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Move.js b/src/app/components/common-ui/Icon/Feather/svgs/Move.js
deleted file mode 100644
index 0a76aab9..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Move.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Move
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M977.067 529.067c4.267-8.533 4.267-21.333 0-34.133-4.267-4.267-4.267-8.533-8.533-12.8l-128-128c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l55.467 55.467h-281.6v-281.6l55.467 55.467c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-128-128c-4.267-4.267-8.533-8.533-12.8-8.533-8.533-4.267-21.333-4.267-34.133 0-4.267 4.267-8.533 4.267-12.8 8.533l-128 128c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l55.467-55.467v281.6h-281.6l55.467-55.467c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-128 128c-4.267 4.267-8.533 8.533-8.533 12.8-4.267 8.533-4.267 21.333 0 34.133 4.267 4.267 4.267 8.533 8.533 12.8l128 128c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-55.467-55.467h281.6v281.6l-55.467-55.467c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l128 128c4.267 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.8 4.267 17.067 4.267s12.8 0 17.067-4.267c4.267-4.267 8.533-4.267 12.8-8.533l128-128c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-55.467 55.467v-281.6h281.6l-55.467 55.467c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l128-128c4.267-4.267 8.533-8.533 8.533-12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Music.js b/src/app/components/common-ui/Icon/Feather/svgs/Music.js
deleted file mode 100644
index cde09bbc..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Music.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Music
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M921.6 93.867c-8.533-8.533-21.333-8.533-34.133-8.533l-512 85.333c-17.067 4.267-34.133 21.333-34.133 42.667v469.333h-128c-72.533 0-128 55.467-128 128s55.467 128 128 128h85.333c72.533 0 128-55.467 128-128v-563.2l426.667-72.533v422.4h-128c-72.533 0-128 55.467-128 128s55.467 128 128 128h85.333c72.533 0 128-55.467 128-128v-597.333c0-12.8-4.267-25.6-17.067-34.133zM341.333 810.667c0 25.6-17.067 42.667-42.667 42.667h-85.333c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h128v42.667zM853.333 725.333c0 25.6-17.067 42.667-42.667 42.667h-85.333c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h128v42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Navigation.js b/src/app/components/common-ui/Icon/Feather/svgs/Navigation.js
deleted file mode 100644
index 33ebbe58..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Navigation.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Navigation
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M968.533 55.467c-12.8-12.8-29.867-17.067-46.933-8.533l-810.667 384c-17.067 8.533-25.6 25.6-25.6 42.667s12.8 34.133 34.133 38.4l315.733 81.067 81.067 315.733c4.267 17.067 21.333 29.867 38.4 34.133 0 0 4.267 0 4.267 0 17.067 0 29.867-8.533 38.4-25.6l384-810.667c4.267-21.333-0-38.4-12.8-51.2zM567.467 768l-55.467-221.867c-4.267-17.067-17.067-25.6-29.867-29.867l-226.133-59.733 593.067-281.6-281.6 593.067z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Navigation2.js b/src/app/components/common-ui/Icon/Feather/svgs/Navigation2.js
deleted file mode 100644
index 339cd57f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Navigation2.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Navigation2
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M849.067 883.2l-298.667-810.667c-4.267-17.067-21.333-29.867-38.4-29.867s-34.133 12.8-38.4 29.867l-298.667 810.667c-4.267 17.067 0 34.133 12.8 46.933s34.133 12.8 46.933 4.267l277.333-157.867 277.333 157.867c8.533 4.267 12.8 4.267 21.333 4.267s21.333-4.267 25.6-8.533c17.067-12.8 21.333-34.133 12.8-46.933zM533.333 686.933c-8.533-4.267-12.8-4.267-21.333-4.267s-12.8 0-21.333 4.267l-196.267 110.933 217.6-588.8 217.6 593.067-196.267-115.2z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Octagon.js b/src/app/components/common-ui/Icon/Feather/svgs/Octagon.js
deleted file mode 100644
index 93d36af3..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Octagon.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Octagon
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M968.533 307.2l-251.733-251.733c-4.267-8.533-17.067-12.8-29.867-12.8h-349.867c-12.8 0-25.6 4.267-29.867 12.8l-251.733 251.733c-8.533 4.267-12.8 17.067-12.8 29.867v354.133c0 12.8 4.267 21.333 12.8 29.867l251.733 251.733c4.267 4.267 17.067 8.533 29.867 8.533h354.133c12.8 0 21.333-4.267 29.867-12.8l251.733-251.733c8.533-8.533 12.8-17.067 12.8-29.867v-349.867c-4.267-12.8-8.533-25.6-17.067-29.867zM896 669.867l-226.133 226.133h-315.733l-226.133-226.133v-315.733l226.133-226.133h320l221.867 226.133v315.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Package.js b/src/app/components/common-ui/Icon/Feather/svgs/Package.js
deleted file mode 100644
index d9a7310a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Package.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Package
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M908.8 196.267l-341.333-170.667c0 0 0 0 0 0-34.133-17.067-76.8-17.067-115.2 0l-341.333 170.667c-42.667 21.333-68.267 64-68.267 110.933v405.333c0 46.933 25.6 93.867 72.533 115.2l341.333 170.667c17.067 8.533 38.4 12.8 55.467 12.8 21.333 0 38.4-4.267 55.467-12.8l341.333-170.667c42.667-21.333 72.533-64 72.533-115.2v-405.333c0-46.933-25.6-89.6-72.533-110.933zM494.933 98.133c4.267-4.267 12.8-4.267 17.067-4.267 8.533 0 12.8 0 17.067 4.267l315.733 157.867-119.467 59.733-332.8-166.4 102.4-51.2zM512 422.4l-332.8-166.4 119.467-59.733 332.8 166.4-119.467 59.733zM149.333 755.2c-12.8-8.533-21.333-25.6-21.333-38.4v-392.533l341.333 170.667v418.133l-320-157.867zM870.4 755.2l-315.733 157.867v-418.133l341.333-170.667v392.533c0 17.067-8.533 29.867-25.6 38.4z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Paperclip.js b/src/app/components/common-ui/Icon/Feather/svgs/Paperclip.js
deleted file mode 100644
index ace35f76..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Paperclip.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Paperclip
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M942.933 439.467c-17.067-17.067-42.667-17.067-59.733 0l-392.533 392.533c-85.333 85.333-217.6 85.333-302.933 0s-85.333-217.6 0-302.933l392.533-392.533c46.933-46.933 132.267-46.933 179.2 0 51.2 51.2 51.2 132.267 0 179.2l-392.533 392.533c-17.067 17.067-42.667 17.067-59.733 0-4.267-4.267-8.533-12.8-8.533-25.6s4.267-21.333 12.8-29.867l362.667-362.667c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-362.667 362.667c-25.6 21.333-38.4 55.467-38.4 89.6s12.8 68.267 38.4 89.6c51.2 51.2 132.267 51.2 179.2 0l392.533-392.533c85.333-85.333 85.333-217.6 0-302.933-38.4-38.4-93.867-64-149.333-64s-110.933 21.333-149.333 64l-392.533 392.533c-115.2 115.2-115.2 307.2 0 422.4 59.733 59.733 136.533 85.333 213.333 85.333s153.6-29.867 213.333-85.333l392.533-392.533c8.533-12.8 8.533-42.667-8.533-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Pause.js b/src/app/components/common-ui/Icon/Feather/svgs/Pause.js
deleted file mode 100644
index e9f23f86..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Pause.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Pause
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M426.667 128h-170.667c-25.6 0-42.667 17.067-42.667 42.667v682.667c0 25.6 17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667v-682.667c0-25.6-17.067-42.667-42.667-42.667zM384 810.667h-85.333v-597.333h85.333v597.333z' />
-            <path d='M768 128h-170.667c-25.6 0-42.667 17.067-42.667 42.667v682.667c0 25.6 17.067 42.667 42.667 42.667h170.667c25.6 0 42.667-17.067 42.667-42.667v-682.667c0-25.6-17.067-42.667-42.667-42.667zM725.333 810.667h-85.333v-597.333h85.333v597.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PauseCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/PauseCircle.js
deleted file mode 100644
index b91bfbbd..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PauseCircle.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.PauseCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M426.667 341.333c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M597.333 341.333c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Percent.js b/src/app/components/common-ui/Icon/Feather/svgs/Percent.js
deleted file mode 100644
index b4b43ef3..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Percent.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Percent
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M840.533 183.467c-17.067-17.067-42.667-17.067-59.733 0l-597.333 597.333c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l597.333-597.333c17.067-17.067 17.067-42.667 0-59.733z' />
-            <path d='M277.333 426.667c81.067 0 149.333-68.267 149.333-149.333s-68.267-149.333-149.333-149.333-149.333 68.267-149.333 149.333 68.267 149.333 149.333 149.333zM277.333 213.333c34.133 0 64 29.867 64 64s-29.867 64-64 64-64-29.867-64-64 29.867-64 64-64z' />
-            <path d='M746.667 597.333c-81.067 0-149.333 68.267-149.333 149.333s68.267 149.333 149.333 149.333 149.333-68.267 149.333-149.333-68.267-149.333-149.333-149.333zM746.667 810.667c-34.133 0-64-29.867-64-64s29.867-64 64-64 64 29.867 64 64-29.867 64-64 64z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Phone.js b/src/app/components/common-ui/Icon/Feather/svgs/Phone.js
deleted file mode 100644
index 6897275c..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Phone.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Phone
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M870.4 593.067c-38.4-4.267-76.8-12.8-110.933-25.6-46.933-17.067-98.133-4.267-136.533 29.867l-29.867 29.867c-76.8-51.2-145.067-115.2-196.267-196.267l29.867-29.867c34.133-34.133 46.933-89.6 29.867-136.533-12.8-34.133-21.333-72.533-25.6-110.933-8.533-64-64-110.933-128-110.933 0 0 0 0 0 0h-128c-4.267 0-8.533 0-12.8 0-34.133 4.267-64 21.333-85.333 46.933s-29.867 59.733-29.867 93.867c12.8 136.533 64 273.067 136.533 388.267 68.267 106.667 162.133 200.533 268.8 268.8 115.2 76.8 251.733 123.733 388.267 136.533 4.267 0 8.533 0 12.8 0 0 0 0 0 0 0 34.133 0 68.267-12.8 89.6-38.4s38.4-55.467 38.4-89.6v-128c-0-64-46.933-119.467-110.933-128zM896 721.067v128c0 12.8-4.267 21.333-12.8 29.867s-17.067 12.8-34.133 12.8c-123.733-12.8-243.2-55.467-349.867-123.733-98.133-59.733-179.2-145.067-243.2-243.2-68.267-106.667-110.933-226.133-123.733-349.867 0-12.8 4.267-21.333 8.533-29.867 8.533-8.533 21.333-17.067 34.133-17.067h128c0 0 0 0 0 0 21.333 0 38.4 17.067 42.667 38.4 4.267 42.667 17.067 89.6 34.133 128 4.267 17.067 0 34.133-8.533 46.933l-55.467 51.2c-12.8 12.8-17.067 34.133-8.533 51.2 64 115.2 157.867 209.067 273.067 273.067 17.067 8.533 38.4 8.533 51.2-8.533l55.467-55.467c12.8-12.8 29.867-17.067 46.933-8.533 42.667 17.067 85.333 25.6 128 34.133 17.067 4.267 34.133 21.333 34.133 42.667 0 0 0 0 0 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PhoneCall.js b/src/app/components/common-ui/Icon/Feather/svgs/PhoneCall.js
deleted file mode 100644
index 6a45a58e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PhoneCall.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.PhoneCall
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M870.4 593.067c-38.4-4.267-76.8-12.8-110.933-25.6-46.933-17.067-98.133-4.267-136.533 29.867l-29.867 29.867c-76.8-51.2-145.067-115.2-196.267-196.267l29.867-29.867c34.133-34.133 46.933-89.6 29.867-136.533-12.8-34.133-21.333-72.533-25.6-110.933-8.533-64-64-110.933-128-110.933 0 0 0 0 0 0h-128c-4.267 0-8.533 0-12.8 0-34.133 4.267-64 21.333-85.333 46.933s-29.867 59.733-29.867 93.867c12.8 136.533 64 273.067 136.533 388.267 68.267 106.667 162.133 200.533 268.8 268.8 115.2 76.8 251.733 123.733 388.267 136.533 4.267 0 8.533 0 12.8 0 0 0 0 0 0 0 34.133 0 68.267-12.8 89.6-38.4s38.4-55.467 38.4-89.6v-128c-0-64-46.933-119.467-110.933-128zM896 721.067v128c0 12.8-4.267 21.333-12.8 29.867s-17.067 12.8-34.133 12.8c-123.733-12.8-243.2-55.467-349.867-123.733-98.133-59.733-179.2-145.067-243.2-243.2-68.267-106.667-110.933-226.133-123.733-349.867 0-12.8 4.267-21.333 8.533-29.867 8.533-8.533 21.333-17.067 34.133-17.067h128c0 0 0 0 0 0 21.333 0 38.4 17.067 42.667 38.4 4.267 42.667 17.067 89.6 34.133 128 4.267 17.067 0 34.133-8.533 46.933l-55.467 51.2c-12.8 12.8-17.067 34.133-8.533 51.2 64 115.2 157.867 209.067 273.067 273.067 17.067 8.533 38.4 8.533 51.2-8.533l55.467-55.467c12.8-12.8 29.867-17.067 46.933-8.533 42.667 17.067 85.333 25.6 128 34.133 17.067 4.267 34.133 21.333 34.133 42.667 0 0 0 0 0 0z' />
-            <path d='M648.533 0c-21.333-4.267-42.667 12.8-46.933 38.4-4.267 21.333 12.8 42.667 38.4 46.933 157.867 17.067 281.6 140.8 302.933 302.933 4.267 21.333 21.333 38.4 42.667 38.4 0 0 4.267 0 4.267 0 21.333-4.267 38.4-25.6 38.4-46.933-25.6-200.533-183.467-358.4-379.733-379.733z' />
-            <path d='M768 388.267c4.267 21.333 21.333 34.133 42.667 34.133 4.267 0 4.267 0 8.533 0 21.333-4.267 38.4-25.6 34.133-51.2-21.333-102.4-98.133-183.467-200.533-200.533-21.333-4.267-46.933 8.533-51.2 34.133s8.533 46.933 34.133 51.2c68.267 12.8 119.467 64 132.267 132.267z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PhoneForwarded.js b/src/app/components/common-ui/Icon/Feather/svgs/PhoneForwarded.js
deleted file mode 100644
index 04ecc25a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PhoneForwarded.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.PhoneForwarded
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1019.733 230.4c4.267-8.533 4.267-21.333 0-34.133-4.267-4.267-4.267-8.533-8.533-12.8l-170.667-170.667c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l98.133 98.133h-238.933c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h238.933l-98.133 98.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l170.667-170.667c4.267-4.267 8.533-8.533 8.533-12.8z' />
-            <path d='M870.4 593.067c-38.4-4.267-76.8-12.8-110.933-25.6-46.933-17.067-98.133-4.267-136.533 29.867l-29.867 29.867c-76.8-51.2-145.067-115.2-196.267-196.267l29.867-29.867c34.133-34.133 46.933-89.6 29.867-136.533-12.8-34.133-21.333-72.533-25.6-110.933-8.533-64-64-110.933-128-110.933 0 0 0 0 0 0h-128c-4.267 0-8.533 0-12.8 0-34.133 4.267-64 21.333-85.333 46.933s-29.867 59.733-29.867 93.867c12.8 136.533 64 273.067 136.533 388.267 68.267 106.667 162.133 200.533 268.8 268.8 115.2 76.8 251.733 123.733 388.267 136.533 4.267 0 8.533 0 12.8 0 0 0 0 0 0 0 34.133 0 68.267-12.8 89.6-38.4s38.4-55.467 38.4-89.6v-128c-0-64-46.933-119.467-110.933-128zM896 721.067v128c0 12.8-4.267 21.333-12.8 29.867s-17.067 12.8-34.133 12.8c-123.733-12.8-243.2-55.467-349.867-123.733-98.133-59.733-179.2-145.067-243.2-243.2-68.267-106.667-110.933-226.133-123.733-349.867 0-12.8 4.267-21.333 8.533-29.867 8.533-8.533 21.333-17.067 34.133-17.067h128c0 0 0 0 0 0 21.333 0 38.4 17.067 42.667 38.4 4.267 42.667 17.067 89.6 34.133 128 4.267 17.067 0 34.133-8.533 46.933l-55.467 51.2c-12.8 12.8-17.067 34.133-8.533 51.2 64 115.2 157.867 209.067 273.067 273.067 17.067 8.533 38.4 8.533 51.2-8.533l55.467-55.467c12.8-12.8 29.867-17.067 46.933-8.533 42.667 17.067 85.333 25.6 128 34.133 17.067 4.267 34.133 21.333 34.133 42.667 0 0 0 0 0 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PhoneIncoming.js b/src/app/components/common-ui/Icon/Feather/svgs/PhoneIncoming.js
deleted file mode 100644
index aff24044..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PhoneIncoming.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.PhoneIncoming
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1011.2 12.8c-17.067-17.067-42.667-17.067-59.733 0l-226.133 226.133v-153.6c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v256c0 4.267 0 12.8 4.267 17.067 4.267 8.533 12.8 17.067 21.333 21.333 4.267 4.267 12.8 4.267 17.067 4.267h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-153.6l226.133-226.133c17.067-17.067 17.067-42.667 0-59.733z' />
-            <path d='M870.4 593.067c-38.4-4.267-76.8-12.8-110.933-25.6-46.933-17.067-98.133-4.267-136.533 29.867l-29.867 29.867c-76.8-51.2-145.067-115.2-196.267-196.267l29.867-29.867c34.133-34.133 46.933-89.6 29.867-136.533-12.8-34.133-21.333-72.533-25.6-110.933-8.533-64-64-110.933-128-110.933 0 0 0 0 0 0h-128c-4.267 0-8.533 0-12.8 0-34.133 4.267-64 21.333-85.333 46.933s-29.867 59.733-29.867 93.867c12.8 136.533 64 273.067 136.533 388.267 68.267 106.667 162.133 200.533 268.8 268.8 115.2 76.8 251.733 123.733 388.267 136.533 4.267 0 8.533 0 12.8 0 0 0 0 0 0 0 34.133 0 68.267-12.8 89.6-38.4s38.4-55.467 38.4-89.6v-128c-0-64-46.933-119.467-110.933-128zM896 721.067v128c0 12.8-4.267 21.333-12.8 29.867s-17.067 12.8-34.133 12.8c-123.733-12.8-243.2-55.467-349.867-123.733-98.133-59.733-179.2-145.067-243.2-243.2-68.267-106.667-110.933-226.133-123.733-349.867 0-12.8 4.267-21.333 8.533-29.867 8.533-8.533 21.333-17.067 34.133-17.067h128c0 0 0 0 0 0 21.333 0 38.4 17.067 42.667 38.4 4.267 42.667 17.067 89.6 34.133 128 4.267 17.067 0 34.133-8.533 46.933l-55.467 51.2c-12.8 12.8-17.067 34.133-8.533 51.2 64 115.2 157.867 209.067 273.067 273.067 17.067 8.533 38.4 8.533 51.2-8.533l55.467-55.467c12.8-12.8 29.867-17.067 46.933-8.533 42.667 17.067 85.333 25.6 128 34.133 17.067 4.267 34.133 21.333 34.133 42.667 0 0 0 0 0 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PhoneMissed.js b/src/app/components/common-ui/Icon/Feather/svgs/PhoneMissed.js
deleted file mode 100644
index 93a4fd9e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PhoneMissed.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.PhoneMissed
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M913.067 170.667l98.133-98.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-98.133 98.133-98.133-98.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l98.133 98.133-98.133 98.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l98.133-98.133 98.133 98.133c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-98.133-98.133z' />
-            <path d='M870.4 593.067c-38.4-4.267-76.8-12.8-110.933-25.6-46.933-17.067-98.133-4.267-136.533 29.867l-29.867 29.867c-76.8-51.2-145.067-115.2-196.267-196.267l29.867-29.867c34.133-34.133 46.933-89.6 29.867-136.533-12.8-34.133-21.333-72.533-25.6-110.933-8.533-64-64-110.933-128-110.933 0 0 0 0 0 0h-128c-4.267 0-8.533 0-12.8 0-34.133 4.267-64 21.333-85.333 46.933s-29.867 59.733-29.867 93.867c12.8 136.533 64 273.067 136.533 388.267 68.267 106.667 162.133 200.533 268.8 268.8 115.2 76.8 251.733 123.733 388.267 136.533 4.267 0 8.533 0 12.8 0 0 0 0 0 0 0 34.133 0 68.267-12.8 89.6-38.4s38.4-55.467 38.4-89.6v-128c-0-64-46.933-119.467-110.933-128zM896 721.067v128c0 12.8-4.267 21.333-12.8 29.867s-17.067 12.8-34.133 12.8c-123.733-12.8-243.2-55.467-349.867-123.733-98.133-59.733-179.2-145.067-243.2-243.2-68.267-106.667-110.933-226.133-123.733-349.867 0-12.8 4.267-21.333 8.533-29.867 8.533-8.533 21.333-17.067 34.133-17.067h128c0 0 0 0 0 0 21.333 0 38.4 17.067 42.667 38.4 4.267 42.667 17.067 89.6 34.133 128 4.267 17.067 0 34.133-8.533 46.933l-55.467 51.2c-12.8 12.8-17.067 34.133-8.533 51.2 64 115.2 157.867 209.067 273.067 273.067 17.067 8.533 38.4 8.533 51.2-8.533l55.467-55.467c12.8-12.8 29.867-17.067 46.933-8.533 42.667 17.067 85.333 25.6 128 34.133 17.067 4.267 34.133 21.333 34.133 42.667 0 0 0 0 0 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PhoneOff.js b/src/app/components/common-ui/Icon/Feather/svgs/PhoneOff.js
deleted file mode 100644
index ff62e6ab..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PhoneOff.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.PhoneOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M221.867 588.8c8.533 0 17.067-4.267 21.333-8.533 21.333-12.8 25.6-38.4 12.8-59.733-68.267-102.4-110.933-221.867-123.733-345.6 0-12.8 4.267-21.333 8.533-29.867 8.533-8.533 21.333-17.067 34.133-17.067h128c21.333 0 38.4 17.067 42.667 38.4 4.267 42.667 17.067 89.6 34.133 128 4.267 17.067 0 34.133-8.533 46.933l-55.467 51.2c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l55.467-55.467c34.133-34.133 46.933-89.6 29.867-136.533-12.8-34.133-21.333-72.533-25.6-110.933-12.8-59.733-68.267-106.667-132.267-106.667 0 0 0 0 0 0h-128c-4.267 0-8.533 0-12.8 0-34.133 4.267-64 21.333-85.333 46.933s-29.867 59.733-29.867 93.867c12.8 136.533 64 273.067 136.533 388.267 8.533 8.533 25.6 17.067 38.4 17.067z' />
-            <path d='M1011.2 12.8c-17.067-17.067-42.667-17.067-59.733 0l-524.8 524.8c0 0 0 0 0 0s0 0 0 0l-413.867 413.867c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l264.533-264.533c38.4 34.133 76.8 64 119.467 89.6 115.2 76.8 251.733 123.733 388.267 136.533 4.267 0 8.533 0 12.8 0 34.133 0 68.267-12.8 89.6-38.4s38.4-55.467 38.4-89.6v-128c0-64-46.933-119.467-110.933-128-38.4-4.267-76.8-12.8-110.933-25.6-46.933-17.067-98.133-4.267-136.533 29.867l-29.867 29.867c-25.6-17.067-51.2-38.4-76.8-59.733l490.667-490.667c17.067-17.067 17.067-42.667 0-59.733zM580.267 716.8c17.067 8.533 38.4 8.533 51.2-8.533l55.467-55.467c12.8-12.8 29.867-17.067 46.933-8.533 42.667 17.067 85.333 25.6 128 34.133 21.333 4.267 38.4 21.333 38.4 42.667v128c0 12.8-4.267 21.333-12.8 29.867s-17.067 12.8-34.133 12.8c-123.733-12.8-243.2-55.467-349.867-123.733-38.4-21.333-72.533-51.2-102.4-81.067l59.733-59.733c34.133 34.133 76.8 64 119.467 89.6z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PhoneOutgoing.js b/src/app/components/common-ui/Icon/Feather/svgs/PhoneOutgoing.js
deleted file mode 100644
index c4e03797..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PhoneOutgoing.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.PhoneOutgoing
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1019.733 25.6c-4.267-8.533-12.8-17.067-21.333-21.333-4.267-4.267-12.8-4.267-17.067-4.267h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h153.6l-226.133 226.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l226.133-226.133v153.6c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-4.267 0-12.8-4.267-17.067z' />
-            <path d='M870.4 593.067c-38.4-4.267-76.8-12.8-110.933-25.6-46.933-17.067-98.133-4.267-136.533 29.867l-29.867 29.867c-76.8-51.2-145.067-115.2-196.267-196.267l29.867-29.867c34.133-34.133 46.933-89.6 29.867-136.533-12.8-34.133-21.333-72.533-25.6-110.933-8.533-64-64-110.933-128-110.933 0 0 0 0 0 0h-128c-4.267 0-8.533 0-12.8 0-34.133 4.267-64 21.333-85.333 46.933s-29.867 59.733-29.867 93.867c12.8 136.533 64 273.067 136.533 388.267 68.267 106.667 162.133 200.533 268.8 268.8 115.2 76.8 251.733 123.733 388.267 136.533 4.267 0 8.533 0 12.8 0 0 0 0 0 0 0 34.133 0 68.267-12.8 89.6-38.4s38.4-55.467 38.4-89.6v-128c-0-64-46.933-119.467-110.933-128zM896 721.067v128c0 12.8-4.267 21.333-12.8 29.867s-17.067 12.8-34.133 12.8c-123.733-12.8-243.2-55.467-349.867-123.733-98.133-59.733-179.2-145.067-243.2-243.2-68.267-106.667-110.933-226.133-123.733-349.867 0-12.8 4.267-21.333 8.533-29.867 8.533-8.533 21.333-17.067 34.133-17.067h128c0 0 0 0 0 0 21.333 0 38.4 17.067 42.667 38.4 4.267 42.667 17.067 89.6 34.133 128 4.267 17.067 0 34.133-8.533 46.933l-55.467 51.2c-12.8 12.8-17.067 34.133-8.533 51.2 64 115.2 157.867 209.067 273.067 273.067 17.067 8.533 38.4 8.533 51.2-8.533l55.467-55.467c12.8-12.8 29.867-17.067 46.933-8.533 42.667 17.067 85.333 25.6 128 34.133 17.067 4.267 34.133 21.333 34.133 42.667 0 0 0 0 0 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PieChart.js b/src/app/components/common-ui/Icon/Feather/svgs/PieChart.js
deleted file mode 100644
index 1d5b032a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PieChart.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.PieChart
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M921.6 640c-21.333-8.533-46.933 0-55.467 21.333-81.067 196.267-307.2 285.867-503.467 204.8s-285.867-307.2-204.8-503.467c38.4-89.6 110.933-162.133 200.533-200.533 21.333-8.533 29.867-34.133 21.333-55.467s-34.133-34.133-55.467-25.6c-110.933 46.933-196.267 136.533-243.2 247.467-102.4 238.933 12.8 516.267 247.467 614.4 59.733 25.6 123.733 38.4 183.467 38.4 183.467 0 358.4-106.667 430.933-285.867 8.533-21.333 0-46.933-21.333-55.467z' />
-            <path d='M512 42.667c-25.6 0-42.667 17.067-42.667 42.667v426.667c0 25.6 17.067 42.667 42.667 42.667h426.667c25.6 0 42.667-17.067 42.667-42.667 0-260.267-209.067-469.333-469.333-469.333zM554.667 469.333v-337.067c179.2 21.333 320 162.133 337.067 337.067h-337.067z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Play.js b/src/app/components/common-ui/Icon/Feather/svgs/Play.js
deleted file mode 100644
index 3b87bb1d..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Play.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Play
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M832 477.867l-597.333-384c-12.8-8.533-29.867-8.533-42.667 0-12.8 4.267-21.333 17.067-21.333 34.133v768c0 17.067 8.533 29.867 21.333 38.4 8.533 4.267 12.8 4.267 21.333 4.267s17.067-4.267 21.333-8.533l597.333-384c12.8-8.533 21.333-21.333 21.333-34.133s-8.533-29.867-21.333-34.133zM256 819.2v-614.4l477.867 307.2-477.867 307.2z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PlayCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/PlayCircle.js
deleted file mode 100644
index a7a54259..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PlayCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.PlayCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M708.267 477.867l-256-170.667c-12.8-8.533-29.867-8.533-42.667 0-17.067 4.267-25.6 17.067-25.6 34.133v341.333c0 17.067 8.533 29.867 21.333 38.4 8.533 4.267 12.8 4.267 21.333 4.267s17.067-4.267 25.6-8.533l256-170.667c12.8-8.533 17.067-21.333 17.067-34.133s-8.533-25.6-17.067-34.133zM469.333 601.6v-179.2l136.533 89.6-136.533 89.6z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Plus.js b/src/app/components/common-ui/Icon/Feather/svgs/Plus.js
deleted file mode 100644
index fb26323f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Plus.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Plus
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 469.333h-256v-256c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v256h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PlusCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/PlusCircle.js
deleted file mode 100644
index 9a0d352a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PlusCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.PlusCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M682.667 469.333h-128v-128c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v128h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h128v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128h128c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/PlusSquare.js b/src/app/components/common-ui/Icon/Feather/svgs/PlusSquare.js
deleted file mode 100644
index 81d73ecd..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/PlusSquare.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.PlusSquare
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 85.333h-597.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128zM853.333 810.667c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v597.333z' />
-            <path d='M682.667 469.333h-128v-128c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v128h-128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h128v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128h128c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Pocket.js b/src/app/components/common-ui/Icon/Feather/svgs/Pocket.js
deleted file mode 100644
index 61f8c79d..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Pocket.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Pocket
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 85.333h-682.667c-72.533 0-128 55.467-128 128v256c0 260.267 209.067 469.333 469.333 469.333s469.333-209.067 469.333-469.333v-256c0-72.533-55.467-128-128-128zM896 469.333c0 213.333-170.667 384-384 384s-384-170.667-384-384v-256c0-25.6 17.067-42.667 42.667-42.667h682.667c25.6 0 42.667 17.067 42.667 42.667v256z' />
-            <path d='M652.8 396.8l-140.8 140.8-140.8-140.8c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l170.667 170.667c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l170.667-170.667c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Power.js b/src/app/components/common-ui/Icon/Feather/svgs/Power.js
deleted file mode 100644
index 12b1075c..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Power.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Power
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M814.933 251.733c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733c132.267 132.267 132.267 349.867 0 482.133s-349.867 132.267-482.133 0c-132.267-132.267-132.267-349.867 0-482.133 17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0c-170.667 166.4-170.667 439.467-4.267 605.867 85.333 81.067 192 123.733 302.933 123.733s217.6-42.667 302.933-123.733c166.4-166.4 166.4-439.467 0-605.867z' />
-            <path d='M512 554.667c25.6 0 42.667-17.067 42.667-42.667v-426.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v426.667c0 25.6 17.067 42.667 42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Printer.js b/src/app/components/common-ui/Icon/Feather/svgs/Printer.js
deleted file mode 100644
index 646706e8..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Printer.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Printer
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 341.333h-42.667v-256c0-25.6-17.067-42.667-42.667-42.667h-512c-25.6 0-42.667 17.067-42.667 42.667v256h-42.667c-72.533 0-128 55.467-128 128v213.333c0 72.533 55.467 128 128 128h42.667v128c0 25.6 17.067 42.667 42.667 42.667h512c25.6 0 42.667-17.067 42.667-42.667v-128h42.667c72.533 0 128-55.467 128-128v-213.333c0-72.533-55.467-128-128-128zM298.667 128h426.667v213.333h-426.667v-213.333zM725.333 896h-426.667v-256h426.667v256zM896 682.667c0 25.6-17.067 42.667-42.667 42.667h-42.667v-128c0-25.6-17.067-42.667-42.667-42.667h-512c-25.6 0-42.667 17.067-42.667 42.667v128h-42.667c-25.6 0-42.667-17.067-42.667-42.667v-213.333c0-25.6 17.067-42.667 42.667-42.667h682.667c25.6 0 42.667 17.067 42.667 42.667v213.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Radio.js b/src/app/components/common-ui/Icon/Feather/svgs/Radio.js
deleted file mode 100644
index 20e64132..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Radio.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Icon: Feather.Radio
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 384c-72.533 0-128 55.467-128 128s55.467 128 128 128 128-55.467 128-128-55.467-128-128-128zM512 554.667c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667 42.667 17.067 42.667 42.667-17.067 42.667-42.667 42.667z' />
-            <path d='M844.8 179.2c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733c149.333 149.333 149.333 392.533 0 541.867-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c183.467-179.2 183.467-477.867 0-661.333z' />
-            <path d='M238.933 238.933c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0c-183.467 183.467-183.467 482.133 0 665.6 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733-149.333-149.333-149.333-396.8 0-546.133z' />
-            <path d='M298.667 512c0-55.467 21.333-110.933 64-149.333 0 0 0 0 0 0 17.067-17.067 12.8-42.667 0-59.733-17.067-17.067-42.667-17.067-59.733 0 0 0 0 0 0 0-115.2 115.2-115.2 307.2 0 422.4 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733-42.667-42.667-64-98.133-64-153.6z' />
-            <path d='M721.067 302.933c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733c85.333 81.067 85.333 217.6 4.267 298.667-4.267 4.267-8.533 8.533-12.8 12.8-8.533 21.333 0 46.933 17.067 55.467 4.267 4.267 12.8 4.267 17.067 4.267 12.8 0 21.333-4.267 29.867-12.8 123.733-115.2 123.733-302.933 4.267-418.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/RefreshCcw.js b/src/app/components/common-ui/Icon/Feather/svgs/RefreshCcw.js
deleted file mode 100644
index 40741f6a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/RefreshCcw.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.RefreshCcw
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M42.667 469.333h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-149.333l119.467-115.2c34.133-34.133 81.067-64 128-81.067 85.333-29.867 179.2-25.6 260.267 12.8s145.067 106.667 174.933 196.267c8.533 21.333 34.133 34.133 55.467 25.6s34.133-34.133 25.6-55.467c-38.4-106.667-115.2-192-217.6-243.2s-217.6-55.467-324.267-17.067c-59.733 25.6-115.2 59.733-157.867 102.4l-128 119.467v-157.867c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v256c0 0 0 4.267 0 4.267 0 4.267 0 8.533 0 8.533 0 4.267 4.267 4.267 4.267 8.533 0 0 0 4.267 4.267 4.267 0 0 0 0 0 0 4.267 4.267 8.533 8.533 12.8 8.533 0 0 0 0 0 0 8.533 8.533 17.067 8.533 21.333 8.533z' />
-            <path d='M1024 588.8c0-4.267 0-4.267 0-8.533s-4.267-4.267-4.267-8.533c0 0 0-4.267-4.267-4.267 0 0 0 0 0 0-4.267-4.267-4.267-4.267-8.533-4.267 0 0-4.267-4.267-4.267-4.267s-4.267 0-4.267 0-8.533 0-12.8-4.267c0 0 0 0 0 0h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h149.333l-119.467 115.2c-132.267 132.267-349.867 132.267-482.133 0-34.133-34.133-64-81.067-81.067-128-8.533-21.333-34.133-34.133-55.467-25.6s-34.133 34.133-25.6 55.467c21.333 59.733 55.467 115.2 102.4 157.867 85.333 85.333 192 123.733 302.933 123.733s217.6-42.667 298.667-123.733l128-119.467v157.867c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c-8.533-4.267-8.533-4.267-8.533-8.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/RefreshCw.js b/src/app/components/common-ui/Icon/Feather/svgs/RefreshCw.js
deleted file mode 100644
index 87fac0d9..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/RefreshCw.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.RefreshCw
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M887.467 601.6c-21.333-8.533-46.933 4.267-55.467 25.6-17.067 46.933-42.667 93.867-81.067 128-59.733 64-149.333 98.133-238.933 98.133 0 0 0 0 0 0-89.6 0-174.933-34.133-243.2-102.4l-119.467-110.933h149.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-256c0 0 0 0 0 0-4.267 0-8.533 0-8.533 4.267 0 0-4.267 0-4.267 0s-4.267 0-4.267 4.267c-4.267 0-8.533 4.267-8.533 8.533 0 0 0 0 0 0s0 4.267-4.267 4.267c0 4.267-4.267 4.267-4.267 8.533s0 4.267 0 8.533c0 0 0 4.267 0 4.267v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-157.867l123.733 119.467c72.533 81.067 179.2 123.733 294.4 123.733 0 0 0 0 0 0 115.2 0 221.867-42.667 302.933-123.733 42.667-42.667 81.067-98.133 102.4-157.867 4.267-25.6-8.533-51.2-29.867-55.467z' />
-            <path d='M1024 430.933c0 0 0-4.267 0-4.267v-256c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v157.867l-123.733-119.467c-42.667-42.667-98.133-81.067-157.867-102.4-110.933-34.133-226.133-29.867-328.533 21.333-102.4 46.933-179.2 132.267-217.6 243.2-8.533 21.333 4.267 46.933 25.6 51.2 21.333 8.533 46.933-4.267 55.467-25.6 29.867-85.333 93.867-153.6 174.933-196.267 81.067-38.4 174.933-42.667 260.267-12.8 46.933 17.067 93.867 42.667 128 81.067l119.467 115.2h-149.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c4.267 0 12.8 0 17.067-4.267 0 0 0 0 0 0 4.267-4.267 8.533-4.267 12.8-8.533 0 0 0 0 0 0s0-4.267 4.267-4.267c0-4.267 4.267-4.267 4.267-8.533 4.267-4.267 4.267-8.533 4.267-12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Repeat.js b/src/app/components/common-ui/Icon/Feather/svgs/Repeat.js
deleted file mode 100644
index 3be2c01e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Repeat.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Repeat
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M128 512c25.6 0 42.667-17.067 42.667-42.667v-85.333c0-72.533 55.467-128 128-128h494.933l-98.133 98.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l170.667-170.667c4.267-4.267 8.533-8.533 8.533-12.8 4.267-8.533 4.267-21.333 0-34.133-4.267-4.267-4.267-8.533-8.533-12.8l-170.667-170.667c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l98.133 98.133h-494.933c-119.467 0-213.333 93.867-213.333 213.333v85.333c0 25.6 17.067 42.667 42.667 42.667z' />
-            <path d='M896 512c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 72.533-55.467 128-128 128h-494.933l98.133-98.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-170.667 170.667c-4.267 4.267-8.533 8.533-8.533 12.8-4.267 8.533-4.267 21.333 0 34.133 4.267 4.267 4.267 8.533 8.533 12.8l170.667 170.667c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-98.133-98.133h494.933c119.467 0 213.333-93.867 213.333-213.333v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Rewind.js b/src/app/components/common-ui/Icon/Feather/svgs/Rewind.js
deleted file mode 100644
index 8b2912c3..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Rewind.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Rewind
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M486.4 174.933c-12.8-8.533-34.133-4.267-46.933 4.267l-384 298.667c-8.533 8.533-12.8 21.333-12.8 34.133s4.267 25.6 17.067 34.133l384 298.667c8.533 4.267 17.067 8.533 25.6 8.533 4.267 0 12.8 0 17.067-4.267 12.8-8.533 25.6-21.333 25.6-38.4v-597.333c0-17.067-8.533-29.867-25.6-38.4zM426.667 725.333l-273.067-213.333 273.067-213.333v426.667z' />
-            <path d='M955.733 174.933c-12.8-8.533-34.133-4.267-46.933 4.267l-384 298.667c-8.533 8.533-12.8 21.333-12.8 34.133s4.267 25.6 17.067 34.133l384 298.667c8.533 4.267 17.067 8.533 25.6 8.533 4.267 0 12.8 0 17.067-4.267 12.8-8.533 25.6-21.333 25.6-38.4v-597.333c0-17.067-8.533-29.867-25.6-38.4zM896 725.333l-273.067-213.333 273.067-213.333v426.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/RotateCcw.js b/src/app/components/common-ui/Icon/Feather/svgs/RotateCcw.js
deleted file mode 100644
index 608b261a..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/RotateCcw.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.RotateCcw
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M913.067 371.2c-38.4-106.667-115.2-192-217.6-243.2s-217.6-55.467-324.267-17.067c-59.733 21.333-115.2 55.467-157.867 98.133l-128 119.467v-157.867c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v256c0 0 0 4.267 0 4.267 0 4.267 0 8.533 0 8.533 0 4.267 4.267 4.267 4.267 8.533 0 0 0 4.267 4.267 4.267 0 0 0 0 0 0 4.267 4.267 4.267 4.267 8.533 4.267 0 0 4.267 4.267 4.267 4.267s4.267 0 4.267 0 8.533 0 8.533 0c0 0 0 0 0 0h256c25.6 0 42.667-17.067 42.667-42.667s-8.533-34.133-34.133-34.133h-149.333l119.467-115.2c34.133-34.133 81.067-64 128-81.067 85.333-29.867 179.2-25.6 260.267 12.8s145.067 106.667 174.933 196.267c29.867 85.333 25.6 179.2-12.8 260.267s-106.667 145.067-196.267 174.933c-179.2 64-371.2-29.867-435.2-209.067-8.533-21.333-34.133-34.133-55.467-25.6s-34.133 34.133-25.6 55.467c64 174.933 230.4 285.867 405.333 285.867 46.933 0 93.867-8.533 140.8-25.6 221.867-76.8 341.333-320 260.267-541.867z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/RotateCw.js b/src/app/components/common-ui/Icon/Feather/svgs/RotateCw.js
deleted file mode 100644
index 50cfa3e9..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/RotateCw.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.RotateCw
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1024 430.933c0 0 0-4.267 0-4.267v-256c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v157.867l-123.733-119.467c-42.667-42.667-98.133-81.067-157.867-102.4-226.133-76.8-469.333 42.667-546.133 264.533s38.4 465.067 260.267 546.133c46.933 12.8 93.867 21.333 140.8 21.333 174.933 0 341.333-110.933 401.067-285.867 8.533-21.333-4.267-46.933-25.6-55.467s-46.933 4.267-55.467 25.6c-64 179.2-256 268.8-435.2 209.067-179.2-64-268.8-256-209.067-435.2 64-174.933 260.267-268.8 439.467-204.8 46.933 17.067 93.867 42.667 128 81.067l119.467 110.933h-149.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c0 0 0 0 0 0 4.267 0 8.533 0 8.533-4.267 0 0 4.267 0 4.267 0s4.267-4.267 4.267-4.267c4.267 0 8.533-4.267 8.533-8.533 0 0 0 0 0 0s0-4.267 4.267-4.267c0-4.267 4.267-4.267 4.267-8.533 8.533-0 8.533-4.267 8.533-8.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Rss.js b/src/app/components/common-ui/Icon/Feather/svgs/Rss.js
deleted file mode 100644
index 7f353fbf..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Rss.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Rss
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M170.667 426.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667c187.733 0 341.333 153.6 341.333 341.333 0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667c0-234.667-192-426.667-426.667-426.667z' />
-            <path d='M170.667 128c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667c354.133 0 640 285.867 640 640 0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667c0-401.067-324.267-725.333-725.333-725.333z' />
-            <path d='M298.667 810.667c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Save.js b/src/app/components/common-ui/Icon/Feather/svgs/Save.js
deleted file mode 100644
index 5e76ba6f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Save.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Save
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M925.867 311.467l-213.333-213.333c-8.533-8.533-17.067-12.8-29.867-12.8h-469.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-469.333c0-12.8-4.267-21.333-12.8-29.867zM682.667 853.333h-341.333v-256h341.333v256zM853.333 810.667c0 25.6-17.067 42.667-42.667 42.667h-42.667v-298.667c0-25.6-17.067-42.667-42.667-42.667h-426.667c-25.6 0-42.667 17.067-42.667 42.667v298.667h-42.667c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h42.667v170.667c0 25.6 17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-298.667v-128h324.267l187.733 187.733v452.267z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Scissors.js b/src/app/components/common-ui/Icon/Feather/svgs/Scissors.js
deleted file mode 100644
index 1a76c80f..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Scissors.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Scissors
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M883.2 200.533c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-311.467 311.467-110.933-110.933c17.067-25.6 25.6-55.467 25.6-85.333 0-93.867-76.8-170.667-170.667-170.667s-170.667 76.8-170.667 170.667 76.8 170.667 170.667 170.667c29.867 0 59.733-8.533 85.333-25.6l110.933 110.933-110.933 110.933c-25.6-17.067-55.467-25.6-85.333-25.6-93.867 0-170.667 76.8-170.667 170.667s76.8 170.667 170.667 170.667 170.667-76.8 170.667-170.667c0-29.867-8.533-59.733-25.6-85.333l482.133-482.133zM170.667 256c0-46.933 38.4-85.333 85.333-85.333s85.333 38.4 85.333 85.333c0 25.6-8.533 42.667-25.6 59.733 0 0 0 0 0 0s0 0 0 0c-17.067 17.067-34.133 25.6-59.733 25.6-46.933 0-85.333-38.4-85.333-85.333zM256 853.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333c25.6 0 42.667 8.533 59.733 25.6 0 0 0 0 0 0s0 0 0 0c17.067 17.067 25.6 34.133 25.6 59.733 0 46.933-38.4 85.333-85.333 85.333z' />
-            <path d='M648.533 588.8c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l234.667 234.667c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-234.667-234.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Search.js b/src/app/components/common-ui/Icon/Feather/svgs/Search.js
deleted file mode 100644
index 99a7c7a8..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Search.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Search
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M925.867 866.133l-157.867-157.867c51.2-64 85.333-149.333 85.333-238.933 0-213.333-170.667-384-384-384s-384 170.667-384 384c0 213.333 170.667 384 384 384 89.6 0 174.933-29.867 238.933-85.333l157.867 157.867c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733zM170.667 469.333c0-166.4 132.267-298.667 298.667-298.667s298.667 132.267 298.667 298.667c0 81.067-34.133 157.867-85.333 209.067 0 0 0 0 0 0s0 0 0 0c-55.467 55.467-128 85.333-209.067 85.333-170.667 4.267-302.933-128-302.933-294.4z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Send.js b/src/app/components/common-ui/Icon/Feather/svgs/Send.js
deleted file mode 100644
index d0acbfbc..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Send.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Send
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 81.067c0-4.267 0-8.533-4.267-12.8 0 0 0-4.267 0-4.267 0-4.267-4.267-8.533-8.533-12.8s-8.533-4.267-12.8-8.533c0 0-4.267 0-4.267 0-4.267 0-8.533 0-12.8-4.267 0 4.267 0 4.267 0 4.267-4.267 0-8.533 0-12.8 4.267l-853.333 298.667c-17.067 4.267-29.867 17.067-29.867 38.4 0 17.067 8.533 34.133 25.6 42.667l366.933 162.133 162.133 366.933c8.533 17.067 21.333 25.6 38.4 25.6 0 0 0 0 0 0 17.067 0 34.133-12.8 38.4-29.867l298.667-853.333c8.533-4.267 8.533-8.533 8.533-17.067 0 4.267 0 4.267 0 0zM776.533 187.733l-315.733 315.733-260.267-115.2 576-200.533zM635.733 823.467l-115.2-260.267 315.733-315.733-200.533 576z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Server.js b/src/app/components/common-ui/Icon/Feather/svgs/Server.js
deleted file mode 100644
index 0ce2eede..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Server.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.Server
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 42.667h-682.667c-72.533 0-128 55.467-128 128v170.667c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-170.667c0-72.533-55.467-128-128-128zM896 341.333c0 25.6-17.067 42.667-42.667 42.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.6 17.067-42.667 42.667-42.667h682.667c25.6 0 42.667 17.067 42.667 42.667v170.667z' />
-            <path d='M853.333 554.667h-682.667c-72.533 0-128 55.467-128 128v170.667c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-170.667c0-72.533-55.467-128-128-128zM896 853.333c0 25.6-17.067 42.667-42.667 42.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.6 17.067-42.667 42.667-42.667h682.667c25.6 0 42.667 17.067 42.667 42.667v170.667z' />
-            <path d='M226.133 226.133c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-            <path d='M226.133 738.133c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Settings.js b/src/app/components/common-ui/Icon/Feather/svgs/Settings.js
deleted file mode 100644
index 2afb8be4..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Settings.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Settings
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 341.333c-93.867 0-170.667 76.8-170.667 170.667s76.8 170.667 170.667 170.667c93.867 0 170.667-76.8 170.667-170.667s-76.8-170.667-170.667-170.667zM512 597.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333z' />
-            <path d='M866.133 657.067c4.267-8.533 12.8-17.067 29.867-17.067 72.533 0 128-55.467 128-128s-55.467-128-128-128h-8.533c-8.533 0-17.067-4.267-21.333-12.8 0-4.267 0-4.267-4.267-8.533-4.267-8.533-4.267-21.333 8.533-34.133 51.2-51.2 51.2-132.267 0-179.2v0c0 0 0 0 0 0-25.6-25.6-55.467-38.4-89.6-38.4 0 0 0 0 0 0-34.133 0-68.267 12.8-93.867 38.4-8.533 8.533-21.333 8.533-29.867 4.267-8.533 0-17.067-12.8-17.067-25.6 0-72.533-55.467-128-128-128s-128 55.467-128 128v8.533c0 8.533-4.267 17.067-12.8 21.333-4.267 0-4.267 0-8.533 4.267-8.533 4.267-21.333 0-34.133-8.533-51.2-51.2-132.267-51.2-179.2 0-51.2 51.2-51.2 132.267 4.267 183.467 8.533 8.533 8.533 21.333 4.267 34.133-4.267 8.533-17.067 17.067-29.867 17.067-72.533 0-128 55.467-128 128s55.467 128 128 128h8.533c12.8 0 21.333 8.533 25.6 17.067s4.267 21.333-8.533 34.133c-25.6 25.6-38.4 55.467-38.4 89.6s12.8 64 38.4 89.6c0 0 0 0 0 0 51.2 51.2 132.267 51.2 183.467-4.267 8.533-8.533 21.333-8.533 34.133-4.267s17.067 12.8 17.067 29.867c0 72.533 55.467 128 128 128s128-55.467 128-128v-8.533c0-12.8 8.533-21.333 17.067-25.6s21.333-4.267 34.133 8.533c51.2 51.2 132.267 51.2 179.2 0 51.2-51.2 51.2-132.267-4.267-183.467-4.267-8.533-8.533-21.333-4.267-29.867 0 0 0 0 0 0zM789.333 622.933c-17.067 42.667-8.533 89.6 25.6 128 8.533 8.533 12.8 17.067 12.8 29.867s-4.267 21.333-12.8 29.867c-8.533 8.533-17.067 12.8-29.867 12.8 0 0 0 0 0 0-12.8 0-21.333-4.267-34.133-17.067-34.133-34.133-81.067-42.667-123.733-21.333-42.667 17.067-68.267 59.733-68.267 102.4v8.533c0 25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667c0 0 0-4.267 0-4.267 0-46.933-29.867-85.333-72.533-102.4-12.8-8.533-29.867-8.533-46.933-8.533-29.867 0-59.733 12.8-81.067 34.133-17.067 17.067-42.667 17.067-59.733 0 0 0 0 0 0 0v0c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333 17.067-34.133c34.133-34.133 42.667-81.067 21.333-123.733-17.067-42.667-59.733-68.267-102.4-68.267h-8.533c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667c0 0 4.267 0 4.267 0 46.933 0 85.333-29.867 102.4-72.533s8.533-89.6-25.6-128c-17.067-17.067-17.067-42.667 0-59.733s42.667-17.067 64 4.267c29.867 29.867 76.8 38.4 115.2 25.6 4.267 0 8.533 0 12.8-4.267 42.667-17.067 68.267-59.733 68.267-102.4v-8.533c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667 46.933c0 46.933 25.6 85.333 68.267 102.4s89.6 8.533 128-25.6c8.533-8.533 17.067-12.8 29.867-12.8v0c12.8 0 21.333 4.267 29.867 12.8 0 0 0 0 0 0 17.067 17.067 17.067 42.667-4.267 64-29.867 29.867-38.4 76.8-25.6 115.2 0 4.267 0 8.533 4.267 12.8 17.067 42.667 59.733 68.267 102.4 68.267h8.533c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-46.933 42.667c-42.667-0-85.333 25.6-102.4 68.267z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Share.js b/src/app/components/common-ui/Icon/Feather/svgs/Share.js
deleted file mode 100644
index ef2f9788..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Share.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Share
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 469.333c-25.6 0-42.667 17.067-42.667 42.667v341.333c0 25.6-17.067 42.667-42.667 42.667h-512c-25.6 0-42.667-17.067-42.667-42.667v-341.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v341.333c0 72.533 55.467 128 128 128h512c72.533 0 128-55.467 128-128v-341.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M371.2 285.867l98.133-98.133v452.267c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-452.267l98.133 98.133c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-170.667-170.667c-4.267-4.267-8.533-8.533-12.8-8.533-8.533-4.267-21.333-4.267-34.133 0-4.267 4.267-8.533 4.267-12.8 8.533l-170.667 170.667c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Share2.js b/src/app/components/common-ui/Icon/Feather/svgs/Share2.js
deleted file mode 100644
index 6cc3c7bf..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Share2.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Share2
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 640c-46.933 0-89.6 21.333-119.467 51.2l-226.133-132.267c0-17.067 4.267-29.867 4.267-46.933s-4.267-29.867-8.533-46.933l226.133-132.267c34.133 29.867 76.8 51.2 123.733 51.2 93.867 0 170.667-76.8 170.667-170.667s-76.8-170.667-170.667-170.667-170.667 76.8-170.667 170.667c0 17.067 4.267 29.867 8.533 46.933l-230.4 132.267c-29.867-29.867-72.533-51.2-119.467-51.2-93.867 0-170.667 76.8-170.667 170.667s76.8 170.667 170.667 170.667c46.933 0 89.6-21.333 119.467-51.2l226.133 132.267c-0 17.067-4.267 29.867-4.267 46.933 0 93.867 76.8 170.667 170.667 170.667s170.667-76.8 170.667-170.667-76.8-170.667-170.667-170.667zM768 128c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333-85.333-38.4-85.333-85.333 38.4-85.333 85.333-85.333zM256 597.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333c0 46.933-38.4 85.333-85.333 85.333zM768 896c-46.933 0-85.333-38.4-85.333-85.333 0-17.067 4.267-29.867 12.8-42.667 0 0 0 0 0 0s0 0 0 0c12.8-25.6 42.667-42.667 72.533-42.667 46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Shield.js b/src/app/components/common-ui/Icon/Feather/svgs/Shield.js
deleted file mode 100644
index 618992a9..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Shield.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Shield
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M870.4 174.933l-341.333-128c-8.533-4.267-21.333-4.267-29.867 0l-341.333 128c-17.067 4.267-29.867 21.333-29.867 38.4v298.667c0 277.333 349.867 456.533 366.933 465.067 4.267 4.267 8.533 4.267 17.067 4.267s12.8 0 17.067-4.267c17.067-8.533 366.933-187.733 366.933-465.067v-298.667c0-17.067-12.8-34.133-25.6-38.4zM810.667 512c0 192-230.4 337.067-298.667 379.733-68.267-38.4-298.667-183.467-298.667-379.733v-268.8l298.667-110.933 298.667 110.933v268.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ShieldOff.js b/src/app/components/common-ui/Icon/Feather/svgs/ShieldOff.js
deleted file mode 100644
index 75937e46..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ShieldOff.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ShieldOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M392.533 174.933l119.467-42.667 298.667 110.933v268.8c0 25.6-4.267 51.2-12.8 72.533s4.267 46.933 29.867 51.2c4.267 0 8.533 0 12.8 0 17.067 0 34.133-12.8 42.667-29.867 8.533-29.867 12.8-64 17.067-98.133v-294.4c0-17.067-12.8-34.133-25.6-38.4l-341.333-128c-8.533-4.267-21.333-4.267-29.867 0l-140.8 46.933c-21.333 8.533-34.133 34.133-25.6 55.467s34.133 34.133 55.467 25.6z' />
-            <path d='M1011.2 951.467l-938.667-938.667c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l119.467 119.467c0 8.533-4.267 12.8-4.267 21.333v298.667c0 277.333 349.867 456.533 366.933 465.067 4.267 4.267 8.533 4.267 17.067 4.267s12.8 0 21.333-4.267c81.067-42.667 153.6-98.133 221.867-162.133l200.533 200.533c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c12.8-21.333 12.8-46.933-4.267-64zM512 891.733c-68.267-38.4-298.667-183.467-298.667-379.733v-238.933l477.867 477.867c-51.2 55.467-110.933 102.4-179.2 140.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ShoppingBag.js b/src/app/components/common-ui/Icon/Feather/svgs/ShoppingBag.js
deleted file mode 100644
index ef588dcc..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ShoppingBag.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ShoppingBag
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M934.4 238.933c0 0 0-4.267-4.267-4.267 0 0 0-4.267-4.267-4.267l-128-170.667c-4.267-12.8-17.067-17.067-29.867-17.067h-512c-12.8 0-25.6 4.267-34.133 17.067l-128 170.667c0 0 0 4.267-4.267 4.267 0 0 0 4.267-4.267 4.267 0 8.533 0 12.8 0 17.067v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-597.333c0-4.267 0-8.533-4.267-17.067zM277.333 128h469.333l64 85.333h-597.333l64-85.333zM810.667 896h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-554.667h682.667v554.667c0 25.6-17.067 42.667-42.667 42.667z' />
-            <path d='M682.667 384c-25.6 0-42.667 17.067-42.667 42.667 0 72.533-55.467 128-128 128s-128-55.467-128-128c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667c0 119.467 93.867 213.333 213.333 213.333s213.333-93.867 213.333-213.333c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ShoppingCart.js b/src/app/components/common-ui/Icon/Feather/svgs/ShoppingCart.js
deleted file mode 100644
index 638235fb..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ShoppingCart.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.ShoppingCart
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M469.333 896c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z' />
-            <path d='M938.667 896c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z' />
-            <path d='M1015.467 230.4c-8.533-12.8-21.333-17.067-34.133-17.067h-691.2l-34.133-179.2c-4.267-21.333-21.333-34.133-42.667-34.133h-170.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h136.533l34.133 179.2c0 0 0 4.267 0 4.267l72.533 354.133c12.8 59.733 64 102.4 123.733 102.4 0 0 0 0 4.267 0h413.867c64 0 115.2-42.667 128-102.4l68.267-358.4c0-12.8 0-25.6-8.533-34.133zM870.4 605.867c-4.267 21.333-21.333 34.133-42.667 34.133h-413.867c-21.333 0-38.4-12.8-42.667-34.133l-64-307.2h622.933l-59.733 307.2z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Shuffle.js b/src/app/components/common-ui/Icon/Feather/svgs/Shuffle.js
deleted file mode 100644
index 961f86d1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Shuffle.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Shuffle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M934.4 110.933c-4.267-8.533-12.8-17.067-21.333-21.333-4.267-4.267-12.8-4.267-17.067-4.267h-213.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h110.933l-652.8 652.8c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l652.8-652.8v110.933c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-213.333c0-4.267 0-12.8-4.267-17.067z' />
-            <path d='M896 640c-25.6 0-42.667 17.067-42.667 42.667v110.933l-183.467-183.467c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l183.467 183.467h-110.933c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h213.333c4.267 0 12.8 0 17.067-4.267 8.533-4.267 17.067-12.8 21.333-21.333 4.267-4.267 4.267-12.8 4.267-17.067v-213.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M354.133 413.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-213.333-213.333c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l213.333 213.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Sidebar.js b/src/app/components/common-ui/Icon/Feather/svgs/Sidebar.js
deleted file mode 100644
index 1ad4499b..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Sidebar.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Sidebar
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 85.333h-597.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128zM170.667 810.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h128v682.667h-128c-25.6 0-42.667-17.067-42.667-42.667zM853.333 810.667c0 25.6-17.067 42.667-42.667 42.667h-384v-682.667h384c25.6 0 42.667 17.067 42.667 42.667v597.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/SkipBack.js b/src/app/components/common-ui/Icon/Feather/svgs/SkipBack.js
deleted file mode 100644
index 3c189b4d..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/SkipBack.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.SkipBack
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M827.733 132.267c-12.8-8.533-34.133-4.267-46.933 4.267l-426.667 341.333c-8.533 8.533-12.8 21.333-12.8 34.133s4.267 25.6 17.067 34.133l426.667 341.333c8.533 4.267 17.067 8.533 25.6 8.533 4.267 0 12.8 0 17.067-4.267 12.8-8.533 25.6-21.333 25.6-38.4v-682.667c0-17.067-8.533-29.867-25.6-38.4zM768 763.733l-315.733-251.733 315.733-251.733v503.467z' />
-            <path d='M213.333 170.667c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-597.333c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/SkipForward.js b/src/app/components/common-ui/Icon/Feather/svgs/SkipForward.js
deleted file mode 100644
index aa304c25..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/SkipForward.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.SkipForward
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M238.933 136.533c-12.8-8.533-29.867-12.8-42.667-4.267-17.067 8.533-25.6 21.333-25.6 38.4v682.667c0 17.067 8.533 29.867 25.6 38.4 4.267 4.267 12.8 4.267 17.067 4.267 8.533 0 17.067-4.267 25.6-8.533l426.667-341.333c8.533-8.533 17.067-21.333 17.067-34.133s-4.267-25.6-17.067-34.133l-426.667-341.333zM256 763.733v-503.467l315.733 251.733-315.733 251.733z' />
-            <path d='M810.667 170.667c-25.6 0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-597.333c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Slack.js b/src/app/components/common-ui/Icon/Feather/svgs/Slack.js
deleted file mode 100644
index 6250da4e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Slack.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Slack
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 371.2c-55.467-179.2-119.467-281.6-217.6-332.8-89.6-51.2-213.333-51.2-392.533 4.267-345.6 102.4-435.2 268.8-328.533 610.133 76.8 256 187.733 371.2 379.733 371.2 68.267 0 140.8-12.8 230.4-38.4 341.333-106.667 435.2-273.067 328.533-614.4zM627.2 900.267c-298.667 89.6-413.867 25.6-503.467-273.067-89.6-294.4-25.6-413.867 273.067-503.467 85.333-25.6 153.6-38.4 209.067-38.4 46.933 0 89.6 8.533 123.733 25.6 72.533 38.4 128 128 174.933 281.6 0 0 0 0 0 0 85.333 298.667 21.333 418.133-277.333 507.733z' />
-            <path d='M755.2 494.933l-81.067 29.867-42.667-119.467 81.067-29.867c21.333-8.533 34.133-29.867 25.6-55.467-8.533-21.333-29.867-34.133-55.467-25.6l-81.067 29.867-29.867-81.067c-8.533-21.333-29.867-34.133-55.467-25.6-21.333 8.533-34.133 29.867-25.6 55.467l29.867 81.067-119.467 42.667-25.6-85.333c-8.533-21.333-34.133-34.133-55.467-25.6-21.333 4.267-34.133 29.867-25.6 51.2l29.867 81.067-81.067 29.867c-21.333 8.533-34.133 29.867-25.6 55.467 4.267 17.067 21.333 29.867 38.4 29.867 4.267 0 8.533 0 12.8-4.267l81.067-29.867 42.667 119.467-81.067 29.867c-21.333 8.533-34.133 29.867-25.6 55.467 4.267 17.067 21.333 29.867 38.4 29.867 4.267 0 8.533 0 12.8-4.267l81.067-29.867 29.867 81.067c4.267 17.067 21.333 29.867 38.4 29.867 4.267 0 8.533 0 12.8-4.267 21.333-8.533 34.133-29.867 25.6-55.467l-29.867-81.067 119.467-42.667 29.867 81.067c4.267 17.067 21.333 29.867 38.4 29.867 4.267 0 8.533 0 12.8-4.267 21.333-8.533 34.133-29.867 25.6-55.467l-29.867-81.067 81.067-29.867c21.333-8.533 34.133-29.867 25.6-55.467 4.267-12.8-21.333-25.6-42.667-17.067zM473.6 593.067l-42.667-119.467 119.467-42.667 42.667 119.467-119.467 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Slash.js b/src/app/components/common-ui/Icon/Feather/svgs/Slash.js
deleted file mode 100644
index a24397ed..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Slash.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Slash
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M844.8 844.8c85.333-85.333 136.533-200.533 136.533-332.8 0-260.267-209.067-469.333-469.333-469.333-128 0-247.467 51.2-332.8 136.533 0 0 0 0 0 0s0 0 0 0c-85.333 85.333-136.533 204.8-136.533 332.8 0 260.267 209.067 469.333 469.333 469.333 128 0 247.467-51.2 332.8-136.533 0 0 0 0 0 0s0 0 0 0zM896 512c0 89.6-29.867 174.933-85.333 238.933l-537.6-537.6c64-55.467 149.333-85.333 238.933-85.333 213.333 0 384 170.667 384 384zM128 512c0-89.6 29.867-174.933 85.333-238.933l537.6 537.6c-64 51.2-149.333 85.333-238.933 85.333-213.333 0-384-170.667-384-384z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Sliders.js b/src/app/components/common-ui/Icon/Feather/svgs/Sliders.js
deleted file mode 100644
index 85cb27e3..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Sliders.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Icon: Feather.Sliders
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M170.667 469.333c25.6 0 42.667-17.067 42.667-42.667v-298.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v298.667c0 25.6 17.067 42.667 42.667 42.667z' />
-            <path d='M512 469.333c-25.6 0-42.667 17.067-42.667 42.667v384c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-384c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M853.333 554.667c25.6 0 42.667-17.067 42.667-42.667v-384c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v384c0 25.6 17.067 42.667 42.667 42.667z' />
-            <path d='M298.667 554.667h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M640 298.667h-85.333v-170.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v170.667h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M981.333 640h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333v170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-170.667h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Smartphone.js b/src/app/components/common-ui/Icon/Feather/svgs/Smartphone.js
deleted file mode 100644
index 6616e248..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Smartphone.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Smartphone
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M725.333 42.667h-426.667c-72.533 0-128 55.467-128 128v682.667c0 72.533 55.467 128 128 128h426.667c72.533 0 128-55.467 128-128v-682.667c0-72.533-55.467-128-128-128zM768 853.333c0 25.6-17.067 42.667-42.667 42.667h-426.667c-25.6 0-42.667-17.067-42.667-42.667v-682.667c0-25.6 17.067-42.667 42.667-42.667h426.667c25.6 0 42.667 17.067 42.667 42.667v682.667z' />
-            <path d='M482.133 738.133c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Speaker.js b/src/app/components/common-ui/Icon/Feather/svgs/Speaker.js
deleted file mode 100644
index 2ff00528..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Speaker.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Speaker
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 42.667h-512c-72.533 0-128 55.467-128 128v682.667c0 72.533 55.467 128 128 128h512c72.533 0 128-55.467 128-128v-682.667c0-72.533-55.467-128-128-128zM810.667 853.333c0 25.6-17.067 42.667-42.667 42.667h-512c-25.6 0-42.667-17.067-42.667-42.667v-682.667c0-25.6 17.067-42.667 42.667-42.667h512c25.6 0 42.667 17.067 42.667 42.667v682.667z' />
-            <path d='M512 384c-119.467 0-213.333 93.867-213.333 213.333s93.867 213.333 213.333 213.333 213.333-93.867 213.333-213.333-93.867-213.333-213.333-213.333zM512 725.333c-72.533 0-128-55.467-128-128s55.467-128 128-128 128 55.467 128 128-55.467 128-128 128z' />
-            <path d='M512 298.667c12.8 0 21.333-4.267 29.867-12.8s12.8-17.067 12.8-29.867c0-12.8-4.267-21.333-12.8-29.867-17.067-17.067-46.933-17.067-59.733 0-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Square.js b/src/app/components/common-ui/Icon/Feather/svgs/Square.js
deleted file mode 100644
index 6be78416..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Square.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Square
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 85.333h-597.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128zM853.333 810.667c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v597.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Star.js b/src/app/components/common-ui/Icon/Feather/svgs/Star.js
deleted file mode 100644
index 043d8ec1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Star.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Star
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 384c-4.267-17.067-17.067-25.6-34.133-29.867l-273.067-38.4-123.733-247.467c-12.8-29.867-64-29.867-76.8 0l-123.733 243.2-268.8 42.667c-17.067 0-29.867 12.8-38.4 29.867-4.267 17.067 0 34.133 12.8 42.667l196.267 192-46.933 273.067c-4.267 17.067 4.267 34.133 17.067 42.667s29.867 12.8 46.933 4.267l243.2-128 243.2 128c8.533 0 12.8 0 21.333 0s17.067-4.267 25.6-8.533c12.8-8.533 21.333-25.6 17.067-42.667l-46.933-273.067 196.267-192c12.8-8.533 17.067-25.6 12.8-38.4zM695.467 571.733c-8.533 12.8-12.8 25.6-12.8 38.4l34.133 209.067-187.733-98.133c-12.8-8.533-25.6-8.533-38.4 0l-187.733 98.133 38.4-209.067c0-12.8-4.267-25.6-12.8-38.4l-153.6-145.067 209.067-29.867c12.8 0 25.6-12.8 34.133-21.333l93.867-192 93.867 187.733c4.267 12.8 17.067 21.333 34.133 21.333l209.067 29.867-153.6 149.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/StopCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/StopCircle.js
deleted file mode 100644
index 9d7dda04..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/StopCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.StopCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M640 341.333h-256c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667h256c25.6 0 42.667-17.067 42.667-42.667v-256c0-25.6-17.067-42.667-42.667-42.667zM597.333 597.333h-170.667v-170.667h170.667v170.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Sun.js b/src/app/components/common-ui/Icon/Feather/svgs/Sun.js
deleted file mode 100644
index 2326b0c7..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Sun.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// Icon: Feather.Sun
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 256c-140.8 0-256 115.2-256 256s115.2 256 256 256 256-115.2 256-256-115.2-256-256-256zM512 682.667c-93.867 0-170.667-76.8-170.667-170.667s76.8-170.667 170.667-170.667c93.867 0 170.667 76.8 170.667 170.667s-76.8 170.667-170.667 170.667z' />
-            <path d='M512 170.667c25.6 0 42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667z' />
-            <path d='M512 853.333c-25.6 0-42.667 17.067-42.667 42.667v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M209.067 268.8c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-59.733-59.733c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l59.733 59.733z' />
-            <path d='M814.933 755.2c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l59.733 59.733c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-59.733-59.733z' />
-            <path d='M170.667 512c0-25.6-17.067-42.667-42.667-42.667h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333c25.6 0 42.667-17.067 42.667-42.667z' />
-            <path d='M981.333 469.333h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M209.067 755.2l-59.733 59.733c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l59.733-59.733c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0z' />
-            <path d='M785.067 281.6c12.8 0 21.333-4.267 29.867-12.8l59.733-59.733c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-59.733 59.733c-17.067 17.067-17.067 42.667 0 59.733 4.267 8.533 17.067 12.8 29.867 12.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Sunrise.js b/src/app/components/common-ui/Icon/Feather/svgs/Sunrise.js
deleted file mode 100644
index eff83bb0..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Sunrise.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Icon: Feather.Sunrise
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 512c-140.8 0-256 115.2-256 256 0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667c0-93.867 76.8-170.667 170.667-170.667s170.667 76.8 170.667 170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667c0-140.8-115.2-256-256-256z' />
-            <path d='M209.067 524.8c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-59.733-59.733c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l59.733 59.733z' />
-            <path d='M42.667 810.667h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M853.333 768c0 25.6 17.067 42.667 42.667 42.667h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-85.333c-25.6 0-42.667 17.067-42.667 42.667z' />
-            <path d='M785.067 537.6c12.8 0 21.333-4.267 29.867-12.8l59.733-59.733c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-59.733 59.733c-17.067 17.067-17.067 42.667 0 59.733 4.267 8.533 17.067 12.8 29.867 12.8z' />
-            <path d='M981.333 896h-938.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h938.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M371.2 285.867l98.133-98.133v196.267c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-196.267l98.133 98.133c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-170.667-170.667c-4.267-4.267-8.533-8.533-12.8-8.533-8.533-4.267-21.333-4.267-34.133 0-4.267 4.267-8.533 4.267-12.8 8.533l-170.667 170.667c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Sunset.js b/src/app/components/common-ui/Icon/Feather/svgs/Sunset.js
deleted file mode 100644
index 46e2d4fb..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Sunset.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Icon: Feather.Sunset
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 512c-140.8 0-256 115.2-256 256 0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667c0-93.867 76.8-170.667 170.667-170.667s170.667 76.8 170.667 170.667c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667c0-140.8-115.2-256-256-256z' />
-            <path d='M209.067 524.8c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-59.733-59.733c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l59.733 59.733z' />
-            <path d='M42.667 810.667h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M853.333 768c0 25.6 17.067 42.667 42.667 42.667h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-85.333c-25.6 0-42.667 17.067-42.667 42.667z' />
-            <path d='M785.067 537.6c12.8 0 21.333-4.267 29.867-12.8l59.733-59.733c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-59.733 59.733c-17.067 17.067-17.067 42.667 0 59.733 4.267 8.533 17.067 12.8 29.867 12.8z' />
-            <path d='M981.333 896h-938.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h938.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-            <path d='M482.133 413.867c4.267 4.267 8.533 8.533 12.8 8.533 4.267 4.267 12.8 4.267 17.067 4.267s12.8 0 17.067-4.267c4.267-4.267 8.533-4.267 12.8-8.533l170.667-170.667c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-98.133 98.133v-196.267c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v196.267l-98.133-98.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l170.667 170.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Tablet.js b/src/app/components/common-ui/Icon/Feather/svgs/Tablet.js
deleted file mode 100644
index 4863060c..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Tablet.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Tablet
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M768 42.667h-512c-72.533 0-128 55.467-128 128v682.667c0 72.533 55.467 128 128 128h512c72.533 0 128-55.467 128-128v-682.667c0-72.533-55.467-128-128-128zM810.667 853.333c0 25.6-17.067 42.667-42.667 42.667h-512c-25.6 0-42.667-17.067-42.667-42.667v-682.667c0-25.6 17.067-42.667 42.667-42.667h512c25.6 0 42.667 17.067 42.667 42.667v682.667z' />
-            <path d='M482.133 738.133c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Tag.js b/src/app/components/common-ui/Icon/Feather/svgs/Tag.js
deleted file mode 100644
index cbb5906d..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Tag.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Tag
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M908.8 422.4l-366.933-366.933c-8.533-8.533-17.067-12.8-29.867-12.8h-426.667c-25.6 0-42.667 17.067-42.667 42.667v426.667c0 12.8 4.267 21.333 12.8 29.867l366.933 366.933c25.6 25.6 59.733 38.4 89.6 38.4 34.133 0 64-12.8 89.6-38.4l307.2-307.2c0 0 0 0 0 0 51.2-51.2 51.2-128 0-179.2zM849.067 541.867l-307.2 307.2c-17.067 17.067-42.667 17.067-59.733 0l-354.133-354.133v-366.933h366.933l354.133 354.133c17.067 17.067 17.067 42.667 0 59.733z' />
-            <path d='M268.8 268.8c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-17.067 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Target.js b/src/app/components/common-ui/Icon/Feather/svgs/Target.js
deleted file mode 100644
index f9c74a24..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Target.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Target
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M512 213.333c-166.4 0-298.667 132.267-298.667 298.667s132.267 298.667 298.667 298.667c166.4 0 298.667-132.267 298.667-298.667s-132.267-298.667-298.667-298.667zM512 725.333c-119.467 0-213.333-93.867-213.333-213.333s93.867-213.333 213.333-213.333 213.333 93.867 213.333 213.333-93.867 213.333-213.333 213.333z' />
-            <path d='M512 384c-72.533 0-128 55.467-128 128s55.467 128 128 128 128-55.467 128-128-55.467-128-128-128zM512 554.667c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667 42.667 17.067 42.667 42.667-17.067 42.667-42.667 42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Terminal.js b/src/app/components/common-ui/Icon/Feather/svgs/Terminal.js
deleted file mode 100644
index c12a19dd..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Terminal.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Terminal
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M456.533 439.467l-256-256c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l226.133 226.133-226.133 226.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l256-256c17.067-17.067 17.067-42.667 0-59.733z' />
-            <path d='M853.333 768h-341.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h341.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Thermometer.js b/src/app/components/common-ui/Icon/Feather/svgs/Thermometer.js
deleted file mode 100644
index 3c794140..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Thermometer.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Thermometer
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M686.933 657.067c-12.8-21.333-29.867-34.133-46.933-51.2v-456.533c0-81.067-68.267-149.333-149.333-149.333s-149.333 68.267-149.333 149.333v460.8c-93.867 76.8-115.2 209.067-46.933 311.467 34.133 51.2 89.6 89.6 149.333 98.133 17.067 4.267 29.867 4.267 46.933 4.267 46.933 0 89.6-12.8 128-38.4 110.933-72.533 140.8-217.6 68.267-328.533zM571.733 913.067c-68.267 46.933-162.133 25.6-209.067-42.667-21.333-34.133-29.867-72.533-21.333-110.933s29.867-72.533 64-93.867c12.8-8.533 17.067-21.333 17.067-34.133v-482.133c4.267-34.133 34.133-64 68.267-64s64 29.867 64 64v482.133c0 12.8 8.533 25.6 17.067 34.133 17.067 12.8 29.867 25.6 42.667 42.667 46.933 68.267 25.6 157.867-42.667 204.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ThumbsDown.js b/src/app/components/common-ui/Icon/Feather/svgs/ThumbsDown.js
deleted file mode 100644
index a1736ee1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ThumbsDown.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ThumbsDown
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 166.4c-8.533-72.533-68.267-123.733-140.8-123.733 0 0 0 0-4.267 0h-593.067c-64 0-115.2 46.933-128 106.667l-59.733 384c-8.533 68.267 38.4 136.533 106.667 145.067 8.533 0 12.8 0 21.333 0h200.533v128c0 93.867 76.8 170.667 170.667 170.667 17.067 0 34.133-8.533 38.4-25.6l157.867-358.4h85.333c72.533 0 132.267-51.2 140.8-123.733 0 0 0-4.267 0-4.267v-294.4c4.267 0 4.267-4.267 4.267-4.267zM682.667 546.133l-153.6 345.6c-34.133-12.8-59.733-42.667-59.733-81.067v-170.667c0-25.6-17.067-42.667-42.667-42.667h-243.2c0 0-4.267 0-8.533 0-21.333-4.267-38.4-25.6-34.133-46.933l59.733-384c4.267-21.333 21.333-38.4 42.667-38.4h439.467v418.133zM896 465.067c-4.267 25.6-29.867 46.933-55.467 46.933h-72.533v-384h72.533c25.6-4.267 51.2 17.067 55.467 46.933v290.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ThumbsUp.js b/src/app/components/common-ui/Icon/Feather/svgs/ThumbsUp.js
deleted file mode 100644
index 88c425fb..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ThumbsUp.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.ThumbsUp
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M942.933 392.533c-21.333-25.6-51.2-46.933-85.333-51.2-8.533 0-12.8 0-21.333 0h-196.267v-128c0-93.867-76.8-170.667-170.667-170.667-17.067 0-34.133 8.533-38.4 25.6l-157.867 358.4h-102.4c-72.533 0-128 55.467-128 128v298.667c0 72.533 55.467 128 128 128h610.133c0 0 0 0 0 0 64 0 115.2-46.933 128-106.667l59.733-384c4.267-34.133-4.267-68.267-25.6-98.133zM256 896h-85.333c-25.6 0-42.667-17.067-42.667-42.667v-298.667c0-25.6 17.067-42.667 42.667-42.667h85.333v384zM823.467 861.867c-4.267 21.333-21.333 34.133-42.667 34.133 0 0 0 0 0 0h-439.467v-418.133l153.6-345.6c34.133 12.8 59.733 42.667 59.733 81.067v170.667c0 25.6 17.067 42.667 42.667 42.667h243.2c4.267 0 4.267 0 8.533 0 12.8 0 21.333 8.533 29.867 17.067s8.533 21.333 8.533 29.867l-64 388.267z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ToggleLeft.js b/src/app/components/common-ui/Icon/Feather/svgs/ToggleLeft.js
deleted file mode 100644
index be7d45ea..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ToggleLeft.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ToggleLeft
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M682.667 170.667h-341.333c-187.733 0-341.333 153.6-341.333 341.333s153.6 341.333 341.333 341.333h341.333c187.733 0 341.333-153.6 341.333-341.333s-153.6-341.333-341.333-341.333zM682.667 768h-341.333c-140.8 0-256-115.2-256-256s115.2-256 256-256h341.333c140.8 0 256 115.2 256 256s-115.2 256-256 256z' />
-            <path d='M341.333 341.333c-93.867 0-170.667 76.8-170.667 170.667s76.8 170.667 170.667 170.667 170.667-76.8 170.667-170.667c0-93.867-76.8-170.667-170.667-170.667zM341.333 597.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333c0 46.933-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ToggleRight.js b/src/app/components/common-ui/Icon/Feather/svgs/ToggleRight.js
deleted file mode 100644
index 6f086b1d..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ToggleRight.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ToggleRight
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M682.667 170.667h-341.333c-187.733 0-341.333 153.6-341.333 341.333s153.6 341.333 341.333 341.333h341.333c187.733 0 341.333-153.6 341.333-341.333s-153.6-341.333-341.333-341.333zM682.667 768h-341.333c-140.8 0-256-115.2-256-256s115.2-256 256-256h341.333c140.8 0 256 115.2 256 256s-115.2 256-256 256z' />
-            <path d='M682.667 341.333c-93.867 0-170.667 76.8-170.667 170.667s76.8 170.667 170.667 170.667 170.667-76.8 170.667-170.667c0-93.867-76.8-170.667-170.667-170.667zM682.667 597.333c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333c0 46.933-38.4 85.333-85.333 85.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Trash.js b/src/app/components/common-ui/Icon/Feather/svgs/Trash.js
deleted file mode 100644
index 3dcf5834..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Trash.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Trash
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 213.333h-170.667v-42.667c0-72.533-55.467-128-128-128h-170.667c-72.533 0-128 55.467-128 128v42.667h-170.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h42.667v554.667c0 72.533 55.467 128 128 128h426.667c72.533 0 128-55.467 128-128v-554.667h42.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667zM384 170.667c0-25.6 17.067-42.667 42.667-42.667h170.667c25.6 0 42.667 17.067 42.667 42.667v42.667h-256v-42.667zM768 853.333c0 25.6-17.067 42.667-42.667 42.667h-426.667c-25.6 0-42.667-17.067-42.667-42.667v-554.667h512v554.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Trash2.js b/src/app/components/common-ui/Icon/Feather/svgs/Trash2.js
deleted file mode 100644
index 625f7fad..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Trash2.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Trash2
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 213.333h-170.667v-42.667c0-72.533-55.467-128-128-128h-170.667c-72.533 0-128 55.467-128 128v42.667h-170.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h42.667v554.667c0 72.533 55.467 128 128 128h426.667c72.533 0 128-55.467 128-128v-554.667h42.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667zM384 170.667c0-25.6 17.067-42.667 42.667-42.667h170.667c25.6 0 42.667 17.067 42.667 42.667v42.667h-256v-42.667zM768 853.333c0 25.6-17.067 42.667-42.667 42.667h-426.667c-25.6 0-42.667-17.067-42.667-42.667v-554.667h512v554.667z' />
-            <path d='M426.667 426.667c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M597.333 426.667c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/TrendingDown.js b/src/app/components/common-ui/Icon/Feather/svgs/TrendingDown.js
deleted file mode 100644
index ef5b0590..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/TrendingDown.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.TrendingDown
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1024 512c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v153.6l-332.8-332.8c-17.067-17.067-42.667-17.067-59.733 0l-183.467 183.467-290.133-290.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l320 320c17.067 17.067 42.667 17.067 59.733 0l183.467-183.467 302.933 302.933h-153.6c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c4.267 0 12.8 0 17.067-4.267 8.533-4.267 17.067-12.8 21.333-21.333 4.267-4.267 4.267-12.8 4.267-17.067v-256z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/TrendingUp.js b/src/app/components/common-ui/Icon/Feather/svgs/TrendingUp.js
deleted file mode 100644
index 166ab300..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/TrendingUp.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.TrendingUp
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1019.733 238.933c-4.267-8.533-12.8-17.067-21.333-21.333-4.267-4.267-12.8-4.267-17.067-4.267h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h153.6l-302.933 302.933-183.467-183.467c-17.067-17.067-42.667-17.067-59.733 0l-320 320c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l290.133-290.133 183.467 183.467c17.067 17.067 42.667 17.067 59.733 0l332.8-332.8v153.6c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-256c0-4.267 0-12.8-4.267-17.067z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Triangle.js b/src/app/components/common-ui/Icon/Feather/svgs/Triangle.js
deleted file mode 100644
index 855feb72..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Triangle.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Triangle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M981.333 746.667l-358.4-605.867c-17.067-29.867-46.933-51.2-81.067-59.733s-68.267-4.267-98.133 12.8c-17.067 8.533-34.133 25.6-42.667 42.667 0 0 0 0 0 0l-358.4 610.133c-34.133 59.733-12.8 140.8 46.933 174.933 17.067 12.8 38.4 17.067 59.733 17.067h725.333c34.133 0 68.267-12.8 89.6-38.4 25.6-25.6 38.4-55.467 38.4-89.6-4.267-21.333-8.533-46.933-21.333-64zM904.533 840.533c-8.533 8.533-21.333 12.8-29.867 12.8h-725.333c-8.533 0-12.8 0-21.333-4.267-21.333-12.8-25.6-38.4-17.067-59.733l362.667-601.6c4.267-4.267 8.533-12.8 12.8-12.8 21.333-12.8 46.933-4.267 59.733 12.8l362.667 601.6c4.267 4.267 4.267 12.8 4.267 21.333 4.267 12.8-4.267 21.333-8.533 29.867z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Truck.js b/src/app/components/common-ui/Icon/Feather/svgs/Truck.js
deleted file mode 100644
index 795f2c14..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Truck.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Truck
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1011.2 439.467l-128-128c-8.533-8.533-17.067-12.8-29.867-12.8h-128v-170.667c0-25.6-17.067-42.667-42.667-42.667h-640c-25.6 0-42.667 17.067-42.667 42.667v554.667c0 25.6 17.067 42.667 42.667 42.667h59.733c-12.8 21.333-17.067 42.667-17.067 64 0 81.067 68.267 149.333 149.333 149.333s149.333-68.267 149.333-149.333c0-21.333-4.267-42.667-17.067-64h285.867c-8.533 21.333-17.067 42.667-17.067 64 0 81.067 68.267 149.333 149.333 149.333s149.333-68.267 149.333-149.333c0-21.333-4.267-42.667-17.067-64h64c25.6 0 42.667-17.067 42.667-42.667v-213.333c0-12.8-4.267-21.333-12.8-29.867zM85.333 170.667h554.667v469.333h-554.667v-469.333zM298.667 789.333c0 34.133-29.867 64-64 64s-64-29.867-64-64 29.867-64 64-64 64 29.867 64 64zM853.333 789.333c0 34.133-29.867 64-64 64s-64-29.867-64-64 29.867-64 64-64 64 29.867 64 64zM938.667 640h-213.333v-256h110.933l102.4 102.4v153.6z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Tv.js b/src/app/components/common-ui/Icon/Feather/svgs/Tv.js
deleted file mode 100644
index 478d3132..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Tv.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Tv
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 256h-238.933l140.8-140.8c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-183.467 183.467-183.467-183.467c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l140.8 140.8h-238.933c-72.533 0-128 55.467-128 128v469.333c0 72.533 55.467 128 128 128h682.667c72.533 0 128-55.467 128-128v-469.333c0-72.533-55.467-128-128-128zM896 853.333c0 25.6-17.067 42.667-42.667 42.667h-682.667c-25.6 0-42.667-17.067-42.667-42.667v-469.333c0-25.6 17.067-42.667 42.667-42.667h682.667c25.6 0 42.667 17.067 42.667 42.667v469.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Twitter.js b/src/app/components/common-ui/Icon/Feather/svgs/Twitter.js
deleted file mode 100644
index 5bd85b52..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Twitter.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Twitter
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1006.933 93.867c-12.8-8.533-34.133-8.533-46.933 0-29.867 21.333-64 38.4-98.133 51.2-85.333-76.8-217.6-81.067-307.2-4.267-55.467 46.933-85.333 110.933-85.333 179.2-123.733-8.533-234.667-72.533-307.2-174.933-8.533-12.8-21.333-17.067-38.4-17.067s-29.867 12.8-34.133 25.6c-4.267 4.267-46.933 106.667-42.667 230.4 4.267 106.667 46.933 243.2 204.8 341.333-64 29.867-136.533 42.667-209.067 42.667-17.067 0-38.4 12.8-42.667 29.867s4.267 38.4 21.333 46.933c106.667 59.733 221.867 89.6 328.533 89.6s209.067-25.6 302.933-81.067c183.467-102.4 285.867-298.667 285.867-533.333 0-8.533 0-12.8 0-21.333 42.667-46.933 72.533-102.4 85.333-162.133 4.267-17.067-4.267-34.133-17.067-42.667zM861.867 256c-8.533 8.533-12.8 25.6-12.8 38.4 4.267 8.533 4.267 17.067 4.267 25.6 0 204.8-89.6 371.2-243.2 460.8-119.467 68.267-260.267 85.333-401.067 51.2 55.467-17.067 106.667-38.4 153.6-72.533 17.067-8.533 21.333-21.333 21.333-38.4s-12.8-29.867-25.6-34.133c-247.467-110.933-238.933-320-213.333-426.667 93.867 93.867 226.133 149.333 366.933 145.067 21.333 0 42.667-21.333 42.667-42.667v-42.667c0-42.667 17.067-85.333 51.2-115.2 59.733-55.467 157.867-46.933 209.067 12.8 12.8 12.8 29.867 17.067 42.667 12.8 8.533-4.267 21.333-4.267 29.867-8.533-8.533 12.8-17.067 21.333-25.6 34.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Type.js b/src/app/components/common-ui/Icon/Feather/svgs/Type.js
deleted file mode 100644
index 2a6e3ac0..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Type.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Type
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 128h-682.667c-25.6 0-42.667 17.067-42.667 42.667v128c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333h256v597.333h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667h-85.333v-597.333h256v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-128c0-25.6-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Umbrella.js b/src/app/components/common-ui/Icon/Feather/svgs/Umbrella.js
deleted file mode 100644
index acbc79d2..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Umbrella.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Umbrella
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M465.067 46.933c-247.467 21.333-439.467 217.6-465.067 460.8 0 12.8 4.267 25.6 12.8 34.133 4.267 8.533 17.067 12.8 29.867 12.8h426.667v256c0 93.867 76.8 170.667 170.667 170.667s170.667-76.8 170.667-170.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667c0 46.933-38.4 85.333-85.333 85.333s-85.333-38.4-85.333-85.333v-256h426.667c12.8 0 25.6-4.267 29.867-12.8s12.8-21.333 12.8-34.133c-25.6-281.6-277.333-490.667-558.933-460.8zM512 469.333h-418.133c34.133-183.467 187.733-320 375.467-341.333 217.6-21.333 418.133 128 460.8 341.333h-418.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Underline.js b/src/app/components/common-ui/Icon/Feather/svgs/Underline.js
deleted file mode 100644
index fc47fda1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Underline.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Underline
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 725.333c166.4 0 298.667-132.267 298.667-298.667v-298.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v298.667c0 119.467-93.867 213.333-213.333 213.333s-213.333-93.867-213.333-213.333v-298.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v298.667c0 166.4 132.267 298.667 298.667 298.667z' />
-            <path d='M853.333 853.333h-682.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h682.667c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Unlock.js b/src/app/components/common-ui/Icon/Feather/svgs/Unlock.js
deleted file mode 100644
index fecfd8ec..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Unlock.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Unlock
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 426.667h-469.333v-128c0-46.933 17.067-89.6 51.2-119.467 29.867-34.133 72.533-51.2 119.467-51.2 0 0 0 0 0 0 81.067 0 149.333 55.467 166.4 136.533 4.267 21.333 29.867 38.4 51.2 34.133s38.4-25.6 34.133-51.2c-25.6-119.467-132.267-204.8-251.733-204.8 0 0 0 0 0 0-68.267 0-132.267 25.6-179.2 76.8-51.2 46.933-76.8 110.933-76.8 179.2v128h-42.667c-72.533 0-128 55.467-128 128v298.667c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-298.667c0-72.533-55.467-128-128-128zM853.333 853.333c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-298.667c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v298.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Upload.js b/src/app/components/common-ui/Icon/Feather/svgs/Upload.js
deleted file mode 100644
index 0bce81c4..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Upload.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Upload
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M896 597.333c-25.6 0-42.667 17.067-42.667 42.667v170.667c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-170.667c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v170.667c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-170.667c0-25.6-17.067-42.667-42.667-42.667z' />
-            <path d='M328.533 371.2l140.8-140.8v409.6c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-409.6l140.8 140.8c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-213.333-213.333c-4.267-4.267-8.533-8.533-12.8-8.533-8.533-4.267-21.333-4.267-34.133 0-4.267 4.267-8.533 4.267-12.8 8.533l-213.333 213.333c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/UploadCloud.js b/src/app/components/common-ui/Icon/Feather/svgs/UploadCloud.js
deleted file mode 100644
index 2f609fa9..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/UploadCloud.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.UploadCloud
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M994.133 473.6c-46.933-81.067-132.267-132.267-226.133-132.267h-21.333c-64-187.733-264.533-294.4-456.533-243.2-102.4 25.6-183.467 89.6-238.933 174.933s-68.267 192-42.667 290.133c17.067 59.733 42.667 110.933 85.333 157.867 17.067 17.067 42.667 21.333 59.733 4.267s21.333-42.667 4.267-59.733c-29.867-34.133-55.467-76.8-64-123.733-21.333-76.8-8.533-153.6 34.133-226.133 38.4-68.267 106.667-119.467 183.467-136.533 157.867-42.667 324.267 55.467 362.667 213.333 4.267 17.067 21.333 29.867 42.667 29.867h51.2c64 0 119.467 34.133 149.333 89.6 21.333 38.4 25.6 85.333 12.8 128s-42.667 81.067-81.067 102.4c-21.333 12.8-29.867 38.4-17.067 59.733 8.533 12.8 21.333 21.333 38.4 21.333 8.533 0 12.8 0 21.333-4.267 59.733-34.133 102.4-85.333 123.733-153.6 17.067-59.733 8.533-132.267-21.333-192z' />
-            <path d='M541.867 482.133c-4.267-4.267-8.533-8.533-12.8-8.533-8.533-4.267-21.333-4.267-34.133 0-4.267 4.267-8.533 4.267-12.8 8.533l-170.667 170.667c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0l98.133-98.133v281.6c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-281.6l98.133 98.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-170.667-170.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/User.js b/src/app/components/common-ui/Icon/Feather/svgs/User.js
deleted file mode 100644
index 7f99933b..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/User.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.User
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M682.667 597.333h-341.333c-119.467 0-213.333 93.867-213.333 213.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-72.533 55.467-128 128-128h341.333c72.533 0 128 55.467 128 128v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-119.467-93.867-213.333-213.333-213.333z' />
-            <path d='M512 512c119.467 0 213.333-93.867 213.333-213.333s-93.867-213.333-213.333-213.333-213.333 93.867-213.333 213.333 93.867 213.333 213.333 213.333zM512 170.667c72.533 0 128 55.467 128 128s-55.467 128-128 128-128-55.467-128-128 55.467-128 128-128z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/UserCheck.js b/src/app/components/common-ui/Icon/Feather/svgs/UserCheck.js
deleted file mode 100644
index d8d49a89..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/UserCheck.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.UserCheck
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 597.333h-298.667c-119.467 0-213.333 93.867-213.333 213.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-72.533 55.467-128 128-128h298.667c72.533 0 128 55.467 128 128v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-119.467-93.867-213.333-213.333-213.333z' />
-            <path d='M362.667 512c119.467 0 213.333-93.867 213.333-213.333s-93.867-213.333-213.333-213.333-213.333 93.867-213.333 213.333 93.867 213.333 213.333 213.333zM362.667 170.667c72.533 0 128 55.467 128 128s-55.467 128-128 128-128-55.467-128-128 55.467-128 128-128z' />
-            <path d='M1011.2 354.133c-17.067-17.067-42.667-17.067-59.733 0l-140.8 140.8-55.467-55.467c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l85.333 85.333c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l170.667-170.667c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/UserMinus.js b/src/app/components/common-ui/Icon/Feather/svgs/UserMinus.js
deleted file mode 100644
index d971eccc..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/UserMinus.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.UserMinus
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 597.333h-298.667c-119.467 0-213.333 93.867-213.333 213.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-72.533 55.467-128 128-128h298.667c72.533 0 128 55.467 128 128v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-119.467-93.867-213.333-213.333-213.333z' />
-            <path d='M362.667 512c119.467 0 213.333-93.867 213.333-213.333s-93.867-213.333-213.333-213.333-213.333 93.867-213.333 213.333 93.867 213.333 213.333 213.333zM362.667 170.667c72.533 0 128 55.467 128 128s-55.467 128-128 128-128-55.467-128-128 55.467-128 128-128z' />
-            <path d='M981.333 426.667h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/UserPlus.js b/src/app/components/common-ui/Icon/Feather/svgs/UserPlus.js
deleted file mode 100644
index b740f839..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/UserPlus.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.UserPlus
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 597.333h-298.667c-119.467 0-213.333 93.867-213.333 213.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-72.533 55.467-128 128-128h298.667c72.533 0 128 55.467 128 128v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-119.467-93.867-213.333-213.333-213.333z' />
-            <path d='M362.667 512c119.467 0 213.333-93.867 213.333-213.333s-93.867-213.333-213.333-213.333-213.333 93.867-213.333 213.333 93.867 213.333 213.333 213.333zM362.667 170.667c72.533 0 128 55.467 128 128s-55.467 128-128 128-128-55.467-128-128 55.467-128 128-128z' />
-            <path d='M981.333 426.667h-85.333v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/UserX.js b/src/app/components/common-ui/Icon/Feather/svgs/UserX.js
deleted file mode 100644
index f9568d4c..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/UserX.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.UserX
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 597.333h-298.667c-119.467 0-213.333 93.867-213.333 213.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-72.533 55.467-128 128-128h298.667c72.533 0 128 55.467 128 128v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-119.467-93.867-213.333-213.333-213.333z' />
-            <path d='M362.667 512c119.467 0 213.333-93.867 213.333-213.333s-93.867-213.333-213.333-213.333-213.333 93.867-213.333 213.333 93.867 213.333 213.333 213.333zM362.667 170.667c72.533 0 128 55.467 128 128s-55.467 128-128 128-128-55.467-128-128 55.467-128 128-128z' />
-            <path d='M934.4 448l76.8-76.8c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-76.8 76.8-76.8-76.8c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l76.8 76.8-76.8 76.8c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l76.8-76.8 76.8 76.8c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-76.8-76.8z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Users.js b/src/app/components/common-ui/Icon/Feather/svgs/Users.js
deleted file mode 100644
index f4af7eb6..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Users.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.Users
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M554.667 597.333h-341.333c-119.467 0-213.333 93.867-213.333 213.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-72.533 55.467-128 128-128h341.333c72.533 0 128 55.467 128 128v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c0-119.467-93.867-213.333-213.333-213.333z' />
-            <path d='M384 512c119.467 0 213.333-93.867 213.333-213.333s-93.867-213.333-213.333-213.333-213.333 93.867-213.333 213.333 93.867 213.333 213.333 213.333zM384 170.667c72.533 0 128 55.467 128 128s-55.467 128-128 128-128-55.467-128-128 55.467-128 128-128z' />
-            <path d='M861.867 605.867c-21.333-4.267-46.933 8.533-51.2 29.867s8.533 46.933 29.867 51.2c55.467 12.8 93.867 64 93.867 123.733v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333c4.267-98.133-59.733-183.467-157.867-204.8z' />
-            <path d='M691.2 93.867c-21.333-8.533-42.667 4.267-51.2 29.867-4.267 21.333 8.533 46.933 29.867 51.2 68.267 17.067 110.933 85.333 93.867 157.867-12.8 46.933-46.933 81.067-93.867 93.867-21.333 4.267-38.4 29.867-29.867 51.2 4.267 21.333 21.333 34.133 42.667 34.133 4.267 0 8.533 0 8.533 0 76.8-21.333 136.533-76.8 153.6-153.6 29.867-119.467-38.4-238.933-153.6-264.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Video.js b/src/app/components/common-ui/Icon/Feather/svgs/Video.js
deleted file mode 100644
index 35e89daa..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Video.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Video
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1002.667 260.267c-12.8-8.533-29.867-4.267-42.667 4.267l-234.667 166.4v-132.267c0-72.533-55.467-128-128-128h-469.333c-72.533 0-128 55.467-128 128v426.667c0 72.533 55.467 128 128 128h469.333c72.533 0 128-55.467 128-128v-132.267l230.4 166.4c8.533 4.267 17.067 8.533 25.6 8.533s12.8 0 21.333-4.267c12.8-8.533 21.333-21.333 21.333-38.4v-426.667c0-17.067-8.533-29.867-21.333-38.4zM640 725.333c0 25.6-17.067 42.667-42.667 42.667h-469.333c-25.6 0-42.667-17.067-42.667-42.667v-426.667c0-25.6 17.067-42.667 42.667-42.667h469.333c25.6 0 42.667 17.067 42.667 42.667v426.667zM938.667 644.267l-183.467-132.267 183.467-132.267v264.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/VideoOff.js b/src/app/components/common-ui/Icon/Feather/svgs/VideoOff.js
deleted file mode 100644
index 30a40331..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/VideoOff.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.VideoOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1002.667 260.267c-12.8-8.533-29.867-4.267-42.667 4.267l-230.4 162.133-4.267-4.267v-123.733c0-72.533-55.467-128-128-128h-140.8c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h140.8c25.6 0 42.667 17.067 42.667 42.667v140.8c0 12.8 4.267 21.333 12.8 29.867l42.667 42.667c12.8 12.8 38.4 17.067 55.467 4.267l187.733-132.267v341.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-426.667c0-17.067-8.533-29.867-21.333-38.4z' />
-            <path d='M712.533 652.8c0 0 0 0 0 0l-469.333-469.333c0 0 0 0 0 0l-170.667-170.667c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l98.133 98.133c-64 8.533-110.933 64-110.933 128v426.667c0 72.533 55.467 128 128 128h469.333c51.2 0 98.133-34.133 119.467-76.8l234.667 234.667c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-298.667-298.667zM640 725.333c0 25.6-17.067 42.667-42.667 42.667h-469.333c-25.6 0-42.667-17.067-42.667-42.667v-426.667c0-25.6 17.067-42.667 42.667-42.667h68.267l443.733 443.733v25.6z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Voicemail.js b/src/app/components/common-ui/Icon/Feather/svgs/Voicemail.js
deleted file mode 100644
index 30116351..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Voicemail.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Voicemail
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M789.333 256c-128 0-234.667 106.667-234.667 234.667 0 55.467 21.333 106.667 55.467 149.333h-196.267c34.133-42.667 55.467-93.867 55.467-149.333 0-128-106.667-234.667-234.667-234.667s-234.667 106.667-234.667 234.667c0 128 106.667 234.667 234.667 234.667h554.667c128 0 234.667-106.667 234.667-234.667s-106.667-234.667-234.667-234.667zM85.333 490.667c0-81.067 68.267-149.333 149.333-149.333s149.333 68.267 149.333 149.333-68.267 149.333-149.333 149.333-149.333-68.267-149.333-149.333zM789.333 640c-81.067 0-149.333-68.267-149.333-149.333s68.267-149.333 149.333-149.333 149.333 68.267 149.333 149.333-68.267 149.333-149.333 149.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Volume.js b/src/app/components/common-ui/Icon/Feather/svgs/Volume.js
deleted file mode 100644
index ac310618..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Volume.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Volume
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M486.4 174.933c-12.8-8.533-34.133-4.267-46.933 4.267l-200.533 162.133h-153.6c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667h153.6l200.533 162.133c8.533 4.267 17.067 8.533 25.6 8.533 4.267 0 12.8 0 17.067-4.267 12.8-8.533 25.6-21.333 25.6-38.4v-597.333c4.267-17.067-4.267-29.867-21.333-38.4zM426.667 721.067l-145.067-115.2c-8.533-4.267-17.067-8.533-25.6-8.533h-128v-170.667h128c8.533 0 17.067-4.267 25.6-8.533l145.067-115.2v418.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Volume1.js b/src/app/components/common-ui/Icon/Feather/svgs/Volume1.js
deleted file mode 100644
index 21a738c5..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Volume1.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Volume1
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M486.4 174.933c-12.8-8.533-34.133-4.267-46.933 4.267l-200.533 162.133h-153.6c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667h153.6l200.533 162.133c8.533 4.267 17.067 8.533 25.6 8.533 4.267 0 12.8 0 17.067-4.267 12.8-8.533 25.6-21.333 25.6-38.4v-597.333c4.267-17.067-4.267-29.867-21.333-38.4zM426.667 721.067l-145.067-115.2c-8.533-4.267-17.067-8.533-25.6-8.533h-128v-170.667h128c8.533 0 17.067-4.267 25.6-8.533l145.067-115.2v418.133z' />
-            <path d='M691.2 332.8c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733c68.267 68.267 68.267 174.933 0 243.2-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c102.4-102.4 102.4-264.533 0-362.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Volume2.js b/src/app/components/common-ui/Icon/Feather/svgs/Volume2.js
deleted file mode 100644
index 4d5d9b22..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Volume2.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Volume2
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M486.4 174.933c-12.8-8.533-34.133-4.267-46.933 4.267l-200.533 162.133h-153.6c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667h153.6l200.533 162.133c8.533 4.267 17.067 8.533 25.6 8.533 4.267 0 12.8 0 17.067-4.267 12.8-8.533 25.6-21.333 25.6-38.4v-597.333c4.267-17.067-4.267-29.867-21.333-38.4zM426.667 721.067l-145.067-115.2c-8.533-4.267-17.067-8.533-25.6-8.533h-128v-170.667h128c8.533 0 17.067-4.267 25.6-8.533l145.067-115.2v418.133z' />
-            <path d='M631.467 332.8c-17.067 17.067-17.067 42.667 0 59.733 68.267 68.267 68.267 174.933 0 243.2-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c98.133-98.133 98.133-260.267 0-362.667-12.8-17.067-42.667-17.067-59.733 0z' />
-            <path d='M844.8 179.2c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733c149.333 149.333 149.333 392.533 0 541.867-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c183.467-179.2 183.467-477.867 0-661.333z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/VolumeX.js b/src/app/components/common-ui/Icon/Feather/svgs/VolumeX.js
deleted file mode 100644
index 6298ed43..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/VolumeX.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.VolumeX
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M486.4 174.933c-12.8-8.533-34.133-4.267-46.933 4.267l-200.533 162.133h-153.6c-25.6 0-42.667 17.067-42.667 42.667v256c0 25.6 17.067 42.667 42.667 42.667h153.6l200.533 162.133c8.533 4.267 17.067 8.533 25.6 8.533 4.267 0 12.8 0 17.067-4.267 12.8-8.533 25.6-21.333 25.6-38.4v-597.333c4.267-17.067-4.267-29.867-21.333-38.4zM426.667 721.067l-145.067-115.2c-8.533-4.267-17.067-8.533-25.6-8.533h-128v-170.667h128c8.533 0 17.067-4.267 25.6-8.533l145.067-115.2v418.133z' />
-            <path d='M913.067 512l98.133-98.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-98.133 98.133-98.133-98.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l98.133 98.133-98.133 98.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8l98.133-98.133 98.133 98.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-98.133-98.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Watch.js b/src/app/components/common-ui/Icon/Feather/svgs/Watch.js
deleted file mode 100644
index f7f3d98e..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Watch.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Watch
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M853.333 512c0-98.133-42.667-183.467-106.667-247.467l-12.8-149.333c-8.533-64-59.733-115.2-128-115.2 0 0 0 0 0 0h-187.733c-64 0-119.467 51.2-128 115.2l-12.8 149.333c-64 59.733-106.667 149.333-106.667 247.467s42.667 187.733 106.667 247.467l12.8 149.333c8.533 64 64 115.2 128 115.2 0 0 0 0 0 0h183.467c0 0 0 0 0 0 68.267 0 119.467-51.2 128-115.2l12.8-145.067c68.267-64 110.933-153.6 110.933-251.733zM375.467 123.733c0-21.333 21.333-38.4 42.667-38.4h187.733c21.333 0 42.667 17.067 42.667 38.4l8.533 76.8c-46.933-17.067-93.867-29.867-145.067-29.867s-98.133 12.8-140.8 29.867l4.267-76.8zM256 512c0-140.8 115.2-256 256-256s256 115.2 256 256-115.2 256-256 256-256-115.2-256-256zM648.533 900.267c0 21.333-21.333 38.4-42.667 38.4 0 0 0 0 0 0h-187.733c0 0 0 0 0 0-21.333 0-38.4-17.067-42.667-38.4l-8.533-76.8c42.667 21.333 89.6 29.867 140.8 29.867s98.133-12.8 140.8-29.867l-0 76.8z' />
-            <path d='M546.133 605.867c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-51.2-51.2v-110.933c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v128c0 12.8 4.267 21.333 12.8 29.867l64 64z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Wifi.js b/src/app/components/common-ui/Icon/Feather/svgs/Wifi.js
deleted file mode 100644
index d3198077..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Wifi.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.Wifi
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M187.733 503.467c-17.067 17.067-21.333 42.667-4.267 59.733 8.533 8.533 21.333 17.067 34.133 17.067 8.533 0 21.333-4.267 25.6-8.533 157.867-132.267 388.267-132.267 546.133 0 17.067 17.067 46.933 12.8 59.733-4.267 17.067-17.067 12.8-46.933-4.267-59.733-192-162.133-469.333-162.133-657.067-4.267z' />
-            <path d='M989.867 349.867c-273.067-238.933-686.933-238.933-960 0-17.067 17.067-21.333 42.667-4.267 59.733 12.8 12.8 21.333 17.067 34.133 17.067 8.533 0 21.333-4.267 29.867-8.533 243.2-213.333 605.867-213.333 844.8 0 17.067 17.067 42.667 12.8 59.733-4.267 17.067-21.333 17.067-46.933-4.267-64z' />
-            <path d='M341.333 652.8c-21.333 12.8-25.6 38.4-8.533 59.733 12.8 17.067 38.4 25.6 59.733 8.533 72.533-51.2 174.933-51.2 247.467 0 8.533 4.267 17.067 8.533 25.6 8.533 12.8 0 25.6-4.267 34.133-17.067 12.8-21.333 8.533-46.933-8.533-59.733-110.933-72.533-247.467-72.533-349.867 0z' />
-            <path d='M482.133 823.467c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/WifiOff.js b/src/app/components/common-ui/Icon/Feather/svgs/WifiOff.js
deleted file mode 100644
index b06d1cce..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/WifiOff.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Icon: Feather.WifiOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1011.2 951.467l-721.067-721.067c0 0 0 0 0 0l-217.6-217.6c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l174.933 174.933c-55.467 29.867-106.667 64-153.6 106.667-17.067 17.067-21.333 42.667-4.267 59.733 8.533 8.533 17.067 12.8 29.867 12.8 8.533 0 21.333-4.267 29.867-12.8 46.933-42.667 102.4-76.8 162.133-102.4l98.133 98.133c-59.733 21.333-115.2 51.2-166.4 89.6-17.067 17.067-21.333 42.667-4.267 59.733 8.533 8.533 21.333 17.067 34.133 17.067 8.533 0 21.333-4.267 25.6-8.533 51.2-42.667 115.2-72.533 179.2-89.6l119.467 119.467c-68.267-4.267-140.8 12.8-196.267 55.467-21.333 12.8-25.6 38.4-8.533 59.733 12.8 17.067 38.4 25.6 59.733 8.533 72.533-51.2 174.933-51.2 247.467 0 8.533 4.267 17.067 8.533 25.6 8.533 4.267 0 4.267 0 8.533 0l281.6 281.6c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c12.8-17.067 12.8-42.667-4.267-59.733z' />
-            <path d='M674.133 452.267c-8.533 21.333 0 46.933 21.333 55.467 29.867 17.067 59.733 34.133 89.6 59.733 8.533 8.533 17.067 8.533 25.6 8.533 12.8 0 25.6-4.267 34.133-17.067 17.067-17.067 12.8-46.933-4.267-59.733-34.133-25.6-68.267-51.2-106.667-68.267-21.333-8.533-46.933 0-59.733 21.333z' />
-            <path d='M460.8 256c170.667-12.8 345.6 42.667 473.6 157.867 8.533 8.533 17.067 8.533 29.867 8.533s25.6-4.267 34.133-12.8c17.067-17.067 12.8-42.667-4.267-59.733-145.067-128-341.333-196.267-537.6-179.2-25.6 0-42.667 21.333-38.4 46.933 0 25.6 17.067 42.667 42.667 38.4z' />
-            <path d='M482.133 823.467c-8.533 8.533-12.8 17.067-12.8 29.867s4.267 21.333 12.8 29.867c8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8c8.533-8.533 12.8-21.333 12.8-29.867s-4.267-21.333-12.8-29.867c-17.067-17.067-42.667-17.067-59.733 0z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Wind.js b/src/app/components/common-ui/Icon/Feather/svgs/Wind.js
deleted file mode 100644
index 1f800005..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Wind.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.Wind
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M597.333 640c0 0 0 0 0 0h-512c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h512c0 0 0 0 0 0 12.8 0 21.333 4.267 29.867 12.8s12.8 17.067 12.8 29.867c0 12.8-4.267 21.333-12.8 29.867s-17.067 12.8-29.867 12.8c0 0 0 0 0 0-12.8 0-21.333-4.267-29.867-12.8-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733c25.6 25.6 55.467 38.4 89.6 38.4 0 0 0 0 0 0 34.133 0 64-12.8 89.6-38.4s38.4-55.467 38.4-89.6c0-34.133-12.8-68.267-38.4-89.6-21.333-25.6-55.467-38.4-89.6-38.4z' />
-            <path d='M85.333 384h384c0 0 0 0 0 0 34.133 0 68.267-12.8 89.6-38.4 51.2-51.2 51.2-132.267 0-179.2-21.333-25.6-55.467-38.4-89.6-38.4s-68.267 12.8-89.6 38.4c-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0c8.533-8.533 17.067-12.8 29.867-12.8 0 0 0 0 0 0 12.8 0 21.333 4.267 29.867 12.8 17.067 17.067 17.067 42.667 0 59.733-8.533 8.533-17.067 12.8-29.867 12.8 0 0 0 0 0 0h-384c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M938.667 298.667c-59.733-59.733-153.6-59.733-209.067 0-17.067 17.067-17.067 42.667 0 59.733s42.667 17.067 59.733 0c25.6-25.6 64-25.6 89.6 0s25.6 64 0 89.6c-12.8 12.8-29.867 17.067-46.933 17.067h-746.667c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h746.667c38.4 0 76.8-17.067 106.667-42.667 55.467-55.467 55.467-149.333 0-209.067z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/X.js b/src/app/components/common-ui/Icon/Feather/svgs/X.js
deleted file mode 100644
index 49a6aa47..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/X.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.X
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M571.733 512l226.133-226.133c17.067-17.067 17.067-42.667 0-59.733s-42.667-17.067-59.733 0l-226.133 226.133-226.133-226.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l226.133 226.133-226.133 226.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l226.133-226.133 226.133 226.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-226.133-226.133z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/XCircle.js b/src/app/components/common-ui/Icon/Feather/svgs/XCircle.js
deleted file mode 100644
index f5dc6f0c..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/XCircle.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.XCircle
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M512 42.667c-260.267 0-469.333 209.067-469.333 469.333s209.067 469.333 469.333 469.333 469.333-209.067 469.333-469.333-209.067-469.333-469.333-469.333zM512 896c-213.333 0-384-170.667-384-384s170.667-384 384-384c213.333 0 384 170.667 384 384s-170.667 384-384 384z' />
-            <path d='M669.867 354.133c-17.067-17.067-42.667-17.067-59.733 0l-98.133 98.133-98.133-98.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l98.133 98.133-98.133 98.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l98.133-98.133 98.133 98.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-98.133-98.133 98.133-98.133c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/XSquare.js b/src/app/components/common-ui/Icon/Feather/svgs/XSquare.js
deleted file mode 100644
index e715b411..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/XSquare.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.XSquare
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M810.667 85.333h-597.333c-72.533 0-128 55.467-128 128v597.333c0 72.533 55.467 128 128 128h597.333c72.533 0 128-55.467 128-128v-597.333c0-72.533-55.467-128-128-128zM853.333 810.667c0 25.6-17.067 42.667-42.667 42.667h-597.333c-25.6 0-42.667-17.067-42.667-42.667v-597.333c0-25.6 17.067-42.667 42.667-42.667h597.333c25.6 0 42.667 17.067 42.667 42.667v597.333z' />
-            <path d='M669.867 354.133c-17.067-17.067-42.667-17.067-59.733 0l-98.133 98.133-98.133-98.133c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l98.133 98.133-98.133 98.133c-17.067 17.067-17.067 42.667 0 59.733 8.533 8.533 17.067 12.8 29.867 12.8s21.333-4.267 29.867-12.8l98.133-98.133 98.133 98.133c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733l-98.133-98.133 98.133-98.133c17.067-17.067 17.067-42.667 0-59.733z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Youtube.js b/src/app/components/common-ui/Icon/Feather/svgs/Youtube.js
deleted file mode 100644
index 15e5c2ea..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Youtube.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.Youtube
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M1002.667 264.533c0 0 0 0 0 0-12.8-59.733-59.733-102.4-115.2-119.467-72.533-17.067-345.6-17.067-375.467-17.067s-302.933 0-379.733 21.333c-55.467 17.067-98.133 59.733-110.933 119.467-12.8 76.8-21.333 153.6-21.333 230.4s4.267 157.867 21.333 238.933c17.067 55.467 59.733 98.133 110.933 110.933 76.8 21.333 345.6 21.333 379.733 21.333s302.933 0 379.733-21.333c55.467-17.067 98.133-59.733 115.2-119.467 12.8-76.8 21.333-153.6 21.333-230.4-4.267-76.8-8.533-153.6-25.6-234.667zM921.6 716.8c-8.533 25.6-25.6 46.933-51.2 55.467-51.2 12.8-238.933 17.067-354.133 17.067s-311.467-8.533-358.4-21.333c-25.6-8.533-46.933-25.6-51.2-46.933-17.067-72.533-21.333-145.067-21.333-221.867 0-72.533 4.267-145.067 17.067-213.333 8.533-25.6 25.6-46.933 51.2-55.467 51.2-12.8 243.2-17.067 358.4-17.067 81.067 0 298.667 4.267 354.133 17.067 25.6 8.533 46.933 25.6 51.2 55.467 17.067 68.267 21.333 140.8 21.333 217.6 0 72.533-4.267 145.067-17.067 213.333z' />
-            <path d='M682.667 465.067l-247.467-140.8c-12.8-8.533-29.867-8.533-42.667 0s-17.067 21.333-17.067 38.4v277.333c0 17.067 8.533 29.867 21.333 38.4 4.267 4.267 12.8 4.267 21.333 4.267s12.8 0 21.333-4.267l247.467-140.8c12.8-8.533 21.333-21.333 21.333-38.4-4.267-12.8-12.8-25.6-25.6-34.133zM460.8 567.467v-132.267l115.2 68.267-115.2 64z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/Zap.js b/src/app/components/common-ui/Icon/Feather/svgs/Zap.js
deleted file mode 100644
index 823d4211..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/Zap.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Icon: Feather.Zap
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M934.4 409.6c-8.533-17.067-21.333-25.6-38.4-25.6h-337.067l38.4-294.4c4.267-17.067-8.533-38.4-25.6-42.667-17.067-8.533-38.4-4.267-51.2 12.8l-426.667 512c-8.533 12.8-12.8 29.867-4.267 46.933 8.533 12.8 21.333 21.333 38.4 21.333h337.067l-38.4 294.4c-4.267 17.067 8.533 38.4 25.6 42.667 4.267 4.267 12.8 4.267 17.067 4.267 12.8 0 25.6-4.267 34.133-17.067l426.667-512c8.533-12.8 12.8-29.867 4.267-42.667zM529.067 797.867l25.6-196.267c0-12.8-4.267-25.6-8.533-34.133-8.533-8.533-21.333-12.8-34.133-12.8h-294.4l273.067-328.533-21.333 196.267c0 12.8 4.267 25.6 8.533 34.133 8.533 8.533 21.333 12.8 29.867 12.8h294.4l-273.067 328.533z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ZapOff.js b/src/app/components/common-ui/Icon/Feather/svgs/ZapOff.js
deleted file mode 100644
index 4c32c60c..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ZapOff.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Icon: Feather.ZapOff
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M482.133 238.933l8.533-12.8-8.533 59.733c-4.267 21.333 12.8 42.667 38.4 46.933 0 0 4.267 0 4.267 0 21.333 0 38.4-17.067 42.667-38.4l29.867-204.8c4.267-17.067-8.533-38.4-25.6-42.667-17.067-8.533-38.4-4.267-51.2 12.8l-102.4 123.733c-17.067 17.067-12.8 42.667 4.267 59.733 21.333 12.8 46.933 12.8 59.733-4.267z' />
-            <path d='M669.867 469.333h136.533l-46.933 55.467c-17.067 17.067-12.8 46.933 4.267 59.733 8.533 8.533 17.067 8.533 25.6 8.533 12.8 0 25.6-4.267 34.133-17.067l102.4-123.733c8.533-12.8 12.8-29.867 4.267-46.933-4.267-12.8-17.067-21.333-34.133-21.333h-226.133c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667z' />
-            <path d='M1011.2 951.467l-938.667-938.667c-17.067-17.067-42.667-17.067-59.733 0s-17.067 42.667 0 59.733l273.067 273.067-187.733 226.133c-8.533 12.8-12.8 29.867-4.267 46.933 4.267 12.8 17.067 21.333 34.133 21.333h337.067l-38.4 294.4c-4.267 17.067 8.533 38.4 25.6 42.667 4.267 4.267 12.8 4.267 17.067 4.267 12.8 0 25.6-4.267 34.133-17.067l183.467-221.867 264.533 264.533c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-12.8 17.067-38.4 0-55.467zM217.6 554.667l123.733-149.333 149.333 149.333h-273.067zM529.067 797.867l21.333-187.733 72.533 72.533-93.867 115.2z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ZoomIn.js b/src/app/components/common-ui/Icon/Feather/svgs/ZoomIn.js
deleted file mode 100644
index ce8ef368..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ZoomIn.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ZoomIn
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M925.867 866.133l-157.867-157.867c51.2-64 85.333-149.333 85.333-238.933 0-213.333-170.667-384-384-384s-384 170.667-384 384c0 213.333 170.667 384 384 384 89.6 0 174.933-29.867 238.933-85.333l157.867 157.867c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733zM170.667 469.333c0-166.4 132.267-298.667 298.667-298.667s298.667 132.267 298.667 298.667c0 81.067-34.133 157.867-85.333 209.067 0 0 0 0 0 0s0 0 0 0c-55.467 55.467-128 85.333-209.067 85.333-170.667 4.267-302.933-128-302.933-294.4z' />
-            <path d='M597.333 426.667h-85.333v-85.333c0-25.6-17.067-42.667-42.667-42.667s-42.667 17.067-42.667 42.667v85.333h-85.333c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h85.333v85.333c0 25.6 17.067 42.667 42.667 42.667s42.667-17.067 42.667-42.667v-85.333h85.333c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/Feather/svgs/ZoomOut.js b/src/app/components/common-ui/Icon/Feather/svgs/ZoomOut.js
deleted file mode 100644
index e7bbdea1..00000000
--- a/src/app/components/common-ui/Icon/Feather/svgs/ZoomOut.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon: Feather.ZoomOut
-
-import React from 'react';
-import defaultProps from 'components/common-ui/Icon/defaultProps';
-
-export default props => (
-    <svg {...defaultProps} {...props}>
-        <g>
-            <path d='M925.867 866.133l-157.867-157.867c51.2-64 85.333-149.333 85.333-238.933 0-213.333-170.667-384-384-384s-384 170.667-384 384c0 213.333 170.667 384 384 384 89.6 0 174.933-29.867 238.933-85.333l157.867 157.867c8.533 8.533 21.333 12.8 29.867 12.8s21.333-4.267 29.867-12.8c17.067-17.067 17.067-42.667 0-59.733zM170.667 469.333c0-166.4 132.267-298.667 298.667-298.667s298.667 132.267 298.667 298.667c0 81.067-34.133 157.867-85.333 209.067 0 0 0 0 0 0s0 0 0 0c-55.467 55.467-128 85.333-209.067 85.333-170.667 4.267-302.933-128-302.933-294.4z' />
-            <path d='M597.333 426.667h-256c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667 42.667h256c25.6 0 42.667-17.067 42.667-42.667s-17.067-42.667-42.667-42.667z' />
-        </g>
-    </svg>
-);
diff --git a/src/app/components/common-ui/Icon/defaultProps.js b/src/app/components/common-ui/Icon/defaultProps.js
deleted file mode 100644
index afac9fec..00000000
--- a/src/app/components/common-ui/Icon/defaultProps.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const Props = {
-    className: 'icon',
-    width: 24,
-    height: 24,
-    viewBox: '0 0 1024 1024',
-    xmlns: 'http://www.w3.org/2000/svg',
-};
-
-export default Props;
diff --git a/src/app/components/common-ui/Icon/index.js b/src/app/components/common-ui/Icon/index.js
deleted file mode 100644
index 31fb3f9c..00000000
--- a/src/app/components/common-ui/Icon/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import Feather from './Feather';
-
-const icons = {
-    Feather,
-};
-
-export { icons as default, Feather };
diff --git a/src/app/components/common-ui/form/Checkbox/_checkbox.scss b/src/app/components/common-ui/form/Checkbox/_checkbox.scss
deleted file mode 100644
index 72f61e60..00000000
--- a/src/app/components/common-ui/form/Checkbox/_checkbox.scss
+++ /dev/null
@@ -1,139 +0,0 @@
-/** Checkbox styles **/
-$cbox-size: 18px;
-$cbox-border: 2px;
-$cbox-mark: "\2715";
-$cbox-txt-clr: #000000;
-$cbox-border-clr: #4F82BA;
-$cbox-bg-clr: #F7F7F7;
-
-$rdo-mark: "\2022";
-
-.checkbox,
-.radio {
-    display: inline-flex;
-    align-items: center;
-    background-color: transparent;
-    position: relative;
-    min-height: $cbox-size + -($cbox-border * 2);
-    box-sizing: border-box;
-    padding: $cbox-border;
-    margin-left: -($cbox-border);
-    cursor: pointer;
-    line-height: 1;
-    color: $cbox-txt-clr;
-    outline: none;
-
-    &:focus {
-        &:not(.disabled) {
-            background-color: $cbox-bg-clr;
-        }
-    }
-
-    &.top {
-        @extend .checkbox;
-        align-items: flex-start;
-    }
-
-    &.bottom {
-        @extend .checkbox;
-        align-items: flex-end;
-    }
-
-    > *:first-child {
-        flex-grow: 1;
-    }
-
-    > input {
-        display: none;
-    }
-
-    &:after {
-        content:"";
-        padding: 1px 0;
-        border: $cbox-border solid $cbox-border-clr;
-        width: $cbox-size + $cbox-border;
-        height: $cbox-size + $cbox-border;
-        margin-top: -($cbox-border/2);
-        font-size: $cbox-size - ($cbox-border * 2);
-        line-height: 1;
-        text-align: center;
-        border-radius: 2px;
-        flex-grow: 0;
-        color: $cbox-txt-clr;
-    }
-
-    &.checked {
-        &:after {
-            content: $cbox-mark;
-        }
-    }
-
-    &-right {
-        @extend .checkbox;
-
-        &:after {
-            margin-left: $cbox-size/2;
-        }
-
-    }
-
-    &-left {
-        @extend .checkbox;
-
-        &:after {
-            order: -1;
-            margin-right: $cbox-size/2;
-        }
-    }
-
-    &.disabled {
-        pointer-events: none;
-
-        &:after {
-            opacity: 0.5;
-        }
-    }
-}
-
-.radio {
-    &-right,
-    &-left {
-        &:after {
-            @extend .checkbox:after;
-            border-radius: 100% !important;
-        }
-
-        &:before {
-            position: absolute;
-            content: "";
-            top: 50%;
-            right: 0;
-            width: $cbox-size - ($cbox-size/3);
-            height: $cbox-size - ($cbox-size/3);
-            background-color: $cbox-txt-clr;
-            border-radius: 100%;
-            margin-top: -($cbox-border/2);
-            transform: translateX(-50%) translateY(-50%);
-            opacity: 0;
-            transition: opacity .275s ease-in-out;
-        }
-
-        &.checked {
-            &:after {
-                content: "";
-            }
-
-            &:before {
-                opacity: 1;
-            }
-        }
-    }
-
-    &-left {
-        &:before {
-            right: auto;
-            left: 0;
-            transform: translateX(50%) translateY(-50%);
-        }
-    }
-}
diff --git a/src/app/components/common-ui/form/Checkbox/index.js b/src/app/components/common-ui/form/Checkbox/index.js
deleted file mode 100644
index 9beec47c..00000000
--- a/src/app/components/common-ui/form/Checkbox/index.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Checkbox
- * -----------------------------------------------------------------------------
- */
-
-class Checkbox extends Component {
-    constructor(props) {
-        super(props);
-        this.state = { ...this.props };
-        this.onChange = this.onChange.bind(this);
-        this.onKeyUp = this.onKeyUp.bind(this);
-        this.input;
-        this.label;
-
-        let { type } = this.state;
-        if (!window[`__elm-${type}`]) {
-            window[`__elm-${type}`] = [];
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    componentDidMount() {
-        let { type } = this.state;
-        window[`__elm-${type}`].push(this);
-    }
-
-    uncheckAll(checked) {
-        let { type, value } = this.state;
-
-        let evt = {};
-
-        if (type === 'radio' && checked === true) {
-            window[`__elm-${type}`].forEach(item => {
-                if (item.state.value !== value) {
-                    item.setState({ checked: false });
-
-                    // Trigger the change event on the element
-                    if (typeof item.state['onChange'] === 'function') {
-                        evt = {
-                            type: 'change',
-                            currentTarget: item.input,
-                            target: item,
-                        };
-                        item.state.onChange(evt);
-                    }
-                }
-            });
-        }
-    }
-
-    onChange(e) {
-        let { checked, onChange, type, value, disabled } = this.state;
-        if (disabled === true) {
-            return;
-        }
-
-        checked = !checked;
-        this.setState({ checked });
-
-        this.uncheckAll(checked);
-
-        if (typeof onChange === 'function') {
-            evt = { type: 'change', currentTarget: this.input, target: this };
-            onChange(evt);
-        }
-    }
-
-    onKeyUp(e) {
-        if (e.which === 13 || e.which === 32) {
-            let { checked, type, value, disabled } = this.state;
-            if (disabled === true) {
-                return;
-            }
-
-            e.preventDefault();
-
-            checked = !checked;
-            if (type === 'radio') {
-                checked = true;
-            }
-
-            this.setState({ checked });
-
-            this.uncheckAll(checked);
-        }
-    }
-
-    render() {
-        let {
-            text,
-            align,
-            type,
-            value,
-            checked,
-            disabled,
-            style,
-            className = '',
-        } = this.state;
-        let iprop = Object.assign({}, this.state);
-        delete iprop.align;
-        delete iprop.text;
-        delete iprop.onChange;
-        delete iprop.style;
-        delete iprop.className;
-
-        let cls = [`${type}-${align}`];
-        if (disabled === true) {
-            cls.push('disabled');
-        }
-        if (checked === true) {
-            cls.push('checked');
-        }
-
-        return (
-            <label
-                className={cls.join(' ')}
-                onKeyUp={this.onKeyUp}
-                style={style}
-                tabIndex={0}
-                ref={elm => {
-                    this.label = elm;
-                }}>
-                {text ? <span>{text}</span> : null}
-                <input
-                    onChange={this.onChange}
-                    {...iprop}
-                    ref={elm => {
-                        this.input = elm;
-                    }}
-                />
-            </label>
-        );
-    }
-}
-
-Checkbox.defaultProps = {
-    align: 'right',
-    checked: false,
-    disabled: false,
-    id: null,
-    name: null,
-    required: false,
-    text: null,
-    type: 'checkbox',
-    value: null,
-};
-
-export default Checkbox;
diff --git a/src/app/components/common-ui/form/Checkbox/test.js b/src/app/components/common-ui/form/Checkbox/test.js
deleted file mode 100644
index a3eeb91c..00000000
--- a/src/app/components/common-ui/form/Checkbox/test.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from 'react';
-import Checkbox from './index';
-import { shallow } from 'reactium-core/enzyme';
-
-test('<Checkbox />', () => {
-    const props = {
-        align: 'right',
-        checked: false,
-        disabled: false,
-        id: 'test-checkbox',
-        name: 'test-checkbox',
-        required: true,
-        text: 'Check Me',
-        type: 'checkbox',
-        value: 'yep',
-    };
-
-    const checkBox = shallow(<Checkbox {...props} />);
-
-    expect(checkBox.html().length).toBeGreaterThan(0);
-    expect(checkBox.find('#test-checkbox')).toBeDefined();
-});
diff --git a/src/app/components/common-ui/form/Radio/_radio.scss b/src/app/components/common-ui/form/Radio/_radio.scss
deleted file mode 100644
index ceb0b01f..00000000
--- a/src/app/components/common-ui/form/Radio/_radio.scss
+++ /dev/null
@@ -1 +0,0 @@
-/** Radio styles **/
diff --git a/src/app/components/common-ui/form/Radio/index.js b/src/app/components/common-ui/form/Radio/index.js
deleted file mode 100644
index ca9ef45d..00000000
--- a/src/app/components/common-ui/form/Radio/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Checkbox from 'components/common-ui/form/Checkbox';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Radio
- * -----------------------------------------------------------------------------
- */
-
-export default class Radio extends Component {
-    constructor(props) {
-        super(props);
-        this.state = { ...this.props };
-    }
-
-    render() {
-        return <Checkbox {...this.state} type={'radio'} />;
-    }
-}
diff --git a/src/app/components/common-ui/form/Radio/library.js b/src/app/components/common-ui/form/Radio/library.js
deleted file mode 100644
index b174a6e6..00000000
--- a/src/app/components/common-ui/form/Radio/library.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import Radio from './index';
-export default Radio;
diff --git a/src/app/main.js b/src/app/main.js
index 0f6246ea..18f0be9a 100644
--- a/src/app/main.js
+++ b/src/app/main.js
@@ -1,38 +1,14 @@
-import { App, AppError } from 'reactium-core/app';
-
-let render = App;
-
-/**
- * @description Initialize the app.
- */
-if (module.hot) {
-    render = () => {
-        try {
-            App();
-        } catch (error) {
-            AppError(error);
-        }
-    };
-
-    module.hot.accept(
-        ['../.././.core/dependencies/index.js', '../.././.core/app.js'],
-        () => {
-            window.location.reload();
-        },
-    );
-}
-
-render();
-
-if ('serviceWorker' in navigator) {
-    window.addEventListener('load', () => {
-        navigator.serviceWorker
-            .register('/assets/js/sw/sw.js')
-            .then(registration => {
-                console.log('SW registered.');
-            })
-            .catch(registrationError => {
-                console.log('SW registration failed: ', registrationError);
-            });
-    });
-}
+// Uncomment this if you need corejs polyfills or runtime
+// import 'core-js/stable';
+// import 'regenerator-runtime/runtime';
+import { Shell } from '@atomic-reactor/reactium-core/app/shell';
+__webpack_public_path__ = window.resourceBaseUrl || '/assets/js/';
+
+(async () => {
+    try {
+        await Shell();
+    } catch (error) {
+        const { AppError } = await import('@atomic-reactor/reactium-core/app');
+        await AppError(error);
+    }
+})();
diff --git a/src/app/plugable/index.js b/src/app/plugable/index.js
deleted file mode 100644
index de9c1a2f..00000000
--- a/src/app/plugable/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import op from 'object-path';
-
-export default {
-    /**
-     * Default plugin filter
-     *
-     * Given to PluginProvider to determine by default what plugins are displayed.
-     * Useful for example when you want to provide access controls.
-     *
-     * Can be overriden per <Plugins /> component.
-     *
-     * @param  {Object} plugin
-     * @return {Boolean} true to keep plugin, false to remove it
-     */
-    filter: plugin => true,
-
-    /**
-     * Default plugin mapper. Useful for adding additional global context to
-     * each plugin.
-     *
-     * Can be overriden per <Plugins /> component.
-     *
-     * @param  {Object} plugin
-     * @return {Object} the modified plugin
-     */
-    mapper: plugin => plugin,
-
-    /**
-     * Default plugin underscore _.sortBy
-     *
-     * Can be overriden per <Plugins /> component.
-     *
-     * @param  {String|Function} sortBy _.sortBy argument.
-     * @param  {Boolean} reverse Reverse order
-     * @return negative, zero, or positive value, @see array sort compare functions
-     */
-    sort: {
-        sortBy: 'order',
-        reverse: false,
-    },
-};
diff --git a/src/app/toolkit/Lipsum.js b/src/app/toolkit/Lipsum.js
deleted file mode 100644
index 51e3f444..00000000
--- a/src/app/toolkit/Lipsum.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Lipsum
- * -----------------------------------------------------------------------------
- */
-
-export default class Lipsum extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            ...this.props,
-        };
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => ({
-            ...prevState,
-            ...nextProps,
-        }));
-    }
-
-    render() {
-        let { length = 0, index, text } = this.state;
-
-        length = length === 0 ? text.length : length;
-
-        let str = String(text).substr(index, length);
-
-        return <Fragment>{str}</Fragment>;
-    }
-}
-
-Lipsum.defaultProps = {
-    length: 0,
-    index: 0,
-    text:
-        'Nullam ac pellentesque lorem. Nullam vestibulum vestibulum ipsum sit amet cursus. Quisque ornare elit et nibh rutrum laoreet. Etiam eros erat, maximus eget felis quis, ullamcorper blandit ante. Vivamus facilisis, lacus ut suscipit dapibus, nisl lacus dapibus neque, non mollis diam metus eget sem. Praesent malesuada ornare nisl, quis gravida nisi lobortis id. Cras at enim viverra, facilisis massa ac, maximus ante. Nunc non magna purus. Suspendisse volutpat scelerisque ex, id sollicitudin nunc vulputate a. Vivamus id sapien at urna dictum vehicula. Phasellus vitae tortor in mi pellentesque elementum. Mauris vitae augue lacinia, tincidunt justo quis, maximus nibh. Donec varius imperdiet nunc ac vulputate. Nullam accumsan ultrices arcu a tincidunt. Vivamus ut metus ligula. Proin tempor metus ac quam cursus temporInteger malesuada, nisi eget consequat ullamcorper, nisl tortor ullamcorper metus, id faucibus tortor neque mattis magna. Etiam nec metus luctus, dictum est vel, ultrices orci. Mauris non odio condimentum, lacinia urna sed, dictum odio. Cras faucibus odio in vulputate dignissim. Nunc quis orci faucibus, aliquet erat ac, euismod lacus. Nulla vehicula dictum condimentum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed non consequat dui. Nulla lacinia placerat quam sed tempus. Curabitur a urna id odio tincidunt lacinia sollicitudin at erat. Mauris tristique feugiat ante nec tempus. Donec fringilla neque vitae justo suscipit eleifend. Nunc volutpat erat ac libero porta blandit. Aenean eget dolor sapien. Phasellus tincidunt magna leo, ac convallis erat feugiat a. Vestibulum eleifend pharetra interdum. Integer luctus rutrum mauris a lacinia. Phasellus libero urna, laoreet eget tempor et, tristique at erat.',
-};
diff --git a/src/app/toolkit/buttons/ButtonBlock/index.js b/src/app/toolkit/buttons/ButtonBlock/index.js
deleted file mode 100644
index 72cb72eb..00000000
--- a/src/app/toolkit/buttons/ButtonBlock/index.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: ButtonBlock
- * -----------------------------------------------------------------------------
- */
-
-export default class ButtonBlock extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <Fragment>
-                <div
-                    style={{ width: '100%' }}
-                    className={'p-20 bg-grey-light mb-xs-10 mb-sm-20'}
-                >
-                    <button className={`btn-primary-lg btn-block`}>
-                        Primary Block
-                    </button>
-                </div>
-                <div style={{ width: '100%' }} className={'p-20 bg-grey-light'}>
-                    <button className={`btn-primary-lg-outline btn-block`}>
-                        Outline Block
-                    </button>
-                </div>
-            </Fragment>
-        );
-    }
-}
diff --git a/src/app/toolkit/buttons/ButtonBlock/readme.js b/src/app/toolkit/buttons/ButtonBlock/readme.js
deleted file mode 100644
index 3ac61767..00000000
--- a/src/app/toolkit/buttons/ButtonBlock/readme.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * ButtonBlock Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-By adding ${'`.btn-block`'} to a styled button, you can force the button to display as a block element.
-
-###### Usage
-${'```html'}
-<button type='button' class='btn-primary-lg btn-block'>Primary Button Block</button>
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/buttons/ButtonOverview/index.js b/src/app/toolkit/buttons/ButtonOverview/index.js
deleted file mode 100644
index 5cf2f878..00000000
--- a/src/app/toolkit/buttons/ButtonOverview/index.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import ButtonPrimary from 'toolkit/buttons/ButtonPrimary';
-import ButtonSecondary from 'toolkit/buttons/ButtonSecondary';
-import ButtonTertiary from 'toolkit/buttons/ButtonTertiary';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: ButtonOverview
- * -----------------------------------------------------------------------------
- */
-
-export default class ButtonOverview extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <Fragment>
-                <ButtonPrimary />
-                <ButtonSecondary />
-                <ButtonTertiary />
-            </Fragment>
-        );
-    }
-}
diff --git a/src/app/toolkit/buttons/ButtonOverview/readme.js b/src/app/toolkit/buttons/ButtonOverview/readme.js
deleted file mode 100644
index b97d615b..00000000
--- a/src/app/toolkit/buttons/ButtonOverview/readme.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * ButtonOverview Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-# Your Documentation Here
-
-Be sure to use [markdown ](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format the text.
-
-I suppose you could also use HTML but come on.. do you _REALLY_ need to?
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/buttons/ButtonPrimary/index.js b/src/app/toolkit/buttons/ButtonPrimary/index.js
deleted file mode 100644
index bbb39325..00000000
--- a/src/app/toolkit/buttons/ButtonPrimary/index.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: ButtonPrimary
- * -----------------------------------------------------------------------------
- */
-
-export default class ButtonPrimary extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <div className={'row'}>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-primary'}>Primary</button>
-                    </div>
-                    <small>
-                        <kbd>.btn-primary</kbd>
-                    </small>
-                </div>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-primary-pill'}>
-                            Primary Pill
-                        </button>
-                    </div>
-                    <small>
-                        <kbd>.btn-primary-pill</kbd>
-                    </small>
-                </div>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-primary-outline'}>
-                            Outline
-                        </button>
-                    </div>
-                    <small>
-                        <kbd>.btn-primary-outline</kbd>
-                    </small>
-                </div>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-primary-outline-pill'}>
-                            Outline Pill
-                        </button>
-                    </div>
-                    <small>
-                        <kbd>.btn-primary-outline-pill</kbd>
-                    </small>
-                </div>
-            </div>
-        );
-    }
-}
diff --git a/src/app/toolkit/buttons/ButtonPrimary/readme.js b/src/app/toolkit/buttons/ButtonPrimary/readme.js
deleted file mode 100644
index 7db33bd1..00000000
--- a/src/app/toolkit/buttons/ButtonPrimary/readme.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * ButtonPrimary Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### Usage
-${'```html'}
-<button type='button' class='btn-primary'>Primary Button</button>
-<button type='button' class='btn-primary-pill'>Primary Pill</button>
-<button type='button' class='btn-primary-outline'>Primary Outline</button>
-<button type='button' class='btn-primary-outline-pill'>Primary Outline Pill</button>
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/buttons/ButtonSecondary/index.js b/src/app/toolkit/buttons/ButtonSecondary/index.js
deleted file mode 100644
index 9988d333..00000000
--- a/src/app/toolkit/buttons/ButtonSecondary/index.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: ButtonSecondary
- * -----------------------------------------------------------------------------
- */
-
-export default class ButtonSecondary extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <div className={'row'}>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-secondary'}>Secondary</button>
-                    </div>
-                    <small>
-                        <kbd>.btn-secondary</kbd>
-                    </small>
-                </div>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-secondary-pill'}>
-                            Secondary Pill
-                        </button>
-                    </div>
-                    <small>
-                        <kbd>.btn-secondary-pill</kbd>
-                    </small>
-                </div>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-secondary-outline'}>
-                            Outline
-                        </button>
-                    </div>
-                    <small>
-                        <kbd>.btn-secondary-outline</kbd>
-                    </small>
-                </div>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-secondary-outline-pill'}>
-                            Outline Pill
-                        </button>
-                    </div>
-                    <small>
-                        <kbd>.btn-secondary-outline-pill</kbd>
-                    </small>
-                </div>
-            </div>
-        );
-    }
-}
diff --git a/src/app/toolkit/buttons/ButtonSecondary/readme.js b/src/app/toolkit/buttons/ButtonSecondary/readme.js
deleted file mode 100644
index 3b508796..00000000
--- a/src/app/toolkit/buttons/ButtonSecondary/readme.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * ButtonSecondary Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### Usage
-${'```html'}
-<button type='button' class='btn-secondary'>Secondary Button</button>
-<button type='button' class='btn-secondary-pill'>Secondary Pill</button>
-<button type='button' class='btn-secondary-outline'>Secondary Outline</button>
-<button type='button' class='btn-secondary-outline-pill'>Secondary Outline Pill</button>
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/buttons/ButtonSize/index.js b/src/app/toolkit/buttons/ButtonSize/index.js
deleted file mode 100644
index 4bae878b..00000000
--- a/src/app/toolkit/buttons/ButtonSize/index.js
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: ButtonSizing
- * -----------------------------------------------------------------------------
- */
-
-class ButtonSizing extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = { ...this.props };
-    }
-
-    renderRows() {
-        let sizes = ['lg', 'md', 'sm', 'xs'];
-
-        return sizes.map((sz, i) => {
-            return (
-                <div className={'row'} key={`row-${i}`}>
-                    <div className={'col-xs-12 col-sm text-center my-10'}>
-                        <div className={'mb-xs-8 mb-sm-10'}>
-                            <button className={`btn-primary-${sz}`}>
-                                Primary
-                            </button>
-                        </div>
-                        <small>
-                            <kbd>.btn-{sz}-primary</kbd>
-                        </small>
-                    </div>
-                    <div className={'col-xs-12 col-sm text-center my-10'}>
-                        <div className={'mb-xs-8 mb-sm-10'}>
-                            <button className={`btn-primary-${sz}-pill`}>
-                                Primary Pill
-                            </button>
-                        </div>
-                        <small>
-                            <kbd>.btn-primary-{sz}-pill</kbd>
-                        </small>
-                    </div>
-                    <div className={'col-xs-12 col-sm text-center my-10'}>
-                        <div className={'mb-xs-8 mb-sm-10'}>
-                            <button className={`btn-primary-${sz}-outline`}>
-                                Outline
-                            </button>
-                        </div>
-                        <small>
-                            <kbd>.btn-primary-{sz}-outline</kbd>
-                        </small>
-                    </div>
-                    <div className={'col-xs-12 col-sm text-center my-10'}>
-                        <div className={'mb-xs-8 mb-sm-10'}>
-                            <button
-                                className={`btn-primary-${sz}-outline-pill`}
-                            >
-                                Outline Pill
-                            </button>
-                        </div>
-                        <small>
-                            <kbd>.btn-primary-{sz}-outline-pill</kbd>
-                        </small>
-                    </div>
-                </div>
-            );
-        });
-    }
-
-    onStyleChange(e) {
-        let style = e.currentTarget.value;
-        this.setState({ style });
-    }
-
-    onTypeChange(e) {
-        let type = e.currentTarget.value;
-        this.setState({ type });
-    }
-
-    render() {
-        let { sizes, style, styles, type, types } = this.state;
-
-        return (
-            <Fragment>
-                <div className={'flex end'}>
-                    <span className={'form-group mr-10'}>
-                        <select
-                            value={type}
-                            onChange={this.onTypeChange.bind(this)}
-                        >
-                            {Object.keys(types).map((k, i) => {
-                                return (
-                                    <option key={`type-${i}`} value={k}>
-                                        {types[k]}
-                                    </option>
-                                );
-                            })}
-                        </select>
-                    </span>
-
-                    <div className={'form-group'}>
-                        <select
-                            value={style}
-                            onChange={this.onStyleChange.bind(this)}
-                        >
-                            {Object.keys(styles).map((k, i) => {
-                                return (
-                                    <option key={`style-${i}`} value={k}>
-                                        {styles[k]}
-                                    </option>
-                                );
-                            })}
-                        </select>
-                    </div>
-                </div>
-
-                <div className={'pt-xs-20'}>
-                    <div className={'row'}>
-                        {Object.keys(sizes)
-                            .reverse()
-                            .map((k, i) => {
-                                let name = sizes[k];
-                                let cls =
-                                    k !== 'default'
-                                        ? `btn-${type}-${k}`
-                                        : `btn-${type}`;
-                                cls += style !== 'default' ? `-${style}` : '';
-                                return (
-                                    <div
-                                        key={`size-${i}`}
-                                        className={'col-xs-12'}
-                                    >
-                                        <div className={'text-center my-10'}>
-                                            <button
-                                                type={'button'}
-                                                className={cls}
-                                            >
-                                                {name}
-                                            </button>
-                                        </div>
-                                        <div
-                                            className={
-                                                'small text-center my-10'
-                                            }
-                                        >
-                                            <kbd>.{cls}</kbd>
-                                        </div>
-                                    </div>
-                                );
-                            })}
-                    </div>
-                </div>
-            </Fragment>
-        );
-    }
-}
-
-ButtonSizing.defaultProps = {
-    size: 'default',
-    sizes: {
-        xs: 'XS',
-        sm: 'Small',
-        default: 'Default',
-        md: 'Medium',
-        lg: 'Large'
-    },
-    style: 'default',
-    styles: {
-        default: 'Default',
-        pill: 'Pill',
-        outline: 'Outline',
-        'outline-pill': 'Outline Pill'
-    },
-    type: 'primary',
-    types: {
-        primary: 'Primary',
-        secondary: 'Secondary',
-        tertiary: 'Tertiary'
-    }
-};
-
-export default ButtonSizing;
diff --git a/src/app/toolkit/buttons/ButtonSize/readme.js b/src/app/toolkit/buttons/ButtonSize/readme.js
deleted file mode 100644
index c421e878..00000000
--- a/src/app/toolkit/buttons/ButtonSize/readme.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * ButtonSize Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-You can adjust the size of a button by adding a size: ${'`xs, sm, md, lg`'}
-
-###### Usage
-${'```html'}
-<button type='button' class='btn-primary-lg'>Large Primary Button</button>
-<button type='button' class='btn-primary-lg-pill'>Large Primary Pill Button</button>
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/buttons/ButtonState/index.js b/src/app/toolkit/buttons/ButtonState/index.js
deleted file mode 100644
index cdc9808f..00000000
--- a/src/app/toolkit/buttons/ButtonState/index.js
+++ /dev/null
@@ -1,301 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: ButtonState
- * -----------------------------------------------------------------------------
- */
-
-class ButtonState extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = { ...this.props };
-    }
-
-    onChange(e) {
-        let active = e.currentTarget.value;
-        this.setState({ active });
-    }
-
-    render() {
-        let { active, types = {} } = this.state;
-        let cls = `btn-${active}`;
-        let name = types[active];
-
-        return (
-            <Fragment>
-                <div style={{ position: 'absolute', top: 0, right: 0 }}>
-                    <div className={`form-group`}>
-                        <select
-                            value={active}
-                            onChange={this.onChange.bind(this)}
-                            className={`mt-xs-20 mr-xs-24`}
-                        >
-                            {Object.keys(types).map((k, i) => {
-                                return (
-                                    <option key={`type-${i}`} value={k}>
-                                        {types[k]}
-                                    </option>
-                                );
-                            })}
-                        </select>
-                    </div>
-                </div>
-                <h4 className={`mb-xs-10 mb-sm-20`}>Default State</h4>
-                <section className={`mb-xs-10 mb-sm-20`}>
-                    <div className={`row`}>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={cls}>{name}</button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-pill`}>
-                                    {name} Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-pill</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-outline`}>
-                                    Outline
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-outline-pill`}>
-                                    Outline Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline-pill</kbd>
-                            </small>
-                        </div>
-                    </div>
-                </section>
-                <section className={`my-xs-10 my-sm-20`}>
-                    <h4 className={`mb-xs-10 mb-sm-20`}>Hover State</h4>
-                    <div className={`row`}>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls} hover`}>
-                                    {name}
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls} .hover</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-pill hover`}>
-                                    {name} Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-pill .hover</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-outline hover`}>
-                                    Outline
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline .hover</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-outline-pill hover`}>
-                                    Outline Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline-pill .hover</kbd>
-                            </small>
-                        </div>
-                    </div>
-                </section>
-                <section className={`my-xs-10 my-sm-20`}>
-                    <h4 className={`mb-xs-10 mb-sm-20`}>Active State</h4>
-                    <div className={`row`}>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls} active`}>
-                                    {name}
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls} .active</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-pill active`}>
-                                    {name} Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-pill .active</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-outline active`}>
-                                    Outline
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline .active</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button
-                                    className={`${cls}-outline-pill active`}
-                                >
-                                    Outline Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline-pill .active</kbd>
-                            </small>
-                        </div>
-                    </div>
-                </section>
-                <section className={`my-xs-10 my-sm-20`}>
-                    <h4 className={`mb-xs-10 mb-sm-20`}>Focus State</h4>
-                    <div className={`row`}>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls} focus`}>
-                                    {name}
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls} .focus</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-pill focus`}>
-                                    {name} Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-pill .focus</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-outline focus`}>
-                                    Outline
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline .focus</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={`${cls}-outline-pill focus`}>
-                                    Outline Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline-pill .focus</kbd>
-                            </small>
-                        </div>
-                    </div>
-                </section>
-                <section className={`mt-xs-10 mt-sm-20`}>
-                    <h4 className={`mb-xs-10 mb-sm-20`}>Disabled State</h4>
-                    <div className={`row`}>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button className={cls} disabled={true}>
-                                    {name}
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls} .disabled</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button
-                                    className={`${cls}-pill`}
-                                    disabled={true}
-                                >
-                                    {name} Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-pill .disabled</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button
-                                    className={`${cls}-outline`}
-                                    disabled={true}
-                                >
-                                    Outline
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline .disabled</kbd>
-                            </small>
-                        </div>
-                        <div className={`col-xs-6 col-sm text-center my-10`}>
-                            <div className={`mb-xs-8 mb-sm-10`}>
-                                <button
-                                    className={`${cls}-outline-pill`}
-                                    disabled={true}
-                                >
-                                    Outline Pill
-                                </button>
-                            </div>
-                            <small>
-                                <kbd>.{cls}-outline-pill .disabled</kbd>
-                            </small>
-                        </div>
-                    </div>
-                </section>
-            </Fragment>
-        );
-    }
-}
-
-ButtonState.defaultProps = {
-    active: 'primary',
-    types: {
-        primary: 'Primary',
-        secondary: 'Secondary',
-        tertiary: 'Tertiary'
-    }
-};
-
-export default ButtonState;
diff --git a/src/app/toolkit/buttons/ButtonState/readme.js b/src/app/toolkit/buttons/ButtonState/readme.js
deleted file mode 100644
index 5f36da98..00000000
--- a/src/app/toolkit/buttons/ButtonState/readme.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * ButtonState Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-For ${'`<button>`'} elements you can just set the ${'`disabled`'} attribute to make a styled button appear disabled.
-
-${'```html'}
-<button type='button' disabled class='btn-primary'>Disabled Primary Button</button>
-<a href='/go/somewhere' class='btn-primary disabled'>Disabled Primary Link</a>
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/buttons/ButtonTertiary/index.js b/src/app/toolkit/buttons/ButtonTertiary/index.js
deleted file mode 100644
index fbe55e0c..00000000
--- a/src/app/toolkit/buttons/ButtonTertiary/index.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: ButtonTertiary
- * -----------------------------------------------------------------------------
- */
-
-export default class ButtonTertiary extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <div className={'row'}>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-tertiary'}>Tertiary</button>
-                    </div>
-                    <small>
-                        <kbd>.btn-tertiary</kbd>
-                    </small>
-                </div>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-tertiary-pill'}>
-                            Tertiary Pill
-                        </button>
-                    </div>
-                    <small>
-                        <kbd>.btn-tertiary-pill</kbd>
-                    </small>
-                </div>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-tertiary-outline'}>
-                            Outline
-                        </button>
-                    </div>
-                    <small>
-                        <kbd>.btn-tertiary-outline</kbd>
-                    </small>
-                </div>
-                <div className={'col-xs-12 col-sm text-center my-10'}>
-                    <div className={'mb-xs-8 mb-sm-10'}>
-                        <button className={'btn-tertiary-outline-pill'}>
-                            Outline Pill
-                        </button>
-                    </div>
-                    <small>
-                        <kbd>.btn-tertiary-outline-pill</kbd>
-                    </small>
-                </div>
-            </div>
-        );
-    }
-}
diff --git a/src/app/toolkit/buttons/ButtonTertiary/readme.js b/src/app/toolkit/buttons/ButtonTertiary/readme.js
deleted file mode 100644
index 1c56c615..00000000
--- a/src/app/toolkit/buttons/ButtonTertiary/readme.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * ButtonTertiary Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### Usage
-${'```html'}
-<button type='button' class='btn-tertiary'>Tertiary Button</button>
-<button type='button' class='btn-tertiary-pill'>Tertiary Pill</button>
-<button type='button' class='btn-tertiary-outline'>Tertiary Outline</button>
-<button type='button' class='btn-tertiary-outline-pill'>Tertiary Outline Pill</button>
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/form/CompCheckbox/index.js b/src/app/toolkit/form/CompCheckbox/index.js
deleted file mode 100644
index 7744d593..00000000
--- a/src/app/toolkit/form/CompCheckbox/index.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Checkbox from 'components/common-ui/form/Checkbox';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: CompCheckbox
- * -----------------------------------------------------------------------------
- */
-
-class CompCheckbox extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    render() {
-        return (
-            <div className={'row'}>
-                <div className={'col-xs-12 col-sm-6 mb-xs-40 mb-sm-0'}>
-                    <h4>Align Right</h4>
-                    <div className={'mb-xs-10 mb-sm-20 mt-20'}>
-                        <Checkbox
-                            text={'Checkbox 1'}
-                            value={1}
-                            name={'demo-check-1'}
-                            style={{ minWidth: 118 }}
-                            checked
-                        />
-                    </div>
-                    <div className={'mb-xs-10 mb-sm-20'}>
-                        <Checkbox
-                            text={'Checkbox 2'}
-                            value={2}
-                            name={'demo-check-1'}
-                            style={{ minWidth: 118 }}
-                        />
-                    </div>
-                    <div>
-                        <Checkbox
-                            text={'Disabled'}
-                            value={3}
-                            name={'demo-check-1'}
-                            style={{ minWidth: 118 }}
-                            disabled
-                        />
-                    </div>
-                </div>
-                <div className={'col-xs-12 col-sm-6'}>
-                    <h4>Align Left</h4>
-                    <div className={'mb-xs-10 mb-sm-20 mt-20'}>
-                        <Checkbox
-                            text={'Checkbox 1'}
-                            value={4}
-                            name={'demo-check-1'}
-                            align={'left'}
-                        />
-                    </div>
-                    <div className={'mb-xs-10 mb-sm-20'}>
-                        <Checkbox
-                            text={'Checkbox 2'}
-                            value={5}
-                            name={'demo-check-1'}
-                            align={'left'}
-                        />
-                    </div>
-                    <div>
-                        <Checkbox
-                            text={'Disabled'}
-                            value={6}
-                            name={'demo-check-1'}
-                            align={'left'}
-                            disabled
-                        />
-                    </div>
-                </div>
-            </div>
-        );
-    }
-}
-
-// Default properties
-CompCheckbox.defaultProps = {};
-
-export default CompCheckbox;
diff --git a/src/app/toolkit/form/CompCheckbox/readme.js b/src/app/toolkit/form/CompCheckbox/readme.js
deleted file mode 100644
index 6350d622..00000000
--- a/src/app/toolkit/form/CompCheckbox/readme.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * CompCheckbox Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### Usage
-${'```html'}
-<Checkbox value={1} name={'my-checkbox'} text={'Checkbox 1'} checked />
-<Checkbox value={2} name={'my-checkbox'} text={'Checkbox 2'} align={'left'} />
-<Checkbox value={3} name={'my-checkbox'} text={'Checkbox 3'} disabled />
-${'```'}
-
-###### Default Props
-${'```js'}
-Checkbox.defaultProps = {
-    align    : 'right',
-    checked  : false,
-    disabled : false,
-    id       : null,
-    name     : null,
-    text     : null,
-    value    : null,
-};
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/form/CompRadio/index.js b/src/app/toolkit/form/CompRadio/index.js
deleted file mode 100644
index 0823beda..00000000
--- a/src/app/toolkit/form/CompRadio/index.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Radio from 'components/common-ui/form/Radio';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: CompRadio
- * -----------------------------------------------------------------------------
- */
-
-class CompRadio extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    render() {
-        return (
-            <Fragment>
-                <div className={'mb-xs-10 mb-sm-20'}>
-                    <Radio
-                        text={'Option 1'}
-                        value={1}
-                        name={'demo-radio-1'}
-                        style={{ width: 135 }}
-                        checked={true}
-                    />
-                </div>
-                <div className={'mb-xs-10 mb-sm-20'}>
-                    <Radio
-                        text={'Option 2'}
-                        value={2}
-                        name={'demo-radio-1'}
-                        style={{ width: 135 }}
-                    />
-                </div>
-                <div>
-                    <Radio
-                        text={'Disabled'}
-                        value={3}
-                        name={'demo-radio-1'}
-                        style={{ width: 135 }}
-                        disabled={true}
-                    />
-                </div>
-            </Fragment>
-        );
-    }
-}
-
-// Default properties
-CompRadio.defaultProps = {};
-
-export default CompRadio;
diff --git a/src/app/toolkit/form/CompRadio/readme.js b/src/app/toolkit/form/CompRadio/readme.js
deleted file mode 100644
index 3ea15250..00000000
--- a/src/app/toolkit/form/CompRadio/readme.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * CompRadio Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### Usage
-${'```html'}
-<Radio value={1} name={'my-radio'} text={'Radio 1'} checked />
-<Radio value={2} name={'my-radio'} text={'Radio 2'} align={'left'} />
-<Radio value={3} name={'my-radio'} text={'Radio 3'} disabled />
-${'```'}
-
-###### Default Props
-${'```js'}
-Radio.defaultProps = {
-    align    : 'right',
-    checked  : false,
-    disabled : false,
-    id       : null,
-    name     : null,
-    text     : null,
-    value    : null,
-};
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/form/Select/index.js b/src/app/toolkit/form/Select/index.js
deleted file mode 100644
index 416adc35..00000000
--- a/src/app/toolkit/form/Select/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Select
- * -----------------------------------------------------------------------------
- */
-
-const S = props => {
-    return (
-        <select {...props}>
-            <option>Item 1</option>
-            <option>Item 2</option>
-            <option>Item 3</option>
-        </select>
-    );
-};
-
-export default class Select extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <form>
-                <div className={'form-group'}>
-                    <S />
-                </div>
-                <div className={'form-group'}>
-                    <S multiple />
-                </div>
-            </form>
-        );
-    }
-}
diff --git a/src/app/toolkit/form/Select/readme.js b/src/app/toolkit/form/Select/readme.js
deleted file mode 100644
index 38951983..00000000
--- a/src/app/toolkit/form/Select/readme.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Select Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-# Your Documentation Here
-
-Be sure to use [markdown ](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format the text.
-
-I suppose you could also use HTML but come on.. do you _REALLY_ need to?
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/form/Textarea/index.js b/src/app/toolkit/form/Textarea/index.js
deleted file mode 100644
index 81ef7714..00000000
--- a/src/app/toolkit/form/Textarea/index.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Textarea
- * -----------------------------------------------------------------------------
- */
-
-class Textarea extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    render() {
-        return (
-            <form>
-                <div className={'form-group'}>
-                    <textarea
-                        name={'textarea'}
-                        placeholder={'your message here'}
-                        autoComplete={'off'}
-                    />
-                </div>
-                <div className={'form-group'}>
-                    <textarea
-                        name={'textarea'}
-                        autoComplete={'off'}
-                        readOnly
-                        defaultValue={'read only'}
-                    />
-                </div>
-                <div className={'form-group'}>
-                    <textarea
-                        name={'textarea'}
-                        placeholder={'disabled'}
-                        autoComplete={'off'}
-                        disabled
-                    />
-                </div>
-                <div className={'form-group'}>
-                    <label>
-                        Focused:
-                        <textarea
-                            name={'textarea'}
-                            className={'focus'}
-                            autoComplete={'off'}
-                        />
-                        <small>Some small text</small>
-                    </label>
-                </div>
-                <div className={'form-group error'}>
-                    <label>
-                        Error:
-                        <textarea name={'textarea'} autoComplete={'off'} />
-                        <small>Error message yo!</small>
-                    </label>
-                </div>
-            </form>
-        );
-    }
-}
-
-// Default properties
-Textarea.defaultProps = {};
-
-export default Textarea;
diff --git a/src/app/toolkit/form/Textarea/readme.js b/src/app/toolkit/form/Textarea/readme.js
deleted file mode 100644
index 6ac1fe2b..00000000
--- a/src/app/toolkit/form/Textarea/readme.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Textarea Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-# Your Documentation Here
-
-Be sure to use [markdown ](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format the text.
-
-I suppose you could also use HTML but come on.. do you _REALLY_ need to?
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/form/Textfield/index.js b/src/app/toolkit/form/Textfield/index.js
deleted file mode 100644
index e84260a0..00000000
--- a/src/app/toolkit/form/Textfield/index.js
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Textfield
- * -----------------------------------------------------------------------------
- */
-
-class Textfield extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    render() {
-        return (
-            <form>
-                <div className={'form-group'}>
-                    <input
-                        type='text'
-                        autoComplete={'off'}
-                        name={'text-input'}
-                        placeholder={'placeholder'}
-                    />
-                </div>
-
-                <div className={'form-group'}>
-                    <input
-                        type='text'
-                        autoComplete={'off'}
-                        name={'text-input'}
-                        readOnly
-                        defaultValue={'read only'}
-                    />
-                </div>
-
-                <div className={'form-group'}>
-                    <input
-                        type='text'
-                        autoComplete={'off'}
-                        name={'text-input'}
-                        placeholder={'disabled'}
-                        disabled
-                    />
-                </div>
-
-                <div className={'form-group'}>
-                    <label>
-                        Focused:
-                        <input
-                            type='text'
-                            autoComplete={'off'}
-                            name={'text-input'}
-                            className={'focus'}
-                        />
-                        <small>Something about this textfield</small>
-                    </label>
-                </div>
-
-                <div className={'form-group error'}>
-                    <label>
-                        Error:
-                        <input
-                            type='text'
-                            autoComplete={'off'}
-                            name={'text-input'}
-                        />
-                        <small>Something about this error</small>
-                    </label>
-                </div>
-
-                <h3>Inline</h3>
-                <div className={'row pt-xs-20'}>
-                    <div className={'col-xs-12 col-sm-6 mb-xs-10'}>
-                        <div className={'form-group pr-xs-0 pr-sm-20 inline'}>
-                            <label className={'pr-xs-10 pr-sm-20'}>
-                                Field 1:
-                            </label>
-                            <input
-                                type='text'
-                                autoComplete={'off'}
-                                name={'text-input'}
-                            />
-                        </div>
-                    </div>
-                    <div className={'col-xs-12 col-sm-6'}>
-                        <div className={'form-group inline'}>
-                            <label className={'pr-xs-10 pr-sm-20'}>
-                                Field 2:
-                            </label>
-                            <input
-                                type='text'
-                                autoComplete={'off'}
-                                name={'text-input'}
-                            />
-                        </div>
-                    </div>
-                </div>
-            </form>
-        );
-    }
-}
-
-// Default properties
-Textfield.defaultProps = {};
-
-export default Textfield;
diff --git a/src/app/toolkit/form/Textfield/readme.js b/src/app/toolkit/form/Textfield/readme.js
deleted file mode 100644
index 7be8bf1f..00000000
--- a/src/app/toolkit/form/Textfield/readme.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Textfield Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-# Your Documentation Here
-
-Be sure to use [markdown ](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format the text.
-
-I suppose you could also use HTML but come on.. do you _REALLY_ need to?
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/global/Colors/_style.scss b/src/app/toolkit/global/Colors/_style.scss
deleted file mode 100644
index 3f88744c..00000000
--- a/src/app/toolkit/global/Colors/_style.scss
+++ /dev/null
@@ -1,60 +0,0 @@
-
-.re-toolkit {
-
-    &-colors {
-        display: flex;
-        flex-wrap: wrap;
-        width: 100%;
-
-        > div {
-            width: 100%;
-            max-width: 100%;
-            display: flex;
-            flex-direction: column;
-            padding-bottom: 40px;
-
-            @media only screen and (min-width: 560px) {
-                width: 50%;
-                max-width: 50%;
-            }
-
-            @media only screen and (min-width: 768px) {
-                width: 33%;
-                max-width: 33%;
-            }
-
-            @media only screen and (min-width: 1024px) {
-                width: 25%;
-                max-width: 25%;
-            }
-
-            div:first-child {
-                width: 100%;
-                height: 100px;
-                position: relative;
-                padding: 12px;
-                color: white;
-                font-size: 10px;
-            }
-            
-            div:last-child {
-                font-size: 10px;
-                padding: 5px 5px 0 5px;
-                display: flex;
-
-                *:first-child {
-                    flex-grow: 1;
-                }
-            }
-        }
-
-        .color-border {
-            &:after {
-                content: "";
-                position: absolute;
-                border: 1px solid #F7F7F7;
-                top: 0; right: 0; bottom: 0; left: 0;
-            }
-        }
-    }
-}
diff --git a/src/app/toolkit/global/Colors/index.js b/src/app/toolkit/global/Colors/index.js
deleted file mode 100644
index 732ab86e..00000000
--- a/src/app/toolkit/global/Colors/index.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import colorProfile from 'appdir/../assets/style/_scss/colors';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Colors
- * -----------------------------------------------------------------------------
- */
-
-class Colors extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {}
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    invertColor(color) {
-        let isHex = color.charAt(0) === '#';
-        if (isHex !== true) {
-            return '#FFFFFF';
-        }
-
-        let cval = color.replace('#', '0x') / 1;
-        let wval = 0xffffff - 0xffffff / 20;
-        return cval > wval ? '#000000' : '#FFFFFF';
-    }
-
-    render() {
-        return (
-            <div className='re-toolkit-colors'>
-                {Object.keys(colorProfile).map((k, i) => {
-                    let css = `.${k}`;
-                    let cname = k.split('color-').join('');
-                    let code = String(colorProfile[k]).toUpperCase();
-                    let txtColor = this.invertColor(code);
-
-                    let cls = txtColor === '#000000' ? 'color-border' : '';
-
-                    return (
-                        <div key={`color-${i}`}>
-                            <div className={`bg-${cname} ${cls}`}>
-                                <span style={{ color: txtColor }}>{cname}</span>
-                            </div>
-                            <div>
-                                <span>${k}</span>
-                                <span>{code}</span>
-                            </div>
-                        </div>
-                    );
-                })}
-            </div>
-        );
-    }
-}
-
-// Default properties
-Colors.defaultProps = {};
-
-export default Colors;
diff --git a/src/app/toolkit/global/Colors/readme.js b/src/app/toolkit/global/Colors/readme.js
deleted file mode 100644
index a47f0552..00000000
--- a/src/app/toolkit/global/Colors/readme.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Colors Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-You can apply a ${'`.color`'} or ${'`.bg-color`'} to an element to change it's text and/or background color.
-
-
-#### Usage
-${'```'}
-<div class="red">Red Text</div>
-<div class="bg-red">Red Background</div>
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/global/Grid/_grid.scss b/src/app/toolkit/global/Grid/_grid.scss
deleted file mode 100644
index 6a06820b..00000000
--- a/src/app/toolkit/global/Grid/_grid.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-.re-box-row {
-    background-color: $color-grey-light;
-    width: calc(100% - 10px);
-    min-height: px2rem(20);
-    margin: 5px auto;
-    border-radius: 2px;
-    padding: 5px 6px 6px 6px;
-    font-size: 10px;
-    font-family: monospace;
-}
-
-.re-demo {
-    > section {
-        h1, h2, h3, h4, h5, h6 {
-            margin: 0;
-        }
-        &:not(:last-child) {
-            margin-bottom: 0;
-        }
-        > .row {
-            margin: 0 -5px;
-        }
-    }
-}
diff --git a/src/app/toolkit/global/Grid/index.js b/src/app/toolkit/global/Grid/index.js
deleted file mode 100644
index 42b6ab99..00000000
--- a/src/app/toolkit/global/Grid/index.js
+++ /dev/null
@@ -1,408 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Grid
- * -----------------------------------------------------------------------------
- */
-
-export default class Grid extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    gridRows() {
-        let output = [];
-
-        for (let i = 1; i <= 12; i++) {
-            let l = i;
-            let r = 12 - i;
-
-            let colLeft = (
-                <div className={`col-xs-12 col-sm-${l}`}>
-                    <div className={'re-box-row'}>
-                        <span className={'hide-xs-only'}>col-sm-{l}</span>
-                        <span className={'hide-sm'}>col-xs-12</span>
-                    </div>
-                </div>
-            );
-
-            let colRight =
-                r !== 0 ? (
-                    <div className={`col-xs-12 col-sm-${r}`}>
-                        <div className={'re-box-row'}>
-                            <span className={'hide-xs-only'}>col-sm-{r}</span>
-                            <span className={'hide-sm'}>col-xs-12</span>
-                        </div>
-                    </div>
-                ) : null;
-
-            let row = (
-                <div className='row' key={`row-${i}`}>
-                    {colLeft}
-                    {colRight}
-                </div>
-            );
-
-            output.push(row);
-        }
-
-        return output;
-    }
-
-    gridOffsets() {
-        let output = [];
-
-        for (let i = 1; i < 12; i++) {
-            let l = i;
-            let r = 12 - i;
-
-            let row = (
-                <div className='row' key={`row-${i}`}>
-                    <div className={`col-xs-12 col-sm-${r} col-sm-offset-${l}`}>
-                        <div className={'re-box-row'}>
-                            <span className={'hide-xs-only'}>
-                                col-sm-offset-{l}
-                            </span>
-                            <span className={'hide-sm'}>col-xs-12</span>
-                        </div>
-                    </div>
-                </div>
-            );
-
-            output.push(row);
-        }
-
-        return output;
-    }
-
-    gridAutoWidth() {
-        return (
-            <Fragment>
-                <div className={'row'}>
-                    <div className={'col-xs-12 col-sm'}>
-                        <div className={'re-box-row'}>
-                            <span className={'hide-xs-only'}>col-sm</span>
-                            <span className={'hide-sm'}>col-xs-12</span>
-                        </div>
-                    </div>
-                    <div className={'col-xs-12 col-sm'}>
-                        <div className={'re-box-row'}>
-                            <span className={'hide-xs-only'}>col-sm</span>
-                            <span className={'hide-sm'}>col-xs-12</span>
-                        </div>
-                    </div>
-                </div>
-                <div className={'row'}>
-                    <div className={'col-xs-12 col-sm'}>
-                        <div className={'re-box-row'}>
-                            <span className={'hide-xs-only'}>col-sm</span>
-                            <span className={'hide-sm'}>col-xs-12</span>
-                        </div>
-                    </div>
-                    <div className={'col-xs-12 col-sm'}>
-                        <div className={'re-box-row'}>
-                            <span className={'hide-xs-only'}>col-sm</span>
-                            <span className={'hide-sm'}>col-xs-12</span>
-                        </div>
-                    </div>
-                    <div className={'col-xs-12 col-sm'}>
-                        <div className={'re-box-row'}>
-                            <span className={'hide-xs-only'}>col-sm</span>
-                            <span className={'hide-sm'}>col-xs-12</span>
-                        </div>
-                    </div>
-                </div>
-            </Fragment>
-        );
-    }
-
-    gridAlign() {
-        let haligns = ['start', 'center', 'end'];
-        let valigns = ['top', 'middle', 'bottom'];
-
-        let output = [<h5 key={'h-align'}>Horizontal</h5>];
-
-        let h = haligns.map((align, i) => {
-            let opp = align === 'start' ? 'end' : 'center';
-            opp = align === 'end' ? 'start' : opp;
-
-            return (
-                <div
-                    className={`row ${opp}-xs ${align}-sm`}
-                    key={`grid-align-h-${i}`}>
-                    <div className='col-xs-4'>
-                        <div className='re-box-row'>
-                            <span className={'hide-xs-only'}>{align}-sm</span>
-                            <span className={'hide-sm'}>{opp}-xs</span>
-                        </div>
-                    </div>
-                </div>
-            );
-        });
-
-        let v = valigns.map((align, i) => {
-            let opp = align === 'top' ? 'bottom' : 'middle';
-            opp = align === 'bottom' ? 'top' : opp;
-
-            return (
-                <div
-                    className={`row ${opp}-xs ${align}-sm`}
-                    key={`grid-align-v-${i}`}>
-                    <div className='col-xs-3'>
-                        <div className='re-box-row' style={{ height: 100 }} />
-                    </div>
-                    <div className='col-xs-9'>
-                        <div className='re-box-row'>
-                            <span className={'hide-xs-only'}>{align}-sm</span>
-                            <span className={'hide-sm'}>{opp}-xs</span>
-                        </div>
-                    </div>
-                </div>
-            );
-        });
-
-        output = output.concat(h, [<h5 key='v-align'>Vertical</h5>], v);
-
-        return output;
-    }
-
-    gridDist() {
-        return (
-            <Fragment>
-                <div className={'mb-20'}>
-                    <h5>Space Between</h5>
-                    <div className={'mb-10'}>
-                        <small>
-                            <kbd>.between-xs</kbd>
-                        </small>
-                    </div>
-                    <div className='row between-xs'>
-                        <div className='col-xs-2'>
-                            <div className='re-box-row' />
-                        </div>
-                        <div className='col-xs-2'>
-                            <div className='re-box-row' />
-                        </div>
-                        <div className='col-xs-2'>
-                            <div className='re-box-row' />
-                        </div>
-                    </div>
-                </div>
-
-                <h5>Space Around</h5>
-                <div className={'mb-10'}>
-                    <small>
-                        <kbd>.around-xs</kbd>
-                    </small>
-                </div>
-                <div className='row around-xs'>
-                    <div className='col-xs-2'>
-                        <div className='re-box-row' />
-                    </div>
-                    <div className='col-xs-2'>
-                        <div className='re-box-row' />
-                    </div>
-                    <div className='col-xs-2'>
-                        <div className='re-box-row' />
-                    </div>
-                </div>
-            </Fragment>
-        );
-    }
-
-    gridOrder() {
-        return (
-            <Fragment>
-                <div className={'mb-20'}>
-                    <h5>First</h5>
-                    <div className={'mb-10'}>
-                        <small>
-                            <kbd>.first-sm</kbd>
-                        </small>
-                    </div>
-                    <div className='row'>
-                        <div className='col-xs-4'>
-                            <div className='re-box-row text-center'>1</div>
-                        </div>
-                        <div className='col-xs-4'>
-                            <div className='re-box-row text-center'>2</div>
-                        </div>
-                        <div className='col-xs-4 first-sm text-center bg-grey'>
-                            <div className='re-box-row'>3</div>
-                        </div>
-                    </div>
-                </div>
-
-                <h5>Last</h5>
-                <div className={'mb-10'}>
-                    <small>
-                        <kbd>.last-sm</kbd>
-                    </small>
-                </div>
-                <div className='row'>
-                    <div className='col-xs-4 last-sm bg-grey'>
-                        <div className='re-box-row text-center'>1</div>
-                    </div>
-                    <div className='col-xs-4'>
-                        <div className='re-box-row text-center'>2</div>
-                    </div>
-                    <div className='col-xs-4 text-center'>
-                        <div className='re-box-row'>3</div>
-                    </div>
-                </div>
-            </Fragment>
-        );
-    }
-
-    gridReverse() {
-        return (
-            <Fragment>
-                <div className={'mb-10'}>
-                    <small>
-                        <kbd>.reverse-sm</kbd>
-                    </small>
-                </div>
-                <div className='row reverse-sm'>
-                    <div className='col-xs-3'>
-                        <div className='re-box-row text-center'>1</div>
-                    </div>
-                    <div className='col-xs-3'>
-                        <div className='re-box-row text-center'>2</div>
-                    </div>
-                    <div className='col-xs-3'>
-                        <div className='re-box-row text-center'>3</div>
-                    </div>
-                    <div className='col-xs-3'>
-                        <div className='re-box-row text-center'>4</div>
-                    </div>
-                </div>
-            </Fragment>
-        );
-    }
-
-    gridVis() {
-        return (
-            <Fragment>
-                <div className={'row'}>
-                    <div className={'col-xs'}>
-                        <div className={'hide-xs-only re-box-row'}>
-                            .hide-xs-only
-                        </div>
-                        <div className={'hide-sm re-box-row'}>.hide-sm</div>
-                    </div>
-                </div>
-                <div className={'row'}>
-                    <div className={'col-xs'}>
-                        <div
-                            className={'show-xs-only re-box-row'}
-                            style={{ display: 'none' }}>
-                            .show-xs-only
-                        </div>
-                        <div
-                            className={'show-sm re-box-row'}
-                            style={{ display: 'none' }}>
-                            .show-sm
-                        </div>
-                    </div>
-                </div>
-            </Fragment>
-        );
-    }
-
-    render() {
-        return (
-            <div className='re-demo'>
-                <section>
-                    <p>
-                        Responsive modifiers enable specifying different column
-                        sizes, offsets and alignment at{' '}
-                        <kbd>xs|sm|md|lg|xl</kbd> viewport widths.
-                    </p>
-                    {this.gridRows().map(item => item)}
-                </section>
-
-                <section>
-                    <div className={'my-20'}>
-                        <h4>Offsets</h4>
-                    </div>
-                    <p>Adjust the leading of a column in a row.</p>
-                    {this.gridOffsets().map(item => item)}
-                </section>
-
-                <section>
-                    <div className={'my-20'}>
-                        <h4>Auto Width</h4>
-                    </div>
-                    <p>Automatically size the contents of a row.</p>
-                    {this.gridAutoWidth()}
-                </section>
-
-                <section>
-                    <div className={'my-20'}>
-                        <h4>Alignment</h4>
-                    </div>
-                    <p>Horizontally or vertically align a column.</p>
-                    {this.gridAlign().map(item => item)}
-                </section>
-
-                <section>
-                    <div className={'my-20'}>
-                        <h4>Distribution</h4>
-                    </div>
-                    <p>
-                        Classes for distributing the contents of a row or
-                        column.
-                    </p>
-                    {this.gridDist()}
-                </section>
-
-                <section>
-                    <div className={'my-20'}>
-                        <h4>Reordering</h4>
-                    </div>
-                    <p>Classes to reorder columns.</p>
-                    {this.gridOrder()}
-                </section>
-
-                <section>
-                    <div className={'my-20'}>
-                        <h4>Reversing</h4>
-                    </div>
-                    <p>Reverse the order of the columns.</p>
-                    {this.gridReverse()}
-                </section>
-
-                <section>
-                    <div className={'my-20'}>
-                        <h4>Visibility</h4>
-                    </div>
-                    <p>Responsive hide or show content.</p>
-                    {this.gridVis()}
-                </section>
-            </div>
-        );
-    }
-}
diff --git a/src/app/toolkit/global/Grid/readme.js b/src/app/toolkit/global/Grid/readme.js
deleted file mode 100644
index be9361c2..00000000
--- a/src/app/toolkit/global/Grid/readme.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Grid Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-# Your Documentation Here
-
-Be sure to use [markdown ](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format the text.
-
-I suppose you could also use HTML but come on.. do you _REALLY_ need to?
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/global/Spacing/index.js b/src/app/toolkit/global/Spacing/index.js
deleted file mode 100644
index 7ecf1124..00000000
--- a/src/app/toolkit/global/Spacing/index.js
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Spacing
- * -----------------------------------------------------------------------------
- */
-
-export default class Spacing extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    render() {
-        let properties = ['m:margin', 'p:padding'];
-        let sides = [
-            't:top',
-            'r:right',
-            'b:bottom',
-            'l:left',
-            'x:left and right',
-            'y:top and bottom',
-        ];
-        let breaks = ['xs', 'sm', 'md', 'lg', 'xl'];
-        let sizes = [
-            0,
-            2,
-            4,
-            6,
-            8,
-            10,
-            12,
-            14,
-            16,
-            18,
-            20,
-            24,
-            32,
-            40,
-            48,
-            56,
-            64,
-            72,
-            80,
-        ];
-
-        return (
-            <div className={'re-demo'}>
-                <p>
-                    Assign responsive-friendly margin or padding values to an
-                    element or a subset of its sides with shorthand classes.
-                    Includes support for individual properties, all properties,
-                    and vertical and horizontal properties.
-                </p>
-                <p>Classes are built from the following Sass maps:</p>
-
-                <div className={'row'}>
-                    <div className={'col-xs-12 col-sm-3'}>
-                        <h5>Property</h5>
-                        <p className={'pr-10'}>
-                            {properties.map((item, i) => {
-                                return (
-                                    <span
-                                        key={`prop-${i}`}
-                                        className={'number'}>
-                                        {item}
-                                        <br />
-                                    </span>
-                                );
-                            })}
-                        </p>
-                    </div>
-
-                    <div className={'col-xs-12 col-sm-3'}>
-                        <h5>Side</h5>
-                        <p className={'pr-10'}>
-                            {sides.map((item, i) => {
-                                return (
-                                    <span
-                                        key={`side-${i}`}
-                                        className={'number'}>
-                                        {item}
-                                        <br />
-                                    </span>
-                                );
-                            })}
-                        </p>
-                    </div>
-
-                    <div className={'col-xs-12 col-sm-3'}>
-                        <h5>Breakpoint</h5>
-                        <p className={'pr-10'}>
-                            <span className={'number'}>
-                                {breaks.join(', ')}
-                            </span>
-                        </p>
-                    </div>
-
-                    <div className={'col-xs-12 col-sm-3'}>
-                        <h5>Size</h5>
-                        <p>
-                            <span className={'number'}>{sizes.join(', ')}</span>
-                        </p>
-                    </div>
-                </div>
-
-                <h4>Notation</h4>
-                <p>
-                    The classes are named using the format{' '}
-                    <kbd>[property][side]-[breakpoint]-[size]</kbd>
-                </p>
-                <section className={'pb-20'}>
-                    <div className={'row'}>
-                        <div className={'col-xs-12 bg-grey-light'}>
-                            <div
-                                className={
-                                    'mt-sm-20 mb-sm-20 px-sm-20 py-sm-20 mt-xs-10 mb-xs-10 px-xs-10 py-xs-10 bg-blue'
-                                }>
-                                <span className={'hide-xs-only white number'}>
-                                    mt-sm-20, mb-sm-20, px-sm-20, py-sm-20
-                                </span>
-                                <span className={'hide-sm white number'}>
-                                    mt-xs-10, mb-xs-10, px-xs-10, py-sm-10
-                                </span>
-                            </div>
-                        </div>
-                    </div>
-                </section>
-
-                <p>
-                    Removing the <kbd>[breakpoint]</kbd> portion will apply the
-                    size to all breakpoints.
-                </p>
-                <section className={'pb-20'}>
-                    <div className={'row'}>
-                        <div className={'col-xs-12 bg-grey-light'}>
-                            <div className={'m-20 p-20 bg-blue'}>
-                                <span className={'white number'}>
-                                    m-20, p-20
-                                </span>
-                            </div>
-                        </div>
-                    </div>
-                </section>
-
-                <h4>Centering</h4>
-                <p>
-                    Additionally, you can horizontally center a fixed width
-                    element.
-                </p>
-                <section>
-                    <div className={'row'}>
-                        <div className={'col-xs-12 bg-grey-light'}>
-                            <div className={'py-10'}>
-                                <div
-                                    className={
-                                        'mx-xs-auto bg-blue text-center p-6'
-                                    }
-                                    style={{ width: 200 }}>
-                                    <span className={'white number'}>
-                                        mx-xs-auto
-                                    </span>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </section>
-            </div>
-        );
-    }
-}
diff --git a/src/app/toolkit/global/Spacing/readme.js b/src/app/toolkit/global/Spacing/readme.js
deleted file mode 100644
index c53f8822..00000000
--- a/src/app/toolkit/global/Spacing/readme.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Spacing Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-# Your Documentation Here
-
-Be sure to use [markdown ](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format the text.
-
-I suppose you could also use HTML but come on.. do you _REALLY_ need to?
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/global/Theming/index.js b/src/app/toolkit/global/Theming/index.js
deleted file mode 100644
index 03a5661b..00000000
--- a/src/app/toolkit/global/Theming/index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * Toolkit Element: Theming
- * -----------------------------------------------------------------------------
- */
-
-class Theming extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = {};
-    }
-
-    render() {
-        return <button className='test'>BUTTON TEST</button>;
-    }
-}
-
-// Default properties
-Theming.defaultProps = {};
-
-export default Theming;
diff --git a/src/app/toolkit/global/Theming/readme.js b/src/app/toolkit/global/Theming/readme.js
deleted file mode 100644
index bf0e9129..00000000
--- a/src/app/toolkit/global/Theming/readme.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Theming Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-Reactium ships with the ability to create multiple themes and apply them in your Style Guide.
-
-Simply run the following ARCLI command:
-${'```'}
-$ arcli theme
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/icons/Feather/index.js b/src/app/toolkit/icons/Feather/index.js
deleted file mode 100644
index 4d45c397..00000000
--- a/src/app/toolkit/icons/Feather/index.js
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-
-import _ from 'underscore';
-import React, { Component } from 'react';
-import Icon from 'components/common-ui/Icon';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Icons
- * -----------------------------------------------------------------------------
- */
-
-export default class LinearIcons extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    state = {
-        filtered: [],
-        icons: [],
-        inputStyle: {
-            color: '#666666',
-            width: 60,
-            textAlign: 'center',
-            paddingLeft: 12,
-            marginLeft: 10,
-            borderRadius: 4,
-            border: '1px solid #DCDCDC',
-            fontSize: 12,
-        },
-        ready: false,
-        search: null,
-        searchStyle: {
-            marginLeft: 10,
-            paddingLeft: 10,
-            paddingRight: 10,
-            textAlign: 'left',
-            width: 150,
-        },
-        size: 32,
-    };
-
-    componentDidMount() {
-        const icons = Object.keys(Icon.Feather);
-        icons.sort();
-
-        setTimeout(() => {
-            this.setState({ icons, ready: true });
-            if (typeof window !== 'undefined') {
-                window.dispatchEvent(new Event('resize'));
-            }
-        }, 100);
-    }
-
-    onSearchChange(e) {
-        const { icons } = this.state;
-        const search = e.target.value;
-        const filtered = icons.filter(icon => {
-            const reg = new RegExp(search, 'gi');
-            return icon.search(reg) > -1;
-        });
-
-        this.setState({ filtered, search });
-    }
-
-    onSizeChange(e) {
-        const size = e.target.value;
-        this.setState({ size });
-    }
-
-    render() {
-        const {
-            filtered = [],
-            icons = [],
-            inputStyle,
-            ready,
-            search,
-            searchStyle,
-            size = 24,
-        } = this.state;
-        const items = search ? filtered : icons;
-
-        return ready === false ? null : (
-            <div className={'mb--32'}>
-                <div className='flex right middle pb-xs-20'>
-                    <label
-                        htmlFor='size'
-                        style={{
-                            color: '#666666',
-                            flexGrow: 0,
-                            textAlign: 'right',
-                        }}>
-                        Icon Size:
-                    </label>
-                    <input
-                        type='number'
-                        placeholder='Icon Size'
-                        value={size}
-                        id='size'
-                        onChange={this.onSizeChange.bind(this)}
-                        style={inputStyle}
-                        max={120}
-                        min={10}
-                    />
-                    <input
-                        type='search'
-                        placeholder='Search'
-                        value={search || ''}
-                        id='search'
-                        onChange={this.onSearchChange.bind(this)}
-                        style={{
-                            ...inputStyle,
-                            ...searchStyle,
-                        }}
-                    />
-                </div>
-                <div className={'row'}>
-                    {items.map((item, i) => {
-                        const Ico = Icon.Feather[item];
-                        return (
-                            <div
-                                key={`icon-${i}`}
-                                className={'col-xs-4 col-sm-2 col-xl-1'}>
-                                <div className={'text-center'}>
-                                    <Ico width={size} height={size} />
-                                    <div
-                                        className={
-                                            'text-center small mt-16 mb-32'
-                                        }>
-                                        {item}
-                                    </div>
-                                </div>
-                            </div>
-                        );
-                    })}
-                </div>
-            </div>
-        );
-    }
-}
diff --git a/src/app/toolkit/icons/Feather/readme.js b/src/app/toolkit/icons/Feather/readme.js
deleted file mode 100644
index 3ca3169e..00000000
--- a/src/app/toolkit/icons/Feather/readme.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * LinearIcons Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-#### Import
-
-${'```jsx'}
-import Icon from 'components/common-ui/Icon';
-${'```'}
-#### Usage
-${'```html'}
-<Icon.Menu width={18} height={18} />
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/index.js b/src/app/toolkit/index.js
deleted file mode 100644
index 3c1fd537..00000000
--- a/src/app/toolkit/index.js
+++ /dev/null
@@ -1,497 +0,0 @@
-module.exports = {
-    header: {
-        name: 'Reactium',
-        title: 'Style Guide',
-        logo: '/assets/images/atomic-reactor-logo.svg',
-        version: '2.1.2',
-    },
-    overview: require('appdir/toolkit/overview').default,
-    themes: [
-        {
-            name: 'Default',
-            css: '/assets/style/style.css',
-            selected: true,
-        },
-        {
-            name: 'Theme 1',
-            css: '/assets/style/theme-1.css',
-        },
-        {
-            name: 'Theme 2',
-            css: '/assets/style/theme-2.css',
-        },
-        {
-            name: 'Protanopia Accessible',
-            css: '/assets/style/protanopia.css',
-        },
-        {
-            name: 'Deuteranopia Accessible',
-            css: '/assets/style/deuteranopia.css',
-        },
-        {
-            name: 'Deuteranomaly Accessible',
-            css: '/assets/style/deuteranomaly.css',
-        },
-        {
-            name: 'Tritanopia Accessible',
-            css: '/assets/style/tritanopia.css',
-        },
-        {
-            name: 'Tritanomaly Accessible',
-            css: '/assets/style/tritanomaly.css',
-        },
-        {
-            name: 'Achromatopsia Accessible',
-            css: '/assets/style/achromatopsia.css',
-        },
-        {
-            name: 'Achromatomaly Accessible',
-            css: '/assets/style/achromatomaly.css',
-        },
-        {
-            name: 'Chromatomaly Accessible',
-            css: '/assets/style/achromatomaly.css',
-        },
-    ],
-    assets: {
-        path: '/assets',
-    },
-    sidebar: {
-        closed: false,
-        position: 'left',
-    },
-    toolbar: {
-        buttons: [
-            {
-                icon: 'Dna',
-                name: 'filter-all',
-                label: 'All Elements',
-            },
-            {
-                icon: 'Atom',
-                name: 'filter-atom',
-                label: 'Atoms',
-            },
-            {
-                icon: 'Molecule',
-                name: 'filter-molecule',
-                label: 'Molecules',
-            },
-            {
-                icon: 'Organism',
-                name: 'filter-organism',
-                label: 'Organisms',
-            },
-            {
-                icon: 'Catalyst',
-                name: 'filter-catalyst',
-                label: 'Catalyst',
-            },
-            {
-                icon: 'Page',
-                name: 'filter-page',
-                label: 'Pages',
-            },
-            {
-                icon: 'Template',
-                name: 'filter-template',
-                label: 'Templates',
-            },
-            {
-                name: 'spacer',
-            },
-            {
-                icon: 'Settings',
-                name: 'toggle-settings',
-                cls: 'toggle',
-            },
-        ],
-    },
-    menu: {
-        global: {
-            label: 'Global',
-            route: '/toolkit/global',
-            elements: {
-                theming: {
-                    type: 'organism',
-                    label: 'Theming',
-                    route: '/toolkit/global/theming',
-                    dna: '/toolkit/global/Theming',
-                    component: require('appdir/toolkit/global/Theming').default,
-                    readme: require('appdir/toolkit/global/Theming/readme')
-                        .default,
-                    hideCode: true,
-                    hideDna: true,
-                    hideDocs: false,
-                },
-                colors: {
-                    type: 'atom',
-                    label: 'Colors',
-                    hideCode: true,
-                    route: '/toolkit/global/colors',
-                    dna: '/toolkit/global/Colors',
-                    component: require('appdir/toolkit/global/Colors').default,
-                    readme: require('appdir/toolkit/global/Colors/readme')
-                        .default,
-                },
-                grid: {
-                    type: 'atom',
-                    label: 'Responsive Grid',
-                    route: '/toolkit/global/grid',
-                    dna: '/toolkit/global/Grid',
-                    hideCode: true,
-                    hideDna: true,
-                    hideDocs: true,
-                    component: require('appdir/toolkit/global/Grid').default,
-                    readme: require('appdir/toolkit/global/Grid/readme')
-                        .default,
-                },
-                spacing: {
-                    type: 'atom',
-                    label: 'Spacing',
-                    route: '/toolkit/global/spacing',
-                    dna: '/toolkit/global/Spacing',
-                    hideCode: true,
-                    hideDna: true,
-                    hideDocs: true,
-                    component: require('appdir/toolkit/global/Spacing').default,
-                    readme: require('appdir/toolkit/global/Spacing/readme')
-                        .default,
-                },
-            },
-        },
-        typography: {
-            label: 'Typography',
-            route: '/toolkit/typography',
-            elements: {
-                fonts: {
-                    type: 'atom',
-                    label: 'Fonts',
-                    route: '/toolkit/typography/fonts',
-                    dna: '/toolkit/typography/Fonts',
-                    hideDna: true,
-                    hideCode: true,
-                    hideDocs: true,
-                    component: require('appdir/toolkit/typography/Fonts')
-                        .default,
-                    readme: require('appdir/toolkit/typography/Fonts/readme')
-                        .default,
-                },
-                headings: {
-                    type: 'atom',
-                    label: 'Headings',
-                    route: '/toolkit/typography/headings',
-                    dna: '/toolkit/typography/Headings',
-                    hideCode: true,
-                    component: require('appdir/toolkit/typography/Headings')
-                        .default,
-                    readme: require('appdir/toolkit/typography/Headings/readme')
-                        .default,
-                },
-                paragraph: {
-                    type: 'atom',
-                    label: 'Paragraph',
-                    route: '/toolkit/typography/paragraph',
-                    dna: '/toolkit/typography/Paragraph',
-                    component: require('appdir/toolkit/typography/Paragraph')
-                        .default,
-                    readme: require('appdir/toolkit/typography/Paragraph/readme')
-                        .default,
-                },
-                'text-link': {
-                    type: 'atom',
-                    label: 'Text Link',
-                    route: '/toolkit/typography/text-link',
-                    dna: '/toolkit/typography/TextLink',
-                    hideDna: true,
-                    hideCode: true,
-                    component: require('appdir/toolkit/typography/TextLink')
-                        .default,
-                    readme: require('appdir/toolkit/typography/TextLink/readme')
-                        .default,
-                },
-                'text-strong': {
-                    type: 'atom',
-                    label: 'Strong Text',
-                    route: '/toolkit/typography/text-strong',
-                    dna: '/toolkit/typography/TextStrong',
-                    component: require('appdir/toolkit/typography/TextStrong')
-                        .default,
-                    readme: require('appdir/toolkit/typography/TextStrong/readme')
-                        .default,
-                },
-                'text-italic': {
-                    type: 'atom',
-                    label: 'Italic Text',
-                    route: '/toolkit/typography/text-italic',
-                    dna: '/toolkit/typography/TextItalic',
-                    component: require('appdir/toolkit/typography/TextItalic')
-                        .default,
-                    readme: require('appdir/toolkit/typography/TextItalic/readme')
-                        .default,
-                },
-                'text-underline': {
-                    type: 'atom',
-                    label: 'Underlined Text',
-                    route: '/toolkit/typography/text-underline',
-                    dna: '/toolkit/typography/TextUnderline',
-                    component: require('appdir/toolkit/typography/TextUnderline')
-                        .default,
-                    readme: require('appdir/toolkit/typography/TextUnderline/readme')
-                        .default,
-                },
-                'text-strike': {
-                    type: 'atom',
-                    label: 'Strikethrough Text',
-                    route: '/toolkit/typography/text-strike',
-                    dna: '/toolkit/typography/TextStrike',
-                    component: require('appdir/toolkit/typography/TextStrike')
-                        .default,
-                    readme: require('appdir/toolkit/typography/TextStrike/readme')
-                        .default,
-                },
-                'text-super': {
-                    type: 'atom',
-                    label: 'Superscript',
-                    route: '/toolkit/typography/text-super',
-                    dna: '/toolkit/typography/TextSuper',
-                    component: require('appdir/toolkit/typography/TextSuper')
-                        .default,
-                    readme: require('appdir/toolkit/typography/TextSuper/readme')
-                        .default,
-                },
-                'text-sub': {
-                    type: 'atom',
-                    label: 'Subscript',
-                    route: '/toolkit/typography/text-sub',
-                    dna: '/toolkit/typography/TextSub',
-                    component: require('appdir/toolkit/typography/TextSub')
-                        .default,
-                    readme: require('appdir/toolkit/typography/TextSub/readme')
-                        .default,
-                },
-                'text-small': {
-                    type: 'atom',
-                    label: 'Small Text',
-                    route: '/toolkit/typography/text-small',
-                    dna: '/toolkit/typography/TextSmall',
-                    component: require('appdir/toolkit/typography/TextSmall')
-                        .default,
-                    readme: require('appdir/toolkit/typography/TextSmall/readme')
-                        .default,
-                },
-                blockquote: {
-                    type: 'atom',
-                    label: 'Blockquote',
-                    route: '/toolkit/typography/blockquote',
-                    dna: '/toolkit/typography/Blockquote',
-                    component: require('appdir/toolkit/typography/Blockquote')
-                        .default,
-                    readme: require('appdir/toolkit/typography/Blockquote/readme')
-                        .default,
-                },
-                'list-unordered': {
-                    type: 'atom',
-                    label: 'Unordered List',
-                    route: '/toolkit/typography/list-unordered',
-                    dna: '/toolkit/typography/ListUnordered',
-                    component: require('appdir/toolkit/typography/ListUnordered')
-                        .default,
-                    readme: require('appdir/toolkit/typography/ListUnordered/readme')
-                        .default,
-                },
-                'list-ordered': {
-                    type: 'atom',
-                    label: 'Ordered List',
-                    route: '/toolkit/typography/list-ordered',
-                    dna: '/toolkit/typography/ListOrdered',
-                    component: require('appdir/toolkit/typography/ListOrdered')
-                        .default,
-                    readme: require('appdir/toolkit/typography/ListOrdered/readme')
-                        .default,
-                },
-                'text-align': {
-                    type: 'atom',
-                    label: 'Text Align',
-                    hideCode: true,
-                    hideDna: true,
-                    hideDocs: true,
-                    route: '/toolkit/typography/text-align',
-                    dna: '/toolkit/typography/TextAlign',
-                    component: require('appdir/toolkit/typography/TextAlign')
-                        .default,
-                    readme: require('appdir/toolkit/typography/TextAlign/readme')
-                        .default,
-                },
-            },
-        },
-        buttons: {
-            label: 'Buttons',
-            route: '/toolkit/buttons/button-overview',
-            elements: {
-                'button-overview': {
-                    type: 'organism',
-                    label: 'Overview',
-                    route: '/toolkit/buttons/button-overview',
-                    dna: '/toolkit/buttons/ButtonOverview',
-                    hideCode: true,
-                    component: require('appdir/toolkit/buttons/ButtonOverview')
-                        .default,
-                },
-                'button-primary': {
-                    type: 'atom',
-                    label: 'Primary Button',
-                    route: '/toolkit/buttons/button-primary',
-                    dna: '/toolkit/buttons/ButtonPrimary',
-                    hideDna: true,
-                    hideCode: true,
-                    component: require('appdir/toolkit/buttons/ButtonPrimary')
-                        .default,
-                    readme: require('appdir/toolkit/buttons/ButtonPrimary/readme')
-                        .default,
-                },
-                'button-secondary': {
-                    type: 'atom',
-                    label: 'Secondary Button',
-                    route: '/toolkit/buttons/button-secondary',
-                    dna: '/toolkit/buttons/ButtonSecondary',
-                    hideDna: true,
-                    hideCode: true,
-                    component: require('appdir/toolkit/buttons/ButtonSecondary')
-                        .default,
-                    readme: require('appdir/toolkit/buttons/ButtonSecondary/readme')
-                        .default,
-                },
-                'button-tertiary': {
-                    type: 'atom',
-                    label: 'Tertiary Button',
-                    route: '/toolkit/buttons/button-tertiary',
-                    dna: '/toolkit/buttons/ButtonTertiary',
-                    hideDna: true,
-                    hideCode: true,
-                    component: require('appdir/toolkit/buttons/ButtonTertiary')
-                        .default,
-                    readme: require('appdir/toolkit/buttons/ButtonTertiary/readme')
-                        .default,
-                },
-                'button-state': {
-                    type: 'atom',
-                    label: 'Button States',
-                    route: '/toolkit/buttons/button-state',
-                    dna: '/toolkit/buttons/ButtonState',
-                    hideDna: true,
-                    hideCode: true,
-                    component: require('appdir/toolkit/buttons/ButtonState')
-                        .default,
-                    readme: require('appdir/toolkit/buttons/ButtonState/readme')
-                        .default,
-                },
-                'button-size': {
-                    type: 'atom',
-                    label: 'Button Sizing',
-                    route: '/toolkit/buttons/button-size',
-                    dna: '/toolkit/buttons/ButtonSize',
-                    hideDna: true,
-                    hideCode: true,
-                    component: require('appdir/toolkit/buttons/ButtonSize')
-                        .default,
-                    readme: require('appdir/toolkit/buttons/ButtonSize/readme')
-                        .default,
-                },
-                'button-block': {
-                    type: 'atom',
-                    label: 'Button Block',
-                    route: '/toolkit/buttons/button-block',
-                    dna: '/toolkit/buttons/ButtonBlock',
-                    hideDna: true,
-                    component: require('appdir/toolkit/buttons/ButtonBlock')
-                        .default,
-                    readme: require('appdir/toolkit/buttons/ButtonBlock/readme')
-                        .default,
-                },
-            },
-        },
-        form: {
-            label: 'Form Elements',
-            route: '/toolkit/form',
-            elements: {
-                textfield: {
-                    type: 'atom',
-                    label: 'Text Field',
-                    route: '/toolkit/form/textfield',
-                    dna: '/toolkit/form/Textfield',
-                    component: require('appdir/toolkit/form/Textfield').default,
-                    readme: require('appdir/toolkit/form/Textfield/readme')
-                        .default,
-                },
-                textarea: {
-                    type: 'atom',
-                    label: 'Text Area',
-                    route: '/toolkit/form/textarea',
-                    dna: '/toolkit/form/Textarea',
-                    component: require('appdir/toolkit/form/Textarea').default,
-                    readme: require('appdir/toolkit/form/Textarea/readme')
-                        .default,
-                },
-                select: {
-                    type: 'atom',
-                    label: 'Select',
-                    route: '/toolkit/form/select',
-                    dna: '/toolkit/form/Select',
-                    component: require('appdir/toolkit/form/Select').default,
-                    readme: require('appdir/toolkit/form/Select/readme')
-                        .default,
-                },
-                checkbox: {
-                    type: 'catalyst',
-                    label: 'Checkbox',
-                    route: '/toolkit/form/checkbox',
-                    dna: '/toolkit/form/CompCheckbox',
-                    hideCode: true,
-                    component: require('appdir/toolkit/form/CompCheckbox')
-                        .default,
-                    readme: require('appdir/toolkit/form/CompCheckbox/readme')
-                        .default,
-                },
-                radio: {
-                    type: 'catalyst',
-                    label: 'Radio',
-                    route: '/toolkit/form/radio',
-                    dna: '/toolkit/form/CompRadio',
-                    hideCode: true,
-                    component: require('appdir/toolkit/form/CompRadio').default,
-                    readme: require('appdir/toolkit/form/CompRadio/readme')
-                        .default,
-                },
-            },
-        },
-        components: {
-            label: 'Components',
-            route: '/toolkit/components',
-            hideEmpty: true,
-            elements: {},
-        },
-        pages: {
-            label: 'Pages',
-            route: '#',
-            hideEmpty: true,
-            elements: {},
-        },
-        icons: {
-            label: 'Icons',
-            route: '/toolkit/icons',
-            hideEmpty: true,
-            elements: {
-                'feather-icons': {
-                    type: 'atom',
-                    label: 'Feather Icons',
-                    route: '/toolkit/icons/feather-icons',
-                    dna: '/toolkit/icons/Feather',
-                    component: require('appdir/toolkit/icons/Feather').default,
-                    readme: require('appdir/toolkit/icons/Feather/readme')
-                        .default,
-                },
-            },
-        },
-    },
-};
diff --git a/src/app/toolkit/overview/Overview.js b/src/app/toolkit/overview/Overview.js
deleted file mode 100644
index 7931bbaa..00000000
--- a/src/app/toolkit/overview/Overview.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import React from 'react';
-import Card from 'reactium-core/components/Toolkit/Content/Card';
-import Docs from 'reactium-core/components/Toolkit/Content/Docs';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Overview
- * Write up something about the style guide or remove all of this and make
- * this a component that shows off something flashy!
- * -----------------------------------------------------------------------------
- */
-const content = `
-### Overview
-
-Add some content about this design system by editing:
-
-${'```javascript'}
-/src/app/toolkit/overview/index.js
-${'```'}
-
-Need help on how to create Design System elements?
-
-[Design System Documentation](https://reactium.io/docs/guide/design-system).
-
-#### Code Example
-${'```javascript'}
-console.log('Put some code here if you want to show some examples of how to do stuff');
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const Comp = Toolkit => () => (
-    <Markdown theme={Toolkit.prefs.codeColor.all}>{content}</Markdown>
-);
-
-const overview = ({ getState }) => {
-    return (
-        <Card title={'Reactium Style Guide'}>
-            <Docs
-                component={Comp(getState().Toolkit)}
-                id={'overview'}
-                visible={true}
-            />
-        </Card>
-    );
-};
-
-export default overview;
diff --git a/src/app/toolkit/overview/index.js b/src/app/toolkit/overview/index.js
deleted file mode 100644
index 19af6360..00000000
--- a/src/app/toolkit/overview/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import { ec } from 'reactium-core/easy-connect';
-import Overview from './Overview';
-
-export default ec(Overview);
diff --git a/src/app/toolkit/typography/Blockquote/index.js b/src/app/toolkit/typography/Blockquote/index.js
deleted file mode 100644
index 60914089..00000000
--- a/src/app/toolkit/typography/Blockquote/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Blockquote
- * -----------------------------------------------------------------------------
- */
-
-export default class Blockquote extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <blockquote>
-                <p>
-                    <Lipsum length={58} />.
-                </p>
-                <small>&ndash; Guyus Latinacus</small>
-            </blockquote>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/Blockquote/readme.js b/src/app/toolkit/typography/Blockquote/readme.js
deleted file mode 100644
index b68a0ec7..00000000
--- a/src/app/toolkit/typography/Blockquote/readme.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Blockquote Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### SCSS
-${'```scss'}
-blockquote {
-    padding          : px2rem(20);
-    margin           : px2rem(20) 0;
-    background-color : $color-grey-light;
-    font-family      : 'Montserrat', sans-serif;
-    border-radius    : 0 px2rem(50) px2rem(50) 0;
-    border-left      : 5px solid $color-grey;
-}
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/Fonts/_fonts.scss b/src/app/toolkit/typography/Fonts/_fonts.scss
deleted file mode 100644
index 2c882a1e..00000000
--- a/src/app/toolkit/typography/Fonts/_fonts.scss
+++ /dev/null
@@ -1,364 +0,0 @@
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRxC7m0dR9pBOi.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRzS7m0dR9pBOi.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRxi7m0dR9pBOi.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRxy7m0dR9pBOi.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRyS7m0dR9pA.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459WRhyyTh89ZNpQ.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459W1hyyTh89ZNpQ.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459WZhyyTh89ZNpQ.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459WdhyyTh89ZNpQ.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459WlhyyTh89Y.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-
-@each $selector, $font in $fonts {
-    .#{$selector} { font-family: #{$font}; }
-}
diff --git a/src/app/toolkit/typography/Fonts/index.js b/src/app/toolkit/typography/Fonts/index.js
deleted file mode 100644
index 43795405..00000000
--- a/src/app/toolkit/typography/Fonts/index.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Fonts
- * -----------------------------------------------------------------------------
- */
-
-class Fonts extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    renderText({ name, cls }) {
-        let { alphabet, text } = this.state;
-
-        return (
-            <section>
-                <h2 className={'mb-20'}>{name}</h2>
-                <div className={'p-10 bg-grey-light'}>
-                    <kbd>.{cls}</kbd>
-                </div>
-                <div className={'mb-20 p-10 bg-grey-light'}>
-                    <kbd>font-family: '{name}';</kbd>
-                </div>
-                <p className={cls}>{text}</p>
-                <p className={`${cls} uppercase`}>{text}</p>
-                <p className={cls}>{alphabet}</p>
-                <p className={`${cls} uppercase`}>{alphabet}</p>
-                <p className={cls}>
-                    <Lipsum length={400} />.
-                </p>
-                <p className={cls}>
-                    <small>small: {text}</small>
-                </p>
-                <p className={cls}>
-                    Superscript <sup>1</sup>
-                </p>
-                <p className={cls}>
-                    Subscript <sub>2</sub>
-                </p>
-                <p className={cls}>
-                    <strike>Strikethrough</strike>
-                </p>
-                <p className={cls}>
-                    <u>Underline</u>
-                </p>
-                <p className={cls}>
-                    <strong>Strong</strong>
-                </p>
-                <p className={cls}>
-                    <span className={'medium'}>Medium</span>
-                </p>
-                <p className={cls}>
-                    <span className={'light'}>Light</span>
-                </p>
-            </section>
-        );
-    }
-
-    render() {
-        return (
-            <Fragment>
-                {this.renderText({ name: 'Montserrat', cls: 'montserrat' })}
-            </Fragment>
-        );
-    }
-}
-
-// Default properties
-Fonts.defaultProps = {
-    alphabet:
-        'a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 . , : ; ? ! @ # $ % ^ & * ( ) [ ] { } < > | \\ / - = _ +',
-    text: 'The quick brown fox jumps over the lazy dog',
-};
-
-export default Fonts;
diff --git a/src/app/toolkit/typography/Fonts/readme.js b/src/app/toolkit/typography/Fonts/readme.js
deleted file mode 100644
index 7314c44f..00000000
--- a/src/app/toolkit/typography/Fonts/readme.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Fonts Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-# Your Documentation Here
-
-Be sure to use [markdown ](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format the text.
-
-I suppose you could also use HTML but come on.. do you _REALLY_ need to?
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/Headings/index.js b/src/app/toolkit/typography/Headings/index.js
deleted file mode 100644
index 81e13e9a..00000000
--- a/src/app/toolkit/typography/Headings/index.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Headings
- * -----------------------------------------------------------------------------
- */
-const H = props => {
-    switch (props.index) {
-        case 1:
-            return <h1>{props.children}</h1>;
-        case 2:
-            return <h2>{props.children}</h2>;
-        case 3:
-            return <h3>{props.children}</h3>;
-        case 4:
-            return <h4>{props.children}</h4>;
-        case 5:
-            return <h5>{props.children}</h5>;
-        case 6:
-            return <h6>{props.children}</h6>;
-    }
-};
-
-export default class Headings extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    renderHeadings() {
-        let output = [];
-
-        for (let i = 1; i < 7; i++) {
-            output.push(
-                <div className={'flex-middle mb-12 mt-12'} key={`h-${i}`}>
-                    <div style={{ width: 80 }}>
-                        <small>
-                            <kbd>.h{i}</kbd>
-                        </small>
-                    </div>
-                    <div>
-                        <H index={i}>Heading {i}</H>
-                    </div>
-                </div>,
-            );
-        }
-
-        return output;
-    }
-
-    render() {
-        return <Fragment>{this.renderHeadings().map(item => item)}</Fragment>;
-    }
-}
diff --git a/src/app/toolkit/typography/Headings/readme.js b/src/app/toolkit/typography/Headings/readme.js
deleted file mode 100644
index 1a1913b7..00000000
--- a/src/app/toolkit/typography/Headings/readme.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Headings Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-You can use ${'`.h1, .h2, .h2, .h3, .h4, .h5, .h6`'} on an element to make it appear as a different heading. This is particularlly useful when trying to keep [Semantic Document Structure](https://webaim.org/techniques/semanticstructure/).
-${'```html'}
-<h2 class='h1'>Heading 2 as a H1</h2>
-<span class='h1'>Span as a H1</span>
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/ListOrdered/index.js b/src/app/toolkit/typography/ListOrdered/index.js
deleted file mode 100644
index cb8c0e66..00000000
--- a/src/app/toolkit/typography/ListOrdered/index.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: ListOrdered
- * -----------------------------------------------------------------------------
- */
-
-export default class ListOrdered extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    renderItems() {
-        let output = [];
-
-        for (let i = 0; i < 10; i++) {
-            output.push(
-                <li key={`item-${i}`}>
-                    <Lipsum length={58} />
-                </li>,
-            );
-        }
-
-        return output;
-    }
-
-    render() {
-        return <ol>{this.renderItems().map(item => item)}</ol>;
-    }
-}
diff --git a/src/app/toolkit/typography/ListOrdered/readme.js b/src/app/toolkit/typography/ListOrdered/readme.js
deleted file mode 100644
index 9e4e71ba..00000000
--- a/src/app/toolkit/typography/ListOrdered/readme.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * ListOrdered Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
- ###### SCSS
- ${'```scss'}
- ol {
-     margin: 0 0 0 px2rem(20);
-     padding: 0;
-
-     li {
-         line-height: 2;
-         padding: 0;
-         margin: 0;
-     }
- }
- ${'```'}
- `;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/ListUnordered/index.js b/src/app/toolkit/typography/ListUnordered/index.js
deleted file mode 100644
index 7e789b47..00000000
--- a/src/app/toolkit/typography/ListUnordered/index.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: ListUnordered
- * -----------------------------------------------------------------------------
- */
-
-export default class ListUnordered extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    renderItems() {
-        let output = [];
-
-        for (let i = 0; i < 10; i++) {
-            output.push(
-                <li key={`item-${i}`}>
-                    <Lipsum length={21} />
-                </li>,
-            );
-        }
-
-        return output;
-    }
-
-    render() {
-        return <ul>{this.renderItems().map(item => item)}</ul>;
-    }
-}
diff --git a/src/app/toolkit/typography/ListUnordered/readme.js b/src/app/toolkit/typography/ListUnordered/readme.js
deleted file mode 100644
index bfba63d5..00000000
--- a/src/app/toolkit/typography/ListUnordered/readme.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * ListUnordered Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### SCSS
-${'```scss'}
-ul {
-    margin: 0 0 0 px2rem(20);
-    padding: 0;
-
-    li {
-        line-height: 2;
-        padding: 0;
-        margin: 0;
-    }
-}
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/Paragraph/index.js b/src/app/toolkit/typography/Paragraph/index.js
deleted file mode 100644
index f692e85a..00000000
--- a/src/app/toolkit/typography/Paragraph/index.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: Paragraph
- * -----------------------------------------------------------------------------
- */
-
-export default class Paragraph extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <p>
-                <Lipsum />
-            </p>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/Paragraph/readme.js b/src/app/toolkit/typography/Paragraph/readme.js
deleted file mode 100644
index 7113d581..00000000
--- a/src/app/toolkit/typography/Paragraph/readme.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * Paragraph Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### SCSS
-${'```scss'}
-p, .p {
-    font-family   : Helvetica, Arial, sans-serif;
-    font-size     : 16px;
-    line-height   : 1.5;
-    margin-top    : 0;
-    margin-bottom : 15px;
-}
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/TextAlign/index.js b/src/app/toolkit/typography/TextAlign/index.js
deleted file mode 100644
index deca25c9..00000000
--- a/src/app/toolkit/typography/TextAlign/index.js
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: TextAlign
- * -----------------------------------------------------------------------------
- */
-
-class TextAlign extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    constructor(props) {
-        super(props);
-        this.state = Object.assign({}, this.props);
-    }
-
-    componentDidMount() {
-        if (this.state.hasOwnProperty('mount')) {
-            this.state.mount(this);
-        }
-    }
-
-    UNSAFE_componentWillReceiveProps(nextProps) {
-        this.setState(prevState => {
-            return Object.assign({}, prevState, nextProps);
-        });
-    }
-
-    render() {
-        return (
-            <Fragment>
-                <p>
-                    Easily align text to components with text alignment classes.
-                </p>
-                <div className={'mb-32'}>
-                    <div className={'row'}>
-                        <div className={'col-xs-12 col-sm-4'}>
-                            <div className={'p-10 bg-grey-light'}>
-                                <div
-                                    className={
-                                        'text-xs-right text-sm-left number'
-                                    }>
-                                    <span className={'hide-xs-only'}>
-                                        text-sm-left
-                                    </span>
-                                    <span className={'hide-sm'}>
-                                        text-xs-right
-                                    </span>
-                                </div>
-                            </div>
-                            <p className={'p-10 text-sm-left text-xs-right'}>
-                                Lorem ipsum dolor sit amet, consectetur
-                                adipiscing elit. Sed eget odio sit amet leo
-                                faucibus sollicitudin. Fusce aliquet auctor
-                                erat, varius dictum mauris laoreet quis. Sed
-                                ultrices nisi eget ante luctus consequat. Morbi
-                                scelerisque imperdiet magna, euismod tincidunt
-                                lectus sodales nec. Duis auctor cursus
-                                tincidunt.
-                            </p>
-                        </div>
-                        <div className={'col-xs-12 col-sm-4'}>
-                            <div className={'p-10 bg-grey-light'}>
-                                <div className={'text-xs-center number'}>
-                                    text-xs-center
-                                </div>
-                            </div>
-                            <p className={'p-10 text-xs-center'}>
-                                Lorem ipsum dolor sit amet, consectetur
-                                adipiscing elit. Sed eget odio sit amet leo
-                                faucibus sollicitudin. Fusce aliquet auctor
-                                erat, varius dictum mauris laoreet quis. Sed
-                                ultrices nisi eget ante luctus consequat. Morbi
-                                scelerisque imperdiet magna, euismod tincidunt
-                                lectus sodales nec. Duis auctor cursus
-                                tincidunt.
-                            </p>
-                        </div>
-                        <div className={'col-xs-12 col-sm-4'}>
-                            <div className={'p-10 bg-grey-light'}>
-                                <div
-                                    className={
-                                        'text-sm-right text-xs-left number'
-                                    }>
-                                    <span className={'hide-xs-only'}>
-                                        text-sm-right
-                                    </span>
-                                    <span className={'hide-sm'}>
-                                        text-xs-left
-                                    </span>
-                                </div>
-                            </div>
-                            <p className={'p-10 text-sm-right text-xs-left'}>
-                                Lorem ipsum dolor sit amet, consectetur
-                                adipiscing elit. Sed eget odio sit amet leo
-                                faucibus sollicitudin. Fusce aliquet auctor
-                                erat, varius dictum mauris laoreet quis. Sed
-                                ultrices nisi eget ante luctus consequat. Morbi
-                                scelerisque imperdiet magna, euismod tincidunt
-                                lectus sodales nec. Duis auctor cursus
-                                tincidunt.
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div className={'row'}>
-                    <div className={'col-xs-12'}>
-                        <div className={'p-10 bg-grey-light'}>
-                            <div className={'number'}>text-justify</div>
-                        </div>
-                    </div>
-                </div>
-                <div className={'row'}>
-                    <div className={'col-xs-12'}>
-                        <p className={'p-10 text-justify'}>
-                            Lorem ipsum dolor sit amet, consectetur adipiscing
-                            elit. Sed eget odio sit amet leo faucibus
-                            sollicitudin. Fusce aliquet auctor erat, varius
-                            dictum mauris laoreet quis. Sed ultrices nisi eget
-                            ante luctus consequat. Morbi scelerisque imperdiet
-                            magna, euismod tincidunt lectus sodales nec. Duis
-                            auctor cursus tincidunt. Fusce sit amet sollicitudin
-                            diam, ut finibus ante. Sed hendrerit interdum neque.
-                            Quisque dapibus ipsum ipsum, eget interdum ligula
-                            tincidunt vitae. Proin pharetra, felis et pulvinar
-                            laoreet, lacus eros cursus erat, ut dapibus est
-                            mauris a orci. Etiam dapibus, risus vitae semper
-                            blandit, justo urna efficitur justo, eget malesuada
-                            enim enim ut purus. Quisque auctor tellus vitae quam
-                            sodales, id accumsan sapien blandit.
-                        </p>
-                    </div>
-                </div>
-            </Fragment>
-        );
-    }
-}
-
-// Default properties
-TextAlign.defaultProps = {};
-
-export default TextAlign;
diff --git a/src/app/toolkit/typography/TextAlign/readme.js b/src/app/toolkit/typography/TextAlign/readme.js
deleted file mode 100644
index 73f0edd9..00000000
--- a/src/app/toolkit/typography/TextAlign/readme.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * TextAlign Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-# Your Documentation Here
-
-Be sure to use [markdown ](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format the text.
-
-I suppose you could also use HTML but come on.. do you _REALLY_ need to?
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/TextItalic/index.js b/src/app/toolkit/typography/TextItalic/index.js
deleted file mode 100644
index 654fcc37..00000000
--- a/src/app/toolkit/typography/TextItalic/index.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: TextItalic
- * -----------------------------------------------------------------------------
- */
-
-export default class TextItalic extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <p>
-                <em>
-                    <Lipsum />.
-                </em>
-            </p>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/TextItalic/readme.js b/src/app/toolkit/typography/TextItalic/readme.js
deleted file mode 100644
index 770e82ab..00000000
--- a/src/app/toolkit/typography/TextItalic/readme.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * TextItalic Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### SCSS
-${'```scss'}
-em,
-.em,
-.italic,
-.i {
-    font-style: italic;
-}
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/TextLink/index.js b/src/app/toolkit/typography/TextLink/index.js
deleted file mode 100644
index 56545d6e..00000000
--- a/src/app/toolkit/typography/TextLink/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: TextLink
- * -----------------------------------------------------------------------------
- */
-
-export default class TextLink extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <Fragment>
-                <a href="javascript:alert('Clicked a link!');">Click Me</a>
-            </Fragment>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/TextLink/readme.js b/src/app/toolkit/typography/TextLink/readme.js
deleted file mode 100644
index d76a1321..00000000
--- a/src/app/toolkit/typography/TextLink/readme.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * TextLink Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### SCSS
-${'```scss'}
-a {
-  color: inherit;
-  text-decoration: none;
-  background-color: transparent;
-
-  &:hover {
-    color: inherit;
-    text-decoration: underline;
-  }
-}
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/TextSmall/index.js b/src/app/toolkit/typography/TextSmall/index.js
deleted file mode 100644
index 75217088..00000000
--- a/src/app/toolkit/typography/TextSmall/index.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: TextSmall
- * -----------------------------------------------------------------------------
- */
-
-export default class TextSmall extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <small>
-                <Lipsum length={58} />.
-            </small>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/TextSmall/readme.js b/src/app/toolkit/typography/TextSmall/readme.js
deleted file mode 100644
index dd21a1e6..00000000
--- a/src/app/toolkit/typography/TextSmall/readme.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * TextSmall Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
- ###### SCSS
- ${'```scss'}
- small,
- .small {
-    font-size: px2rem(11);
- }
- ${'```'}
- `;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/TextStrike/index.js b/src/app/toolkit/typography/TextStrike/index.js
deleted file mode 100644
index 47f9b484..00000000
--- a/src/app/toolkit/typography/TextStrike/index.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: TextStrike
- * -----------------------------------------------------------------------------
- */
-
-export default class TextStrike extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <strike>
-                <Lipsum length={58} />.
-            </strike>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/TextStrike/readme.js b/src/app/toolkit/typography/TextStrike/readme.js
deleted file mode 100644
index c190779f..00000000
--- a/src/app/toolkit/typography/TextStrike/readme.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * TextStrike Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
- ###### SCSS
- ${'```scss'}
- strike,
- .strike,
- .strikethrough {
-     text-decoration: line-through;
- }
- ${'```'}
- `;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/TextStrong/index.js b/src/app/toolkit/typography/TextStrong/index.js
deleted file mode 100644
index d8262be2..00000000
--- a/src/app/toolkit/typography/TextStrong/index.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: TextStrong
- * -----------------------------------------------------------------------------
- */
-
-export default class TextStrong extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <strong>
-                <Lipsum length={58} />.
-            </strong>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/TextStrong/readme.js b/src/app/toolkit/typography/TextStrong/readme.js
deleted file mode 100644
index 308f5e1a..00000000
--- a/src/app/toolkit/typography/TextStrong/readme.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * TextStrong Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### SCSS
-${'```scss'}
-.b,
-.bold,
-.strong,
-strong {
-    font-weight: 600;
-}
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/TextSub/index.js b/src/app/toolkit/typography/TextSub/index.js
deleted file mode 100644
index d1382861..00000000
--- a/src/app/toolkit/typography/TextSub/index.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: TextSub
- * -----------------------------------------------------------------------------
- */
-
-export default class TextSub extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <p>
-                <Lipsum length={58} />
-                <sub>4</sub>
-            </p>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/TextSub/readme.js b/src/app/toolkit/typography/TextSub/readme.js
deleted file mode 100644
index a4bc7c46..00000000
--- a/src/app/toolkit/typography/TextSub/readme.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * TextSub Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### SCSS
-${'```scss'}
-sub,
-.sub {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-  bottom: -.5rem;
-}
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/TextSuper/index.js b/src/app/toolkit/typography/TextSuper/index.js
deleted file mode 100644
index 32473cf3..00000000
--- a/src/app/toolkit/typography/TextSuper/index.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: TextSuper
- * -----------------------------------------------------------------------------
- */
-
-export default class TextSuper extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <p>
-                <Lipsum length={58} />
-                <sup>4</sup>
-            </p>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/TextSuper/readme.js b/src/app/toolkit/typography/TextSuper/readme.js
deleted file mode 100644
index 07fdc05a..00000000
--- a/src/app/toolkit/typography/TextSuper/readme.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * TextSuper Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
- ###### SCSS
- ${'```scss'}
- sup,
- .sup {
-   position: relative;
-   font-size: 75%;
-   line-height: 0;
-   vertical-align: baseline;
-   top: -.5rem;
-}
- ${'```'}
- `;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/app/toolkit/typography/TextUnderline/index.js b/src/app/toolkit/typography/TextUnderline/index.js
deleted file mode 100644
index 5c7e9b09..00000000
--- a/src/app/toolkit/typography/TextUnderline/index.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * -----------------------------------------------------------------------------
- * Imports
- * -----------------------------------------------------------------------------
- */
-import React, { Component, Fragment } from 'react';
-import Lipsum from 'toolkit/Lipsum';
-
-/**
- * -----------------------------------------------------------------------------
- * React Component: TextUnderline
- * -----------------------------------------------------------------------------
- */
-
-export default class TextUnderline extends Component {
-    static dependencies() {
-        return typeof module !== 'undefined' ? module.children : [];
-    }
-
-    render() {
-        return (
-            <p>
-                <u>
-                    <Lipsum length={58} />.
-                </u>
-            </p>
-        );
-    }
-}
diff --git a/src/app/toolkit/typography/TextUnderline/readme.js b/src/app/toolkit/typography/TextUnderline/readme.js
deleted file mode 100644
index aa7e4780..00000000
--- a/src/app/toolkit/typography/TextUnderline/readme.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from 'react';
-import Markdown from 'reactium-core/components/Toolkit/Markdown';
-
-/**
- * -----------------------------------------------------------------------------
- * TextUnderline Readme
- * -----------------------------------------------------------------------------
- */
-
-const content = `
-###### SCSS
-${'```scss'}
-u,
-.u,
-.underline {
-    text-decoration: underline;
-}
-${'```'}
-`;
-
-/**
- * -----------------------------------------------------------------------------
- * DO NOT EDIT BELOW HERE
- * -----------------------------------------------------------------------------
- */
-const readme = props => <Markdown {...props}>{content}</Markdown>;
-export default readme;
diff --git a/src/assets/fonts/.gitkeep b/src/assets/fonts/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/src/assets/images/icon.png b/src/assets/images/icon.png
new file mode 100644
index 00000000..816b4f12
Binary files /dev/null and b/src/assets/images/icon.png differ
diff --git a/src/assets/style/_scss/_button.scss b/src/assets/style/_scss/_button.scss
deleted file mode 100644
index ed5cb4bb..00000000
--- a/src/assets/style/_scss/_button.scss
+++ /dev/null
@@ -1,250 +0,0 @@
-// color-left, color-right, color, text-shadow
-$buttons: (
-    "primary": (lighten($color-blue, 5%), $color-blue, $color-white, rgba($color-white, 0)),
-    "secondary": (lighten($color-black, 15%), $color-black, $color-grey-light, rgba($color-white, 0)),
-    "tertiary": ($color-gray, $color-gray, $color-white, rgba($color-white, 0))
-);
-
-// font-size, paddingTop, paddingRight, paddingBottom, paddingLeft
-$button-sizes: (
-    "xs": (10px, 4px, 18px, 4px, 18px),
-    "sm": (12px, 8px, 24px, 8px, 24px),
-    "md": (14px, 12px, 56px, 12px, 56px),
-    "lg": (22px, 16px, 80px, 16px, 80px)
-);
-
-@mixin default-button($size, $pt, $pr, $pb, $pl) {
-    display         : inline-flex;
-    justify-content : center;
-    align-items     : center;
-    padding         : $pt $pr $pb $pl;
-    font-size       : $size;
-    flex-wrap       : nowrap;
-    white-space     : nowrap;
-    border          : none;
-}
-
-@mixin pill-button($size) {
-    border-radius   : $size * 3;
-}
-
-@mixin h-gradient($clr-l, $clr-r) {
-    background : $clr-r; /* Old browsers */
-    background : -moz-linear-gradient(left, $clr-l 0%, $clr-r 100%); /* FF3.6-15 */
-    background : -webkit-linear-gradient(left, $clr-l 0%, $clr-r 100%); /* Chrome10-25,Safari5.1-6 */
-    background : linear-gradient(to right, $clr-l 0%, $clr-r 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
-    filter     : progid:DXImageTransform.Microsoft.gradient( startColorstr='#{$clr-l}', endColorstr='#{$clr-r}',GradientType=1 ); /* IE6-9 */
-}
-
-@mixin button() {
-    @each $clr-name, $clr-codes in $buttons {
-        $shadow: nth($clr-codes, 4);
-
-        &-#{$clr-name} {
-            @extend .btn;
-            color: nth($clr-codes, 3);
-            text-shadow: 0 0 1px $shadow;
-            line-height: 1;
-
-            svg {
-                fill: nth($clr-codes, 3);
-                stroke: nth($clr-codes, 3);
-            }
-
-            @include h-gradient(nth($clr-codes, 1), nth($clr-codes, 2));
-
-            &:focus,
-            &.focus {
-                box-shadow: 0 0 10px 1px lighten(nth($clr-codes, 1), 5%);
-            }
-
-            &:hover,
-            &.hover,
-            &.active {
-                text-decoration: none;
-                @include h-gradient(lighten(nth($clr-codes, 1), 5%), lighten(nth($clr-codes, 2), 5%));
-            }
-
-            &:disabled,
-            &.disabled {
-                opacity: 0.5;
-                cursor: default;
-                @include h-gradient(nth($clr-codes, 1), nth($clr-codes, 2));
-                pointer-events: none;
-            }
-
-            @each $size-name, $size-codes in $button-sizes {
-                &-#{$size-name} {
-                    @extend .btn;
-                    @extend .btn-#{$clr-name};
-
-                    @include default-button(
-                        nth($size-codes, 1),
-                        nth($size-codes, 2),
-                        nth($size-codes, 3),
-                        nth($size-codes, 4),
-                        nth($size-codes, 5)
-                    );
-                }
-            }
-        }
-
-        &-#{$clr-name}-outline {
-            @extend .btn;
-            color: nth($clr-codes, 2);
-
-            background: transparent;
-            //border: 2px solid nth($clr-codes, 2) !important;
-            position: relative;
-
-            &:before {
-                content: "";
-                position: absolute;
-                top: 0;
-                left: 0;
-                width: 100%;
-                height: 100%;
-                border: 2px solid nth($clr-codes, 2) !important;
-            }
-
-            &:hover,
-            &:focus,
-            &.hover,
-            &.active {
-                background: nth($clr-codes, 1);
-                color: nth($clr-codes, 3);
-            }
-
-            &.active {
-                background: nth($clr-codes, 2);
-            }
-
-            &:focus,
-            &.focus {
-                box-shadow: 0 0 10px 1px lighten(nth($clr-codes, 1), 5%);
-            }
-
-            &:disabled,
-            &.disabled {
-                opacity: 0.5;
-                cursor: default;
-                background: transparent;
-                color: nth($clr-codes, 2);
-                pointer-events: none;
-            }
-        }
-
-        @each $size-name, $size-codes in $button-sizes {
-            &-#{$clr-name}-#{$size-name}-outline {
-                @include default-button(
-                    nth($size-codes, 1),
-                    nth($size-codes, 2),
-                    nth($size-codes, 3),
-                    nth($size-codes, 4),
-                    nth($size-codes, 5)
-                );
-
-                @extend .btn-#{$clr-name}-outline;
-            }
-        }
-
-
-        &-#{$clr-name}-pill {
-            @extend .btn;
-            @extend .btn-#{$clr-name};
-
-            @include pill-button(14px);
-        }
-
-        &-#{$clr-name}-outline-pill {
-            @extend .btn;
-            @extend .btn-#{$clr-name}-outline;
-
-            @include pill-button(14px);
-
-            &:before {
-                content: "";
-                position: absolute;
-                top: 0;
-                left: 0;
-                width: 100%;
-                height: 100%;
-                border: 2px solid nth($clr-codes, 2) !important;
-                @include pill-button(14px);
-            }
-        }
-
-        @each $size-name, $size-codes in $button-sizes {
-
-            &-#{$clr-name}-#{$size-name} {
-                @extend .btn;
-                @extend .btn-#{$clr-name};
-                @extend .btn-#{$clr-name}-#{$size-name};
-            }
-
-            &-#{$clr-name}-#{$size-name}-pill {
-                @extend .btn;
-                @extend .btn-#{$clr-name};
-                @extend .btn-#{$clr-name}-#{$size-name};
-                @include pill-button(nth($size-codes, 1));
-            }
-
-            &-#{$clr-name}-#{$size-name}-outline-pill {
-                @extend .btn;
-                @extend .btn-#{$clr-name}-#{$size-name};
-                @extend .btn-#{$clr-name}-outline;
-                @include pill-button(nth($size-codes, 1));
-
-                &:before {
-                    content: "";
-                    position: absolute;
-                    top: 0;
-                    left: 0;
-                    width: 100%;
-                    height: 100%;
-                    border: 2px solid nth($clr-codes, 2) !important;
-                    @include pill-button(nth($size-codes, 1));
-                }
-            }
-        }
-    }
-}
-
-button {
-    &:hover {
-        cursor: pointer;
-    }
-}
-
-.btn {
-    @include default-button(14px, 8px, 24px, 8px, 24px);
-    outline: none;
-    border-radius: 2px;
-    background     : $color-grey;
-    text-transform : uppercase;
-    color          : $color-white;
-    font-weight: 400;
-
-    svg {
-        fill: $color-white;
-        stroke: $color-white;
-    }
-
-    @include button();
-
-    &-block {
-        width: 100%;
-    }
-
-    &-icon {
-        @extend .btn-primary;
-        border-radius: 100%;
-        font-size: 22px;
-        padding: 0;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-        height: 36px !important;
-        width: 36px !important;
-    }
-}
diff --git a/src/assets/style/_scss/_colors.scss b/src/assets/style/_scss/_colors.scss
deleted file mode 100644
index 76fc98a2..00000000
--- a/src/assets/style/_scss/_colors.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-// WARNING: Do not directly edit this file !!!!
-// File generated by gulp styles:colors task
-
-
-// ~/src/assets/style/_scss/colors.json
-$color-black: #000000 !default;
-$color-gray-dark: #333333 !default;
-$color-gray: #999999 !default;
-$color-grey: #CCCCCC !default;
-$color-grey-light: #F7F7F7 !default;
-$color-white: #FFFFFF !default;
-$color-yellow: #F4F19C !default;
-$color-orange: #E69840 !default;
-$color-pink: #D877A0 !default;
-$color-red: #A82C40 !default;
-$color-purple: #7A7CEF !default;
-$color-blue: #4F82BA !default;
-$color-green: #659A3F !default;
-$color-green-light: #B2BB50 !default;
-
-
-$color: (
-	"black": $color-black,
-	"gray-dark": $color-gray-dark,
-	"gray": $color-gray,
-	"grey": $color-grey,
-	"grey-light": $color-grey-light,
-	"white": $color-white,
-	"yellow": $color-yellow,
-	"orange": $color-orange,
-	"pink": $color-pink,
-	"red": $color-red,
-	"purple": $color-purple,
-	"blue": $color-blue,
-	"green": $color-green,
-	"green-light": $color-green-light
-) !default;
-
-
diff --git a/src/assets/style/_scss/_fonts.scss b/src/assets/style/_scss/_fonts.scss
deleted file mode 100644
index 8b7569d1..00000000
--- a/src/assets/style/_scss/_fonts.scss
+++ /dev/null
@@ -1,400 +0,0 @@
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRxC7m0dR9pBOi.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRzS7m0dR9pBOi.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRxi7m0dR9pBOi.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRxy7m0dR9pBOi.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 100;
-  src: local('Montserrat Thin'), local('Montserrat-Thin'), url(/assets/fonts/montserrat/v12/JTUQjIg1_i6t8kCHKm45_QpRyS7m0dR9pA.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 200;
-  src: local('Montserrat ExtraLight'), local('Montserrat-ExtraLight'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_aZA3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Montserrat Light'), local('Montserrat-Light'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_cJD3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459WRhyyTh89ZNpQ.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459W1hyyTh89ZNpQ.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459WZhyyTh89ZNpQ.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459WdhyyTh89ZNpQ.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Montserrat Regular'), local('Montserrat-Regular'), url(/assets/fonts/montserrat/v12/JTUSjIg1_i6t8kCHKm459WlhyyTh89Y.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 500;
-  src: local('Montserrat Medium'), local('Montserrat-Medium'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_ZpC3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Montserrat SemiBold'), local('Montserrat-SemiBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_bZF3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Montserrat Bold'), local('Montserrat-Bold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 800;
-  src: local('Montserrat ExtraBold'), local('Montserrat-ExtraBold'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_c5H3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-/* cyrillic-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3gTD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
-}
-/* cyrillic */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3g3D_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* vietnamese */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3gbD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
-}
-/* latin-ext */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3gfD_vx3rCubqg.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
-  font-family: 'Montserrat';
-  font-style: normal;
-  font-weight: 900;
-  src: local('Montserrat Black'), local('Montserrat-Black'), url(/assets/fonts/montserrat/v12/JTURjIg1_i6t8kCHKm45_epG3gnD_vx3rCs.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-
-/* greek-ext */
-@font-face {
-  font-family: 'Cardo';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Cardo'), local('Cardo-Regular'), url(/assets/fonts/cardo/v10/wlp_gwjKBV1pqhv03IE7225PUCk.woff2) format('woff2');
-  unicode-range: U+1F00-1FFF;
-}
-
-/* greek */
-@font-face {
-  font-family: 'Cardo';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Cardo'), local('Cardo-Regular'), url(/assets/fonts/cardo/v10/wlp_gwjKBV1pqhv73IE7225PUCk.woff2) format('woff2');
-  unicode-range: U+0370-03FF;
-}
-
-/* latin-ext */
-@font-face {
-  font-family: 'Cardo';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Cardo'), local('Cardo-Regular'), url(/assets/fonts/cardo/v10/wlp_gwjKBV1pqhv23IE7225PUCk.woff2) format('woff2');
-  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
-}
-
-/* latin */
-@font-face {
-  font-family: 'Cardo';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Cardo'), local('Cardo-Regular'), url(/assets/fonts/cardo/v10/wlp_gwjKBV1pqhv43IE7225P.woff2) format('woff2');
-  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-
-@each $selector, $font in $fonts {
-    .#{$selector} { font-family: #{$font}; }
-}
diff --git a/src/assets/style/_scss/_form.scss b/src/assets/style/_scss/_form.scss
deleted file mode 100644
index 68384bd3..00000000
--- a/src/assets/style/_scss/_form.scss
+++ /dev/null
@@ -1,115 +0,0 @@
-
-.form-group {
-    display: flex;
-    flex-direction: column;
-    line-height: 1.5;
-    margin: px2rem(20) 0;
-
-    &:first-of-type {
-        margin-top: 0;
-    }
-
-    &:last-of-type {
-        margin-bottom: 0;
-    }
-
-    label {
-        user-select: none;
-        cursor: pointer;
-        display: flex;
-        flex-direction: column;
-        font-weight: 500;
-
-        * {
-            font-weight: normal;
-        }
-    }
-
-    &, label {
-        input,
-        textarea,
-        select {
-            flex-grow: 1;
-            font-family: inherit;
-            font-size: inherit;
-            font-weight: 200;
-            outline: none;
-            border: 1px solid $color-grey;
-            border-radius: $input-radius;
-            line-height: 1;
-            margin-top: 6px;
-            padding: 10px;
-
-            &:focus,
-            &.focus {
-                box-shadow: 0 0 0 5px rgba(lighten(nth($color-blue, 1), 5%), 0.25);
-                border: 1px solid $color-blue;
-            }
-
-            &:disabled {
-                opacity: 0.8;
-            }
-
-            &:first-child {
-                &:last-child {
-                    margin-top: 0;
-                    margin-bottom: 0;
-                }
-            }
-        }
-
-        textarea {
-            line-height: 1.25;
-        }
-    }
-
-    .inline,
-    &.inline {
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        flex-direction: row !important;
-
-    }
-
-
-    .small, small {
-        &:last-child {
-            @extend .em;
-            margin-top: 8px;
-            font-weight: normal;
-        }
-    }
-
-    &.row {
-
-        label {
-            flex-direction: row;
-            align-items: center;
-        }
-
-        input,
-        textarea,
-        select {
-            margin: 0;
-        }
-    }
-
-    &.error {
-        input,
-        textarea,
-        select {
-            box-shadow: 0 0 0 5px rgba(lighten(nth($color-red, 1), 5%), 0.25);
-            border: 1px solid $color-red !important;
-
-            &:focus,
-            &.focus {
-                box-shadow: none;
-            }
-        }
-
-        .small, small {
-            color: $color-red;
-        }
-    }
-}
diff --git a/src/assets/style/_scss/_layout.scss b/src/assets/style/_scss/_layout.scss
deleted file mode 100644
index 4ee72cc6..00000000
--- a/src/assets/style/_scss/_layout.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-
-.flex {
-    @include flex-factory();
-
-    @each $prefix in $breakpoint-all-prefixes {
-        @include breakpoint($prefix) {
-            &-#{$prefix} {
-                display: flex;
-                @include flex-factory();
-            }
-        }
-    }
-
-    &-grow {
-        flex-grow: 1;
-    }
-
-    &-shrink {
-        flex-shrink: 1;
-    }
-
-    &.start {
-        justify-content: flex-start
-    }
-    &.end {
-        justify-content: flex-end;
-    }
-
-    &.middle {
-        align-items: center
-    }
-
-    &.center {
-        justify-content: center;
-    }
-}
diff --git a/src/assets/style/_scss/_reactium-modules.scss b/src/assets/style/_scss/_reactium-modules.scss
new file mode 100644
index 00000000..61b7fc13
--- /dev/null
+++ b/src/assets/style/_scss/_reactium-modules.scss
@@ -0,0 +1,8 @@
+// WARNING: Do not directly edit this file !!!!
+// File generated by gulp styles:partials task
+
+@import '+@atomic-reactor/reactium-core/assets/images/_reactium-style-variables';
+@import '_reactium-style-variables-colors-default';
+@import '_reactium-style-molecules-loader';
+@import '+@atomic-reactor/reactium-core/app/_reactium-style';
+@import '../../../app/components/Welcome/_reactium-style-organisms';
diff --git a/src/assets/style/_scss/_reactium-style-molecules-loader.scss b/src/assets/style/_scss/_reactium-style-molecules-loader.scss
new file mode 100644
index 00000000..5da67595
--- /dev/null
+++ b/src/assets/style/_scss/_reactium-style-molecules-loader.scss
@@ -0,0 +1,59 @@
+$reactium-blue: #4f82ba !default;
+$reactium-white: #ffffff !default;
+
+.reactium-loading {
+    top: 0;
+    left: 0;
+    width: 100vw;
+    height: 100vh;
+    position: fixed;
+    background-color: $reactium-white;
+
+    &,
+    * {
+        box-sizing: border-box;
+    }
+
+    &:before {
+        content: '';
+        width: 64px;
+        height: 64px;
+        border-radius: 100%;
+        z-index: 1;
+        left: 50%;
+        top: 50%;
+        position: absolute;
+        transform: translate(-50%, -50%);
+        box-shadow: 0 0 0 0 rgba($reactium-blue, 1);
+        animation: reactium-pulse 1.2s infinite;
+    }
+
+    &:after {
+        content: '';
+        width: 64px;
+        height: 64px;
+        z-index: 2;
+        left: 50%;
+        top: 50%;
+        position: absolute;
+        transform: translate(-50%, -50%);
+        background-size: cover;
+        background-position: center;
+        background-repeat: no-repeat;
+        background-image: url('/assets/images/logo.png');
+    }
+}
+
+@keyframes reactium-pulse {
+    0% {
+        box-shadow: 0 0 0 0 rgba($reactium-blue, 0.7);
+    }
+
+    70% {
+        box-shadow: 0 0 0 12px rgba($reactium-blue, 0);
+    }
+
+    100% {
+        box-shadow: 0 0 0 0 rgba($reactium-white, 0);
+    }
+}
diff --git a/src/assets/style/_scss/_reactium-style-variables-colors-default.scss b/src/assets/style/_scss/_reactium-style-variables-colors-default.scss
new file mode 100644
index 00000000..ff2923da
--- /dev/null
+++ b/src/assets/style/_scss/_reactium-style-variables-colors-default.scss
@@ -0,0 +1,39 @@
+
+// 
+// DO NOT EDIT!
+// This file is generated by gulp styles:colors task.
+// Modify colors-default.json in this directory to effect this file.
+//
+@use "sass:map";
+
+$color-black: #000000 !default;
+$color-gray-dark: #333333 !default;
+$color-gray: #999999 !default;
+$color-grey: #CCCCCC !default;
+$color-grey-light: #F7F7F7 !default;
+$color-white: #FFFFFF !default;
+$color-yellow: #F4F19C !default;
+$color-orange: #E69840 !default;
+$color-pink: #D877A0 !default;
+$color-red: #A82C40 !default;
+$color-purple: #7A7CEF !default;
+$color-blue: #4F82BA !default;
+$color-green: #659A3F !default;
+$color-green-light: #B2BB50 !default;
+
+$color: () !default;
+
+$color: map.set($color, "color-black", $color-black);
+$color: map.set($color, "color-gray-dark", $color-gray-dark);
+$color: map.set($color, "color-gray", $color-gray);
+$color: map.set($color, "color-grey", $color-grey);
+$color: map.set($color, "color-grey-light", $color-grey-light);
+$color: map.set($color, "color-white", $color-white);
+$color: map.set($color, "color-yellow", $color-yellow);
+$color: map.set($color, "color-orange", $color-orange);
+$color: map.set($color, "color-pink", $color-pink);
+$color: map.set($color, "color-red", $color-red);
+$color: map.set($color, "color-purple", $color-purple);
+$color: map.set($color, "color-blue", $color-blue);
+$color: map.set($color, "color-green", $color-green);
+$color: map.set($color, "color-green-light", $color-green-light);
diff --git a/src/assets/style/_scss/_reboot.scss b/src/assets/style/_scss/_reboot.scss
deleted file mode 100644
index 5492fe6a..00000000
--- a/src/assets/style/_scss/_reboot.scss
+++ /dev/null
@@ -1,459 +0,0 @@
-// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix
-
-// Reboot
-//
-// Normalization of HTML elements, manually forked from Normalize.css to remove
-// styles targeting irrelevant browsers while applying new styles.
-//
-// Normalize is licensed MIT. https://github.com/necolas/normalize.css
-
-
-// Document
-//
-// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.
-// 2. Change the default font family in all browsers.
-// 3. Correct the line height in all browsers.
-// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.
-// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so
-//    we force a non-overlapping, non-auto-hiding scrollbar to counteract.
-// 6. Change the default tap highlight to be completely transparent in iOS.
-
-*,
-*::before,
-*::after {
-  box-sizing: border-box; // 1
-}
-
-html {
-  font-family: sans-serif; // 2
-  line-height: 1.15; // 3
-  -webkit-text-size-adjust: 100%; // 4
-  -ms-text-size-adjust: 100%; // 4
-  -ms-overflow-style: scrollbar; // 5
-  -webkit-tap-highlight-color: rgba($color-black, 0); // 6
-}
-
-// IE10+ doesn't honor `<meta name="viewport">` in some cases.
-@at-root {
-  @-ms-viewport {
-    width: device-width;
-  }
-}
-
-// stylelint-disable selector-list-comma-newline-after
-// Shim for "new" HTML5 structural elements to display correctly (IE10, older browsers)
-article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
-  display: block;
-}
-// stylelint-enable selector-list-comma-newline-after
-
-// Body
-//
-// 1. Remove the margin in all browsers.
-// 2. As a best practice, apply a default `background-color`.
-// 3. Set an explicit initial text-align value so that we can later use the
-//    the `inherit` value on things like `<th>` elements.
-
-
-// Suppress the focus outline on elements that cannot be accessed via keyboard.
-// This prevents an unwanted focus outline from appearing around elements that
-// might still respond to pointer events.
-//
-// Credit: https://github.com/suitcss/base
-[tabindex="-1"]:focus {
-  outline: 0 !important;
-}
-
-
-// Content grouping
-//
-// 1. Add the correct box sizing in Firefox.
-// 2. Show the overflow in Edge and IE.
-
-hr {
-  box-sizing: content-box; // 1
-  height: 0; // 1
-  overflow: visible; // 2
-}
-
-
-//
-// Typography
-//
-
-// Remove top margins from headings
-//
-// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top
-// margin for easier control within type scales as it avoids margin collapsing.
-// stylelint-disable selector-list-comma-newline-after
-h1, h2, h3, h4, h5, h6 {
-  margin-top: 0;
-  margin-bottom: $headings-margin-bottom;
-}
-// stylelint-enable selector-list-comma-newline-after
-
-// Reset margins on paragraphs
-//
-// Similarly, the top margin on `<p>`s get reset. However, we also reset the
-// bottom margin to use `rem` units instead of `em`.
-p {
-  margin-top: 0;
-  margin-bottom: $paragraph-margin-bottom;
-}
-
-// Abbreviations
-//
-// 1. Remove the bottom border in Firefox 39-.
-// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
-// 3. Add explicit cursor to indicate changed behavior.
-// 4. Duplicate behavior to the data-* attribute for our tooltip plugin
-
-abbr[title],
-abbr[data-original-title] { // 4
-  text-decoration: underline; // 2
-  text-decoration: underline dotted; // 2
-  cursor: help; // 3
-  border-bottom: 0; // 1
-}
-
-address {
-  margin-bottom: 1rem;
-  font-style: normal;
-  line-height: inherit;
-}
-
-ol,
-ul,
-dl {
-  margin-top: 0;
-  margin-bottom: 1rem;
-}
-
-ol ol,
-ul ul,
-ol ul,
-ul ol {
-  margin-bottom: 0;
-}
-
-dt {
-  font-weight: $dt-font-weight;
-}
-
-dd {
-  margin-bottom: .5rem;
-  margin-left: 0; // Undo browser default
-}
-
-dfn {
-  font-style: italic; // Add the correct font style in Android 4.3-
-}
-
-
-//
-// Prevent `sub` and `sup` elements from affecting the line height in
-// all browsers.
-//
-
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-
-sub, .sub { bottom: -.25rem; }
-sup, .sup { top: -.5rem; }
-
-
-//
-// Links
-//
-
-a {
-  color: inherit;
-  text-decoration: none;
-  background-color: transparent; // Remove the gray background on active links in IE 10.
-  -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.
-
-  &:hover {
-    color: inherit;
-    text-decoration: underline;
-  }
-}
-
-// And undo these styles for placeholder links/named anchors (without href)
-// which have not been made explicitly keyboard-focusable (without tabindex).
-// It would be more straightforward to just use a[href] in previous block, but that
-// causes specificity issues in many other styles that are too complex to fix.
-// See https://github.com/twbs/bootstrap/issues/19402
-
-a:not([href]):not([tabindex]) {
-  color: inherit;
-  text-decoration: none;
-
-  &:hover,
-  &:focus {
-    color: inherit;
-    text-decoration: none;
-  }
-
-  &:focus {
-    outline: 0;
-  }
-}
-
-
-//
-// Code
-//
-
-pre,
-code,
-kbd,
-samp {
-  font-family: $font-family-monospace;
-  font-size: 1em; // Correct the odd `em` font sizing in all browsers.
-}
-
-pre {
-  // Remove browser default top margin
-  margin-top: 0;
-  // Reset browser default of `1em` to use `rem`s
-  margin-bottom: 1rem;
-  // Don't allow content to break outside
-  overflow: auto;
-  // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so
-  // we force a non-overlapping, non-auto-hiding scrollbar to counteract.
-  -ms-overflow-style: scrollbar;
-}
-
-
-//
-// Figures
-//
-
-figure {
-  // Apply a consistent margin strategy (matches our type styles).
-  margin: 0 0 1rem;
-}
-
-
-//
-// Images and content
-//
-
-img {
-  vertical-align: middle;
-  border-style: none; // Remove the border on images inside links in IE 10-.
-}
-
-svg {
-  // Workaround for the SVG overflow bug in IE10/11 is still required.
-  // See https://github.com/twbs/bootstrap/issues/26878
-  overflow: hidden;
-  vertical-align: middle;
-}
-
-
-//
-// Tables
-//
-
-table {
-  border-collapse: collapse; // Prevent double borders
-}
-
-caption {
-  padding-top: $table-cell-padding;
-  padding-bottom: $table-cell-padding;
-  color: $table-caption-color;
-  text-align: left;
-  caption-side: bottom;
-}
-
-th {
-  // Matches default `<td>` alignment by inheriting from the `<body>`, or the
-  // closest parent with a set `text-align`.
-  text-align: inherit;
-}
-
-
-//
-// Forms
-//
-
-label {
-  // Allow labels to use `margin` for spacing.
-  display: inline-block;
-  margin-bottom: $label-margin-bottom;
-}
-
-// Remove the default `border-radius` that macOS Chrome adds.
-//
-// Details at https://github.com/twbs/bootstrap/issues/24093
-button {
-  border-radius: 0;
-}
-
-// Work around a Firefox/IE bug where the transparent `button` background
-// results in a loss of the default `button` focus styles.
-//
-// Credit: https://github.com/suitcss/base/
-button:focus {
-  outline: none;
-}
-
-input,
-button,
-select,
-optgroup,
-textarea {
-  margin: 0; // Remove the margin in Firefox and Safari
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-
-button,
-input {
-  overflow: visible; // Show the overflow in Edge
-}
-
-button,
-select {
-  text-transform: none; // Remove the inheritance of text transform in Firefox
-}
-
-// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
-//    controls in Android 4.
-// 2. Correct the inability to style clickable types in iOS and Safari.
-button,
-html [type="button"], // 1
-[type="reset"],
-[type="submit"] {
-  -webkit-appearance: button; // 2
-}
-
-// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.
-button::-moz-focus-inner,
-[type="button"]::-moz-focus-inner,
-[type="reset"]::-moz-focus-inner,
-[type="submit"]::-moz-focus-inner {
-  padding: 0;
-  border-style: none;
-}
-
-input[type="radio"],
-input[type="checkbox"] {
-  box-sizing: border-box; // 1. Add the correct box sizing in IE 10-
-  padding: 0; // 2. Remove the padding in IE 10-
-}
-
-
-input[type="date"],
-input[type="time"],
-input[type="datetime-local"],
-input[type="month"] {
-  // Remove the default appearance of temporal inputs to avoid a Mobile Safari
-  // bug where setting a custom line-height prevents text from being vertically
-  // centered within the input.
-  // See https://bugs.webkit.org/show_bug.cgi?id=139848
-  // and https://github.com/twbs/bootstrap/issues/11266
-  -webkit-appearance: listbox;
-}
-
-textarea {
-  overflow: auto; // Remove the default vertical scrollbar in IE.
-  // Textareas should really only resize vertically so they don't break their (horizontal) containers.
-  resize: vertical;
-}
-
-fieldset {
-  // Browsers set a default `min-width: min-content;` on fieldsets,
-  // unlike e.g. `<div>`s, which have `min-width: 0;` by default.
-  // So we reset that to ensure fieldsets behave more like a standard block element.
-  // See https://github.com/twbs/bootstrap/issues/12359
-  // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements
-  min-width: 0;
-  // Reset the default outline behavior of fieldsets so they don't affect page layout.
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-
-// 1. Correct the text wrapping in Edge and IE.
-// 2. Correct the color inheritance from `fieldset` elements in IE.
-legend {
-  display: block;
-  width: 100%;
-  max-width: 100%; // 1
-  padding: 0;
-  margin-bottom: .5rem;
-  font-size: 1.5rem;
-  line-height: inherit;
-  color: inherit; // 2
-  white-space: normal; // 1
-}
-
-progress {
-  vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.
-}
-
-// Correct the cursor style of increment and decrement buttons in Chrome.
-[type="number"]::-webkit-inner-spin-button,
-[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-
-[type="search"] {
-  // This overrides the extra rounded corners on search inputs in iOS so that our
-  // `.form-control` class can properly style them. Note that this cannot simply
-  // be added to `.form-control` as it's not specific enough. For details, see
-  // https://github.com/twbs/bootstrap/issues/11586.
-  outline-offset: -2px; // 2. Correct the outline style in Safari.
-  -webkit-appearance: none;
-}
-
-//
-// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
-//
-
-[type="search"]::-webkit-search-cancel-button,
-[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-
-//
-// 1. Correct the inability to style clickable types in iOS and Safari.
-// 2. Change font properties to `inherit` in Safari.
-//
-
-::-webkit-file-upload-button {
-  font: inherit; // 2
-  -webkit-appearance: button; // 1
-}
-
-//
-// Correct element displays
-//
-
-output {
-  display: inline-block;
-}
-
-summary {
-  display: list-item; // Add the correct display in all browsers
-  cursor: pointer;
-}
-
-template {
-  display: none; // Add the correct display in IE
-}
-
-// Always hide an element with the `hidden` HTML attribute (from PureCSS).
-// Needed for proper display in IE 10-.
-[hidden] {
-  display: none !important;
-}
diff --git a/src/assets/style/_scss/_typography.scss b/src/assets/style/_scss/_typography.scss
deleted file mode 100644
index 507b6d6e..00000000
--- a/src/assets/style/_scss/_typography.scss
+++ /dev/null
@@ -1,93 +0,0 @@
-html, body {
-  margin: 0;
-  font-family: #{$font-family-base};
-  font-size: $font-size-base;
-  font-weight: $font-weight-base;
-  line-height: $line-height-base;
-  color: $color-black;
-  text-align: left;
-  background-color: $color-white;
-}
-
-.number {
-    font-family: $font-family-monospace;
-}
-
-.upper, .uppercase {
-    text-transform: uppercase
-}
-
-.lower, .lowercase {
-    text-transform: lowercase;
-}
-
-.proper, .propercase, .capitalize {
-    text-transform: capitalize;
-}
-
-u, .u, .underline {
-    text-decoration: underline;
-}
-
-strike,
-.strike,
-.strikethrough {
-    text-decoration: line-through;
-}
-
-p, .p {
-    line-height: 1.5;
-}
-
-.b,
-.bold,
-.strong,
-strong {
-    font-weight: 600;
-}
-
-em,
-.em,
-.italic,
-.i {
-    font-style: italic;
-}
-
-small,
-.small {
-    font-size: px2rem(11);
-}
-
-blockquote {
-    padding          : px2rem(20);
-    margin           : px2rem(20) 0;
-    background-color : $color-grey-light;
-    font-family      : 'Montserrat', sans-serif;
-    border-radius    : 0 px2rem(50) px2rem(50) 0;
-    border-left      : 5px solid $color-grey;
-}
-
-ul li,
-ol li {
-    line-height: 2;
-    padding: 0;
-    margin: 0;
-}
-
-ul, ol {
-    margin: 0 0 0 px2rem(20);
-    padding: 0;
-}
-
-.light {
-    font-weight: 100;
-}
-
-.medium {
-    font-weight: 500;
-}
-
-
-
-@include heading-factory();
-@include text-align();
diff --git a/src/assets/style/_scss/_variables.scss b/src/assets/style/_scss/_variables.scss
deleted file mode 100644
index 09562045..00000000
--- a/src/assets/style/_scss/_variables.scss
+++ /dev/null
@@ -1,45 +0,0 @@
-// Root font-size:
-$root-font: 16px;
-
-$fonts: (
-    "opensans": "Montserrat, Helvetica, Arial, sans-serif",
-    "sans-serif": "Montserrat, Helvetica, Arial, sans-serif",
-    "cardo": "Cardo, Times New Roman, Gotham, serif",
-    "serif": "Cardo, Times New Roman, Gotham, serif"
-) !default;
-
-$font-family-base: map-get($fonts, sans-serif) !default;
-$font-size-base: 16px;
-$font-weight-base: 400;
-$font-family-monospace: 'Courier New', Courier, monospace;
-$line-height-base: 1;
-
-$headings-margin-bottom: 0;
-
-$paragraph-margin-bottom: 15px;
-
-$dt-font-weight: 400;
-
-$table-cell-padding: 10px;
-$table-caption-color: inherit;
-
-$label-margin-bottom: 0;
-
-$sizing: (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 24, 32, 40, 48, 56, 64, 72, 80);
-
-$text-alignment: ('left', 'right', 'center', 'justify');
-
-$headings: (
-    h1: (map-get($fonts, sans-serif), 2rem, 100),
-    h2: (map-get($fonts, sans-serif), 1.5rem, 100),
-    h3: (map-get($fonts, sans-serif), 1.17rem, 100),
-    h4: (map-get($fonts, sans-serif), 1rem, 100),
-    h5: (map-get($fonts, sans-serif), 0.83rem, 100),
-    h6: (map-get($fonts, sans-serif), 0.67rem, 100)
-) !default;
-
-$input-radius: 4px;
-
-
-// Grid grid-variables
-@import "grid/grid-variables";
diff --git a/src/assets/style/_scss/colors.json b/src/assets/style/_scss/colors-default.json
similarity index 100%
rename from src/assets/style/_scss/colors.json
rename to src/assets/style/_scss/colors-default.json
diff --git a/src/assets/style/_scss/grid/_grid-variables.scss b/src/assets/style/_scss/grid/_grid-variables.scss
deleted file mode 100644
index 73cd9759..00000000
--- a/src/assets/style/_scss/grid/_grid-variables.scss
+++ /dev/null
@@ -1,87 +0,0 @@
-// Grid
-$grid-columns: 12; // Set number of columns in the grid
-
-$xs-max: 640px; // Set xs breakpoint's max width
-$sm-max: 991px; // Set sm breakpoint's max width
-$md-max: 1024px; // Set md breakpoint's max width
-$lg-max: 1500px; // Set lg breakpoint's max width
-
-$gutter: 0;
-
-$sm-start: ($xs-max + 1); // Set sm breakpoint's min width
-$md-start: ($sm-max + 1); // Set md breakpoint's min width
-$lg-start: ($md-max + 1); // Set lg breakpoint's min width
-$xl-start: ($lg-max + 1); // Set xl breakpoint's min width
-
-$content-well-max-width: 'none'; // Set the max-width of the content well
-
-// Breakpoints
-// Create breakpoint range statements to be used in media queries
-$breakpoint-xs-up: 'only screen';
-$breakpoint-xs-only: 'only screen and (max-width: #{$xs-max})'; // 0 -> xs-max range
-$breakpoint-sm-up: 'only screen and (min-width: #{$sm-start})'; // sm-start -> up range
-$breakpoint-sm-only: 'only screen and (min-width: #{$sm-start}) and (max-width: #{$sm-max})'; // sm-start -> sm-max range
-$breakpoint-md-up: 'only screen and (min-width: #{$md-start})'; // md-start -> up range
-$breakpoint-md-only: 'only screen and (min-width: #{$md-start}) and (max-width: #{$md-max})'; // md-start -> md-max range
-$breakpoint-lg-up: 'only screen and (min-width: #{$lg-start})'; // lg-start -> up range
-$breakpoint-lg-only: 'only screen and (min-width: #{$lg-start}) and (max-width: #{$lg-max})'; // lg-start -> lg-max range
-$breakpoint-xl-up: 'only screen and (min-width: #{$xl-start})'; // xl-start -> up range
-
-$breakpoint-sm-down: 'only screen and (max-width: #{$sm-max})'; // sm -> down
-$breakpoint-md-down: 'only screen and (max-width: #{$md-max})'; // md -> down
-$breakpoint-lg-down: 'only screen and (max-width: #{$lg-max})'; // lg -> down
-
-$breakpoints-all: (
-    $breakpoint-xs-only,
-    $breakpoint-sm-up,
-    $breakpoint-sm-only,
-    $breakpoint-md-up,
-    $breakpoint-md-only,
-    $breakpoint-lg-up,
-    $breakpoint-lg-only,
-    $breakpoint-xl-up
-);
-$breakpoint-ups: (
-    $breakpoint-sm-up,
-    $breakpoint-md-up,
-    $breakpoint-lg-up,
-    $breakpoint-xl-up
-);
-$breakpoint-all-prefixes: (
-    'xs',
-    'xs-only',
-    'sm',
-    'sm-only',
-    'md',
-    'md-only',
-    'lg',
-    'lg-only',
-    'xl'
-);
-$breakpoint-up-prefixes: ('xs', 'sm', 'md', 'lg', 'xl');
-
-$breakpoints: (
-    'xs': $breakpoint-xs-up,
-    'xs-only': $breakpoint-xs-only,
-    'sm': $breakpoint-sm-up,
-    'sm-only': $breakpoint-sm-only,
-    'sm-down': $breakpoint-sm-down,
-    'md': $breakpoint-md-up,
-    'md-only': $breakpoint-md-only,
-    'md-down': $breakpoint-md-down,
-    'lg': $breakpoint-lg-up,
-    'lg-only': $breakpoint-lg-only,
-    'lg-down': $breakpoint-lg-down,
-    'xl': $breakpoint-xl-up,
-);
-
-body {
-    &::before {
-        display: block;
-        height: 0;
-        width: 0;
-        overflow: hidden;
-        visibility: hidden;
-        content: json-encode($breakpoints);
-    }
-}
diff --git a/src/assets/style/_scss/grid/_grid.scss b/src/assets/style/_scss/grid/_grid.scss
deleted file mode 100755
index fbf7d061..00000000
--- a/src/assets/style/_scss/grid/_grid.scss
+++ /dev/null
@@ -1,151 +0,0 @@
-// Based on Flexbox Grid https://github.com/kristoferjoseph/flexboxgrid
-
-@import 'mixins/breakpoint';
-@import 'mixins/grid-mixins';
-@import 'mixins/flex';
-@import 'visibility';
-@import 'size';
-
-// No gutters
-// No text alignment with justified container classes (center-xs, for example)
-
-.row {
-    @include row();
-}
-
-.row.reverse {
-    @include row-reverse();
-}
-
-.row.eq-height {
-    @include row-eq-height();
-}
-
-.row.auto-height {
-    @include row-auto-height();
-}
-
-.row.flex-column {
-    flex-direction: column;
-}
-
-.col {
-    @include col();
-}
-
-.col.reverse {
-    @include col-reverse();
-}
-
-@each $prefix in $breakpoint-all-prefixes {
-    @include breakpoint($prefix) {
-        .col.reverse-#{$prefix} {
-            @include col-reverse();
-        }
-        .row.reverse-#{$prefix} {
-            @include row-reverse();
-        }
-    }
-}
-
-.first {
-    order: -1;
-}
-
-.last {
-    order: 1;
-}
-
-.align-start {
-    align-self: flex-start;
-}
-
-.align-end {
-    align-self: flex-end;
-}
-
-.align-center {
-    align-self: center;
-}
-
-.align-baseline {
-    align-self: baseline;
-}
-
-.align-stretch {
-    align-self: stretch;
-}
-// Mixin to run inside of for loop - creates col/breakpoint classes * Not for developer use *
-@mixin col-factory($thisPrefix) {
-    .col-#{$thisPrefix} {
-        flex-grow: 1;
-        flex-basis: 0;
-        max-width: 100%;
-        padding: $gutter;
-    }
-    @for $i from 1 through $grid-columns {
-        .col-#{$thisPrefix}-#{$i} {
-            flex-basis: 100% / $grid-columns * $i;
-            max-width: 100% / $grid-columns * $i;
-            padding: $gutter;
-        }
-
-        .col-#{$thisPrefix}-offset-#{$i} {
-            margin-left: 100% / $grid-columns * $i;
-        }
-    }
-
-    .start-#{$thisPrefix} {
-        justify-content: flex-start;
-    }
-
-    .center-#{$thisPrefix} {
-        justify-content: center;
-    }
-
-    .end-#{$thisPrefix} {
-        justify-content: flex-end;
-    }
-
-    .top-#{$thisPrefix} {
-        align-items: flex-start;
-    }
-
-    .middle-#{$thisPrefix} {
-        align-items: center;
-    }
-
-    .bottom-#{$thisPrefix} {
-        align-items: flex-end;
-    }
-
-    .around-#{$thisPrefix} {
-        justify-content: space-around;
-    }
-
-    .between-#{$thisPrefix} {
-        justify-content: space-between;
-    }
-
-    .first-#{$thisPrefix} {
-        order: -1;
-    }
-
-    .last-#{$thisPrefix} {
-        order: 1;
-    }
-}
-// Mixin to run inside of for loop - creates col/breakpoint classes
-@each $prefix in $breakpoint-up-prefixes {
-    @include breakpoint($prefix) {
-        @include col-factory($prefix);
-    }
-}
-
-.col-gutter-lr {
-    padding: 0 $gutter;
-}
-
-.col-no-gutter {
-    padding: 0;
-}
diff --git a/src/assets/style/_scss/grid/_size.scss b/src/assets/style/_scss/grid/_size.scss
deleted file mode 100644
index 3fb84582..00000000
--- a/src/assets/style/_scss/grid/_size.scss
+++ /dev/null
@@ -1,81 +0,0 @@
-$sizes: (
-    "m": (margin),
-    "mt": (margin-top),
-    "mr": (margin-right),
-    "mb": (margin-bottom),
-    "ml": (margin-left),
-    "mx": (margin-left, margin-right),
-    "my": (margin-top, margin-bottom),
-    "p": (padding),
-    "pt": (padding-top),
-    "pr": (padding-right),
-    "pb": (padding-bottom),
-    "pl": (padding-left),
-    "px": (padding-left, padding-right),
-    "py": (padding-top, padding-bottom),
-);
-
-@mixin size-factory($thisPrefix: null) {
-    @each $prop-name, $props in $sizes {
-        @each $size in $sizing {
-            @if ($thisPrefix) {
-                .#{$prop-name}-#{$thisPrefix}-#{$size} {
-                    @each $prop in $props {
-                        #{$prop}: px2rem($size) !important;
-                    }
-                }
-                .#{$prop-name}-#{$thisPrefix}--#{$size} {
-                    @each $prop in $props {
-                        #{$prop}: px2rem(-($size)) !important;
-                    }
-                }
-            } @else {
-                .#{$prop-name}-#{$size} {
-                    @each $prop in $props {
-                        #{$prop}: px2rem($size) !important;
-                    }
-                }
-                .#{$prop-name}--#{$size} {
-                    @each $prop in $props {
-                        #{$prop}: px2rem(-($size)) !important;
-                    }
-                }
-            }
-        }
-    }
-}
-
-@each $prefix in $breakpoint-all-prefixes {
-    @include breakpoint($prefix) {
-        @include size-factory($prefix);
-    }
-}
-
-.mx-auto {
-    margin-left: auto;
-    margin-right: auto;
-}
-.ml-auto {
-    margin-left: auto;
-}
-.mr-auto {
-    margin-right: auto;
-}
-
-@each $prefix in $breakpoint-all-prefixes {
-    @include breakpoint($prefix) {
-        .mx-#{$prefix}-auto {
-            margin-left: auto;
-            margin-right: auto;
-        }
-        .ml-#{$prefix}-auto {
-            margin-left: auto;
-        }
-        .mr-#{$prefix}-auto {
-            margin-right: auto;
-        }
-    }
-}
-
-
-@include size-factory();
diff --git a/src/assets/style/_scss/grid/_visibility.scss b/src/assets/style/_scss/grid/_visibility.scss
deleted file mode 100755
index f144d66e..00000000
--- a/src/assets/style/_scss/grid/_visibility.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-// Mixin to run inside of for loop - creates visibility classes * Not for developer use *
-@mixin vis-factory($thisPrefix: null) {
-    @if $thisPrefix {
-        .show-#{$thisPrefix} {
-            display: block !important;
-        }
-
-        .hide-#{$thisPrefix} {
-            display: none !important;
-        }
-    } @else {
-        .show {
-            display: initial;
-        }
-        .hide {
-            display: none;
-        }
-    }
-}
-
-@include vis-factory();
-
-// Mixin to run inside of for loop - creates visibility classes * Not for developer use *
-@each $prefix in $breakpoint-all-prefixes {
-    @include breakpoint($prefix) {
-        @include vis-factory($prefix);
-    }
-}
diff --git a/src/assets/style/_scss/grid/mixins/_breakpoint.scss b/src/assets/style/_scss/grid/mixins/_breakpoint.scss
deleted file mode 100644
index 2fd48906..00000000
--- a/src/assets/style/_scss/grid/mixins/_breakpoint.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-
-@mixin breakpoint($thisPrefix) {
-    $break: map-get($breakpoints, $thisPrefix);
-
-    @if ($break != null) {
-        @media #{$break} {
-            @content;
-        }
-    }
-}
diff --git a/src/assets/style/_scss/grid/mixins/_flex.scss b/src/assets/style/_scss/grid/mixins/_flex.scss
deleted file mode 100644
index 80503fc3..00000000
--- a/src/assets/style/_scss/grid/mixins/_flex.scss
+++ /dev/null
@@ -1,33 +0,0 @@
-@mixin flex-factory() {
-    display: flex;
-
-    &-top {
-        display: flex;
-        align-items: flex-start;
-    }
-
-    &-middle {
-        display: flex;
-        align-items: center;
-    }
-
-    &-bottom {
-        display: flex;
-        align-items: flex-end;
-    }
-
-    &-left {
-        display: flex;
-        justify-content: flex-start;
-    }
-
-    &-center {
-        display: flex;
-        justify-content: center;
-    }
-
-    &-right {
-        display: flex;
-        justify-content: flex-end;
-    }
-}
diff --git a/src/assets/style/_scss/grid/mixins/_grid-mixins.scss b/src/assets/style/_scss/grid/mixins/_grid-mixins.scss
deleted file mode 100755
index 827bf6cb..00000000
--- a/src/assets/style/_scss/grid/mixins/_grid-mixins.scss
+++ /dev/null
@@ -1,364 +0,0 @@
-
-@mixin row($full-width: "false") {
-  margin: 0 auto;
-  width: 100%;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  flex: 0 1 auto;
-  flex-direction: row;
-  flex-wrap: wrap;
-  // // Overrides flexbox's default behavior of making all children equal height
-  // align-items: flex-start; // If this was not in place it would require two classes to make a row full of unequal height columns aligned top, middle, bottom
-  @if type-of($content-well-max-width) == number and $content-well-max-width != 0 and $full-width == "false"{
-    max-width: $content-well-max-width;
-  }
-}
-
-@mixin row-reverse() {
-  flex-direction: row-reverse;
-}
-
-@mixin row-eq-height() {
-  align-items: stretch;
-}
-
-// For use when row align-item flex-start has been overridden
-@mixin row-auto-height() {
-  align-items: flex-start;
-}
-
-@mixin col-reverse() {
-  flex-direction: column-reverse;
-}
-
-// Condition to run inside of the col mixin * not for developer use *
-@mixin col-condition($col-number) {
-  @if type-of($col-number) == number {
-    @if $col-number > $grid-columns or $col-number == 0 {
-      @warn "Column number must be greater than 0 and less than or equal to total number of columns in the grid (#{$grid-columns})";
-    } @else {
-      flex-basis: 100% / $grid-columns * $col-number;
-      max-width: 100% / $grid-columns * $col-number;
-      padding: $gutter;
-    }
-  // If no col number is passed then arg is set to "auto" by default
-  // "auto" mode fills the horizontal space with evenly sized containers
-  } @else if $col-number == "auto" {
-    flex-grow: 1;
-    flex-basis: 0;
-    max-width: 100%;
-    padding: $gutter;
-  } @else {
-    @warn "Column number argument must either be the string 'auto' or a number greater than 0 and less than or equal to total number of columns in the grid (#{$grid-columns})";
-  }
-} // Condition to run inside of the col mixin * not for developer use *
-
-@mixin col($breakpoint: "xs", $col-number: "auto") {
-  // If no breakpoint is passed and a col number is just use the first arg as the col number and act like xs
-  @if type-of($breakpoint) == number {
-    $col-number: $breakpoint;
-    @include col-condition($col-number);
-  } @else if $breakpoint == "xs" {
-    @include col-condition($col-number);
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      @include col-condition($col-number);
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      @include col-condition($col-number);
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      @include col-condition($col-number);
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      @include col-condition($col-number);
-    }
-  } @else {
-    @warn "col mixin requires one of the existing breakpoint prefixes (#{$breakpoint-up-prefixes})";
-  }
-}
-
-// Condition to run inside of the col-offset mixin * not for developer use *
-@mixin col-offset-condition($offset-number) {
-  @if type-of($offset-number) != number {
-    @warn "Column offset number must be a number (only arg or second arg in the col mixin)";
-  } @else if $offset-number == 0 {
-    @warn "Column offset number must be greater than 0 and less than or equal to total number of columns in the grid (#{$grid-columns})";
-  } @else if $offset-number > $grid-columns {
-    @warn "Column offset number must be greater than 0 and less than or equal to total number of columns in the grid (#{$grid-columns})";
-  } @else {
-    margin-left: 100% / $grid-columns * $offset-number;
-  }
-} // Condition to run inside of the col-offset mixin * not for developer use *
-
-@mixin col-offset($breakpoint: "xs", $offset-number: 0) {
-  // If no breakpoint is passed and a col number is just use the first arg as the col number and act like xs
-  @if type-of($breakpoint) == number {
-    $offset-number: $breakpoint;
-    @include col-offset-condition($offset-number);
-  } @else if $breakpoint == "xs" {
-    @include col-offset-condition($offset-number);
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      @include col-offset-condition($offset-number);
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      @include col-offset-condition($offset-number);
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      @include col-offset-condition($offset-number);
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      @include col-offset-condition($offset-number);
-    }
-  } @else {
-    @warn "col mixin requires one of the existing breakpoint prefixes (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin start($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: flex-start;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: flex-start;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: flex-start;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: flex-start;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: flex-start;
-    }
-  } @else {
-    @warn "start mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin center($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: center;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: center;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: center;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: center;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: center;
-    }
-  } @else {
-    @warn "center mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin end($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: flex-end;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: flex-end;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: flex-end;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: flex-end;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: flex-end;
-    }
-  } @else {
-    @warn "end mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin top($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    align-items: flex-start;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      align-items: flex-start;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      align-items: flex-start;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      align-items: flex-start;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      align-items: flex-start;
-    }
-  } @else {
-    @warn "top mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin middle($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    align-items: center;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      align-items: center;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      align-items: center;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      align-items: center;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      align-items: center;
-    }
-  } @else {
-    @warn "middle mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin bottom($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    align-items: flex-end;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      align-items: flex-end;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      align-items: flex-end;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      align-items: flex-end;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      align-items: flex-end;
-    }
-  } @else {
-    @warn "bottom mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin around($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: space-around;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: space-around;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: space-around;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: space-around;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: space-around;
-    }
-  } @else {
-    @warn "around mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin between($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    justify-content: space-between;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      justify-content: space-between;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      justify-content: space-between;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      justify-content: space-between;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      justify-content: space-between;
-    }
-  } @else {
-    @warn "between mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin first($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    order: -1;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      order: -1;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      order: -1;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      order: -1;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      order: -1;
-    }
-  } @else {
-    @warn "first mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
-
-@mixin last($breakpoint: "xs") {
-  @if $breakpoint == "xs" {
-    order: 1;
-  } @else if $breakpoint == "sm" {
-    @media #{$breakpoint-sm-up} {
-      order: 1;
-    }
-  } @else if $breakpoint == "md" {
-    @media #{$breakpoint-md-up} {
-      order: 1;
-    }
-  } @else if $breakpoint == "lg" {
-    @media #{$breakpoint-lg-up} {
-      order: 1;
-    }
-  } @else if $breakpoint == "xl" {
-    @media #{$breakpoint-xl-up} {
-      order: 1;
-    }
-  } @else {
-    @warn "last mixin arg must be one of the existing breakpoints (#{$breakpoint-up-prefixes})";
-  }
-}
diff --git a/src/assets/style/_scss/mixins/_colors.scss b/src/assets/style/_scss/mixins/_colors.scss
deleted file mode 100644
index 453f7183..00000000
--- a/src/assets/style/_scss/mixins/_colors.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-@each $clr-name, $clr-code in $color {
-	.#{$clr-name} { color: $clr-code; }
-	.bg-#{$clr-name} { background-color: $clr-code; }
-}
diff --git a/src/assets/style/_scss/mixins/_headings.scss b/src/assets/style/_scss/mixins/_headings.scss
deleted file mode 100644
index 26773761..00000000
--- a/src/assets/style/_scss/mixins/_headings.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-@mixin heading-factory() {
-    @each $h, $style in $headings {
-        $font: nth($style, 1);
-        $size: nth($style, 2);
-        $wt: nth($style, 3);
-
-        #{$h} {
-            font-family: #{$font};
-            font-weight: $wt;
-            font-size: $size;
-        }
-    }
-
-    @each $h, $style in $headings {
-        $font: nth($style, 1);
-        $size: nth($style, 2);
-        $wt: nth($style, 3);
-
-        .#{$h} {
-            font-family: #{$font};
-            font-weight: $wt;
-            font-size: $size;
-        }
-    }
-}
diff --git a/src/assets/style/_scss/mixins/_px2rem.scss b/src/assets/style/_scss/mixins/_px2rem.scss
deleted file mode 100644
index ca14c290..00000000
--- a/src/assets/style/_scss/mixins/_px2rem.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-
-@function strip-units($number) {
-    @return $number / ($number * 0 + 1);
- }
-
-@function px2rem($px) {
-    $rnum: strip-units($root-font);
-    $fnum: strip-units($px);
-    $rem: $fnum / $rnum;
-    @return #{$rem}rem;
-}
-
-@function px2vw($px) {
-    $rnum: 1920;
-    $fnum: strip-units($px);
-    $vw: ($fnum / $rnum) * 100;
-    @return #{$vw}vw;
-}
diff --git a/src/assets/style/_scss/mixins/_text-align.scss b/src/assets/style/_scss/mixins/_text-align.scss
deleted file mode 100644
index 3ef602a1..00000000
--- a/src/assets/style/_scss/mixins/_text-align.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-
-@mixin text-align() {
-
-    @each $align in $text-alignment {
-        .text-#{$align} {
-            text-align: #{$align};
-        }
-    }
-
-    @each $prefix in $breakpoint-all-prefixes {
-        @each $align in $text-alignment {
-
-                @include breakpoint($prefix) {
-                    .text-#{$prefix}-#{$align} {
-                        text-align: #{$align};
-                    }
-                }
-        }
-    }
-}
diff --git a/src/assets/style/a11y/achromatomaly.scss b/src/assets/style/a11y/achromatomaly.scss
deleted file mode 100644
index 5d687412..00000000
--- a/src/assets/style/a11y/achromatomaly.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-body {
-    filter: url(/assets/images/a11y/a11y.svg#achromatomaly);
-}
diff --git a/src/assets/style/a11y/achromatopsia.scss b/src/assets/style/a11y/achromatopsia.scss
deleted file mode 100644
index 877e321c..00000000
--- a/src/assets/style/a11y/achromatopsia.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-body {
-    filter: url(/assets/images/a11y/a11y.svg#achromatopsia);
-}
diff --git a/src/assets/style/a11y/deuteranomaly.scss b/src/assets/style/a11y/deuteranomaly.scss
deleted file mode 100644
index 93faed36..00000000
--- a/src/assets/style/a11y/deuteranomaly.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-body {
-    filter: url(/assets/images/a11y/a11y.svg#deuteranomaly);
-}
diff --git a/src/assets/style/a11y/deuteranopia.scss b/src/assets/style/a11y/deuteranopia.scss
deleted file mode 100644
index fd133745..00000000
--- a/src/assets/style/a11y/deuteranopia.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-body {
-    filter: url(/assets/images/a11y/a11y.svg#deuteranopia);
-}
diff --git a/src/assets/style/a11y/protanomaly.scss b/src/assets/style/a11y/protanomaly.scss
deleted file mode 100644
index 6d8ec9ac..00000000
--- a/src/assets/style/a11y/protanomaly.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-body {
-    filter: url(/assets/images/a11y/a11y.svg#protanomaly);
-}
diff --git a/src/assets/style/a11y/protanopia.scss b/src/assets/style/a11y/protanopia.scss
deleted file mode 100644
index 837438c8..00000000
--- a/src/assets/style/a11y/protanopia.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-body {
-    filter: url(/assets/images/a11y/a11y.svg#protanopia);
-}
diff --git a/src/assets/style/a11y/tritanomaly.scss b/src/assets/style/a11y/tritanomaly.scss
deleted file mode 100644
index 7fa4a2a3..00000000
--- a/src/assets/style/a11y/tritanomaly.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-body {
-    filter: url(/assets/images/a11y/a11y.svg#tritanomaly);
-}
diff --git a/src/assets/style/a11y/tritanopia.scss b/src/assets/style/a11y/tritanopia.scss
deleted file mode 100644
index bddac6cc..00000000
--- a/src/assets/style/a11y/tritanopia.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-body {
-    filter: url(/assets/images/a11y/a11y.svg#tritanopia);
-}
diff --git a/src/assets/style/style.scss b/src/assets/style/style.scss
index bd9c6f1a..979e018e 100644
--- a/src/assets/style/style.scss
+++ b/src/assets/style/style.scss
@@ -1,32 +1 @@
-
-
-// Variables
-@import './_scss/variables';
-
-// Colors
-@import './_scss/colors';
-
-// Normalize
-@import './_scss/reboot';
-
-// Fonts
-@import './_scss/_fonts';
-
-// Mixins
-@import './_scss/mixins/px2rem';
-@import './_scss/mixins/text-align';
-@import './_scss/mixins/headings';
-@import './_scss/mixins/colors';
-
-
-// Global
-@import './_scss/button';
-@import './_scss/grid/grid';
-@import './_scss/layout';
-@import './_scss/typography';
-@import './_scss/form';
-
-
-// Components
-@import '../../app/components/common-ui/form/Checkbox/checkbox';
-@import '../../app/components/common-ui/form/Radio/radio';
+@import '_scss/reactium-modules';
\ No newline at end of file
diff --git a/src/assets/style/theme-1/_theme-1-vars.scss b/src/assets/style/theme-1/_theme-1-vars.scss
deleted file mode 100644
index 03257577..00000000
--- a/src/assets/style/theme-1/_theme-1-vars.scss
+++ /dev/null
@@ -1,2 +0,0 @@
-$button-bg-color: #CCCCCC;
-$button-color: #000000;
diff --git a/src/assets/style/theme-1/theme-1.scss b/src/assets/style/theme-1/theme-1.scss
deleted file mode 100644
index 443ebb5d..00000000
--- a/src/assets/style/theme-1/theme-1.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-// THEME SPECIFIC VARIABLES
-@import "./theme-1-vars.scss";
-
-button.test {
-    border-radius: 50px;
-    padding: 10px 10px;
-    background-color: $button-bg-color;
-    color: $button-color;
-}
diff --git a/src/assets/style/theme-2/_theme-2-vars.scss b/src/assets/style/theme-2/_theme-2-vars.scss
deleted file mode 100644
index 3fb0c788..00000000
--- a/src/assets/style/theme-2/_theme-2-vars.scss
+++ /dev/null
@@ -1,2 +0,0 @@
-$button-bg-color: #000000;
-$button-color: #CCCCCC;
diff --git a/src/assets/style/theme-2/theme-2.scss b/src/assets/style/theme-2/theme-2.scss
deleted file mode 100644
index a0a7d1c4..00000000
--- a/src/assets/style/theme-2/theme-2.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-// DEFAULT STYLES
-@import "../style.scss";
-
-// THEME SPECIFIC VARIABLES
-@import "./theme-2-vars.scss";
-
-button.test {
-    padding: 10px 10px;
-    background-color: $button-bg-color;
-    color: $button-color;
-}
diff --git a/src/assets/style/toolkit.scss b/src/assets/style/toolkit.scss
deleted file mode 100644
index a9f766fc..00000000
--- a/src/assets/style/toolkit.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-// Variables
-@import './_scss/variables';
-
-// Colors
-@import './_scss/colors';
-
-// Toolkit only styles
-@import '../../app/toolkit/global/Grid/grid';
-@import '../../app/toolkit/global/Colors/style';
diff --git a/src/index-static.html b/src/index-static.html
index f7759c11..50d9a06b 100644
--- a/src/index-static.html
+++ b/src/index-static.html
@@ -11,7 +11,6 @@
         <div id="router"></div>
 
         <script>
-            window.ssr        = false;
             window.restAPI    = '/api';
             window.parseAppId = 'Actinium';
         </script>
diff --git a/src/index.mjs b/src/index.mjs
new file mode 100644
index 00000000..43862f51
--- /dev/null
+++ b/src/index.mjs
@@ -0,0 +1,5 @@
+/**
+ * Reactium Server Start
+ */
+import { start } from '@atomic-reactor/reactium-core';
+start();
\ No newline at end of file
diff --git a/src/reactium-translations/template.pot b/src/reactium-translations/template.pot
new file mode 100644
index 00000000..5fc9ad61
--- /dev/null
+++ b/src/reactium-translations/template.pot
@@ -0,0 +1,4 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Language: en_US\n"
diff --git a/src/server.crt b/src/server.crt
new file mode 100644
index 00000000..c7a3658b
--- /dev/null
+++ b/src/server.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFjTCCA3UCFGEzBaUMG8FVpMs+f1XH3lOiA92sMA0GCSqGSIb3DQEBCwUAMIGC
+MQswCQYDVQQGEwJVUzEPMA0GA1UECAwGSGF3YWlpMREwDwYDVQQHDAhIb251bHVs
+dTEVMBMGA1UECgwMUmVhY3RpdW0gTExDMRcwFQYDVQQDDA5yZWFjdGl1bS5sb2Nh
+bDEfMB0GCSqGSIb3DQEJARYQam9obkByZWFjdGl1bS5pbzAeFw0yMzA0MjExNTEz
+MjdaFw0yNDA0MjAxNTEzMjdaMIGCMQswCQYDVQQGEwJVUzEPMA0GA1UECAwGSGF3
+YWlpMREwDwYDVQQHDAhIb251bHVsdTEVMBMGA1UECgwMUmVhY3RpdW0gTExDMRcw
+FQYDVQQDDA5yZWFjdGl1bS5sb2NhbDEfMB0GCSqGSIb3DQEJARYQam9obkByZWFj
+dGl1bS5pbzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMhxAXaSIVY3
+hG31QmjZZiDXlRwLYiRTADpbhTDEJL32eT2lPVOPiGYq9Qzj3K967wMhv03spesn
+tjD7BikN5CBkuzlj2LFYfK8dRW2eYTVh8trj0TyMjTKORIDxaubgOXMxiLrVGKl3
+ZpbwhHc/MG66tYZsL0m2mPIOr9LPYWs2jgLi9Azkka3i+6U+WFbYG2QdE7zVAWbF
+yR7HHiyiMIJr+kPtxKnhqVUgCrR1ZZpUyGBhqR8LR4JJAEC6TI22mibZ55hBsi8X
+NWrxXM/DOtqZpGFyqkaZx1+y8zJ8RiO1uMngShJqbQTx4e3ANIRqM1wM0UJ3YcUV
+yo/q1bx/poaPw6N5N54UGJoi8zKk02PdMIeyEYAzpV+nQPPzCZhkuujfGFTFTQhS
++eVTDi56jhPdcRHPpxGWVUguqdV3MIo42AzC/O9t/22my4APYCNcKxOGoBlmURRj
+nNMjAfbOqEwpVS0uVDPJYqSKrSqzG95U9uAH7evGzSHyuuOACyKsmegd8H0SRaYI
+9QZii2jfGcvWx/dtbPPX3jea5GfN7cs+T8t6RASdpOGkoaTGFOWeq7pnB8b73J2D
+13Gxzl9jFB4RSVhQ21+Lptt/y8ouI2UWgtQOoY3BH3hGXNZ1oqgsIJmaniPd9fz3
+iJDXspg3cE3FGAkwtfYJJF8dOHNqELsZAgMBAAEwDQYJKoZIhvcNAQELBQADggIB
+AAynspRmVKZ0lNtghVJ+WhGrT43jt/9+XGQ2UQ/VR+f66xkAOwSTj7NbrebAgcnY
+m1OuUVYPg6aGWrKz2iPBKpA+l9QcjFmwdrFMk6fobUPiCfe4rKSyn01iJOZJDsl9
+ajD4SKdNCzkJQvtRC8Ki0YMO7gEPlVlEr1lb8w+ZEXzcgUhhieq0GhwNBX3jza+3
+QOEHFYqgD7/QZ6p/T17fsV4dQPsNnlrI1IoBkoF86d6PSLYuRLo3cdS8ClLKaQkk
+ta8oBTWnNER3dFXYNmzuZsNgkGbtKAQa40wcDL/On8pLOynQbtNjHDpPpJ1yJrtZ
+dTSjFbKIa/3XGFyHo8ByeKKcVYmOXLkkvNAujpJkGRN+FDsk2ewzMaAPVc0/b6hZ
+tOxhNOsV/o4Hsvln4xHJsnVppn/FhHdq/wchuC/FgMxkrO9GWwfxBMzDEfBxWE0W
+T4a6digk9xLp7uPVeVYTh9xKZx5TI0K0qqUL8QGiNVbrM3/quCjKA5I/iPk0IWVF
+nD7pJns9Q773IDYYxjwF1ohOV/7teWWrk8HhjsVhQrGBVanpNiaXJl7VsfEk87o2
+ID67PP3bnSb2d5hLCqy/Galk3go3CBU9DRcAHIQZmUq8V99H/omP694bq9Kb0tfR
+oT/ROT0hQX17bY3eb72DggjPQ+2xkoCsyx9+n4pBX7ir
+-----END CERTIFICATE-----
diff --git a/src/server.csr b/src/server.csr
new file mode 100644
index 00000000..904fcf58
--- /dev/null
+++ b/src/server.csr
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIEyDCCArACAQAwgYIxCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZIYXdhaWkxETAP
+BgNVBAcMCEhvbnVsdWx1MRUwEwYDVQQKDAxSZWFjdGl1bSBMTEMxFzAVBgNVBAMM
+DnJlYWN0aXVtLmxvY2FsMR8wHQYJKoZIhvcNAQkBFhBqb2huQHJlYWN0aXVtLmlv
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyHEBdpIhVjeEbfVCaNlm
+INeVHAtiJFMAOluFMMQkvfZ5PaU9U4+IZir1DOPcr3rvAyG/Teyl6ye2MPsGKQ3k
+IGS7OWPYsVh8rx1FbZ5hNWHy2uPRPIyNMo5EgPFq5uA5czGIutUYqXdmlvCEdz8w
+brq1hmwvSbaY8g6v0s9hazaOAuL0DOSRreL7pT5YVtgbZB0TvNUBZsXJHsceLKIw
+gmv6Q+3EqeGpVSAKtHVlmlTIYGGpHwtHgkkAQLpMjbaaJtnnmEGyLxc1avFcz8M6
+2pmkYXKqRpnHX7LzMnxGI7W4yeBKEmptBPHh7cA0hGozXAzRQndhxRXKj+rVvH+m
+ho/Do3k3nhQYmiLzMqTTY90wh7IRgDOlX6dA8/MJmGS66N8YVMVNCFL55VMOLnqO
+E91xEc+nEZZVSC6p1XcwijjYDML8723/babLgA9gI1wrE4agGWZRFGOc0yMB9s6o
+TClVLS5UM8lipIqtKrMb3lT24Aft68bNIfK644ALIqyZ6B3wfRJFpgj1BmKLaN8Z
+y9bH921s89feN5rkZ83tyz5Py3pEBJ2k4aShpMYU5Z6rumcHxvvcnYPXcbHOX2MU
+HhFJWFDbX4um23/Lyi4jZRaC1A6hjcEfeEZc1nWiqCwgmZqeI931/PeIkNeymDdw
+TcUYCTC19gkkXx04c2oQuxkCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4ICAQCKwY6e
+yxW3jzQoa0PDhrNf3QSRhBTMwYXxISt80qt9QDKvHLEq4wVEgVkplBENixHOBhOI
+NaUrsTpt5oyL1qxEbMCrutv1O95AFYZSxqFZoxF4MHMvxq8diOBhrDlyANHFZ2ig
+MXO/1vpzc1ni3M0f7iQ/+y69Tr30ob4BuAHy4XGmgvCVj6zVmdPQv8IRwJwT3Zdp
+SJ78NtrDNPyES/kCJdUU4SdLDfNq4k/H1j9E2RVcbp97dy0K5NecVH+Eix0kNwO4
++8eA13HdC3w18B0rYtrh5rbsk5w4FQIcsyUfLwqb3UjFpuR4wBXtYYE3LsGaaBnz
+n8GlQ3HopSxn3qJfPFCGwG8awSTQP5tlh2o+P4gvz4nr4EEkVtRh2ZI0b1aaYGbY
+tL1nnUe+MhFSADQc5SdkCU7w2MxPYucnFdlI7ZE/nZMlx+bA1L8ZTao06a1Xv4eJ
+gmBY1cwdu5duKG4N/L/482udL4srMQsh7Xh43QtVCsuXrCdsMOKnl+2oOhJUOAGJ
+/h+uix22HgI9DMXitPg0D73mQy5rizA/6YDTIXTNvwpTwRLI+osCH1x2L2dOZ3fl
+Mxki6Vi77/BMvJZ1+Xsf3rSWCpcfhpx1Dj+LyNWhqUNi3wSrzI46T+xCWm4Fg+nv
+sIwBeRyA0rx76bgHIPznhMS6glHragsisW3WSA==
+-----END CERTIFICATE REQUEST-----
diff --git a/src/server.key b/src/server.key
new file mode 100644
index 00000000..08474520
--- /dev/null
+++ b/src/server.key
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQDIcQF2kiFWN4Rt
+9UJo2WYg15UcC2IkUwA6W4UwxCS99nk9pT1Tj4hmKvUM49yveu8DIb9N7KXrJ7Yw
++wYpDeQgZLs5Y9ixWHyvHUVtnmE1YfLa49E8jI0yjkSA8Wrm4DlzMYi61Ripd2aW
+8IR3PzBuurWGbC9JtpjyDq/Sz2FrNo4C4vQM5JGt4vulPlhW2BtkHRO81QFmxcke
+xx4sojCCa/pD7cSp4alVIAq0dWWaVMhgYakfC0eCSQBAukyNtpom2eeYQbIvFzVq
+8VzPwzramaRhcqpGmcdfsvMyfEYjtbjJ4EoSam0E8eHtwDSEajNcDNFCd2HFFcqP
+6tW8f6aGj8OjeTeeFBiaIvMypNNj3TCHshGAM6Vfp0Dz8wmYZLro3xhUxU0IUvnl
+Uw4ueo4T3XERz6cRllVILqnVdzCKONgMwvzvbf9tpsuAD2AjXCsThqAZZlEUY5zT
+IwH2zqhMKVUtLlQzyWKkiq0qsxveVPbgB+3rxs0h8rrjgAsirJnoHfB9EkWmCPUG
+Yoto3xnL1sf3bWzz1943muRnze3LPk/LekQEnaThpKGkxhTlnqu6ZwfG+9ydg9dx
+sc5fYxQeEUlYUNtfi6bbf8vKLiNlFoLUDqGNwR94RlzWdaKoLCCZmp4j3fX894iQ
+17KYN3BNxRgJMLX2CSRfHThzahC7GQIDAQABAoICAD3wjd8yMRMPfODt1WPJKoIj
+nHRaIC3RaFSgS3xSYHhDXhvqoBTeWewYgjlFgMDJYGq7Vv6hjnQohWiFadXt8P0B
+o8mMTT4gdgc3KGlDdA6nAgEaPWJUnJ1u0UR3Ve2ahKZQPExf5YsY1p72HDktUa4m
+DEpJzCMfRgwm9bZTV2tmJGRH9dq2Fz6A0fqyVWIgzfYV9i94M0KrBAd6yJxKUms7
+Ks8q/obwsP8ZM7WoQYl7gaAnDbgGKEbegDGAYH+6WdB/rc2jH4jlxyARDfk1/03m
+BKIIaQ4AH1g3WGfVd2c5lKztnnYqZR4OER8DMjdpCg379/5uHcxle38Vto7Vc4O9
+iHr0kwpMKMwWtMTgcjgA3qz1GPo8Aum6XzX2Wdyg2LUaihCHQPR0h58QBmRkB2K/
+gz8nAMSu7XFF0mxUmuNfPPde1PYP0BQZCOWy+H/QzIsh3HIpde+i6fiI548gpzaA
+e/9EG+B3O/jjZLQH66+fOlvSmNZWHq69r8CHKLHhWKvxZoB9ThTEHzo8cJi5RB9p
+8/vxjv5QRgOuphTyNXZ1fwWTw92xq+EDG0eTc4sS99QKzgBAzT4FLckBJ+jCC6OE
+k2iN9anKx/eiL1kJFTBhcOJVaPUJnsJ3/DIKZzNUrwyd9ZKYlTdvNGtHAKK7lSJT
+wahXZfyMZOLbJvsDrdexAoIBAQDniGkeePvnC9MOf0roHUEfblNSA4c4i2LASSKO
+FU+cLvmrB1H89r/zQHzUGIcHUewbsN2UXpx2jHqVxOLlWrVGGkJosI5h/DhS3Ct7
+LwRtJ5nW5lIbyCtUn0azpEIKRRyAYofN+XtNal3v6xA0boXv+4JmeHn2X0VRfpfg
+eQ17H8jdU7LQluArV6KoLlQucAzIw44Ws6dN0VFcoOvmwB5qlbDPY/TYkd6MbJgW
+NJahIzYuk0x5Fi4bB8APrSvid9XJ/UadiWRHPbN/7IWHZ+XgI0wWVYsFa46ceRhE
+GeXNNueCiBf9r8rXDTonvnRlCv2/qF6QG7wSjr0B9Rd5SJnPAoIBAQDdn3zut5Gm
+6v+dkYpVBLRsrCLVLzNrST4C0Ps9nlcb6HCad4N/wrF5tm4c5lQKkpUwW3Lzousk
+TuS2uvP/ajv38fA6Fela0CQSZI0cILQG+dGVvd+wXgTocPCqOFb4YxiBhxoTAQPI
+nh7evsYMAQhd+qt8SWR6j3msbdGt6kBZIvxja13AQn3WFL0gndZSjgd8M5AM6li7
+86tHSsUqPrTUQ7KS4+LMyl6tQ1MwEHaMo+IvBkNpk26e0KCBgUwNHqoQgCJ4Vfqn
+pL1I2Og3hDaSIPzXpGoNHJOsB7fXHK81eMWzIodF24ICzZ+oKweA/bxQ02AVk1m8
+uO+Ej/ww/F6XAoIBAGEJd90Qoaq89vDtgqxzjlao+3y1A9g7+uBSBox7/AieW39F
+qyQVGm/NyENwIC9+MzGL1+IWIQdCayIYCWxMrwq5eLm9vX7toYGAyyxukTFaVoyN
+rT39j8OAmbYykocRXheks/wsonPYr5Qc9Ya0B6iDxaxCtAMA/OFh6C9pLLA8qwev
+y5LGmR8xNHe+KwPnbEQ8SXHUS7s+jhX/T78/J8BOCnNxFi4qPJan8Lnlwne4dT3h
++DwLgrlLb0BiuLDKvqxQXWcrLP76qh9kNraAYgSlZn85zPExmeyUiAoKvJhceXzo
+ov1sztuArK35kXjDuYO5AiDtrs4sSqTmXrczKVsCggEAVuGbPIpCU0l1A/R2YnYB
+tUiWLzTd14VTBg+fLrzQMWSiICwSJRfSM4DNEg9JiwuD6P0wx0prHETBbNFFri+b
+aswx/NNyM+O9AGji2NAJQ2LUQvu4oY96JRWBg3mqvp06kizAkAqpzRAP0gq/4RzW
+huEqMQMknNd6P5qdxKw8pbUNdHw2uJRYeICQ1CSMTLjZPluIcUe9mZEg6EXrnXAP
+u9b+Po+P7fC3xPzLs+AAWYo1tXGjI9RkXWY0RhDGG66VxPo2iS5LoUT334MJJhpy
+uj6sYG1YFePKEHrGG1JnbXL3Lg6vMTeodCjgGjEkM/FEzfrPhCXL3Cwz2agImbuV
+6QKCAQAQ6xAIDC2cKqJdVrxENyHRoTlyWgC2n9GcBYzIXFCkZXa0kGk7Vug12oQz
+Kfewx9v6z+ONGdQlaJ/xrgUzsGC4MxijzQu248tQYUlll4DPCJKEzxCoTWFeocFM
+bipQUJEyZyOrc1Fv70zz7rnz2fXO8/NmUAATvexo3m5lVlt+oUwxvUuzj2lCZrkY
+ubYNz31VSqRNTQLYFRd4U72rEUXjr6Su8cOaE2H5iaPH3io8Ay2sJb9X8UcprGki
+hFvAKeSdgmKNyLQn9sawzTLjVTdiavM3Z7MeaitLLLmCnD8zUug4K/TgpSvdmFAr
+kKAFPPVdIM56Mzpc1mrHa59kDhX+
+-----END PRIVATE KEY-----
diff --git a/src/sw/umd-config.json b/src/sw/umd-config.json
index 595bb4e2..42a92128 100644
--- a/src/sw/umd-config.json
+++ b/src/sw/umd-config.json
@@ -1,5 +1,10 @@
 {
     "libraryName": "service-worker",
     "globalObject": "this",
-    "externals": {}
+    "babelPresetEnv": false,
+    "babelReact": false,
+    "babelLoader": false,
+    "externals": {},
+    "addDefines": true,
+    "workerRestAPI": true
 }
diff --git a/src/sw/umd.example.js b/src/sw/umd.example.js
new file mode 100644
index 00000000..5436269e
--- /dev/null
+++ b/src/sw/umd.example.js
@@ -0,0 +1,84 @@
+/**
+ * Welcome to your Workbox-powered service worker!
+ *
+ * You'll need to register this file in your web app and you should
+ * disable HTTP caching for this file too.
+ * See https://goo.gl/nhQhGp
+ *
+ * The rest of the code is auto-generated. Please don't update this file
+ * directly; instead, make changes to your Workbox build configuration
+ * and re-run your build process.
+ * See https://goo.gl/2aRDsh
+ */
+import { skipWaiting, clientsClaim, cacheNames } from 'workbox-core';
+import { precacheAndRoute } from 'workbox-precaching';
+import { registerRoute } from 'workbox-routing';
+import { CacheOnly } from 'workbox-strategies';
+import op from 'object-path';
+
+const SW_VERSION = '1.0.0';
+
+const messageTypes = {
+    GET_VERSION: 'GET_VERSION',
+};
+
+const customCacheNames = {
+    media: 'site-media',
+};
+
+// This is for static assets. You will need to implement your own precaching
+// for dynamic resources
+precacheAndRoute(self.__WB_MANIFEST);
+
+/**
+ * Example Dynamic loading of content
+ */
+// const apiConfig = workerRestAPIConfig;
+// const getParseApi = () => {
+//     return (url, body = {}, config = {}) => {
+//         return fetch(`${apiConfig.restAPI}${url}`, {
+//             ...config,
+//             method: 'POST',
+//             body: JSON.stringify(body),
+//             headers: {
+//                 ...op.get(config, 'headers', {}),
+//                 'X-Parse-Application-Id': apiConfig.actiniumAppId,
+//             },
+//         });
+//     };
+// };
+
+// const prefetchMedia = async () => {
+//     const api = getParseApi();
+//     const mediaRequest = await fetch('/media/all');
+//     const files = await mediaRequest.json();
+//     const cache = await caches.open(customCacheNames.media);
+//     console.log(`Precaching ${customCacheNames.media}`);
+//     for (const url of files) {
+//         const mediaResponse = await fetch(url, { mode: 'no-cors' });
+//         cache.put(url, mediaResponse.clone());
+//     }
+// };
+//
+// self.addEventListener('install', event => {
+//     event.waitUntil(
+//         Promise.all([
+//             // Pre-cache media
+//             prefetchMedia(),
+//         ]),
+//     );
+// });
+
+self.addEventListener('install', event => {
+    skipWaiting();
+});
+
+self.addEventListener('activate', event => {
+    clientsClaim();
+});
+
+self.addEventListener('message', event => {
+    if (event.data.type === messageTypes.GET_VERSION) {
+        event.ports[0].postMessage(SW_VERSION);
+    }
+});
diff --git a/src/sw/umd.js b/src/sw/umd.js
deleted file mode 100644
index 5207c2d3..00000000
--- a/src/sw/umd.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Welcome to your Workbox-powered service worker!
- *
- * You'll need to register this file in your web app and you should
- * disable HTTP caching for this file too.
- * See https://goo.gl/nhQhGp
- *
- * The rest of the code is auto-generated. Please don't update this file
- * directly; instead, make changes to your Workbox build configuration
- * and re-run your build process.
- * See https://goo.gl/2aRDsh
- */
-
-importScripts(
-    'https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js',
-);
-
-workbox.core.skipWaiting();
-
-workbox.core.clientsClaim();
-
-console.log('Customizable service worker!');
-
-workbox.precaching.precacheAndRoute([]);
